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 KendraFrontendService SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2019-02-03@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-kendra)
+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.Kendra](http://hackage.haskell.org/package/amazonka-kendra/docs/Amazonka-Kendra.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-kendra` 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-kendra.cabal b/amazonka-kendra.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-kendra.cabal
@@ -0,0 +1,337 @@
+cabal-version:      2.2
+name:               amazonka-kendra
+version:            2.0
+synopsis:           Amazon KendraFrontendService 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 @2019-02-03@ 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.Kendra.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.Kendra" 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-kendra
+
+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.Kendra
+    Amazonka.Kendra.AssociateEntitiesToExperience
+    Amazonka.Kendra.AssociatePersonasToEntities
+    Amazonka.Kendra.BatchDeleteDocument
+    Amazonka.Kendra.BatchGetDocumentStatus
+    Amazonka.Kendra.BatchPutDocument
+    Amazonka.Kendra.ClearQuerySuggestions
+    Amazonka.Kendra.CreateAccessControlConfiguration
+    Amazonka.Kendra.CreateDataSource
+    Amazonka.Kendra.CreateExperience
+    Amazonka.Kendra.CreateFaq
+    Amazonka.Kendra.CreateIndex
+    Amazonka.Kendra.CreateQuerySuggestionsBlockList
+    Amazonka.Kendra.CreateThesaurus
+    Amazonka.Kendra.DeleteAccessControlConfiguration
+    Amazonka.Kendra.DeleteDataSource
+    Amazonka.Kendra.DeleteExperience
+    Amazonka.Kendra.DeleteFaq
+    Amazonka.Kendra.DeleteIndex
+    Amazonka.Kendra.DeletePrincipalMapping
+    Amazonka.Kendra.DeleteQuerySuggestionsBlockList
+    Amazonka.Kendra.DeleteThesaurus
+    Amazonka.Kendra.DescribeAccessControlConfiguration
+    Amazonka.Kendra.DescribeDataSource
+    Amazonka.Kendra.DescribeExperience
+    Amazonka.Kendra.DescribeFaq
+    Amazonka.Kendra.DescribeIndex
+    Amazonka.Kendra.DescribePrincipalMapping
+    Amazonka.Kendra.DescribeQuerySuggestionsBlockList
+    Amazonka.Kendra.DescribeQuerySuggestionsConfig
+    Amazonka.Kendra.DescribeThesaurus
+    Amazonka.Kendra.DisassociateEntitiesFromExperience
+    Amazonka.Kendra.DisassociatePersonasFromEntities
+    Amazonka.Kendra.GetQuerySuggestions
+    Amazonka.Kendra.GetSnapshots
+    Amazonka.Kendra.Lens
+    Amazonka.Kendra.ListAccessControlConfigurations
+    Amazonka.Kendra.ListDataSources
+    Amazonka.Kendra.ListDataSourceSyncJobs
+    Amazonka.Kendra.ListEntityPersonas
+    Amazonka.Kendra.ListExperienceEntities
+    Amazonka.Kendra.ListExperiences
+    Amazonka.Kendra.ListFaqs
+    Amazonka.Kendra.ListGroupsOlderThanOrderingId
+    Amazonka.Kendra.ListIndices
+    Amazonka.Kendra.ListQuerySuggestionsBlockLists
+    Amazonka.Kendra.ListTagsForResource
+    Amazonka.Kendra.ListThesauri
+    Amazonka.Kendra.PutPrincipalMapping
+    Amazonka.Kendra.Query
+    Amazonka.Kendra.StartDataSourceSyncJob
+    Amazonka.Kendra.StopDataSourceSyncJob
+    Amazonka.Kendra.SubmitFeedback
+    Amazonka.Kendra.TagResource
+    Amazonka.Kendra.Types
+    Amazonka.Kendra.Types.AccessControlConfigurationSummary
+    Amazonka.Kendra.Types.AccessControlListConfiguration
+    Amazonka.Kendra.Types.AclConfiguration
+    Amazonka.Kendra.Types.AdditionalResultAttribute
+    Amazonka.Kendra.Types.AdditionalResultAttributeValue
+    Amazonka.Kendra.Types.AdditionalResultAttributeValueType
+    Amazonka.Kendra.Types.AlfrescoConfiguration
+    Amazonka.Kendra.Types.AlfrescoEntity
+    Amazonka.Kendra.Types.AttributeFilter
+    Amazonka.Kendra.Types.AuthenticationConfiguration
+    Amazonka.Kendra.Types.BasicAuthenticationConfiguration
+    Amazonka.Kendra.Types.BatchDeleteDocumentResponseFailedDocument
+    Amazonka.Kendra.Types.BatchGetDocumentStatusResponseError
+    Amazonka.Kendra.Types.BatchPutDocumentResponseFailedDocument
+    Amazonka.Kendra.Types.BoxConfiguration
+    Amazonka.Kendra.Types.CapacityUnitsConfiguration
+    Amazonka.Kendra.Types.ClickFeedback
+    Amazonka.Kendra.Types.ColumnConfiguration
+    Amazonka.Kendra.Types.ConditionOperator
+    Amazonka.Kendra.Types.ConfluenceAttachmentConfiguration
+    Amazonka.Kendra.Types.ConfluenceAttachmentFieldName
+    Amazonka.Kendra.Types.ConfluenceAttachmentToIndexFieldMapping
+    Amazonka.Kendra.Types.ConfluenceAuthenticationType
+    Amazonka.Kendra.Types.ConfluenceBlogConfiguration
+    Amazonka.Kendra.Types.ConfluenceBlogFieldName
+    Amazonka.Kendra.Types.ConfluenceBlogToIndexFieldMapping
+    Amazonka.Kendra.Types.ConfluenceConfiguration
+    Amazonka.Kendra.Types.ConfluencePageConfiguration
+    Amazonka.Kendra.Types.ConfluencePageFieldName
+    Amazonka.Kendra.Types.ConfluencePageToIndexFieldMapping
+    Amazonka.Kendra.Types.ConfluenceSpaceConfiguration
+    Amazonka.Kendra.Types.ConfluenceSpaceFieldName
+    Amazonka.Kendra.Types.ConfluenceSpaceToIndexFieldMapping
+    Amazonka.Kendra.Types.ConfluenceVersion
+    Amazonka.Kendra.Types.ConnectionConfiguration
+    Amazonka.Kendra.Types.ContentSourceConfiguration
+    Amazonka.Kendra.Types.ContentType
+    Amazonka.Kendra.Types.Correction
+    Amazonka.Kendra.Types.CustomDocumentEnrichmentConfiguration
+    Amazonka.Kendra.Types.DatabaseConfiguration
+    Amazonka.Kendra.Types.DatabaseEngineType
+    Amazonka.Kendra.Types.DataSourceConfiguration
+    Amazonka.Kendra.Types.DataSourceGroup
+    Amazonka.Kendra.Types.DataSourceStatus
+    Amazonka.Kendra.Types.DataSourceSummary
+    Amazonka.Kendra.Types.DataSourceSyncJob
+    Amazonka.Kendra.Types.DataSourceSyncJobMetrics
+    Amazonka.Kendra.Types.DataSourceSyncJobMetricTarget
+    Amazonka.Kendra.Types.DataSourceSyncJobStatus
+    Amazonka.Kendra.Types.DataSourceToIndexFieldMapping
+    Amazonka.Kendra.Types.DataSourceType
+    Amazonka.Kendra.Types.DataSourceVpcConfiguration
+    Amazonka.Kendra.Types.Document
+    Amazonka.Kendra.Types.DocumentAttribute
+    Amazonka.Kendra.Types.DocumentAttributeCondition
+    Amazonka.Kendra.Types.DocumentAttributeTarget
+    Amazonka.Kendra.Types.DocumentAttributeValue
+    Amazonka.Kendra.Types.DocumentAttributeValueCountPair
+    Amazonka.Kendra.Types.DocumentAttributeValueType
+    Amazonka.Kendra.Types.DocumentInfo
+    Amazonka.Kendra.Types.DocumentMetadataConfiguration
+    Amazonka.Kendra.Types.DocumentRelevanceConfiguration
+    Amazonka.Kendra.Types.DocumentsMetadataConfiguration
+    Amazonka.Kendra.Types.DocumentStatus
+    Amazonka.Kendra.Types.EndpointType
+    Amazonka.Kendra.Types.EntityConfiguration
+    Amazonka.Kendra.Types.EntityDisplayData
+    Amazonka.Kendra.Types.EntityPersonaConfiguration
+    Amazonka.Kendra.Types.EntityType
+    Amazonka.Kendra.Types.ErrorCode
+    Amazonka.Kendra.Types.ExperienceConfiguration
+    Amazonka.Kendra.Types.ExperienceEndpoint
+    Amazonka.Kendra.Types.ExperienceEntitiesSummary
+    Amazonka.Kendra.Types.ExperiencesSummary
+    Amazonka.Kendra.Types.ExperienceStatus
+    Amazonka.Kendra.Types.Facet
+    Amazonka.Kendra.Types.FacetResult
+    Amazonka.Kendra.Types.FailedEntity
+    Amazonka.Kendra.Types.FaqFileFormat
+    Amazonka.Kendra.Types.FaqStatistics
+    Amazonka.Kendra.Types.FaqStatus
+    Amazonka.Kendra.Types.FaqSummary
+    Amazonka.Kendra.Types.FsxConfiguration
+    Amazonka.Kendra.Types.FsxFileSystemType
+    Amazonka.Kendra.Types.GitHubConfiguration
+    Amazonka.Kendra.Types.GitHubDocumentCrawlProperties
+    Amazonka.Kendra.Types.GoogleDriveConfiguration
+    Amazonka.Kendra.Types.GroupMembers
+    Amazonka.Kendra.Types.GroupOrderingIdSummary
+    Amazonka.Kendra.Types.GroupSummary
+    Amazonka.Kendra.Types.HierarchicalPrincipal
+    Amazonka.Kendra.Types.Highlight
+    Amazonka.Kendra.Types.HighlightType
+    Amazonka.Kendra.Types.HookConfiguration
+    Amazonka.Kendra.Types.IndexConfigurationSummary
+    Amazonka.Kendra.Types.IndexEdition
+    Amazonka.Kendra.Types.IndexStatistics
+    Amazonka.Kendra.Types.IndexStatus
+    Amazonka.Kendra.Types.InlineCustomDocumentEnrichmentConfiguration
+    Amazonka.Kendra.Types.Interval
+    Amazonka.Kendra.Types.IssueSubEntity
+    Amazonka.Kendra.Types.JiraConfiguration
+    Amazonka.Kendra.Types.JsonTokenTypeConfiguration
+    Amazonka.Kendra.Types.JwtTokenTypeConfiguration
+    Amazonka.Kendra.Types.KeyLocation
+    Amazonka.Kendra.Types.MemberGroup
+    Amazonka.Kendra.Types.MemberUser
+    Amazonka.Kendra.Types.MetricType
+    Amazonka.Kendra.Types.Mode
+    Amazonka.Kendra.Types.OneDriveConfiguration
+    Amazonka.Kendra.Types.OneDriveUsers
+    Amazonka.Kendra.Types.OnPremiseConfiguration
+    Amazonka.Kendra.Types.Order
+    Amazonka.Kendra.Types.Persona
+    Amazonka.Kendra.Types.PersonasSummary
+    Amazonka.Kendra.Types.Principal
+    Amazonka.Kendra.Types.PrincipalMappingStatus
+    Amazonka.Kendra.Types.PrincipalType
+    Amazonka.Kendra.Types.ProxyConfiguration
+    Amazonka.Kendra.Types.QueryIdentifiersEnclosingOption
+    Amazonka.Kendra.Types.QueryResultFormat
+    Amazonka.Kendra.Types.QueryResultItem
+    Amazonka.Kendra.Types.QueryResultType
+    Amazonka.Kendra.Types.QuerySuggestionsBlockListStatus
+    Amazonka.Kendra.Types.QuerySuggestionsBlockListSummary
+    Amazonka.Kendra.Types.QuerySuggestionsStatus
+    Amazonka.Kendra.Types.QuipConfiguration
+    Amazonka.Kendra.Types.ReadAccessType
+    Amazonka.Kendra.Types.Relevance
+    Amazonka.Kendra.Types.RelevanceFeedback
+    Amazonka.Kendra.Types.RelevanceType
+    Amazonka.Kendra.Types.S3DataSourceConfiguration
+    Amazonka.Kendra.Types.S3Path
+    Amazonka.Kendra.Types.SaaSConfiguration
+    Amazonka.Kendra.Types.SalesforceChatterFeedConfiguration
+    Amazonka.Kendra.Types.SalesforceChatterFeedIncludeFilterType
+    Amazonka.Kendra.Types.SalesforceConfiguration
+    Amazonka.Kendra.Types.SalesforceCustomKnowledgeArticleTypeConfiguration
+    Amazonka.Kendra.Types.SalesforceKnowledgeArticleConfiguration
+    Amazonka.Kendra.Types.SalesforceKnowledgeArticleState
+    Amazonka.Kendra.Types.SalesforceStandardKnowledgeArticleTypeConfiguration
+    Amazonka.Kendra.Types.SalesforceStandardObjectAttachmentConfiguration
+    Amazonka.Kendra.Types.SalesforceStandardObjectConfiguration
+    Amazonka.Kendra.Types.SalesforceStandardObjectName
+    Amazonka.Kendra.Types.ScoreAttributes
+    Amazonka.Kendra.Types.ScoreConfidence
+    Amazonka.Kendra.Types.Search
+    Amazonka.Kendra.Types.SeedUrlConfiguration
+    Amazonka.Kendra.Types.ServerSideEncryptionConfiguration
+    Amazonka.Kendra.Types.ServiceNowAuthenticationType
+    Amazonka.Kendra.Types.ServiceNowBuildVersionType
+    Amazonka.Kendra.Types.ServiceNowConfiguration
+    Amazonka.Kendra.Types.ServiceNowKnowledgeArticleConfiguration
+    Amazonka.Kendra.Types.ServiceNowServiceCatalogConfiguration
+    Amazonka.Kendra.Types.SharePointConfiguration
+    Amazonka.Kendra.Types.SharePointOnlineAuthenticationType
+    Amazonka.Kendra.Types.SharePointVersion
+    Amazonka.Kendra.Types.SiteMapsConfiguration
+    Amazonka.Kendra.Types.SlackConfiguration
+    Amazonka.Kendra.Types.SlackEntity
+    Amazonka.Kendra.Types.SortingConfiguration
+    Amazonka.Kendra.Types.SortOrder
+    Amazonka.Kendra.Types.SpellCorrectedQuery
+    Amazonka.Kendra.Types.SpellCorrectionConfiguration
+    Amazonka.Kendra.Types.SqlConfiguration
+    Amazonka.Kendra.Types.Status
+    Amazonka.Kendra.Types.Suggestion
+    Amazonka.Kendra.Types.SuggestionHighlight
+    Amazonka.Kendra.Types.SuggestionTextWithHighlights
+    Amazonka.Kendra.Types.SuggestionValue
+    Amazonka.Kendra.Types.TableCell
+    Amazonka.Kendra.Types.TableExcerpt
+    Amazonka.Kendra.Types.TableRow
+    Amazonka.Kendra.Types.Tag
+    Amazonka.Kendra.Types.Template
+    Amazonka.Kendra.Types.TemplateConfiguration
+    Amazonka.Kendra.Types.TextDocumentStatistics
+    Amazonka.Kendra.Types.TextWithHighlights
+    Amazonka.Kendra.Types.ThesaurusStatus
+    Amazonka.Kendra.Types.ThesaurusSummary
+    Amazonka.Kendra.Types.TimeRange
+    Amazonka.Kendra.Types.Type
+    Amazonka.Kendra.Types.Urls
+    Amazonka.Kendra.Types.UserContext
+    Amazonka.Kendra.Types.UserContextPolicy
+    Amazonka.Kendra.Types.UserGroupResolutionConfiguration
+    Amazonka.Kendra.Types.UserGroupResolutionMode
+    Amazonka.Kendra.Types.UserIdentityConfiguration
+    Amazonka.Kendra.Types.UserTokenConfiguration
+    Amazonka.Kendra.Types.Warning
+    Amazonka.Kendra.Types.WarningCode
+    Amazonka.Kendra.Types.WebCrawlerConfiguration
+    Amazonka.Kendra.Types.WebCrawlerMode
+    Amazonka.Kendra.Types.WorkDocsConfiguration
+    Amazonka.Kendra.UntagResource
+    Amazonka.Kendra.UpdateAccessControlConfiguration
+    Amazonka.Kendra.UpdateDataSource
+    Amazonka.Kendra.UpdateExperience
+    Amazonka.Kendra.UpdateIndex
+    Amazonka.Kendra.UpdateQuerySuggestionsBlockList
+    Amazonka.Kendra.UpdateQuerySuggestionsConfig
+    Amazonka.Kendra.UpdateThesaurus
+    Amazonka.Kendra.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-kendra-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.Kendra
+    Test.Amazonka.Kendra
+    Test.Amazonka.Kendra.Internal
+
+  build-depends:
+    , amazonka-core         >=2.0 && <2.1
+    , amazonka-kendra
+    , amazonka-test         >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/AssociateEntitiesToExperience.yaml b/fixture/AssociateEntitiesToExperience.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateEntitiesToExperience.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/AssociateEntitiesToExperienceResponse.proto b/fixture/AssociateEntitiesToExperienceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateEntitiesToExperienceResponse.proto
diff --git a/fixture/AssociatePersonasToEntities.yaml b/fixture/AssociatePersonasToEntities.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociatePersonasToEntities.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/AssociatePersonasToEntitiesResponse.proto b/fixture/AssociatePersonasToEntitiesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociatePersonasToEntitiesResponse.proto
diff --git a/fixture/BatchDeleteDocument.yaml b/fixture/BatchDeleteDocument.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchDeleteDocument.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/BatchDeleteDocumentResponse.proto b/fixture/BatchDeleteDocumentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchDeleteDocumentResponse.proto
diff --git a/fixture/BatchGetDocumentStatus.yaml b/fixture/BatchGetDocumentStatus.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchGetDocumentStatus.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/BatchGetDocumentStatusResponse.proto b/fixture/BatchGetDocumentStatusResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchGetDocumentStatusResponse.proto
diff --git a/fixture/BatchPutDocument.yaml b/fixture/BatchPutDocument.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchPutDocument.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/BatchPutDocumentResponse.proto b/fixture/BatchPutDocumentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchPutDocumentResponse.proto
diff --git a/fixture/ClearQuerySuggestions.yaml b/fixture/ClearQuerySuggestions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ClearQuerySuggestions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/ClearQuerySuggestionsResponse.proto b/fixture/ClearQuerySuggestionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ClearQuerySuggestionsResponse.proto
diff --git a/fixture/CreateAccessControlConfiguration.yaml b/fixture/CreateAccessControlConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAccessControlConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/CreateAccessControlConfigurationResponse.proto b/fixture/CreateAccessControlConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAccessControlConfigurationResponse.proto
diff --git a/fixture/CreateDataSource.yaml b/fixture/CreateDataSource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDataSource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/CreateDataSourceResponse.proto b/fixture/CreateDataSourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDataSourceResponse.proto
diff --git a/fixture/CreateExperience.yaml b/fixture/CreateExperience.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateExperience.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/CreateExperienceResponse.proto b/fixture/CreateExperienceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateExperienceResponse.proto
diff --git a/fixture/CreateFaq.yaml b/fixture/CreateFaq.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateFaq.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/CreateFaqResponse.proto b/fixture/CreateFaqResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateFaqResponse.proto
diff --git a/fixture/CreateIndex.yaml b/fixture/CreateIndex.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateIndex.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/CreateIndexResponse.proto b/fixture/CreateIndexResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateIndexResponse.proto
diff --git a/fixture/CreateQuerySuggestionsBlockList.yaml b/fixture/CreateQuerySuggestionsBlockList.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateQuerySuggestionsBlockList.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/CreateQuerySuggestionsBlockListResponse.proto b/fixture/CreateQuerySuggestionsBlockListResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateQuerySuggestionsBlockListResponse.proto
diff --git a/fixture/CreateThesaurus.yaml b/fixture/CreateThesaurus.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateThesaurus.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/CreateThesaurusResponse.proto b/fixture/CreateThesaurusResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateThesaurusResponse.proto
diff --git a/fixture/DeleteAccessControlConfiguration.yaml b/fixture/DeleteAccessControlConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAccessControlConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/DeleteAccessControlConfigurationResponse.proto b/fixture/DeleteAccessControlConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAccessControlConfigurationResponse.proto
diff --git a/fixture/DeleteDataSource.yaml b/fixture/DeleteDataSource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDataSource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/DeleteDataSourceResponse.proto b/fixture/DeleteDataSourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDataSourceResponse.proto
diff --git a/fixture/DeleteExperience.yaml b/fixture/DeleteExperience.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteExperience.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/DeleteExperienceResponse.proto b/fixture/DeleteExperienceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteExperienceResponse.proto
diff --git a/fixture/DeleteFaq.yaml b/fixture/DeleteFaq.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteFaq.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/DeleteFaqResponse.proto b/fixture/DeleteFaqResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteFaqResponse.proto
diff --git a/fixture/DeleteIndex.yaml b/fixture/DeleteIndex.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteIndex.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/DeleteIndexResponse.proto b/fixture/DeleteIndexResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteIndexResponse.proto
diff --git a/fixture/DeletePrincipalMapping.yaml b/fixture/DeletePrincipalMapping.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeletePrincipalMapping.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/DeletePrincipalMappingResponse.proto b/fixture/DeletePrincipalMappingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeletePrincipalMappingResponse.proto
diff --git a/fixture/DeleteQuerySuggestionsBlockList.yaml b/fixture/DeleteQuerySuggestionsBlockList.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteQuerySuggestionsBlockList.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/DeleteQuerySuggestionsBlockListResponse.proto b/fixture/DeleteQuerySuggestionsBlockListResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteQuerySuggestionsBlockListResponse.proto
diff --git a/fixture/DeleteThesaurus.yaml b/fixture/DeleteThesaurus.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteThesaurus.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/DeleteThesaurusResponse.proto b/fixture/DeleteThesaurusResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteThesaurusResponse.proto
diff --git a/fixture/DescribeAccessControlConfiguration.yaml b/fixture/DescribeAccessControlConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAccessControlConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/DescribeAccessControlConfigurationResponse.proto b/fixture/DescribeAccessControlConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAccessControlConfigurationResponse.proto
diff --git a/fixture/DescribeDataSource.yaml b/fixture/DescribeDataSource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeDataSource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/DescribeDataSourceResponse.proto b/fixture/DescribeDataSourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeDataSourceResponse.proto
diff --git a/fixture/DescribeExperience.yaml b/fixture/DescribeExperience.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeExperience.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/DescribeExperienceResponse.proto b/fixture/DescribeExperienceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeExperienceResponse.proto
diff --git a/fixture/DescribeFaq.yaml b/fixture/DescribeFaq.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFaq.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/DescribeFaqResponse.proto b/fixture/DescribeFaqResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFaqResponse.proto
diff --git a/fixture/DescribeIndex.yaml b/fixture/DescribeIndex.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeIndex.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/DescribeIndexResponse.proto b/fixture/DescribeIndexResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeIndexResponse.proto
diff --git a/fixture/DescribePrincipalMapping.yaml b/fixture/DescribePrincipalMapping.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribePrincipalMapping.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/DescribePrincipalMappingResponse.proto b/fixture/DescribePrincipalMappingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribePrincipalMappingResponse.proto
diff --git a/fixture/DescribeQuerySuggestionsBlockList.yaml b/fixture/DescribeQuerySuggestionsBlockList.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeQuerySuggestionsBlockList.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/DescribeQuerySuggestionsBlockListResponse.proto b/fixture/DescribeQuerySuggestionsBlockListResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeQuerySuggestionsBlockListResponse.proto
diff --git a/fixture/DescribeQuerySuggestionsConfig.yaml b/fixture/DescribeQuerySuggestionsConfig.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeQuerySuggestionsConfig.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/DescribeQuerySuggestionsConfigResponse.proto b/fixture/DescribeQuerySuggestionsConfigResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeQuerySuggestionsConfigResponse.proto
diff --git a/fixture/DescribeThesaurus.yaml b/fixture/DescribeThesaurus.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeThesaurus.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/DescribeThesaurusResponse.proto b/fixture/DescribeThesaurusResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeThesaurusResponse.proto
diff --git a/fixture/DisassociateEntitiesFromExperience.yaml b/fixture/DisassociateEntitiesFromExperience.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateEntitiesFromExperience.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/DisassociateEntitiesFromExperienceResponse.proto b/fixture/DisassociateEntitiesFromExperienceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateEntitiesFromExperienceResponse.proto
diff --git a/fixture/DisassociatePersonasFromEntities.yaml b/fixture/DisassociatePersonasFromEntities.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociatePersonasFromEntities.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/DisassociatePersonasFromEntitiesResponse.proto b/fixture/DisassociatePersonasFromEntitiesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociatePersonasFromEntitiesResponse.proto
diff --git a/fixture/GetQuerySuggestions.yaml b/fixture/GetQuerySuggestions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetQuerySuggestions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/GetQuerySuggestionsResponse.proto b/fixture/GetQuerySuggestionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetQuerySuggestionsResponse.proto
diff --git a/fixture/GetSnapshots.yaml b/fixture/GetSnapshots.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetSnapshots.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/GetSnapshotsResponse.proto b/fixture/GetSnapshotsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetSnapshotsResponse.proto
diff --git a/fixture/ListAccessControlConfigurations.yaml b/fixture/ListAccessControlConfigurations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAccessControlConfigurations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/ListAccessControlConfigurationsResponse.proto b/fixture/ListAccessControlConfigurationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAccessControlConfigurationsResponse.proto
diff --git a/fixture/ListDataSourceSyncJobs.yaml b/fixture/ListDataSourceSyncJobs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDataSourceSyncJobs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/ListDataSourceSyncJobsResponse.proto b/fixture/ListDataSourceSyncJobsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDataSourceSyncJobsResponse.proto
diff --git a/fixture/ListDataSources.yaml b/fixture/ListDataSources.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDataSources.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/ListDataSourcesResponse.proto b/fixture/ListDataSourcesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDataSourcesResponse.proto
diff --git a/fixture/ListEntityPersonas.yaml b/fixture/ListEntityPersonas.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListEntityPersonas.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/ListEntityPersonasResponse.proto b/fixture/ListEntityPersonasResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListEntityPersonasResponse.proto
diff --git a/fixture/ListExperienceEntities.yaml b/fixture/ListExperienceEntities.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListExperienceEntities.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/ListExperienceEntitiesResponse.proto b/fixture/ListExperienceEntitiesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListExperienceEntitiesResponse.proto
diff --git a/fixture/ListExperiences.yaml b/fixture/ListExperiences.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListExperiences.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/ListExperiencesResponse.proto b/fixture/ListExperiencesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListExperiencesResponse.proto
diff --git a/fixture/ListFaqs.yaml b/fixture/ListFaqs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListFaqs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/ListFaqsResponse.proto b/fixture/ListFaqsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListFaqsResponse.proto
diff --git a/fixture/ListGroupsOlderThanOrderingId.yaml b/fixture/ListGroupsOlderThanOrderingId.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListGroupsOlderThanOrderingId.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/ListGroupsOlderThanOrderingIdResponse.proto b/fixture/ListGroupsOlderThanOrderingIdResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListGroupsOlderThanOrderingIdResponse.proto
diff --git a/fixture/ListIndices.yaml b/fixture/ListIndices.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListIndices.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/ListIndicesResponse.proto b/fixture/ListIndicesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListIndicesResponse.proto
diff --git a/fixture/ListQuerySuggestionsBlockLists.yaml b/fixture/ListQuerySuggestionsBlockLists.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListQuerySuggestionsBlockLists.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/ListQuerySuggestionsBlockListsResponse.proto b/fixture/ListQuerySuggestionsBlockListsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListQuerySuggestionsBlockListsResponse.proto
diff --git a/fixture/ListTagsForResource.yaml b/fixture/ListTagsForResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/ListThesauri.yaml b/fixture/ListThesauri.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListThesauri.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/ListThesauriResponse.proto b/fixture/ListThesauriResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListThesauriResponse.proto
diff --git a/fixture/PutPrincipalMapping.yaml b/fixture/PutPrincipalMapping.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutPrincipalMapping.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/PutPrincipalMappingResponse.proto b/fixture/PutPrincipalMappingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutPrincipalMappingResponse.proto
diff --git a/fixture/Query.yaml b/fixture/Query.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/Query.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/QueryResponse.proto b/fixture/QueryResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/QueryResponse.proto
diff --git a/fixture/StartDataSourceSyncJob.yaml b/fixture/StartDataSourceSyncJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartDataSourceSyncJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/StartDataSourceSyncJobResponse.proto b/fixture/StartDataSourceSyncJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartDataSourceSyncJobResponse.proto
diff --git a/fixture/StopDataSourceSyncJob.yaml b/fixture/StopDataSourceSyncJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopDataSourceSyncJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/StopDataSourceSyncJobResponse.proto b/fixture/StopDataSourceSyncJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopDataSourceSyncJobResponse.proto
diff --git a/fixture/SubmitFeedback.yaml b/fixture/SubmitFeedback.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SubmitFeedback.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/SubmitFeedbackResponse.proto b/fixture/SubmitFeedbackResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SubmitFeedbackResponse.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/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/TagResourceResponse.proto b/fixture/TagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TagResourceResponse.proto
diff --git a/fixture/UntagResource.yaml b/fixture/UntagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/UpdateAccessControlConfiguration.yaml b/fixture/UpdateAccessControlConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAccessControlConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/UpdateAccessControlConfigurationResponse.proto b/fixture/UpdateAccessControlConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAccessControlConfigurationResponse.proto
diff --git a/fixture/UpdateDataSource.yaml b/fixture/UpdateDataSource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDataSource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/UpdateDataSourceResponse.proto b/fixture/UpdateDataSourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDataSourceResponse.proto
diff --git a/fixture/UpdateExperience.yaml b/fixture/UpdateExperience.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateExperience.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/UpdateExperienceResponse.proto b/fixture/UpdateExperienceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateExperienceResponse.proto
diff --git a/fixture/UpdateIndex.yaml b/fixture/UpdateIndex.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateIndex.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/UpdateIndexResponse.proto b/fixture/UpdateIndexResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateIndexResponse.proto
diff --git a/fixture/UpdateQuerySuggestionsBlockList.yaml b/fixture/UpdateQuerySuggestionsBlockList.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateQuerySuggestionsBlockList.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/UpdateQuerySuggestionsBlockListResponse.proto b/fixture/UpdateQuerySuggestionsBlockListResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateQuerySuggestionsBlockListResponse.proto
diff --git a/fixture/UpdateQuerySuggestionsConfig.yaml b/fixture/UpdateQuerySuggestionsConfig.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateQuerySuggestionsConfig.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/UpdateQuerySuggestionsConfigResponse.proto b/fixture/UpdateQuerySuggestionsConfigResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateQuerySuggestionsConfigResponse.proto
diff --git a/fixture/UpdateThesaurus.yaml b/fixture/UpdateThesaurus.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateThesaurus.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kendra/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kendra.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/UpdateThesaurusResponse.proto b/fixture/UpdateThesaurusResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateThesaurusResponse.proto
diff --git a/gen/Amazonka/Kendra.hs b/gen/Amazonka/Kendra.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra.hs
@@ -0,0 +1,1232 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.Kendra
+-- 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 @2019-02-03@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Amazon Kendra is a service for indexing large document sets.
+module Amazonka.Kendra
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** InvalidRequestException
+    _InvalidRequestException,
+
+    -- ** ResourceAlreadyExistException
+    _ResourceAlreadyExistException,
+
+    -- ** ResourceInUseException
+    _ResourceInUseException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ResourceUnavailableException
+    _ResourceUnavailableException,
+
+    -- ** ServiceQuotaExceededException
+    _ServiceQuotaExceededException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** AssociateEntitiesToExperience
+    AssociateEntitiesToExperience (AssociateEntitiesToExperience'),
+    newAssociateEntitiesToExperience,
+    AssociateEntitiesToExperienceResponse (AssociateEntitiesToExperienceResponse'),
+    newAssociateEntitiesToExperienceResponse,
+
+    -- ** AssociatePersonasToEntities
+    AssociatePersonasToEntities (AssociatePersonasToEntities'),
+    newAssociatePersonasToEntities,
+    AssociatePersonasToEntitiesResponse (AssociatePersonasToEntitiesResponse'),
+    newAssociatePersonasToEntitiesResponse,
+
+    -- ** BatchDeleteDocument
+    BatchDeleteDocument (BatchDeleteDocument'),
+    newBatchDeleteDocument,
+    BatchDeleteDocumentResponse (BatchDeleteDocumentResponse'),
+    newBatchDeleteDocumentResponse,
+
+    -- ** BatchGetDocumentStatus
+    BatchGetDocumentStatus (BatchGetDocumentStatus'),
+    newBatchGetDocumentStatus,
+    BatchGetDocumentStatusResponse (BatchGetDocumentStatusResponse'),
+    newBatchGetDocumentStatusResponse,
+
+    -- ** BatchPutDocument
+    BatchPutDocument (BatchPutDocument'),
+    newBatchPutDocument,
+    BatchPutDocumentResponse (BatchPutDocumentResponse'),
+    newBatchPutDocumentResponse,
+
+    -- ** ClearQuerySuggestions
+    ClearQuerySuggestions (ClearQuerySuggestions'),
+    newClearQuerySuggestions,
+    ClearQuerySuggestionsResponse (ClearQuerySuggestionsResponse'),
+    newClearQuerySuggestionsResponse,
+
+    -- ** CreateAccessControlConfiguration
+    CreateAccessControlConfiguration (CreateAccessControlConfiguration'),
+    newCreateAccessControlConfiguration,
+    CreateAccessControlConfigurationResponse (CreateAccessControlConfigurationResponse'),
+    newCreateAccessControlConfigurationResponse,
+
+    -- ** CreateDataSource
+    CreateDataSource (CreateDataSource'),
+    newCreateDataSource,
+    CreateDataSourceResponse (CreateDataSourceResponse'),
+    newCreateDataSourceResponse,
+
+    -- ** CreateExperience
+    CreateExperience (CreateExperience'),
+    newCreateExperience,
+    CreateExperienceResponse (CreateExperienceResponse'),
+    newCreateExperienceResponse,
+
+    -- ** CreateFaq
+    CreateFaq (CreateFaq'),
+    newCreateFaq,
+    CreateFaqResponse (CreateFaqResponse'),
+    newCreateFaqResponse,
+
+    -- ** CreateIndex
+    CreateIndex (CreateIndex'),
+    newCreateIndex,
+    CreateIndexResponse (CreateIndexResponse'),
+    newCreateIndexResponse,
+
+    -- ** CreateQuerySuggestionsBlockList
+    CreateQuerySuggestionsBlockList (CreateQuerySuggestionsBlockList'),
+    newCreateQuerySuggestionsBlockList,
+    CreateQuerySuggestionsBlockListResponse (CreateQuerySuggestionsBlockListResponse'),
+    newCreateQuerySuggestionsBlockListResponse,
+
+    -- ** CreateThesaurus
+    CreateThesaurus (CreateThesaurus'),
+    newCreateThesaurus,
+    CreateThesaurusResponse (CreateThesaurusResponse'),
+    newCreateThesaurusResponse,
+
+    -- ** DeleteAccessControlConfiguration
+    DeleteAccessControlConfiguration (DeleteAccessControlConfiguration'),
+    newDeleteAccessControlConfiguration,
+    DeleteAccessControlConfigurationResponse (DeleteAccessControlConfigurationResponse'),
+    newDeleteAccessControlConfigurationResponse,
+
+    -- ** DeleteDataSource
+    DeleteDataSource (DeleteDataSource'),
+    newDeleteDataSource,
+    DeleteDataSourceResponse (DeleteDataSourceResponse'),
+    newDeleteDataSourceResponse,
+
+    -- ** DeleteExperience
+    DeleteExperience (DeleteExperience'),
+    newDeleteExperience,
+    DeleteExperienceResponse (DeleteExperienceResponse'),
+    newDeleteExperienceResponse,
+
+    -- ** DeleteFaq
+    DeleteFaq (DeleteFaq'),
+    newDeleteFaq,
+    DeleteFaqResponse (DeleteFaqResponse'),
+    newDeleteFaqResponse,
+
+    -- ** DeleteIndex
+    DeleteIndex (DeleteIndex'),
+    newDeleteIndex,
+    DeleteIndexResponse (DeleteIndexResponse'),
+    newDeleteIndexResponse,
+
+    -- ** DeletePrincipalMapping
+    DeletePrincipalMapping (DeletePrincipalMapping'),
+    newDeletePrincipalMapping,
+    DeletePrincipalMappingResponse (DeletePrincipalMappingResponse'),
+    newDeletePrincipalMappingResponse,
+
+    -- ** DeleteQuerySuggestionsBlockList
+    DeleteQuerySuggestionsBlockList (DeleteQuerySuggestionsBlockList'),
+    newDeleteQuerySuggestionsBlockList,
+    DeleteQuerySuggestionsBlockListResponse (DeleteQuerySuggestionsBlockListResponse'),
+    newDeleteQuerySuggestionsBlockListResponse,
+
+    -- ** DeleteThesaurus
+    DeleteThesaurus (DeleteThesaurus'),
+    newDeleteThesaurus,
+    DeleteThesaurusResponse (DeleteThesaurusResponse'),
+    newDeleteThesaurusResponse,
+
+    -- ** DescribeAccessControlConfiguration
+    DescribeAccessControlConfiguration (DescribeAccessControlConfiguration'),
+    newDescribeAccessControlConfiguration,
+    DescribeAccessControlConfigurationResponse (DescribeAccessControlConfigurationResponse'),
+    newDescribeAccessControlConfigurationResponse,
+
+    -- ** DescribeDataSource
+    DescribeDataSource (DescribeDataSource'),
+    newDescribeDataSource,
+    DescribeDataSourceResponse (DescribeDataSourceResponse'),
+    newDescribeDataSourceResponse,
+
+    -- ** DescribeExperience
+    DescribeExperience (DescribeExperience'),
+    newDescribeExperience,
+    DescribeExperienceResponse (DescribeExperienceResponse'),
+    newDescribeExperienceResponse,
+
+    -- ** DescribeFaq
+    DescribeFaq (DescribeFaq'),
+    newDescribeFaq,
+    DescribeFaqResponse (DescribeFaqResponse'),
+    newDescribeFaqResponse,
+
+    -- ** DescribeIndex
+    DescribeIndex (DescribeIndex'),
+    newDescribeIndex,
+    DescribeIndexResponse (DescribeIndexResponse'),
+    newDescribeIndexResponse,
+
+    -- ** DescribePrincipalMapping
+    DescribePrincipalMapping (DescribePrincipalMapping'),
+    newDescribePrincipalMapping,
+    DescribePrincipalMappingResponse (DescribePrincipalMappingResponse'),
+    newDescribePrincipalMappingResponse,
+
+    -- ** DescribeQuerySuggestionsBlockList
+    DescribeQuerySuggestionsBlockList (DescribeQuerySuggestionsBlockList'),
+    newDescribeQuerySuggestionsBlockList,
+    DescribeQuerySuggestionsBlockListResponse (DescribeQuerySuggestionsBlockListResponse'),
+    newDescribeQuerySuggestionsBlockListResponse,
+
+    -- ** DescribeQuerySuggestionsConfig
+    DescribeQuerySuggestionsConfig (DescribeQuerySuggestionsConfig'),
+    newDescribeQuerySuggestionsConfig,
+    DescribeQuerySuggestionsConfigResponse (DescribeQuerySuggestionsConfigResponse'),
+    newDescribeQuerySuggestionsConfigResponse,
+
+    -- ** DescribeThesaurus
+    DescribeThesaurus (DescribeThesaurus'),
+    newDescribeThesaurus,
+    DescribeThesaurusResponse (DescribeThesaurusResponse'),
+    newDescribeThesaurusResponse,
+
+    -- ** DisassociateEntitiesFromExperience
+    DisassociateEntitiesFromExperience (DisassociateEntitiesFromExperience'),
+    newDisassociateEntitiesFromExperience,
+    DisassociateEntitiesFromExperienceResponse (DisassociateEntitiesFromExperienceResponse'),
+    newDisassociateEntitiesFromExperienceResponse,
+
+    -- ** DisassociatePersonasFromEntities
+    DisassociatePersonasFromEntities (DisassociatePersonasFromEntities'),
+    newDisassociatePersonasFromEntities,
+    DisassociatePersonasFromEntitiesResponse (DisassociatePersonasFromEntitiesResponse'),
+    newDisassociatePersonasFromEntitiesResponse,
+
+    -- ** GetQuerySuggestions
+    GetQuerySuggestions (GetQuerySuggestions'),
+    newGetQuerySuggestions,
+    GetQuerySuggestionsResponse (GetQuerySuggestionsResponse'),
+    newGetQuerySuggestionsResponse,
+
+    -- ** GetSnapshots
+    GetSnapshots (GetSnapshots'),
+    newGetSnapshots,
+    GetSnapshotsResponse (GetSnapshotsResponse'),
+    newGetSnapshotsResponse,
+
+    -- ** ListAccessControlConfigurations
+    ListAccessControlConfigurations (ListAccessControlConfigurations'),
+    newListAccessControlConfigurations,
+    ListAccessControlConfigurationsResponse (ListAccessControlConfigurationsResponse'),
+    newListAccessControlConfigurationsResponse,
+
+    -- ** ListDataSourceSyncJobs
+    ListDataSourceSyncJobs (ListDataSourceSyncJobs'),
+    newListDataSourceSyncJobs,
+    ListDataSourceSyncJobsResponse (ListDataSourceSyncJobsResponse'),
+    newListDataSourceSyncJobsResponse,
+
+    -- ** ListDataSources
+    ListDataSources (ListDataSources'),
+    newListDataSources,
+    ListDataSourcesResponse (ListDataSourcesResponse'),
+    newListDataSourcesResponse,
+
+    -- ** ListEntityPersonas
+    ListEntityPersonas (ListEntityPersonas'),
+    newListEntityPersonas,
+    ListEntityPersonasResponse (ListEntityPersonasResponse'),
+    newListEntityPersonasResponse,
+
+    -- ** ListExperienceEntities
+    ListExperienceEntities (ListExperienceEntities'),
+    newListExperienceEntities,
+    ListExperienceEntitiesResponse (ListExperienceEntitiesResponse'),
+    newListExperienceEntitiesResponse,
+
+    -- ** ListExperiences
+    ListExperiences (ListExperiences'),
+    newListExperiences,
+    ListExperiencesResponse (ListExperiencesResponse'),
+    newListExperiencesResponse,
+
+    -- ** ListFaqs
+    ListFaqs (ListFaqs'),
+    newListFaqs,
+    ListFaqsResponse (ListFaqsResponse'),
+    newListFaqsResponse,
+
+    -- ** ListGroupsOlderThanOrderingId
+    ListGroupsOlderThanOrderingId (ListGroupsOlderThanOrderingId'),
+    newListGroupsOlderThanOrderingId,
+    ListGroupsOlderThanOrderingIdResponse (ListGroupsOlderThanOrderingIdResponse'),
+    newListGroupsOlderThanOrderingIdResponse,
+
+    -- ** ListIndices
+    ListIndices (ListIndices'),
+    newListIndices,
+    ListIndicesResponse (ListIndicesResponse'),
+    newListIndicesResponse,
+
+    -- ** ListQuerySuggestionsBlockLists
+    ListQuerySuggestionsBlockLists (ListQuerySuggestionsBlockLists'),
+    newListQuerySuggestionsBlockLists,
+    ListQuerySuggestionsBlockListsResponse (ListQuerySuggestionsBlockListsResponse'),
+    newListQuerySuggestionsBlockListsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** ListThesauri
+    ListThesauri (ListThesauri'),
+    newListThesauri,
+    ListThesauriResponse (ListThesauriResponse'),
+    newListThesauriResponse,
+
+    -- ** PutPrincipalMapping
+    PutPrincipalMapping (PutPrincipalMapping'),
+    newPutPrincipalMapping,
+    PutPrincipalMappingResponse (PutPrincipalMappingResponse'),
+    newPutPrincipalMappingResponse,
+
+    -- ** Query
+    Query (Query'),
+    newQuery,
+    QueryResponse (QueryResponse'),
+    newQueryResponse,
+
+    -- ** StartDataSourceSyncJob
+    StartDataSourceSyncJob (StartDataSourceSyncJob'),
+    newStartDataSourceSyncJob,
+    StartDataSourceSyncJobResponse (StartDataSourceSyncJobResponse'),
+    newStartDataSourceSyncJobResponse,
+
+    -- ** StopDataSourceSyncJob
+    StopDataSourceSyncJob (StopDataSourceSyncJob'),
+    newStopDataSourceSyncJob,
+    StopDataSourceSyncJobResponse (StopDataSourceSyncJobResponse'),
+    newStopDataSourceSyncJobResponse,
+
+    -- ** SubmitFeedback
+    SubmitFeedback (SubmitFeedback'),
+    newSubmitFeedback,
+    SubmitFeedbackResponse (SubmitFeedbackResponse'),
+    newSubmitFeedbackResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateAccessControlConfiguration
+    UpdateAccessControlConfiguration (UpdateAccessControlConfiguration'),
+    newUpdateAccessControlConfiguration,
+    UpdateAccessControlConfigurationResponse (UpdateAccessControlConfigurationResponse'),
+    newUpdateAccessControlConfigurationResponse,
+
+    -- ** UpdateDataSource
+    UpdateDataSource (UpdateDataSource'),
+    newUpdateDataSource,
+    UpdateDataSourceResponse (UpdateDataSourceResponse'),
+    newUpdateDataSourceResponse,
+
+    -- ** UpdateExperience
+    UpdateExperience (UpdateExperience'),
+    newUpdateExperience,
+    UpdateExperienceResponse (UpdateExperienceResponse'),
+    newUpdateExperienceResponse,
+
+    -- ** UpdateIndex
+    UpdateIndex (UpdateIndex'),
+    newUpdateIndex,
+    UpdateIndexResponse (UpdateIndexResponse'),
+    newUpdateIndexResponse,
+
+    -- ** UpdateQuerySuggestionsBlockList
+    UpdateQuerySuggestionsBlockList (UpdateQuerySuggestionsBlockList'),
+    newUpdateQuerySuggestionsBlockList,
+    UpdateQuerySuggestionsBlockListResponse (UpdateQuerySuggestionsBlockListResponse'),
+    newUpdateQuerySuggestionsBlockListResponse,
+
+    -- ** UpdateQuerySuggestionsConfig
+    UpdateQuerySuggestionsConfig (UpdateQuerySuggestionsConfig'),
+    newUpdateQuerySuggestionsConfig,
+    UpdateQuerySuggestionsConfigResponse (UpdateQuerySuggestionsConfigResponse'),
+    newUpdateQuerySuggestionsConfigResponse,
+
+    -- ** UpdateThesaurus
+    UpdateThesaurus (UpdateThesaurus'),
+    newUpdateThesaurus,
+    UpdateThesaurusResponse (UpdateThesaurusResponse'),
+    newUpdateThesaurusResponse,
+
+    -- * Types
+
+    -- ** AdditionalResultAttributeValueType
+    AdditionalResultAttributeValueType (..),
+
+    -- ** AlfrescoEntity
+    AlfrescoEntity (..),
+
+    -- ** ConditionOperator
+    ConditionOperator (..),
+
+    -- ** ConfluenceAttachmentFieldName
+    ConfluenceAttachmentFieldName (..),
+
+    -- ** ConfluenceAuthenticationType
+    ConfluenceAuthenticationType (..),
+
+    -- ** ConfluenceBlogFieldName
+    ConfluenceBlogFieldName (..),
+
+    -- ** ConfluencePageFieldName
+    ConfluencePageFieldName (..),
+
+    -- ** ConfluenceSpaceFieldName
+    ConfluenceSpaceFieldName (..),
+
+    -- ** ConfluenceVersion
+    ConfluenceVersion (..),
+
+    -- ** ContentType
+    ContentType (..),
+
+    -- ** DataSourceStatus
+    DataSourceStatus (..),
+
+    -- ** DataSourceSyncJobStatus
+    DataSourceSyncJobStatus (..),
+
+    -- ** DataSourceType
+    DataSourceType (..),
+
+    -- ** DatabaseEngineType
+    DatabaseEngineType (..),
+
+    -- ** DocumentAttributeValueType
+    DocumentAttributeValueType (..),
+
+    -- ** DocumentStatus
+    DocumentStatus (..),
+
+    -- ** EndpointType
+    EndpointType (..),
+
+    -- ** EntityType
+    EntityType (..),
+
+    -- ** ErrorCode
+    ErrorCode (..),
+
+    -- ** ExperienceStatus
+    ExperienceStatus (..),
+
+    -- ** FaqFileFormat
+    FaqFileFormat (..),
+
+    -- ** FaqStatus
+    FaqStatus (..),
+
+    -- ** FsxFileSystemType
+    FsxFileSystemType (..),
+
+    -- ** HighlightType
+    HighlightType (..),
+
+    -- ** IndexEdition
+    IndexEdition (..),
+
+    -- ** IndexStatus
+    IndexStatus (..),
+
+    -- ** Interval
+    Interval (..),
+
+    -- ** IssueSubEntity
+    IssueSubEntity (..),
+
+    -- ** KeyLocation
+    KeyLocation (..),
+
+    -- ** MetricType
+    MetricType (..),
+
+    -- ** Mode
+    Mode (..),
+
+    -- ** Order
+    Order (..),
+
+    -- ** Persona
+    Persona (..),
+
+    -- ** PrincipalMappingStatus
+    PrincipalMappingStatus (..),
+
+    -- ** PrincipalType
+    PrincipalType (..),
+
+    -- ** QueryIdentifiersEnclosingOption
+    QueryIdentifiersEnclosingOption (..),
+
+    -- ** QueryResultFormat
+    QueryResultFormat (..),
+
+    -- ** QueryResultType
+    QueryResultType (..),
+
+    -- ** QuerySuggestionsBlockListStatus
+    QuerySuggestionsBlockListStatus (..),
+
+    -- ** QuerySuggestionsStatus
+    QuerySuggestionsStatus (..),
+
+    -- ** ReadAccessType
+    ReadAccessType (..),
+
+    -- ** RelevanceType
+    RelevanceType (..),
+
+    -- ** SalesforceChatterFeedIncludeFilterType
+    SalesforceChatterFeedIncludeFilterType (..),
+
+    -- ** SalesforceKnowledgeArticleState
+    SalesforceKnowledgeArticleState (..),
+
+    -- ** SalesforceStandardObjectName
+    SalesforceStandardObjectName (..),
+
+    -- ** ScoreConfidence
+    ScoreConfidence (..),
+
+    -- ** ServiceNowAuthenticationType
+    ServiceNowAuthenticationType (..),
+
+    -- ** ServiceNowBuildVersionType
+    ServiceNowBuildVersionType (..),
+
+    -- ** SharePointOnlineAuthenticationType
+    SharePointOnlineAuthenticationType (..),
+
+    -- ** SharePointVersion
+    SharePointVersion (..),
+
+    -- ** SlackEntity
+    SlackEntity (..),
+
+    -- ** SortOrder
+    SortOrder (..),
+
+    -- ** ThesaurusStatus
+    ThesaurusStatus (..),
+
+    -- ** Type
+    Type (..),
+
+    -- ** UserContextPolicy
+    UserContextPolicy (..),
+
+    -- ** UserGroupResolutionMode
+    UserGroupResolutionMode (..),
+
+    -- ** WarningCode
+    WarningCode (..),
+
+    -- ** WebCrawlerMode
+    WebCrawlerMode (..),
+
+    -- ** AccessControlConfigurationSummary
+    AccessControlConfigurationSummary (AccessControlConfigurationSummary'),
+    newAccessControlConfigurationSummary,
+
+    -- ** AccessControlListConfiguration
+    AccessControlListConfiguration (AccessControlListConfiguration'),
+    newAccessControlListConfiguration,
+
+    -- ** AclConfiguration
+    AclConfiguration (AclConfiguration'),
+    newAclConfiguration,
+
+    -- ** AdditionalResultAttribute
+    AdditionalResultAttribute (AdditionalResultAttribute'),
+    newAdditionalResultAttribute,
+
+    -- ** AdditionalResultAttributeValue
+    AdditionalResultAttributeValue (AdditionalResultAttributeValue'),
+    newAdditionalResultAttributeValue,
+
+    -- ** AlfrescoConfiguration
+    AlfrescoConfiguration (AlfrescoConfiguration'),
+    newAlfrescoConfiguration,
+
+    -- ** AttributeFilter
+    AttributeFilter (AttributeFilter'),
+    newAttributeFilter,
+
+    -- ** AuthenticationConfiguration
+    AuthenticationConfiguration (AuthenticationConfiguration'),
+    newAuthenticationConfiguration,
+
+    -- ** BasicAuthenticationConfiguration
+    BasicAuthenticationConfiguration (BasicAuthenticationConfiguration'),
+    newBasicAuthenticationConfiguration,
+
+    -- ** BatchDeleteDocumentResponseFailedDocument
+    BatchDeleteDocumentResponseFailedDocument (BatchDeleteDocumentResponseFailedDocument'),
+    newBatchDeleteDocumentResponseFailedDocument,
+
+    -- ** BatchGetDocumentStatusResponseError
+    BatchGetDocumentStatusResponseError (BatchGetDocumentStatusResponseError'),
+    newBatchGetDocumentStatusResponseError,
+
+    -- ** BatchPutDocumentResponseFailedDocument
+    BatchPutDocumentResponseFailedDocument (BatchPutDocumentResponseFailedDocument'),
+    newBatchPutDocumentResponseFailedDocument,
+
+    -- ** BoxConfiguration
+    BoxConfiguration (BoxConfiguration'),
+    newBoxConfiguration,
+
+    -- ** CapacityUnitsConfiguration
+    CapacityUnitsConfiguration (CapacityUnitsConfiguration'),
+    newCapacityUnitsConfiguration,
+
+    -- ** ClickFeedback
+    ClickFeedback (ClickFeedback'),
+    newClickFeedback,
+
+    -- ** ColumnConfiguration
+    ColumnConfiguration (ColumnConfiguration'),
+    newColumnConfiguration,
+
+    -- ** ConfluenceAttachmentConfiguration
+    ConfluenceAttachmentConfiguration (ConfluenceAttachmentConfiguration'),
+    newConfluenceAttachmentConfiguration,
+
+    -- ** ConfluenceAttachmentToIndexFieldMapping
+    ConfluenceAttachmentToIndexFieldMapping (ConfluenceAttachmentToIndexFieldMapping'),
+    newConfluenceAttachmentToIndexFieldMapping,
+
+    -- ** ConfluenceBlogConfiguration
+    ConfluenceBlogConfiguration (ConfluenceBlogConfiguration'),
+    newConfluenceBlogConfiguration,
+
+    -- ** ConfluenceBlogToIndexFieldMapping
+    ConfluenceBlogToIndexFieldMapping (ConfluenceBlogToIndexFieldMapping'),
+    newConfluenceBlogToIndexFieldMapping,
+
+    -- ** ConfluenceConfiguration
+    ConfluenceConfiguration (ConfluenceConfiguration'),
+    newConfluenceConfiguration,
+
+    -- ** ConfluencePageConfiguration
+    ConfluencePageConfiguration (ConfluencePageConfiguration'),
+    newConfluencePageConfiguration,
+
+    -- ** ConfluencePageToIndexFieldMapping
+    ConfluencePageToIndexFieldMapping (ConfluencePageToIndexFieldMapping'),
+    newConfluencePageToIndexFieldMapping,
+
+    -- ** ConfluenceSpaceConfiguration
+    ConfluenceSpaceConfiguration (ConfluenceSpaceConfiguration'),
+    newConfluenceSpaceConfiguration,
+
+    -- ** ConfluenceSpaceToIndexFieldMapping
+    ConfluenceSpaceToIndexFieldMapping (ConfluenceSpaceToIndexFieldMapping'),
+    newConfluenceSpaceToIndexFieldMapping,
+
+    -- ** ConnectionConfiguration
+    ConnectionConfiguration (ConnectionConfiguration'),
+    newConnectionConfiguration,
+
+    -- ** ContentSourceConfiguration
+    ContentSourceConfiguration (ContentSourceConfiguration'),
+    newContentSourceConfiguration,
+
+    -- ** Correction
+    Correction (Correction'),
+    newCorrection,
+
+    -- ** CustomDocumentEnrichmentConfiguration
+    CustomDocumentEnrichmentConfiguration (CustomDocumentEnrichmentConfiguration'),
+    newCustomDocumentEnrichmentConfiguration,
+
+    -- ** DataSourceConfiguration
+    DataSourceConfiguration (DataSourceConfiguration'),
+    newDataSourceConfiguration,
+
+    -- ** DataSourceGroup
+    DataSourceGroup (DataSourceGroup'),
+    newDataSourceGroup,
+
+    -- ** DataSourceSummary
+    DataSourceSummary (DataSourceSummary'),
+    newDataSourceSummary,
+
+    -- ** DataSourceSyncJob
+    DataSourceSyncJob (DataSourceSyncJob'),
+    newDataSourceSyncJob,
+
+    -- ** DataSourceSyncJobMetricTarget
+    DataSourceSyncJobMetricTarget (DataSourceSyncJobMetricTarget'),
+    newDataSourceSyncJobMetricTarget,
+
+    -- ** DataSourceSyncJobMetrics
+    DataSourceSyncJobMetrics (DataSourceSyncJobMetrics'),
+    newDataSourceSyncJobMetrics,
+
+    -- ** DataSourceToIndexFieldMapping
+    DataSourceToIndexFieldMapping (DataSourceToIndexFieldMapping'),
+    newDataSourceToIndexFieldMapping,
+
+    -- ** DataSourceVpcConfiguration
+    DataSourceVpcConfiguration (DataSourceVpcConfiguration'),
+    newDataSourceVpcConfiguration,
+
+    -- ** DatabaseConfiguration
+    DatabaseConfiguration (DatabaseConfiguration'),
+    newDatabaseConfiguration,
+
+    -- ** Document
+    Document (Document'),
+    newDocument,
+
+    -- ** DocumentAttribute
+    DocumentAttribute (DocumentAttribute'),
+    newDocumentAttribute,
+
+    -- ** DocumentAttributeCondition
+    DocumentAttributeCondition (DocumentAttributeCondition'),
+    newDocumentAttributeCondition,
+
+    -- ** DocumentAttributeTarget
+    DocumentAttributeTarget (DocumentAttributeTarget'),
+    newDocumentAttributeTarget,
+
+    -- ** DocumentAttributeValue
+    DocumentAttributeValue (DocumentAttributeValue'),
+    newDocumentAttributeValue,
+
+    -- ** DocumentAttributeValueCountPair
+    DocumentAttributeValueCountPair (DocumentAttributeValueCountPair'),
+    newDocumentAttributeValueCountPair,
+
+    -- ** DocumentInfo
+    DocumentInfo (DocumentInfo'),
+    newDocumentInfo,
+
+    -- ** DocumentMetadataConfiguration
+    DocumentMetadataConfiguration (DocumentMetadataConfiguration'),
+    newDocumentMetadataConfiguration,
+
+    -- ** DocumentRelevanceConfiguration
+    DocumentRelevanceConfiguration (DocumentRelevanceConfiguration'),
+    newDocumentRelevanceConfiguration,
+
+    -- ** DocumentsMetadataConfiguration
+    DocumentsMetadataConfiguration (DocumentsMetadataConfiguration'),
+    newDocumentsMetadataConfiguration,
+
+    -- ** EntityConfiguration
+    EntityConfiguration (EntityConfiguration'),
+    newEntityConfiguration,
+
+    -- ** EntityDisplayData
+    EntityDisplayData (EntityDisplayData'),
+    newEntityDisplayData,
+
+    -- ** EntityPersonaConfiguration
+    EntityPersonaConfiguration (EntityPersonaConfiguration'),
+    newEntityPersonaConfiguration,
+
+    -- ** ExperienceConfiguration
+    ExperienceConfiguration (ExperienceConfiguration'),
+    newExperienceConfiguration,
+
+    -- ** ExperienceEndpoint
+    ExperienceEndpoint (ExperienceEndpoint'),
+    newExperienceEndpoint,
+
+    -- ** ExperienceEntitiesSummary
+    ExperienceEntitiesSummary (ExperienceEntitiesSummary'),
+    newExperienceEntitiesSummary,
+
+    -- ** ExperiencesSummary
+    ExperiencesSummary (ExperiencesSummary'),
+    newExperiencesSummary,
+
+    -- ** Facet
+    Facet (Facet'),
+    newFacet,
+
+    -- ** FacetResult
+    FacetResult (FacetResult'),
+    newFacetResult,
+
+    -- ** FailedEntity
+    FailedEntity (FailedEntity'),
+    newFailedEntity,
+
+    -- ** FaqStatistics
+    FaqStatistics (FaqStatistics'),
+    newFaqStatistics,
+
+    -- ** FaqSummary
+    FaqSummary (FaqSummary'),
+    newFaqSummary,
+
+    -- ** FsxConfiguration
+    FsxConfiguration (FsxConfiguration'),
+    newFsxConfiguration,
+
+    -- ** GitHubConfiguration
+    GitHubConfiguration (GitHubConfiguration'),
+    newGitHubConfiguration,
+
+    -- ** GitHubDocumentCrawlProperties
+    GitHubDocumentCrawlProperties (GitHubDocumentCrawlProperties'),
+    newGitHubDocumentCrawlProperties,
+
+    -- ** GoogleDriveConfiguration
+    GoogleDriveConfiguration (GoogleDriveConfiguration'),
+    newGoogleDriveConfiguration,
+
+    -- ** GroupMembers
+    GroupMembers (GroupMembers'),
+    newGroupMembers,
+
+    -- ** GroupOrderingIdSummary
+    GroupOrderingIdSummary (GroupOrderingIdSummary'),
+    newGroupOrderingIdSummary,
+
+    -- ** GroupSummary
+    GroupSummary (GroupSummary'),
+    newGroupSummary,
+
+    -- ** HierarchicalPrincipal
+    HierarchicalPrincipal (HierarchicalPrincipal'),
+    newHierarchicalPrincipal,
+
+    -- ** Highlight
+    Highlight (Highlight'),
+    newHighlight,
+
+    -- ** HookConfiguration
+    HookConfiguration (HookConfiguration'),
+    newHookConfiguration,
+
+    -- ** IndexConfigurationSummary
+    IndexConfigurationSummary (IndexConfigurationSummary'),
+    newIndexConfigurationSummary,
+
+    -- ** IndexStatistics
+    IndexStatistics (IndexStatistics'),
+    newIndexStatistics,
+
+    -- ** InlineCustomDocumentEnrichmentConfiguration
+    InlineCustomDocumentEnrichmentConfiguration (InlineCustomDocumentEnrichmentConfiguration'),
+    newInlineCustomDocumentEnrichmentConfiguration,
+
+    -- ** JiraConfiguration
+    JiraConfiguration (JiraConfiguration'),
+    newJiraConfiguration,
+
+    -- ** JsonTokenTypeConfiguration
+    JsonTokenTypeConfiguration (JsonTokenTypeConfiguration'),
+    newJsonTokenTypeConfiguration,
+
+    -- ** JwtTokenTypeConfiguration
+    JwtTokenTypeConfiguration (JwtTokenTypeConfiguration'),
+    newJwtTokenTypeConfiguration,
+
+    -- ** MemberGroup
+    MemberGroup (MemberGroup'),
+    newMemberGroup,
+
+    -- ** MemberUser
+    MemberUser (MemberUser'),
+    newMemberUser,
+
+    -- ** OnPremiseConfiguration
+    OnPremiseConfiguration (OnPremiseConfiguration'),
+    newOnPremiseConfiguration,
+
+    -- ** OneDriveConfiguration
+    OneDriveConfiguration (OneDriveConfiguration'),
+    newOneDriveConfiguration,
+
+    -- ** OneDriveUsers
+    OneDriveUsers (OneDriveUsers'),
+    newOneDriveUsers,
+
+    -- ** PersonasSummary
+    PersonasSummary (PersonasSummary'),
+    newPersonasSummary,
+
+    -- ** Principal
+    Principal (Principal'),
+    newPrincipal,
+
+    -- ** ProxyConfiguration
+    ProxyConfiguration (ProxyConfiguration'),
+    newProxyConfiguration,
+
+    -- ** QueryResultItem
+    QueryResultItem (QueryResultItem'),
+    newQueryResultItem,
+
+    -- ** QuerySuggestionsBlockListSummary
+    QuerySuggestionsBlockListSummary (QuerySuggestionsBlockListSummary'),
+    newQuerySuggestionsBlockListSummary,
+
+    -- ** QuipConfiguration
+    QuipConfiguration (QuipConfiguration'),
+    newQuipConfiguration,
+
+    -- ** Relevance
+    Relevance (Relevance'),
+    newRelevance,
+
+    -- ** RelevanceFeedback
+    RelevanceFeedback (RelevanceFeedback'),
+    newRelevanceFeedback,
+
+    -- ** S3DataSourceConfiguration
+    S3DataSourceConfiguration (S3DataSourceConfiguration'),
+    newS3DataSourceConfiguration,
+
+    -- ** S3Path
+    S3Path (S3Path'),
+    newS3Path,
+
+    -- ** SaaSConfiguration
+    SaaSConfiguration (SaaSConfiguration'),
+    newSaaSConfiguration,
+
+    -- ** SalesforceChatterFeedConfiguration
+    SalesforceChatterFeedConfiguration (SalesforceChatterFeedConfiguration'),
+    newSalesforceChatterFeedConfiguration,
+
+    -- ** SalesforceConfiguration
+    SalesforceConfiguration (SalesforceConfiguration'),
+    newSalesforceConfiguration,
+
+    -- ** SalesforceCustomKnowledgeArticleTypeConfiguration
+    SalesforceCustomKnowledgeArticleTypeConfiguration (SalesforceCustomKnowledgeArticleTypeConfiguration'),
+    newSalesforceCustomKnowledgeArticleTypeConfiguration,
+
+    -- ** SalesforceKnowledgeArticleConfiguration
+    SalesforceKnowledgeArticleConfiguration (SalesforceKnowledgeArticleConfiguration'),
+    newSalesforceKnowledgeArticleConfiguration,
+
+    -- ** SalesforceStandardKnowledgeArticleTypeConfiguration
+    SalesforceStandardKnowledgeArticleTypeConfiguration (SalesforceStandardKnowledgeArticleTypeConfiguration'),
+    newSalesforceStandardKnowledgeArticleTypeConfiguration,
+
+    -- ** SalesforceStandardObjectAttachmentConfiguration
+    SalesforceStandardObjectAttachmentConfiguration (SalesforceStandardObjectAttachmentConfiguration'),
+    newSalesforceStandardObjectAttachmentConfiguration,
+
+    -- ** SalesforceStandardObjectConfiguration
+    SalesforceStandardObjectConfiguration (SalesforceStandardObjectConfiguration'),
+    newSalesforceStandardObjectConfiguration,
+
+    -- ** ScoreAttributes
+    ScoreAttributes (ScoreAttributes'),
+    newScoreAttributes,
+
+    -- ** Search
+    Search (Search'),
+    newSearch,
+
+    -- ** SeedUrlConfiguration
+    SeedUrlConfiguration (SeedUrlConfiguration'),
+    newSeedUrlConfiguration,
+
+    -- ** ServerSideEncryptionConfiguration
+    ServerSideEncryptionConfiguration (ServerSideEncryptionConfiguration'),
+    newServerSideEncryptionConfiguration,
+
+    -- ** ServiceNowConfiguration
+    ServiceNowConfiguration (ServiceNowConfiguration'),
+    newServiceNowConfiguration,
+
+    -- ** ServiceNowKnowledgeArticleConfiguration
+    ServiceNowKnowledgeArticleConfiguration (ServiceNowKnowledgeArticleConfiguration'),
+    newServiceNowKnowledgeArticleConfiguration,
+
+    -- ** ServiceNowServiceCatalogConfiguration
+    ServiceNowServiceCatalogConfiguration (ServiceNowServiceCatalogConfiguration'),
+    newServiceNowServiceCatalogConfiguration,
+
+    -- ** SharePointConfiguration
+    SharePointConfiguration (SharePointConfiguration'),
+    newSharePointConfiguration,
+
+    -- ** SiteMapsConfiguration
+    SiteMapsConfiguration (SiteMapsConfiguration'),
+    newSiteMapsConfiguration,
+
+    -- ** SlackConfiguration
+    SlackConfiguration (SlackConfiguration'),
+    newSlackConfiguration,
+
+    -- ** SortingConfiguration
+    SortingConfiguration (SortingConfiguration'),
+    newSortingConfiguration,
+
+    -- ** SpellCorrectedQuery
+    SpellCorrectedQuery (SpellCorrectedQuery'),
+    newSpellCorrectedQuery,
+
+    -- ** SpellCorrectionConfiguration
+    SpellCorrectionConfiguration (SpellCorrectionConfiguration'),
+    newSpellCorrectionConfiguration,
+
+    -- ** SqlConfiguration
+    SqlConfiguration (SqlConfiguration'),
+    newSqlConfiguration,
+
+    -- ** Status
+    Status (Status'),
+    newStatus,
+
+    -- ** Suggestion
+    Suggestion (Suggestion'),
+    newSuggestion,
+
+    -- ** SuggestionHighlight
+    SuggestionHighlight (SuggestionHighlight'),
+    newSuggestionHighlight,
+
+    -- ** SuggestionTextWithHighlights
+    SuggestionTextWithHighlights (SuggestionTextWithHighlights'),
+    newSuggestionTextWithHighlights,
+
+    -- ** SuggestionValue
+    SuggestionValue (SuggestionValue'),
+    newSuggestionValue,
+
+    -- ** TableCell
+    TableCell (TableCell'),
+    newTableCell,
+
+    -- ** TableExcerpt
+    TableExcerpt (TableExcerpt'),
+    newTableExcerpt,
+
+    -- ** TableRow
+    TableRow (TableRow'),
+    newTableRow,
+
+    -- ** Tag
+    Tag (Tag'),
+    newTag,
+
+    -- ** Template
+    Template (Template'),
+    newTemplate,
+
+    -- ** TemplateConfiguration
+    TemplateConfiguration (TemplateConfiguration'),
+    newTemplateConfiguration,
+
+    -- ** TextDocumentStatistics
+    TextDocumentStatistics (TextDocumentStatistics'),
+    newTextDocumentStatistics,
+
+    -- ** TextWithHighlights
+    TextWithHighlights (TextWithHighlights'),
+    newTextWithHighlights,
+
+    -- ** ThesaurusSummary
+    ThesaurusSummary (ThesaurusSummary'),
+    newThesaurusSummary,
+
+    -- ** TimeRange
+    TimeRange (TimeRange'),
+    newTimeRange,
+
+    -- ** Urls
+    Urls (Urls'),
+    newUrls,
+
+    -- ** UserContext
+    UserContext (UserContext'),
+    newUserContext,
+
+    -- ** UserGroupResolutionConfiguration
+    UserGroupResolutionConfiguration (UserGroupResolutionConfiguration'),
+    newUserGroupResolutionConfiguration,
+
+    -- ** UserIdentityConfiguration
+    UserIdentityConfiguration (UserIdentityConfiguration'),
+    newUserIdentityConfiguration,
+
+    -- ** UserTokenConfiguration
+    UserTokenConfiguration (UserTokenConfiguration'),
+    newUserTokenConfiguration,
+
+    -- ** Warning
+    Warning (Warning'),
+    newWarning,
+
+    -- ** WebCrawlerConfiguration
+    WebCrawlerConfiguration (WebCrawlerConfiguration'),
+    newWebCrawlerConfiguration,
+
+    -- ** WorkDocsConfiguration
+    WorkDocsConfiguration (WorkDocsConfiguration'),
+    newWorkDocsConfiguration,
+  )
+where
+
+import Amazonka.Kendra.AssociateEntitiesToExperience
+import Amazonka.Kendra.AssociatePersonasToEntities
+import Amazonka.Kendra.BatchDeleteDocument
+import Amazonka.Kendra.BatchGetDocumentStatus
+import Amazonka.Kendra.BatchPutDocument
+import Amazonka.Kendra.ClearQuerySuggestions
+import Amazonka.Kendra.CreateAccessControlConfiguration
+import Amazonka.Kendra.CreateDataSource
+import Amazonka.Kendra.CreateExperience
+import Amazonka.Kendra.CreateFaq
+import Amazonka.Kendra.CreateIndex
+import Amazonka.Kendra.CreateQuerySuggestionsBlockList
+import Amazonka.Kendra.CreateThesaurus
+import Amazonka.Kendra.DeleteAccessControlConfiguration
+import Amazonka.Kendra.DeleteDataSource
+import Amazonka.Kendra.DeleteExperience
+import Amazonka.Kendra.DeleteFaq
+import Amazonka.Kendra.DeleteIndex
+import Amazonka.Kendra.DeletePrincipalMapping
+import Amazonka.Kendra.DeleteQuerySuggestionsBlockList
+import Amazonka.Kendra.DeleteThesaurus
+import Amazonka.Kendra.DescribeAccessControlConfiguration
+import Amazonka.Kendra.DescribeDataSource
+import Amazonka.Kendra.DescribeExperience
+import Amazonka.Kendra.DescribeFaq
+import Amazonka.Kendra.DescribeIndex
+import Amazonka.Kendra.DescribePrincipalMapping
+import Amazonka.Kendra.DescribeQuerySuggestionsBlockList
+import Amazonka.Kendra.DescribeQuerySuggestionsConfig
+import Amazonka.Kendra.DescribeThesaurus
+import Amazonka.Kendra.DisassociateEntitiesFromExperience
+import Amazonka.Kendra.DisassociatePersonasFromEntities
+import Amazonka.Kendra.GetQuerySuggestions
+import Amazonka.Kendra.GetSnapshots
+import Amazonka.Kendra.Lens
+import Amazonka.Kendra.ListAccessControlConfigurations
+import Amazonka.Kendra.ListDataSourceSyncJobs
+import Amazonka.Kendra.ListDataSources
+import Amazonka.Kendra.ListEntityPersonas
+import Amazonka.Kendra.ListExperienceEntities
+import Amazonka.Kendra.ListExperiences
+import Amazonka.Kendra.ListFaqs
+import Amazonka.Kendra.ListGroupsOlderThanOrderingId
+import Amazonka.Kendra.ListIndices
+import Amazonka.Kendra.ListQuerySuggestionsBlockLists
+import Amazonka.Kendra.ListTagsForResource
+import Amazonka.Kendra.ListThesauri
+import Amazonka.Kendra.PutPrincipalMapping
+import Amazonka.Kendra.Query
+import Amazonka.Kendra.StartDataSourceSyncJob
+import Amazonka.Kendra.StopDataSourceSyncJob
+import Amazonka.Kendra.SubmitFeedback
+import Amazonka.Kendra.TagResource
+import Amazonka.Kendra.Types
+import Amazonka.Kendra.UntagResource
+import Amazonka.Kendra.UpdateAccessControlConfiguration
+import Amazonka.Kendra.UpdateDataSource
+import Amazonka.Kendra.UpdateExperience
+import Amazonka.Kendra.UpdateIndex
+import Amazonka.Kendra.UpdateQuerySuggestionsBlockList
+import Amazonka.Kendra.UpdateQuerySuggestionsConfig
+import Amazonka.Kendra.UpdateThesaurus
+import Amazonka.Kendra.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 'Kendra'.
+
+-- $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/Kendra/AssociateEntitiesToExperience.hs b/gen/Amazonka/Kendra/AssociateEntitiesToExperience.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/AssociateEntitiesToExperience.hs
@@ -0,0 +1,223 @@
+{-# 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.Kendra.AssociateEntitiesToExperience
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Grants users or groups in your IAM Identity Center identity source
+-- access to your Amazon Kendra experience. You can create an Amazon Kendra
+-- experience such as a search application. For more information on
+-- creating a search application experience, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/deploying-search-experience-no-code.html Building a search experience with no code>.
+module Amazonka.Kendra.AssociateEntitiesToExperience
+  ( -- * Creating a Request
+    AssociateEntitiesToExperience (..),
+    newAssociateEntitiesToExperience,
+
+    -- * Request Lenses
+    associateEntitiesToExperience_id,
+    associateEntitiesToExperience_indexId,
+    associateEntitiesToExperience_entityList,
+
+    -- * Destructuring the Response
+    AssociateEntitiesToExperienceResponse (..),
+    newAssociateEntitiesToExperienceResponse,
+
+    -- * Response Lenses
+    associateEntitiesToExperienceResponse_failedEntityList,
+    associateEntitiesToExperienceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateEntitiesToExperience' smart constructor.
+data AssociateEntitiesToExperience = AssociateEntitiesToExperience'
+  { -- | The identifier of your Amazon Kendra experience.
+    id :: Prelude.Text,
+    -- | The identifier of the index for your Amazon Kendra experience.
+    indexId :: Prelude.Text,
+    -- | Lists users or groups in your IAM Identity Center identity source.
+    entityList :: Prelude.NonEmpty EntityConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateEntitiesToExperience' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'associateEntitiesToExperience_id' - The identifier of your Amazon Kendra experience.
+--
+-- 'indexId', 'associateEntitiesToExperience_indexId' - The identifier of the index for your Amazon Kendra experience.
+--
+-- 'entityList', 'associateEntitiesToExperience_entityList' - Lists users or groups in your IAM Identity Center identity source.
+newAssociateEntitiesToExperience ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'indexId'
+  Prelude.Text ->
+  -- | 'entityList'
+  Prelude.NonEmpty EntityConfiguration ->
+  AssociateEntitiesToExperience
+newAssociateEntitiesToExperience
+  pId_
+  pIndexId_
+  pEntityList_ =
+    AssociateEntitiesToExperience'
+      { id = pId_,
+        indexId = pIndexId_,
+        entityList =
+          Lens.coerced Lens.# pEntityList_
+      }
+
+-- | The identifier of your Amazon Kendra experience.
+associateEntitiesToExperience_id :: Lens.Lens' AssociateEntitiesToExperience Prelude.Text
+associateEntitiesToExperience_id = Lens.lens (\AssociateEntitiesToExperience' {id} -> id) (\s@AssociateEntitiesToExperience' {} a -> s {id = a} :: AssociateEntitiesToExperience)
+
+-- | The identifier of the index for your Amazon Kendra experience.
+associateEntitiesToExperience_indexId :: Lens.Lens' AssociateEntitiesToExperience Prelude.Text
+associateEntitiesToExperience_indexId = Lens.lens (\AssociateEntitiesToExperience' {indexId} -> indexId) (\s@AssociateEntitiesToExperience' {} a -> s {indexId = a} :: AssociateEntitiesToExperience)
+
+-- | Lists users or groups in your IAM Identity Center identity source.
+associateEntitiesToExperience_entityList :: Lens.Lens' AssociateEntitiesToExperience (Prelude.NonEmpty EntityConfiguration)
+associateEntitiesToExperience_entityList = Lens.lens (\AssociateEntitiesToExperience' {entityList} -> entityList) (\s@AssociateEntitiesToExperience' {} a -> s {entityList = a} :: AssociateEntitiesToExperience) Prelude.. Lens.coerced
+
+instance
+  Core.AWSRequest
+    AssociateEntitiesToExperience
+  where
+  type
+    AWSResponse AssociateEntitiesToExperience =
+      AssociateEntitiesToExperienceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          AssociateEntitiesToExperienceResponse'
+            Prelude.<$> (x Data..?> "FailedEntityList")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    AssociateEntitiesToExperience
+  where
+  hashWithSalt _salt AssociateEntitiesToExperience' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` indexId
+      `Prelude.hashWithSalt` entityList
+
+instance Prelude.NFData AssociateEntitiesToExperience where
+  rnf AssociateEntitiesToExperience' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf indexId
+      `Prelude.seq` Prelude.rnf entityList
+
+instance Data.ToHeaders AssociateEntitiesToExperience where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.AssociateEntitiesToExperience" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AssociateEntitiesToExperience where
+  toJSON AssociateEntitiesToExperience' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Id" Data..= id),
+            Prelude.Just ("IndexId" Data..= indexId),
+            Prelude.Just ("EntityList" Data..= entityList)
+          ]
+      )
+
+instance Data.ToPath AssociateEntitiesToExperience where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AssociateEntitiesToExperience where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateEntitiesToExperienceResponse' smart constructor.
+data AssociateEntitiesToExperienceResponse = AssociateEntitiesToExperienceResponse'
+  { -- | Lists the users or groups in your IAM Identity Center identity source
+    -- that failed to properly configure with your Amazon Kendra experience.
+    failedEntityList :: Prelude.Maybe (Prelude.NonEmpty FailedEntity),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateEntitiesToExperienceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failedEntityList', 'associateEntitiesToExperienceResponse_failedEntityList' - Lists the users or groups in your IAM Identity Center identity source
+-- that failed to properly configure with your Amazon Kendra experience.
+--
+-- 'httpStatus', 'associateEntitiesToExperienceResponse_httpStatus' - The response's http status code.
+newAssociateEntitiesToExperienceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateEntitiesToExperienceResponse
+newAssociateEntitiesToExperienceResponse pHttpStatus_ =
+  AssociateEntitiesToExperienceResponse'
+    { failedEntityList =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Lists the users or groups in your IAM Identity Center identity source
+-- that failed to properly configure with your Amazon Kendra experience.
+associateEntitiesToExperienceResponse_failedEntityList :: Lens.Lens' AssociateEntitiesToExperienceResponse (Prelude.Maybe (Prelude.NonEmpty FailedEntity))
+associateEntitiesToExperienceResponse_failedEntityList = Lens.lens (\AssociateEntitiesToExperienceResponse' {failedEntityList} -> failedEntityList) (\s@AssociateEntitiesToExperienceResponse' {} a -> s {failedEntityList = a} :: AssociateEntitiesToExperienceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+associateEntitiesToExperienceResponse_httpStatus :: Lens.Lens' AssociateEntitiesToExperienceResponse Prelude.Int
+associateEntitiesToExperienceResponse_httpStatus = Lens.lens (\AssociateEntitiesToExperienceResponse' {httpStatus} -> httpStatus) (\s@AssociateEntitiesToExperienceResponse' {} a -> s {httpStatus = a} :: AssociateEntitiesToExperienceResponse)
+
+instance
+  Prelude.NFData
+    AssociateEntitiesToExperienceResponse
+  where
+  rnf AssociateEntitiesToExperienceResponse' {..} =
+    Prelude.rnf failedEntityList
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/AssociatePersonasToEntities.hs b/gen/Amazonka/Kendra/AssociatePersonasToEntities.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/AssociatePersonasToEntities.hs
@@ -0,0 +1,228 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.AssociatePersonasToEntities
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Defines the specific permissions of users or groups in your IAM Identity
+-- Center identity source with access to your Amazon Kendra experience. You
+-- can create an Amazon Kendra experience such as a search application. For
+-- more information on creating a search application experience, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/deploying-search-experience-no-code.html Building a search experience with no code>.
+module Amazonka.Kendra.AssociatePersonasToEntities
+  ( -- * Creating a Request
+    AssociatePersonasToEntities (..),
+    newAssociatePersonasToEntities,
+
+    -- * Request Lenses
+    associatePersonasToEntities_id,
+    associatePersonasToEntities_indexId,
+    associatePersonasToEntities_personas,
+
+    -- * Destructuring the Response
+    AssociatePersonasToEntitiesResponse (..),
+    newAssociatePersonasToEntitiesResponse,
+
+    -- * Response Lenses
+    associatePersonasToEntitiesResponse_failedEntityList,
+    associatePersonasToEntitiesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociatePersonasToEntities' smart constructor.
+data AssociatePersonasToEntities = AssociatePersonasToEntities'
+  { -- | The identifier of your Amazon Kendra experience.
+    id :: Prelude.Text,
+    -- | The identifier of the index for your Amazon Kendra experience.
+    indexId :: Prelude.Text,
+    -- | The personas that define the specific permissions of users or groups in
+    -- your IAM Identity Center identity source. The available personas or
+    -- access roles are @Owner@ and @Viewer@. For more information on these
+    -- personas, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/deploying-search-experience-no-code.html#access-search-experience Providing access to your search page>.
+    personas :: Prelude.NonEmpty EntityPersonaConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociatePersonasToEntities' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'associatePersonasToEntities_id' - The identifier of your Amazon Kendra experience.
+--
+-- 'indexId', 'associatePersonasToEntities_indexId' - The identifier of the index for your Amazon Kendra experience.
+--
+-- 'personas', 'associatePersonasToEntities_personas' - The personas that define the specific permissions of users or groups in
+-- your IAM Identity Center identity source. The available personas or
+-- access roles are @Owner@ and @Viewer@. For more information on these
+-- personas, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/deploying-search-experience-no-code.html#access-search-experience Providing access to your search page>.
+newAssociatePersonasToEntities ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'indexId'
+  Prelude.Text ->
+  -- | 'personas'
+  Prelude.NonEmpty EntityPersonaConfiguration ->
+  AssociatePersonasToEntities
+newAssociatePersonasToEntities
+  pId_
+  pIndexId_
+  pPersonas_ =
+    AssociatePersonasToEntities'
+      { id = pId_,
+        indexId = pIndexId_,
+        personas = Lens.coerced Lens.# pPersonas_
+      }
+
+-- | The identifier of your Amazon Kendra experience.
+associatePersonasToEntities_id :: Lens.Lens' AssociatePersonasToEntities Prelude.Text
+associatePersonasToEntities_id = Lens.lens (\AssociatePersonasToEntities' {id} -> id) (\s@AssociatePersonasToEntities' {} a -> s {id = a} :: AssociatePersonasToEntities)
+
+-- | The identifier of the index for your Amazon Kendra experience.
+associatePersonasToEntities_indexId :: Lens.Lens' AssociatePersonasToEntities Prelude.Text
+associatePersonasToEntities_indexId = Lens.lens (\AssociatePersonasToEntities' {indexId} -> indexId) (\s@AssociatePersonasToEntities' {} a -> s {indexId = a} :: AssociatePersonasToEntities)
+
+-- | The personas that define the specific permissions of users or groups in
+-- your IAM Identity Center identity source. The available personas or
+-- access roles are @Owner@ and @Viewer@. For more information on these
+-- personas, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/deploying-search-experience-no-code.html#access-search-experience Providing access to your search page>.
+associatePersonasToEntities_personas :: Lens.Lens' AssociatePersonasToEntities (Prelude.NonEmpty EntityPersonaConfiguration)
+associatePersonasToEntities_personas = Lens.lens (\AssociatePersonasToEntities' {personas} -> personas) (\s@AssociatePersonasToEntities' {} a -> s {personas = a} :: AssociatePersonasToEntities) Prelude.. Lens.coerced
+
+instance Core.AWSRequest AssociatePersonasToEntities where
+  type
+    AWSResponse AssociatePersonasToEntities =
+      AssociatePersonasToEntitiesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          AssociatePersonasToEntitiesResponse'
+            Prelude.<$> (x Data..?> "FailedEntityList")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AssociatePersonasToEntities where
+  hashWithSalt _salt AssociatePersonasToEntities' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` indexId
+      `Prelude.hashWithSalt` personas
+
+instance Prelude.NFData AssociatePersonasToEntities where
+  rnf AssociatePersonasToEntities' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf indexId
+      `Prelude.seq` Prelude.rnf personas
+
+instance Data.ToHeaders AssociatePersonasToEntities where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.AssociatePersonasToEntities" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AssociatePersonasToEntities where
+  toJSON AssociatePersonasToEntities' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Id" Data..= id),
+            Prelude.Just ("IndexId" Data..= indexId),
+            Prelude.Just ("Personas" Data..= personas)
+          ]
+      )
+
+instance Data.ToPath AssociatePersonasToEntities where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AssociatePersonasToEntities where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociatePersonasToEntitiesResponse' smart constructor.
+data AssociatePersonasToEntitiesResponse = AssociatePersonasToEntitiesResponse'
+  { -- | Lists the users or groups in your IAM Identity Center identity source
+    -- that failed to properly configure with your Amazon Kendra experience.
+    failedEntityList :: Prelude.Maybe (Prelude.NonEmpty FailedEntity),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociatePersonasToEntitiesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failedEntityList', 'associatePersonasToEntitiesResponse_failedEntityList' - Lists the users or groups in your IAM Identity Center identity source
+-- that failed to properly configure with your Amazon Kendra experience.
+--
+-- 'httpStatus', 'associatePersonasToEntitiesResponse_httpStatus' - The response's http status code.
+newAssociatePersonasToEntitiesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociatePersonasToEntitiesResponse
+newAssociatePersonasToEntitiesResponse pHttpStatus_ =
+  AssociatePersonasToEntitiesResponse'
+    { failedEntityList =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Lists the users or groups in your IAM Identity Center identity source
+-- that failed to properly configure with your Amazon Kendra experience.
+associatePersonasToEntitiesResponse_failedEntityList :: Lens.Lens' AssociatePersonasToEntitiesResponse (Prelude.Maybe (Prelude.NonEmpty FailedEntity))
+associatePersonasToEntitiesResponse_failedEntityList = Lens.lens (\AssociatePersonasToEntitiesResponse' {failedEntityList} -> failedEntityList) (\s@AssociatePersonasToEntitiesResponse' {} a -> s {failedEntityList = a} :: AssociatePersonasToEntitiesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+associatePersonasToEntitiesResponse_httpStatus :: Lens.Lens' AssociatePersonasToEntitiesResponse Prelude.Int
+associatePersonasToEntitiesResponse_httpStatus = Lens.lens (\AssociatePersonasToEntitiesResponse' {httpStatus} -> httpStatus) (\s@AssociatePersonasToEntitiesResponse' {} a -> s {httpStatus = a} :: AssociatePersonasToEntitiesResponse)
+
+instance
+  Prelude.NFData
+    AssociatePersonasToEntitiesResponse
+  where
+  rnf AssociatePersonasToEntitiesResponse' {..} =
+    Prelude.rnf failedEntityList
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/BatchDeleteDocument.hs b/gen/Amazonka/Kendra/BatchDeleteDocument.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/BatchDeleteDocument.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.Kendra.BatchDeleteDocument
+-- 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 one or more documents from an index. The documents must have
+-- been added with the @BatchPutDocument@ API.
+--
+-- The documents are deleted asynchronously. You can see the progress of
+-- the deletion by using Amazon Web Services CloudWatch. Any error messages
+-- related to the processing of the batch are sent to you CloudWatch log.
+module Amazonka.Kendra.BatchDeleteDocument
+  ( -- * Creating a Request
+    BatchDeleteDocument (..),
+    newBatchDeleteDocument,
+
+    -- * Request Lenses
+    batchDeleteDocument_dataSourceSyncJobMetricTarget,
+    batchDeleteDocument_indexId,
+    batchDeleteDocument_documentIdList,
+
+    -- * Destructuring the Response
+    BatchDeleteDocumentResponse (..),
+    newBatchDeleteDocumentResponse,
+
+    -- * Response Lenses
+    batchDeleteDocumentResponse_failedDocuments,
+    batchDeleteDocumentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newBatchDeleteDocument' smart constructor.
+data BatchDeleteDocument = BatchDeleteDocument'
+  { dataSourceSyncJobMetricTarget :: Prelude.Maybe DataSourceSyncJobMetricTarget,
+    -- | The identifier of the index that contains the documents to delete.
+    indexId :: Prelude.Text,
+    -- | One or more identifiers for documents to delete from the index.
+    documentIdList :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchDeleteDocument' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSourceSyncJobMetricTarget', 'batchDeleteDocument_dataSourceSyncJobMetricTarget' - Undocumented member.
+--
+-- 'indexId', 'batchDeleteDocument_indexId' - The identifier of the index that contains the documents to delete.
+--
+-- 'documentIdList', 'batchDeleteDocument_documentIdList' - One or more identifiers for documents to delete from the index.
+newBatchDeleteDocument ::
+  -- | 'indexId'
+  Prelude.Text ->
+  -- | 'documentIdList'
+  Prelude.NonEmpty Prelude.Text ->
+  BatchDeleteDocument
+newBatchDeleteDocument pIndexId_ pDocumentIdList_ =
+  BatchDeleteDocument'
+    { dataSourceSyncJobMetricTarget =
+        Prelude.Nothing,
+      indexId = pIndexId_,
+      documentIdList =
+        Lens.coerced Lens.# pDocumentIdList_
+    }
+
+-- | Undocumented member.
+batchDeleteDocument_dataSourceSyncJobMetricTarget :: Lens.Lens' BatchDeleteDocument (Prelude.Maybe DataSourceSyncJobMetricTarget)
+batchDeleteDocument_dataSourceSyncJobMetricTarget = Lens.lens (\BatchDeleteDocument' {dataSourceSyncJobMetricTarget} -> dataSourceSyncJobMetricTarget) (\s@BatchDeleteDocument' {} a -> s {dataSourceSyncJobMetricTarget = a} :: BatchDeleteDocument)
+
+-- | The identifier of the index that contains the documents to delete.
+batchDeleteDocument_indexId :: Lens.Lens' BatchDeleteDocument Prelude.Text
+batchDeleteDocument_indexId = Lens.lens (\BatchDeleteDocument' {indexId} -> indexId) (\s@BatchDeleteDocument' {} a -> s {indexId = a} :: BatchDeleteDocument)
+
+-- | One or more identifiers for documents to delete from the index.
+batchDeleteDocument_documentIdList :: Lens.Lens' BatchDeleteDocument (Prelude.NonEmpty Prelude.Text)
+batchDeleteDocument_documentIdList = Lens.lens (\BatchDeleteDocument' {documentIdList} -> documentIdList) (\s@BatchDeleteDocument' {} a -> s {documentIdList = a} :: BatchDeleteDocument) Prelude.. Lens.coerced
+
+instance Core.AWSRequest BatchDeleteDocument where
+  type
+    AWSResponse BatchDeleteDocument =
+      BatchDeleteDocumentResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchDeleteDocumentResponse'
+            Prelude.<$> ( x
+                            Data..?> "FailedDocuments"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable BatchDeleteDocument where
+  hashWithSalt _salt BatchDeleteDocument' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataSourceSyncJobMetricTarget
+      `Prelude.hashWithSalt` indexId
+      `Prelude.hashWithSalt` documentIdList
+
+instance Prelude.NFData BatchDeleteDocument where
+  rnf BatchDeleteDocument' {..} =
+    Prelude.rnf dataSourceSyncJobMetricTarget
+      `Prelude.seq` Prelude.rnf indexId
+      `Prelude.seq` Prelude.rnf documentIdList
+
+instance Data.ToHeaders BatchDeleteDocument where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.BatchDeleteDocument" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BatchDeleteDocument where
+  toJSON BatchDeleteDocument' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DataSourceSyncJobMetricTarget" Data..=)
+              Prelude.<$> dataSourceSyncJobMetricTarget,
+            Prelude.Just ("IndexId" Data..= indexId),
+            Prelude.Just
+              ("DocumentIdList" Data..= documentIdList)
+          ]
+      )
+
+instance Data.ToPath BatchDeleteDocument where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery BatchDeleteDocument where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newBatchDeleteDocumentResponse' smart constructor.
+data BatchDeleteDocumentResponse = BatchDeleteDocumentResponse'
+  { -- | A list of documents that could not be removed from the index. Each entry
+    -- contains an error message that indicates why the document couldn\'t be
+    -- removed from the index.
+    failedDocuments :: Prelude.Maybe [BatchDeleteDocumentResponseFailedDocument],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchDeleteDocumentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failedDocuments', 'batchDeleteDocumentResponse_failedDocuments' - A list of documents that could not be removed from the index. Each entry
+-- contains an error message that indicates why the document couldn\'t be
+-- removed from the index.
+--
+-- 'httpStatus', 'batchDeleteDocumentResponse_httpStatus' - The response's http status code.
+newBatchDeleteDocumentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BatchDeleteDocumentResponse
+newBatchDeleteDocumentResponse pHttpStatus_ =
+  BatchDeleteDocumentResponse'
+    { failedDocuments =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of documents that could not be removed from the index. Each entry
+-- contains an error message that indicates why the document couldn\'t be
+-- removed from the index.
+batchDeleteDocumentResponse_failedDocuments :: Lens.Lens' BatchDeleteDocumentResponse (Prelude.Maybe [BatchDeleteDocumentResponseFailedDocument])
+batchDeleteDocumentResponse_failedDocuments = Lens.lens (\BatchDeleteDocumentResponse' {failedDocuments} -> failedDocuments) (\s@BatchDeleteDocumentResponse' {} a -> s {failedDocuments = a} :: BatchDeleteDocumentResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+batchDeleteDocumentResponse_httpStatus :: Lens.Lens' BatchDeleteDocumentResponse Prelude.Int
+batchDeleteDocumentResponse_httpStatus = Lens.lens (\BatchDeleteDocumentResponse' {httpStatus} -> httpStatus) (\s@BatchDeleteDocumentResponse' {} a -> s {httpStatus = a} :: BatchDeleteDocumentResponse)
+
+instance Prelude.NFData BatchDeleteDocumentResponse where
+  rnf BatchDeleteDocumentResponse' {..} =
+    Prelude.rnf failedDocuments
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/BatchGetDocumentStatus.hs b/gen/Amazonka/Kendra/BatchGetDocumentStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/BatchGetDocumentStatus.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.Kendra.BatchGetDocumentStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the indexing status for one or more documents submitted with the
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_BatchPutDocument.html BatchPutDocument>
+-- API.
+--
+-- When you use the @BatchPutDocument@ API, documents are indexed
+-- asynchronously. You can use the @BatchGetDocumentStatus@ API to get the
+-- current status of a list of documents so that you can determine if they
+-- have been successfully indexed.
+--
+-- You can also use the @BatchGetDocumentStatus@ API to check the status of
+-- the
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_BatchDeleteDocument.html BatchDeleteDocument>
+-- API. When a document is deleted from the index, Amazon Kendra returns
+-- @NOT_FOUND@ as the status.
+module Amazonka.Kendra.BatchGetDocumentStatus
+  ( -- * Creating a Request
+    BatchGetDocumentStatus (..),
+    newBatchGetDocumentStatus,
+
+    -- * Request Lenses
+    batchGetDocumentStatus_indexId,
+    batchGetDocumentStatus_documentInfoList,
+
+    -- * Destructuring the Response
+    BatchGetDocumentStatusResponse (..),
+    newBatchGetDocumentStatusResponse,
+
+    -- * Response Lenses
+    batchGetDocumentStatusResponse_documentStatusList,
+    batchGetDocumentStatusResponse_errors,
+    batchGetDocumentStatusResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newBatchGetDocumentStatus' smart constructor.
+data BatchGetDocumentStatus = BatchGetDocumentStatus'
+  { -- | The identifier of the index to add documents to. The index ID is
+    -- returned by the
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/API_CreateIndex.html CreateIndex>
+    -- API.
+    indexId :: Prelude.Text,
+    -- | A list of @DocumentInfo@ objects that identify the documents for which
+    -- to get the status. You identify the documents by their document ID and
+    -- optional attributes.
+    documentInfoList :: Prelude.NonEmpty DocumentInfo
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchGetDocumentStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'indexId', 'batchGetDocumentStatus_indexId' - The identifier of the index to add documents to. The index ID is
+-- returned by the
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_CreateIndex.html CreateIndex>
+-- API.
+--
+-- 'documentInfoList', 'batchGetDocumentStatus_documentInfoList' - A list of @DocumentInfo@ objects that identify the documents for which
+-- to get the status. You identify the documents by their document ID and
+-- optional attributes.
+newBatchGetDocumentStatus ::
+  -- | 'indexId'
+  Prelude.Text ->
+  -- | 'documentInfoList'
+  Prelude.NonEmpty DocumentInfo ->
+  BatchGetDocumentStatus
+newBatchGetDocumentStatus
+  pIndexId_
+  pDocumentInfoList_ =
+    BatchGetDocumentStatus'
+      { indexId = pIndexId_,
+        documentInfoList =
+          Lens.coerced Lens.# pDocumentInfoList_
+      }
+
+-- | The identifier of the index to add documents to. The index ID is
+-- returned by the
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_CreateIndex.html CreateIndex>
+-- API.
+batchGetDocumentStatus_indexId :: Lens.Lens' BatchGetDocumentStatus Prelude.Text
+batchGetDocumentStatus_indexId = Lens.lens (\BatchGetDocumentStatus' {indexId} -> indexId) (\s@BatchGetDocumentStatus' {} a -> s {indexId = a} :: BatchGetDocumentStatus)
+
+-- | A list of @DocumentInfo@ objects that identify the documents for which
+-- to get the status. You identify the documents by their document ID and
+-- optional attributes.
+batchGetDocumentStatus_documentInfoList :: Lens.Lens' BatchGetDocumentStatus (Prelude.NonEmpty DocumentInfo)
+batchGetDocumentStatus_documentInfoList = Lens.lens (\BatchGetDocumentStatus' {documentInfoList} -> documentInfoList) (\s@BatchGetDocumentStatus' {} a -> s {documentInfoList = a} :: BatchGetDocumentStatus) Prelude.. Lens.coerced
+
+instance Core.AWSRequest BatchGetDocumentStatus where
+  type
+    AWSResponse BatchGetDocumentStatus =
+      BatchGetDocumentStatusResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchGetDocumentStatusResponse'
+            Prelude.<$> ( x
+                            Data..?> "DocumentStatusList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "Errors" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable BatchGetDocumentStatus where
+  hashWithSalt _salt BatchGetDocumentStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` indexId
+      `Prelude.hashWithSalt` documentInfoList
+
+instance Prelude.NFData BatchGetDocumentStatus where
+  rnf BatchGetDocumentStatus' {..} =
+    Prelude.rnf indexId
+      `Prelude.seq` Prelude.rnf documentInfoList
+
+instance Data.ToHeaders BatchGetDocumentStatus where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.BatchGetDocumentStatus" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BatchGetDocumentStatus where
+  toJSON BatchGetDocumentStatus' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("IndexId" Data..= indexId),
+            Prelude.Just
+              ("DocumentInfoList" Data..= documentInfoList)
+          ]
+      )
+
+instance Data.ToPath BatchGetDocumentStatus where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery BatchGetDocumentStatus where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newBatchGetDocumentStatusResponse' smart constructor.
+data BatchGetDocumentStatusResponse = BatchGetDocumentStatusResponse'
+  { -- | The status of documents. The status indicates if the document is waiting
+    -- to be indexed, is in the process of indexing, has completed indexing, or
+    -- failed indexing. If a document failed indexing, the status provides the
+    -- reason why.
+    documentStatusList :: Prelude.Maybe [Status],
+    -- | A list of documents that Amazon Kendra couldn\'t get the status for. The
+    -- list includes the ID of the document and the reason that the status
+    -- couldn\'t be found.
+    errors :: Prelude.Maybe [BatchGetDocumentStatusResponseError],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchGetDocumentStatusResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'documentStatusList', 'batchGetDocumentStatusResponse_documentStatusList' - The status of documents. The status indicates if the document is waiting
+-- to be indexed, is in the process of indexing, has completed indexing, or
+-- failed indexing. If a document failed indexing, the status provides the
+-- reason why.
+--
+-- 'errors', 'batchGetDocumentStatusResponse_errors' - A list of documents that Amazon Kendra couldn\'t get the status for. The
+-- list includes the ID of the document and the reason that the status
+-- couldn\'t be found.
+--
+-- 'httpStatus', 'batchGetDocumentStatusResponse_httpStatus' - The response's http status code.
+newBatchGetDocumentStatusResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BatchGetDocumentStatusResponse
+newBatchGetDocumentStatusResponse pHttpStatus_ =
+  BatchGetDocumentStatusResponse'
+    { documentStatusList =
+        Prelude.Nothing,
+      errors = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The status of documents. The status indicates if the document is waiting
+-- to be indexed, is in the process of indexing, has completed indexing, or
+-- failed indexing. If a document failed indexing, the status provides the
+-- reason why.
+batchGetDocumentStatusResponse_documentStatusList :: Lens.Lens' BatchGetDocumentStatusResponse (Prelude.Maybe [Status])
+batchGetDocumentStatusResponse_documentStatusList = Lens.lens (\BatchGetDocumentStatusResponse' {documentStatusList} -> documentStatusList) (\s@BatchGetDocumentStatusResponse' {} a -> s {documentStatusList = a} :: BatchGetDocumentStatusResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of documents that Amazon Kendra couldn\'t get the status for. The
+-- list includes the ID of the document and the reason that the status
+-- couldn\'t be found.
+batchGetDocumentStatusResponse_errors :: Lens.Lens' BatchGetDocumentStatusResponse (Prelude.Maybe [BatchGetDocumentStatusResponseError])
+batchGetDocumentStatusResponse_errors = Lens.lens (\BatchGetDocumentStatusResponse' {errors} -> errors) (\s@BatchGetDocumentStatusResponse' {} a -> s {errors = a} :: BatchGetDocumentStatusResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+batchGetDocumentStatusResponse_httpStatus :: Lens.Lens' BatchGetDocumentStatusResponse Prelude.Int
+batchGetDocumentStatusResponse_httpStatus = Lens.lens (\BatchGetDocumentStatusResponse' {httpStatus} -> httpStatus) (\s@BatchGetDocumentStatusResponse' {} a -> s {httpStatus = a} :: BatchGetDocumentStatusResponse)
+
+instance
+  Prelude.NFData
+    BatchGetDocumentStatusResponse
+  where
+  rnf BatchGetDocumentStatusResponse' {..} =
+    Prelude.rnf documentStatusList
+      `Prelude.seq` Prelude.rnf errors
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/BatchPutDocument.hs b/gen/Amazonka/Kendra/BatchPutDocument.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/BatchPutDocument.hs
@@ -0,0 +1,318 @@
+{-# 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.Kendra.BatchPutDocument
+-- 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 one or more documents to an index.
+--
+-- The @BatchPutDocument@ API enables you to ingest inline documents or a
+-- set of documents stored in an Amazon S3 bucket. Use this API to ingest
+-- your text and unstructured text into an index, add custom attributes to
+-- the documents, and to attach an access control list to the documents
+-- added to the index.
+--
+-- The documents are indexed asynchronously. You can see the progress of
+-- the batch using Amazon Web Services CloudWatch. Any error messages
+-- related to processing the batch are sent to your Amazon Web Services
+-- CloudWatch log.
+--
+-- For an example of ingesting inline documents using Python and Java SDKs,
+-- see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/in-adding-binary-doc.html Adding files directly to an index>.
+module Amazonka.Kendra.BatchPutDocument
+  ( -- * Creating a Request
+    BatchPutDocument (..),
+    newBatchPutDocument,
+
+    -- * Request Lenses
+    batchPutDocument_customDocumentEnrichmentConfiguration,
+    batchPutDocument_roleArn,
+    batchPutDocument_indexId,
+    batchPutDocument_documents,
+
+    -- * Destructuring the Response
+    BatchPutDocumentResponse (..),
+    newBatchPutDocumentResponse,
+
+    -- * Response Lenses
+    batchPutDocumentResponse_failedDocuments,
+    batchPutDocumentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newBatchPutDocument' smart constructor.
+data BatchPutDocument = BatchPutDocument'
+  { -- | Configuration information for altering your document metadata and
+    -- content during the document ingestion process when you use the
+    -- @BatchPutDocument@ API.
+    --
+    -- For more information on how to create, modify and delete document
+    -- metadata, or make other content alterations when you ingest documents
+    -- into Amazon Kendra, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/custom-document-enrichment.html Customizing document metadata during the ingestion process>.
+    customDocumentEnrichmentConfiguration :: Prelude.Maybe CustomDocumentEnrichmentConfiguration,
+    -- | The Amazon Resource Name (ARN) of a role that is allowed to run the
+    -- @BatchPutDocument@ API. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html IAM Roles for Amazon Kendra>.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the index to add the documents to. You need to create
+    -- the index first using the @CreateIndex@ API.
+    indexId :: Prelude.Text,
+    -- | One or more documents to add to the index.
+    --
+    -- Documents have the following file size limits.
+    --
+    -- -   5 MB total size for inline documents
+    --
+    -- -   50 MB total size for files from an S3 bucket
+    --
+    -- -   5 MB extracted text for any file
+    --
+    -- For more information about file size and transaction per second quotas,
+    -- see <https://docs.aws.amazon.com/kendra/latest/dg/quotas.html Quotas>.
+    documents :: Prelude.NonEmpty Document
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchPutDocument' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'customDocumentEnrichmentConfiguration', 'batchPutDocument_customDocumentEnrichmentConfiguration' - Configuration information for altering your document metadata and
+-- content during the document ingestion process when you use the
+-- @BatchPutDocument@ API.
+--
+-- For more information on how to create, modify and delete document
+-- metadata, or make other content alterations when you ingest documents
+-- into Amazon Kendra, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/custom-document-enrichment.html Customizing document metadata during the ingestion process>.
+--
+-- 'roleArn', 'batchPutDocument_roleArn' - The Amazon Resource Name (ARN) of a role that is allowed to run the
+-- @BatchPutDocument@ API. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html IAM Roles for Amazon Kendra>.
+--
+-- 'indexId', 'batchPutDocument_indexId' - The identifier of the index to add the documents to. You need to create
+-- the index first using the @CreateIndex@ API.
+--
+-- 'documents', 'batchPutDocument_documents' - One or more documents to add to the index.
+--
+-- Documents have the following file size limits.
+--
+-- -   5 MB total size for inline documents
+--
+-- -   50 MB total size for files from an S3 bucket
+--
+-- -   5 MB extracted text for any file
+--
+-- For more information about file size and transaction per second quotas,
+-- see <https://docs.aws.amazon.com/kendra/latest/dg/quotas.html Quotas>.
+newBatchPutDocument ::
+  -- | 'indexId'
+  Prelude.Text ->
+  -- | 'documents'
+  Prelude.NonEmpty Document ->
+  BatchPutDocument
+newBatchPutDocument pIndexId_ pDocuments_ =
+  BatchPutDocument'
+    { customDocumentEnrichmentConfiguration =
+        Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      indexId = pIndexId_,
+      documents = Lens.coerced Lens.# pDocuments_
+    }
+
+-- | Configuration information for altering your document metadata and
+-- content during the document ingestion process when you use the
+-- @BatchPutDocument@ API.
+--
+-- For more information on how to create, modify and delete document
+-- metadata, or make other content alterations when you ingest documents
+-- into Amazon Kendra, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/custom-document-enrichment.html Customizing document metadata during the ingestion process>.
+batchPutDocument_customDocumentEnrichmentConfiguration :: Lens.Lens' BatchPutDocument (Prelude.Maybe CustomDocumentEnrichmentConfiguration)
+batchPutDocument_customDocumentEnrichmentConfiguration = Lens.lens (\BatchPutDocument' {customDocumentEnrichmentConfiguration} -> customDocumentEnrichmentConfiguration) (\s@BatchPutDocument' {} a -> s {customDocumentEnrichmentConfiguration = a} :: BatchPutDocument)
+
+-- | The Amazon Resource Name (ARN) of a role that is allowed to run the
+-- @BatchPutDocument@ API. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html IAM Roles for Amazon Kendra>.
+batchPutDocument_roleArn :: Lens.Lens' BatchPutDocument (Prelude.Maybe Prelude.Text)
+batchPutDocument_roleArn = Lens.lens (\BatchPutDocument' {roleArn} -> roleArn) (\s@BatchPutDocument' {} a -> s {roleArn = a} :: BatchPutDocument)
+
+-- | The identifier of the index to add the documents to. You need to create
+-- the index first using the @CreateIndex@ API.
+batchPutDocument_indexId :: Lens.Lens' BatchPutDocument Prelude.Text
+batchPutDocument_indexId = Lens.lens (\BatchPutDocument' {indexId} -> indexId) (\s@BatchPutDocument' {} a -> s {indexId = a} :: BatchPutDocument)
+
+-- | One or more documents to add to the index.
+--
+-- Documents have the following file size limits.
+--
+-- -   5 MB total size for inline documents
+--
+-- -   50 MB total size for files from an S3 bucket
+--
+-- -   5 MB extracted text for any file
+--
+-- For more information about file size and transaction per second quotas,
+-- see <https://docs.aws.amazon.com/kendra/latest/dg/quotas.html Quotas>.
+batchPutDocument_documents :: Lens.Lens' BatchPutDocument (Prelude.NonEmpty Document)
+batchPutDocument_documents = Lens.lens (\BatchPutDocument' {documents} -> documents) (\s@BatchPutDocument' {} a -> s {documents = a} :: BatchPutDocument) Prelude.. Lens.coerced
+
+instance Core.AWSRequest BatchPutDocument where
+  type
+    AWSResponse BatchPutDocument =
+      BatchPutDocumentResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchPutDocumentResponse'
+            Prelude.<$> ( x
+                            Data..?> "FailedDocuments"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable BatchPutDocument where
+  hashWithSalt _salt BatchPutDocument' {..} =
+    _salt
+      `Prelude.hashWithSalt` customDocumentEnrichmentConfiguration
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` indexId
+      `Prelude.hashWithSalt` documents
+
+instance Prelude.NFData BatchPutDocument where
+  rnf BatchPutDocument' {..} =
+    Prelude.rnf customDocumentEnrichmentConfiguration
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf indexId
+      `Prelude.seq` Prelude.rnf documents
+
+instance Data.ToHeaders BatchPutDocument where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.BatchPutDocument" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BatchPutDocument where
+  toJSON BatchPutDocument' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CustomDocumentEnrichmentConfiguration" Data..=)
+              Prelude.<$> customDocumentEnrichmentConfiguration,
+            ("RoleArn" Data..=) Prelude.<$> roleArn,
+            Prelude.Just ("IndexId" Data..= indexId),
+            Prelude.Just ("Documents" Data..= documents)
+          ]
+      )
+
+instance Data.ToPath BatchPutDocument where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery BatchPutDocument where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newBatchPutDocumentResponse' smart constructor.
+data BatchPutDocumentResponse = BatchPutDocumentResponse'
+  { -- | A list of documents that were not added to the index because the
+    -- document failed a validation check. Each document contains an error
+    -- message that indicates why the document couldn\'t be added to the index.
+    --
+    -- If there was an error adding a document to an index the error is
+    -- reported in your Amazon Web Services CloudWatch log. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/cloudwatch-logs.html Monitoring Amazon Kendra with Amazon CloudWatch Logs>
+    failedDocuments :: Prelude.Maybe [BatchPutDocumentResponseFailedDocument],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchPutDocumentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failedDocuments', 'batchPutDocumentResponse_failedDocuments' - A list of documents that were not added to the index because the
+-- document failed a validation check. Each document contains an error
+-- message that indicates why the document couldn\'t be added to the index.
+--
+-- If there was an error adding a document to an index the error is
+-- reported in your Amazon Web Services CloudWatch log. For more
+-- information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/cloudwatch-logs.html Monitoring Amazon Kendra with Amazon CloudWatch Logs>
+--
+-- 'httpStatus', 'batchPutDocumentResponse_httpStatus' - The response's http status code.
+newBatchPutDocumentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BatchPutDocumentResponse
+newBatchPutDocumentResponse pHttpStatus_ =
+  BatchPutDocumentResponse'
+    { failedDocuments =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of documents that were not added to the index because the
+-- document failed a validation check. Each document contains an error
+-- message that indicates why the document couldn\'t be added to the index.
+--
+-- If there was an error adding a document to an index the error is
+-- reported in your Amazon Web Services CloudWatch log. For more
+-- information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/cloudwatch-logs.html Monitoring Amazon Kendra with Amazon CloudWatch Logs>
+batchPutDocumentResponse_failedDocuments :: Lens.Lens' BatchPutDocumentResponse (Prelude.Maybe [BatchPutDocumentResponseFailedDocument])
+batchPutDocumentResponse_failedDocuments = Lens.lens (\BatchPutDocumentResponse' {failedDocuments} -> failedDocuments) (\s@BatchPutDocumentResponse' {} a -> s {failedDocuments = a} :: BatchPutDocumentResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+batchPutDocumentResponse_httpStatus :: Lens.Lens' BatchPutDocumentResponse Prelude.Int
+batchPutDocumentResponse_httpStatus = Lens.lens (\BatchPutDocumentResponse' {httpStatus} -> httpStatus) (\s@BatchPutDocumentResponse' {} a -> s {httpStatus = a} :: BatchPutDocumentResponse)
+
+instance Prelude.NFData BatchPutDocumentResponse where
+  rnf BatchPutDocumentResponse' {..} =
+    Prelude.rnf failedDocuments
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/ClearQuerySuggestions.hs b/gen/Amazonka/Kendra/ClearQuerySuggestions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/ClearQuerySuggestions.hs
@@ -0,0 +1,142 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.ClearQuerySuggestions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Clears existing query suggestions from an index.
+--
+-- This deletes existing suggestions only, not the queries in the query
+-- log. After you clear suggestions, Amazon Kendra learns new suggestions
+-- based on new queries added to the query log from the time you cleared
+-- suggestions. If you do not see any new suggestions, then please allow
+-- Amazon Kendra to collect enough queries to learn new suggestions.
+--
+-- @ClearQuerySuggestions@ is currently not supported in the Amazon Web
+-- Services GovCloud (US-West) region.
+module Amazonka.Kendra.ClearQuerySuggestions
+  ( -- * Creating a Request
+    ClearQuerySuggestions (..),
+    newClearQuerySuggestions,
+
+    -- * Request Lenses
+    clearQuerySuggestions_indexId,
+
+    -- * Destructuring the Response
+    ClearQuerySuggestionsResponse (..),
+    newClearQuerySuggestionsResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newClearQuerySuggestions' smart constructor.
+data ClearQuerySuggestions = ClearQuerySuggestions'
+  { -- | The identifier of the index you want to clear query suggestions from.
+    indexId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClearQuerySuggestions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'indexId', 'clearQuerySuggestions_indexId' - The identifier of the index you want to clear query suggestions from.
+newClearQuerySuggestions ::
+  -- | 'indexId'
+  Prelude.Text ->
+  ClearQuerySuggestions
+newClearQuerySuggestions pIndexId_ =
+  ClearQuerySuggestions' {indexId = pIndexId_}
+
+-- | The identifier of the index you want to clear query suggestions from.
+clearQuerySuggestions_indexId :: Lens.Lens' ClearQuerySuggestions Prelude.Text
+clearQuerySuggestions_indexId = Lens.lens (\ClearQuerySuggestions' {indexId} -> indexId) (\s@ClearQuerySuggestions' {} a -> s {indexId = a} :: ClearQuerySuggestions)
+
+instance Core.AWSRequest ClearQuerySuggestions where
+  type
+    AWSResponse ClearQuerySuggestions =
+      ClearQuerySuggestionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull ClearQuerySuggestionsResponse'
+
+instance Prelude.Hashable ClearQuerySuggestions where
+  hashWithSalt _salt ClearQuerySuggestions' {..} =
+    _salt `Prelude.hashWithSalt` indexId
+
+instance Prelude.NFData ClearQuerySuggestions where
+  rnf ClearQuerySuggestions' {..} = Prelude.rnf indexId
+
+instance Data.ToHeaders ClearQuerySuggestions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.ClearQuerySuggestions" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ClearQuerySuggestions where
+  toJSON ClearQuerySuggestions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("IndexId" Data..= indexId)]
+      )
+
+instance Data.ToPath ClearQuerySuggestions where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ClearQuerySuggestions where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newClearQuerySuggestionsResponse' smart constructor.
+data ClearQuerySuggestionsResponse = ClearQuerySuggestionsResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClearQuerySuggestionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newClearQuerySuggestionsResponse ::
+  ClearQuerySuggestionsResponse
+newClearQuerySuggestionsResponse =
+  ClearQuerySuggestionsResponse'
+
+instance Prelude.NFData ClearQuerySuggestionsResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Kendra/CreateAccessControlConfiguration.hs b/gen/Amazonka/Kendra/CreateAccessControlConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/CreateAccessControlConfiguration.hs
@@ -0,0 +1,327 @@
+{-# 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.Kendra.CreateAccessControlConfiguration
+-- 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 access configuration for your documents. This includes user
+-- and group access information for your documents. This is useful for user
+-- context filtering, where search results are filtered based on the user
+-- or their group access to documents.
+--
+-- You can use this to re-configure your existing document level access
+-- control without indexing all of your documents again. For example, your
+-- index contains top-secret company documents that only certain employees
+-- or users should access. One of these users leaves the company or
+-- switches to a team that should be blocked from accessing top-secret
+-- documents. The user still has access to top-secret documents because the
+-- user had access when your documents were previously indexed. You can
+-- create a specific access control configuration for the user with deny
+-- access. You can later update the access control configuration to allow
+-- access if the user returns to the company and re-joins the
+-- \'top-secret\' team. You can re-configure access control for your
+-- documents as circumstances change.
+--
+-- To apply your access control configuration to certain documents, you
+-- call the
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_BatchPutDocument.html BatchPutDocument>
+-- API with the @AccessControlConfigurationId@ included in the
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_Document.html Document>
+-- object. If you use an S3 bucket as a data source, you update the
+-- @.metadata.json@ with the @AccessControlConfigurationId@ and synchronize
+-- your data source. Amazon Kendra currently only supports access control
+-- configuration for S3 data sources and documents indexed using the
+-- @BatchPutDocument@ API.
+module Amazonka.Kendra.CreateAccessControlConfiguration
+  ( -- * Creating a Request
+    CreateAccessControlConfiguration (..),
+    newCreateAccessControlConfiguration,
+
+    -- * Request Lenses
+    createAccessControlConfiguration_accessControlList,
+    createAccessControlConfiguration_clientToken,
+    createAccessControlConfiguration_description,
+    createAccessControlConfiguration_hierarchicalAccessControlList,
+    createAccessControlConfiguration_indexId,
+    createAccessControlConfiguration_name,
+
+    -- * Destructuring the Response
+    CreateAccessControlConfigurationResponse (..),
+    newCreateAccessControlConfigurationResponse,
+
+    -- * Response Lenses
+    createAccessControlConfigurationResponse_httpStatus,
+    createAccessControlConfigurationResponse_id,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateAccessControlConfiguration' smart constructor.
+data CreateAccessControlConfiguration = CreateAccessControlConfiguration'
+  { -- | Information on principals (users and\/or groups) and which documents
+    -- they should have access to. This is useful for user context filtering,
+    -- where search results are filtered based on the user or their group
+    -- access to documents.
+    accessControlList :: Prelude.Maybe [Principal],
+    -- | A token that you provide to identify the request to create an access
+    -- control configuration. Multiple calls to the
+    -- @CreateAccessControlConfiguration@ API with the same client token will
+    -- create only one access control configuration.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description for the access control configuration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The list of
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/API_Principal.html principal>
+    -- lists that define the hierarchy for which documents users should have
+    -- access to.
+    hierarchicalAccessControlList :: Prelude.Maybe (Prelude.NonEmpty HierarchicalPrincipal),
+    -- | The identifier of the index to create an access control configuration
+    -- for your documents.
+    indexId :: Prelude.Text,
+    -- | A name for the access control configuration.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAccessControlConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessControlList', 'createAccessControlConfiguration_accessControlList' - Information on principals (users and\/or groups) and which documents
+-- they should have access to. This is useful for user context filtering,
+-- where search results are filtered based on the user or their group
+-- access to documents.
+--
+-- 'clientToken', 'createAccessControlConfiguration_clientToken' - A token that you provide to identify the request to create an access
+-- control configuration. Multiple calls to the
+-- @CreateAccessControlConfiguration@ API with the same client token will
+-- create only one access control configuration.
+--
+-- 'description', 'createAccessControlConfiguration_description' - A description for the access control configuration.
+--
+-- 'hierarchicalAccessControlList', 'createAccessControlConfiguration_hierarchicalAccessControlList' - The list of
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_Principal.html principal>
+-- lists that define the hierarchy for which documents users should have
+-- access to.
+--
+-- 'indexId', 'createAccessControlConfiguration_indexId' - The identifier of the index to create an access control configuration
+-- for your documents.
+--
+-- 'name', 'createAccessControlConfiguration_name' - A name for the access control configuration.
+newCreateAccessControlConfiguration ::
+  -- | 'indexId'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateAccessControlConfiguration
+newCreateAccessControlConfiguration pIndexId_ pName_ =
+  CreateAccessControlConfiguration'
+    { accessControlList =
+        Prelude.Nothing,
+      clientToken = Prelude.Nothing,
+      description = Prelude.Nothing,
+      hierarchicalAccessControlList =
+        Prelude.Nothing,
+      indexId = pIndexId_,
+      name = pName_
+    }
+
+-- | Information on principals (users and\/or groups) and which documents
+-- they should have access to. This is useful for user context filtering,
+-- where search results are filtered based on the user or their group
+-- access to documents.
+createAccessControlConfiguration_accessControlList :: Lens.Lens' CreateAccessControlConfiguration (Prelude.Maybe [Principal])
+createAccessControlConfiguration_accessControlList = Lens.lens (\CreateAccessControlConfiguration' {accessControlList} -> accessControlList) (\s@CreateAccessControlConfiguration' {} a -> s {accessControlList = a} :: CreateAccessControlConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A token that you provide to identify the request to create an access
+-- control configuration. Multiple calls to the
+-- @CreateAccessControlConfiguration@ API with the same client token will
+-- create only one access control configuration.
+createAccessControlConfiguration_clientToken :: Lens.Lens' CreateAccessControlConfiguration (Prelude.Maybe Prelude.Text)
+createAccessControlConfiguration_clientToken = Lens.lens (\CreateAccessControlConfiguration' {clientToken} -> clientToken) (\s@CreateAccessControlConfiguration' {} a -> s {clientToken = a} :: CreateAccessControlConfiguration)
+
+-- | A description for the access control configuration.
+createAccessControlConfiguration_description :: Lens.Lens' CreateAccessControlConfiguration (Prelude.Maybe Prelude.Text)
+createAccessControlConfiguration_description = Lens.lens (\CreateAccessControlConfiguration' {description} -> description) (\s@CreateAccessControlConfiguration' {} a -> s {description = a} :: CreateAccessControlConfiguration)
+
+-- | The list of
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_Principal.html principal>
+-- lists that define the hierarchy for which documents users should have
+-- access to.
+createAccessControlConfiguration_hierarchicalAccessControlList :: Lens.Lens' CreateAccessControlConfiguration (Prelude.Maybe (Prelude.NonEmpty HierarchicalPrincipal))
+createAccessControlConfiguration_hierarchicalAccessControlList = Lens.lens (\CreateAccessControlConfiguration' {hierarchicalAccessControlList} -> hierarchicalAccessControlList) (\s@CreateAccessControlConfiguration' {} a -> s {hierarchicalAccessControlList = a} :: CreateAccessControlConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The identifier of the index to create an access control configuration
+-- for your documents.
+createAccessControlConfiguration_indexId :: Lens.Lens' CreateAccessControlConfiguration Prelude.Text
+createAccessControlConfiguration_indexId = Lens.lens (\CreateAccessControlConfiguration' {indexId} -> indexId) (\s@CreateAccessControlConfiguration' {} a -> s {indexId = a} :: CreateAccessControlConfiguration)
+
+-- | A name for the access control configuration.
+createAccessControlConfiguration_name :: Lens.Lens' CreateAccessControlConfiguration Prelude.Text
+createAccessControlConfiguration_name = Lens.lens (\CreateAccessControlConfiguration' {name} -> name) (\s@CreateAccessControlConfiguration' {} a -> s {name = a} :: CreateAccessControlConfiguration)
+
+instance
+  Core.AWSRequest
+    CreateAccessControlConfiguration
+  where
+  type
+    AWSResponse CreateAccessControlConfiguration =
+      CreateAccessControlConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateAccessControlConfigurationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Id")
+      )
+
+instance
+  Prelude.Hashable
+    CreateAccessControlConfiguration
+  where
+  hashWithSalt
+    _salt
+    CreateAccessControlConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` accessControlList
+        `Prelude.hashWithSalt` clientToken
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` hierarchicalAccessControlList
+        `Prelude.hashWithSalt` indexId
+        `Prelude.hashWithSalt` name
+
+instance
+  Prelude.NFData
+    CreateAccessControlConfiguration
+  where
+  rnf CreateAccessControlConfiguration' {..} =
+    Prelude.rnf accessControlList
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf hierarchicalAccessControlList
+      `Prelude.seq` Prelude.rnf indexId
+      `Prelude.seq` Prelude.rnf name
+
+instance
+  Data.ToHeaders
+    CreateAccessControlConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.CreateAccessControlConfiguration" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateAccessControlConfiguration where
+  toJSON CreateAccessControlConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AccessControlList" Data..=)
+              Prelude.<$> accessControlList,
+            ("ClientToken" Data..=) Prelude.<$> clientToken,
+            ("Description" Data..=) Prelude.<$> description,
+            ("HierarchicalAccessControlList" Data..=)
+              Prelude.<$> hierarchicalAccessControlList,
+            Prelude.Just ("IndexId" Data..= indexId),
+            Prelude.Just ("Name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateAccessControlConfiguration where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    CreateAccessControlConfiguration
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateAccessControlConfigurationResponse' smart constructor.
+data CreateAccessControlConfigurationResponse = CreateAccessControlConfigurationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The identifier of the access control configuration for your documents in
+    -- an index.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAccessControlConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createAccessControlConfigurationResponse_httpStatus' - The response's http status code.
+--
+-- 'id', 'createAccessControlConfigurationResponse_id' - The identifier of the access control configuration for your documents in
+-- an index.
+newCreateAccessControlConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'id'
+  Prelude.Text ->
+  CreateAccessControlConfigurationResponse
+newCreateAccessControlConfigurationResponse
+  pHttpStatus_
+  pId_ =
+    CreateAccessControlConfigurationResponse'
+      { httpStatus =
+          pHttpStatus_,
+        id = pId_
+      }
+
+-- | The response's http status code.
+createAccessControlConfigurationResponse_httpStatus :: Lens.Lens' CreateAccessControlConfigurationResponse Prelude.Int
+createAccessControlConfigurationResponse_httpStatus = Lens.lens (\CreateAccessControlConfigurationResponse' {httpStatus} -> httpStatus) (\s@CreateAccessControlConfigurationResponse' {} a -> s {httpStatus = a} :: CreateAccessControlConfigurationResponse)
+
+-- | The identifier of the access control configuration for your documents in
+-- an index.
+createAccessControlConfigurationResponse_id :: Lens.Lens' CreateAccessControlConfigurationResponse Prelude.Text
+createAccessControlConfigurationResponse_id = Lens.lens (\CreateAccessControlConfigurationResponse' {id} -> id) (\s@CreateAccessControlConfigurationResponse' {} a -> s {id = a} :: CreateAccessControlConfigurationResponse)
+
+instance
+  Prelude.NFData
+    CreateAccessControlConfigurationResponse
+  where
+  rnf CreateAccessControlConfigurationResponse' {..} =
+    Prelude.rnf httpStatus `Prelude.seq` Prelude.rnf id
diff --git a/gen/Amazonka/Kendra/CreateDataSource.hs b/gen/Amazonka/Kendra/CreateDataSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/CreateDataSource.hs
@@ -0,0 +1,459 @@
+{-# 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.Kendra.CreateDataSource
+-- 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 data source connector that you want to use with an Amazon
+-- Kendra index.
+--
+-- You specify a name, data source connector type and description for your
+-- data source. You also specify configuration information for the data
+-- source connector.
+--
+-- @CreateDataSource@ is a synchronous operation. The operation returns 200
+-- if the data source was successfully created. Otherwise, an exception is
+-- raised.
+--
+-- Amazon S3 and
+-- <https://docs.aws.amazon.com/kendra/latest/dg/data-source-custom.html custom>
+-- data sources are the only supported data sources in the Amazon Web
+-- Services GovCloud (US-West) region.
+--
+-- For an example of creating an index and data source using the Python
+-- SDK, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/gs-python.html Getting started with Python SDK>.
+-- For an example of creating an index and data source using the Java SDK,
+-- see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/gs-java.html Getting started with Java SDK>.
+module Amazonka.Kendra.CreateDataSource
+  ( -- * Creating a Request
+    CreateDataSource (..),
+    newCreateDataSource,
+
+    -- * Request Lenses
+    createDataSource_clientToken,
+    createDataSource_configuration,
+    createDataSource_customDocumentEnrichmentConfiguration,
+    createDataSource_description,
+    createDataSource_languageCode,
+    createDataSource_roleArn,
+    createDataSource_schedule,
+    createDataSource_tags,
+    createDataSource_vpcConfiguration,
+    createDataSource_name,
+    createDataSource_indexId,
+    createDataSource_type,
+
+    -- * Destructuring the Response
+    CreateDataSourceResponse (..),
+    newCreateDataSourceResponse,
+
+    -- * Response Lenses
+    createDataSourceResponse_httpStatus,
+    createDataSourceResponse_id,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateDataSource' smart constructor.
+data CreateDataSource = CreateDataSource'
+  { -- | A token that you provide to identify the request to create a data source
+    -- connector. Multiple calls to the @CreateDataSource@ API with the same
+    -- client token will create only one data source connector.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Configuration information to connect to your data source repository.
+    --
+    -- You can\'t specify the @Configuration@ parameter when the @Type@
+    -- parameter is set to @CUSTOM@. If you do, you receive a
+    -- @ValidationException@ exception.
+    --
+    -- The @Configuration@ parameter is required for all other data sources.
+    configuration :: Prelude.Maybe DataSourceConfiguration,
+    -- | Configuration information for altering document metadata and content
+    -- during the document ingestion process.
+    --
+    -- For more information on how to create, modify and delete document
+    -- metadata, or make other content alterations when you ingest documents
+    -- into Amazon Kendra, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/custom-document-enrichment.html Customizing document metadata during the ingestion process>.
+    customDocumentEnrichmentConfiguration :: Prelude.Maybe CustomDocumentEnrichmentConfiguration,
+    -- | A description for the data source connector.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The code for a language. This allows you to support a language for all
+    -- documents when creating the data source connector. English is supported
+    -- by default. For more information on supported languages, including their
+    -- codes, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/in-adding-languages.html Adding documents in languages other than English>.
+    languageCode :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of a role with permission to access the
+    -- data source and required resources. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html IAM roles for Amazon Kendra>.
+    --
+    -- You can\'t specify the @RoleArn@ parameter when the @Type@ parameter is
+    -- set to @CUSTOM@. If you do, you receive a @ValidationException@
+    -- exception.
+    --
+    -- The @RoleArn@ parameter is required for all other data sources.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | Sets the frequency for Amazon Kendra to check the documents in your data
+    -- source repository and update the index. If you don\'t set a schedule
+    -- Amazon Kendra will not periodically update the index. You can call the
+    -- @StartDataSourceSyncJob@ API to update the index.
+    --
+    -- You can\'t specify the @Schedule@ parameter when the @Type@ parameter is
+    -- set to @CUSTOM@. If you do, you receive a @ValidationException@
+    -- exception.
+    schedule :: Prelude.Maybe Prelude.Text,
+    -- | A list of key-value pairs that identify the data source connector. You
+    -- can use the tags to identify and organize your resources and to control
+    -- access to resources.
+    tags :: Prelude.Maybe [Tag],
+    -- | Configuration information for an Amazon Virtual Private Cloud to connect
+    -- to your data source. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+    vpcConfiguration :: Prelude.Maybe DataSourceVpcConfiguration,
+    -- | A name for the data source connector.
+    name :: Prelude.Text,
+    -- | The identifier of the index you want to use with the data source
+    -- connector.
+    indexId :: Prelude.Text,
+    -- | The type of data source repository. For example, @SHAREPOINT@.
+    type' :: DataSourceType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDataSource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createDataSource_clientToken' - A token that you provide to identify the request to create a data source
+-- connector. Multiple calls to the @CreateDataSource@ API with the same
+-- client token will create only one data source connector.
+--
+-- 'configuration', 'createDataSource_configuration' - Configuration information to connect to your data source repository.
+--
+-- You can\'t specify the @Configuration@ parameter when the @Type@
+-- parameter is set to @CUSTOM@. If you do, you receive a
+-- @ValidationException@ exception.
+--
+-- The @Configuration@ parameter is required for all other data sources.
+--
+-- 'customDocumentEnrichmentConfiguration', 'createDataSource_customDocumentEnrichmentConfiguration' - Configuration information for altering document metadata and content
+-- during the document ingestion process.
+--
+-- For more information on how to create, modify and delete document
+-- metadata, or make other content alterations when you ingest documents
+-- into Amazon Kendra, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/custom-document-enrichment.html Customizing document metadata during the ingestion process>.
+--
+-- 'description', 'createDataSource_description' - A description for the data source connector.
+--
+-- 'languageCode', 'createDataSource_languageCode' - The code for a language. This allows you to support a language for all
+-- documents when creating the data source connector. English is supported
+-- by default. For more information on supported languages, including their
+-- codes, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/in-adding-languages.html Adding documents in languages other than English>.
+--
+-- 'roleArn', 'createDataSource_roleArn' - The Amazon Resource Name (ARN) of a role with permission to access the
+-- data source and required resources. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html IAM roles for Amazon Kendra>.
+--
+-- You can\'t specify the @RoleArn@ parameter when the @Type@ parameter is
+-- set to @CUSTOM@. If you do, you receive a @ValidationException@
+-- exception.
+--
+-- The @RoleArn@ parameter is required for all other data sources.
+--
+-- 'schedule', 'createDataSource_schedule' - Sets the frequency for Amazon Kendra to check the documents in your data
+-- source repository and update the index. If you don\'t set a schedule
+-- Amazon Kendra will not periodically update the index. You can call the
+-- @StartDataSourceSyncJob@ API to update the index.
+--
+-- You can\'t specify the @Schedule@ parameter when the @Type@ parameter is
+-- set to @CUSTOM@. If you do, you receive a @ValidationException@
+-- exception.
+--
+-- 'tags', 'createDataSource_tags' - A list of key-value pairs that identify the data source connector. You
+-- can use the tags to identify and organize your resources and to control
+-- access to resources.
+--
+-- 'vpcConfiguration', 'createDataSource_vpcConfiguration' - Configuration information for an Amazon Virtual Private Cloud to connect
+-- to your data source. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+--
+-- 'name', 'createDataSource_name' - A name for the data source connector.
+--
+-- 'indexId', 'createDataSource_indexId' - The identifier of the index you want to use with the data source
+-- connector.
+--
+-- 'type'', 'createDataSource_type' - The type of data source repository. For example, @SHAREPOINT@.
+newCreateDataSource ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'indexId'
+  Prelude.Text ->
+  -- | 'type''
+  DataSourceType ->
+  CreateDataSource
+newCreateDataSource pName_ pIndexId_ pType_ =
+  CreateDataSource'
+    { clientToken = Prelude.Nothing,
+      configuration = Prelude.Nothing,
+      customDocumentEnrichmentConfiguration =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      languageCode = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      schedule = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vpcConfiguration = Prelude.Nothing,
+      name = pName_,
+      indexId = pIndexId_,
+      type' = pType_
+    }
+
+-- | A token that you provide to identify the request to create a data source
+-- connector. Multiple calls to the @CreateDataSource@ API with the same
+-- client token will create only one data source connector.
+createDataSource_clientToken :: Lens.Lens' CreateDataSource (Prelude.Maybe Prelude.Text)
+createDataSource_clientToken = Lens.lens (\CreateDataSource' {clientToken} -> clientToken) (\s@CreateDataSource' {} a -> s {clientToken = a} :: CreateDataSource)
+
+-- | Configuration information to connect to your data source repository.
+--
+-- You can\'t specify the @Configuration@ parameter when the @Type@
+-- parameter is set to @CUSTOM@. If you do, you receive a
+-- @ValidationException@ exception.
+--
+-- The @Configuration@ parameter is required for all other data sources.
+createDataSource_configuration :: Lens.Lens' CreateDataSource (Prelude.Maybe DataSourceConfiguration)
+createDataSource_configuration = Lens.lens (\CreateDataSource' {configuration} -> configuration) (\s@CreateDataSource' {} a -> s {configuration = a} :: CreateDataSource)
+
+-- | Configuration information for altering document metadata and content
+-- during the document ingestion process.
+--
+-- For more information on how to create, modify and delete document
+-- metadata, or make other content alterations when you ingest documents
+-- into Amazon Kendra, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/custom-document-enrichment.html Customizing document metadata during the ingestion process>.
+createDataSource_customDocumentEnrichmentConfiguration :: Lens.Lens' CreateDataSource (Prelude.Maybe CustomDocumentEnrichmentConfiguration)
+createDataSource_customDocumentEnrichmentConfiguration = Lens.lens (\CreateDataSource' {customDocumentEnrichmentConfiguration} -> customDocumentEnrichmentConfiguration) (\s@CreateDataSource' {} a -> s {customDocumentEnrichmentConfiguration = a} :: CreateDataSource)
+
+-- | A description for the data source connector.
+createDataSource_description :: Lens.Lens' CreateDataSource (Prelude.Maybe Prelude.Text)
+createDataSource_description = Lens.lens (\CreateDataSource' {description} -> description) (\s@CreateDataSource' {} a -> s {description = a} :: CreateDataSource)
+
+-- | The code for a language. This allows you to support a language for all
+-- documents when creating the data source connector. English is supported
+-- by default. For more information on supported languages, including their
+-- codes, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/in-adding-languages.html Adding documents in languages other than English>.
+createDataSource_languageCode :: Lens.Lens' CreateDataSource (Prelude.Maybe Prelude.Text)
+createDataSource_languageCode = Lens.lens (\CreateDataSource' {languageCode} -> languageCode) (\s@CreateDataSource' {} a -> s {languageCode = a} :: CreateDataSource)
+
+-- | The Amazon Resource Name (ARN) of a role with permission to access the
+-- data source and required resources. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html IAM roles for Amazon Kendra>.
+--
+-- You can\'t specify the @RoleArn@ parameter when the @Type@ parameter is
+-- set to @CUSTOM@. If you do, you receive a @ValidationException@
+-- exception.
+--
+-- The @RoleArn@ parameter is required for all other data sources.
+createDataSource_roleArn :: Lens.Lens' CreateDataSource (Prelude.Maybe Prelude.Text)
+createDataSource_roleArn = Lens.lens (\CreateDataSource' {roleArn} -> roleArn) (\s@CreateDataSource' {} a -> s {roleArn = a} :: CreateDataSource)
+
+-- | Sets the frequency for Amazon Kendra to check the documents in your data
+-- source repository and update the index. If you don\'t set a schedule
+-- Amazon Kendra will not periodically update the index. You can call the
+-- @StartDataSourceSyncJob@ API to update the index.
+--
+-- You can\'t specify the @Schedule@ parameter when the @Type@ parameter is
+-- set to @CUSTOM@. If you do, you receive a @ValidationException@
+-- exception.
+createDataSource_schedule :: Lens.Lens' CreateDataSource (Prelude.Maybe Prelude.Text)
+createDataSource_schedule = Lens.lens (\CreateDataSource' {schedule} -> schedule) (\s@CreateDataSource' {} a -> s {schedule = a} :: CreateDataSource)
+
+-- | A list of key-value pairs that identify the data source connector. You
+-- can use the tags to identify and organize your resources and to control
+-- access to resources.
+createDataSource_tags :: Lens.Lens' CreateDataSource (Prelude.Maybe [Tag])
+createDataSource_tags = Lens.lens (\CreateDataSource' {tags} -> tags) (\s@CreateDataSource' {} a -> s {tags = a} :: CreateDataSource) Prelude.. Lens.mapping Lens.coerced
+
+-- | Configuration information for an Amazon Virtual Private Cloud to connect
+-- to your data source. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+createDataSource_vpcConfiguration :: Lens.Lens' CreateDataSource (Prelude.Maybe DataSourceVpcConfiguration)
+createDataSource_vpcConfiguration = Lens.lens (\CreateDataSource' {vpcConfiguration} -> vpcConfiguration) (\s@CreateDataSource' {} a -> s {vpcConfiguration = a} :: CreateDataSource)
+
+-- | A name for the data source connector.
+createDataSource_name :: Lens.Lens' CreateDataSource Prelude.Text
+createDataSource_name = Lens.lens (\CreateDataSource' {name} -> name) (\s@CreateDataSource' {} a -> s {name = a} :: CreateDataSource)
+
+-- | The identifier of the index you want to use with the data source
+-- connector.
+createDataSource_indexId :: Lens.Lens' CreateDataSource Prelude.Text
+createDataSource_indexId = Lens.lens (\CreateDataSource' {indexId} -> indexId) (\s@CreateDataSource' {} a -> s {indexId = a} :: CreateDataSource)
+
+-- | The type of data source repository. For example, @SHAREPOINT@.
+createDataSource_type :: Lens.Lens' CreateDataSource DataSourceType
+createDataSource_type = Lens.lens (\CreateDataSource' {type'} -> type') (\s@CreateDataSource' {} a -> s {type' = a} :: CreateDataSource)
+
+instance Core.AWSRequest CreateDataSource where
+  type
+    AWSResponse CreateDataSource =
+      CreateDataSourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateDataSourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Id")
+      )
+
+instance Prelude.Hashable CreateDataSource where
+  hashWithSalt _salt CreateDataSource' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` configuration
+      `Prelude.hashWithSalt` customDocumentEnrichmentConfiguration
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` languageCode
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` schedule
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` vpcConfiguration
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` indexId
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData CreateDataSource where
+  rnf CreateDataSource' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf configuration
+      `Prelude.seq` Prelude.rnf customDocumentEnrichmentConfiguration
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf languageCode
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf schedule
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vpcConfiguration
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf indexId
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToHeaders CreateDataSource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.CreateDataSource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateDataSource where
+  toJSON CreateDataSource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientToken" Data..=) Prelude.<$> clientToken,
+            ("Configuration" Data..=) Prelude.<$> configuration,
+            ("CustomDocumentEnrichmentConfiguration" Data..=)
+              Prelude.<$> customDocumentEnrichmentConfiguration,
+            ("Description" Data..=) Prelude.<$> description,
+            ("LanguageCode" Data..=) Prelude.<$> languageCode,
+            ("RoleArn" Data..=) Prelude.<$> roleArn,
+            ("Schedule" Data..=) Prelude.<$> schedule,
+            ("Tags" Data..=) Prelude.<$> tags,
+            ("VpcConfiguration" Data..=)
+              Prelude.<$> vpcConfiguration,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("IndexId" Data..= indexId),
+            Prelude.Just ("Type" Data..= type')
+          ]
+      )
+
+instance Data.ToPath CreateDataSource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateDataSource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateDataSourceResponse' smart constructor.
+data CreateDataSourceResponse = CreateDataSourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The identifier of the data source connector.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDataSourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createDataSourceResponse_httpStatus' - The response's http status code.
+--
+-- 'id', 'createDataSourceResponse_id' - The identifier of the data source connector.
+newCreateDataSourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'id'
+  Prelude.Text ->
+  CreateDataSourceResponse
+newCreateDataSourceResponse pHttpStatus_ pId_ =
+  CreateDataSourceResponse'
+    { httpStatus =
+        pHttpStatus_,
+      id = pId_
+    }
+
+-- | The response's http status code.
+createDataSourceResponse_httpStatus :: Lens.Lens' CreateDataSourceResponse Prelude.Int
+createDataSourceResponse_httpStatus = Lens.lens (\CreateDataSourceResponse' {httpStatus} -> httpStatus) (\s@CreateDataSourceResponse' {} a -> s {httpStatus = a} :: CreateDataSourceResponse)
+
+-- | The identifier of the data source connector.
+createDataSourceResponse_id :: Lens.Lens' CreateDataSourceResponse Prelude.Text
+createDataSourceResponse_id = Lens.lens (\CreateDataSourceResponse' {id} -> id) (\s@CreateDataSourceResponse' {} a -> s {id = a} :: CreateDataSourceResponse)
+
+instance Prelude.NFData CreateDataSourceResponse where
+  rnf CreateDataSourceResponse' {..} =
+    Prelude.rnf httpStatus `Prelude.seq` Prelude.rnf id
diff --git a/gen/Amazonka/Kendra/CreateExperience.hs b/gen/Amazonka/Kendra/CreateExperience.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/CreateExperience.hs
@@ -0,0 +1,274 @@
+{-# 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.Kendra.CreateExperience
+-- 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 Kendra experience such as a search application. For
+-- more information on creating a search application experience, including
+-- using the Python and Java SDKs, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/deploying-search-experience-no-code.html Building a search experience with no code>.
+module Amazonka.Kendra.CreateExperience
+  ( -- * Creating a Request
+    CreateExperience (..),
+    newCreateExperience,
+
+    -- * Request Lenses
+    createExperience_clientToken,
+    createExperience_configuration,
+    createExperience_description,
+    createExperience_roleArn,
+    createExperience_name,
+    createExperience_indexId,
+
+    -- * Destructuring the Response
+    CreateExperienceResponse (..),
+    newCreateExperienceResponse,
+
+    -- * Response Lenses
+    createExperienceResponse_httpStatus,
+    createExperienceResponse_id,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateExperience' smart constructor.
+data CreateExperience = CreateExperience'
+  { -- | A token that you provide to identify the request to create your Amazon
+    -- Kendra experience. Multiple calls to the @CreateExperience@ API with the
+    -- same client token creates only one Amazon Kendra experience.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Configuration information for your Amazon Kendra experience. This
+    -- includes @ContentSourceConfiguration@, which specifies the data source
+    -- IDs and\/or FAQ IDs, and @UserIdentityConfiguration@, which specifies
+    -- the user or group information to grant access to your Amazon Kendra
+    -- experience.
+    configuration :: Prelude.Maybe ExperienceConfiguration,
+    -- | A description for your Amazon Kendra experience.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of a role with permission to access
+    -- @Query@ API, @QuerySuggestions@ API, @SubmitFeedback@ API, and IAM
+    -- Identity Center that stores your user and group information. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html IAM roles for Amazon Kendra>.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | A name for your Amazon Kendra experience.
+    name :: Prelude.Text,
+    -- | The identifier of the index for your Amazon Kendra experience.
+    indexId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateExperience' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createExperience_clientToken' - A token that you provide to identify the request to create your Amazon
+-- Kendra experience. Multiple calls to the @CreateExperience@ API with the
+-- same client token creates only one Amazon Kendra experience.
+--
+-- 'configuration', 'createExperience_configuration' - Configuration information for your Amazon Kendra experience. This
+-- includes @ContentSourceConfiguration@, which specifies the data source
+-- IDs and\/or FAQ IDs, and @UserIdentityConfiguration@, which specifies
+-- the user or group information to grant access to your Amazon Kendra
+-- experience.
+--
+-- 'description', 'createExperience_description' - A description for your Amazon Kendra experience.
+--
+-- 'roleArn', 'createExperience_roleArn' - The Amazon Resource Name (ARN) of a role with permission to access
+-- @Query@ API, @QuerySuggestions@ API, @SubmitFeedback@ API, and IAM
+-- Identity Center that stores your user and group information. For more
+-- information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html IAM roles for Amazon Kendra>.
+--
+-- 'name', 'createExperience_name' - A name for your Amazon Kendra experience.
+--
+-- 'indexId', 'createExperience_indexId' - The identifier of the index for your Amazon Kendra experience.
+newCreateExperience ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'indexId'
+  Prelude.Text ->
+  CreateExperience
+newCreateExperience pName_ pIndexId_ =
+  CreateExperience'
+    { clientToken = Prelude.Nothing,
+      configuration = Prelude.Nothing,
+      description = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      name = pName_,
+      indexId = pIndexId_
+    }
+
+-- | A token that you provide to identify the request to create your Amazon
+-- Kendra experience. Multiple calls to the @CreateExperience@ API with the
+-- same client token creates only one Amazon Kendra experience.
+createExperience_clientToken :: Lens.Lens' CreateExperience (Prelude.Maybe Prelude.Text)
+createExperience_clientToken = Lens.lens (\CreateExperience' {clientToken} -> clientToken) (\s@CreateExperience' {} a -> s {clientToken = a} :: CreateExperience)
+
+-- | Configuration information for your Amazon Kendra experience. This
+-- includes @ContentSourceConfiguration@, which specifies the data source
+-- IDs and\/or FAQ IDs, and @UserIdentityConfiguration@, which specifies
+-- the user or group information to grant access to your Amazon Kendra
+-- experience.
+createExperience_configuration :: Lens.Lens' CreateExperience (Prelude.Maybe ExperienceConfiguration)
+createExperience_configuration = Lens.lens (\CreateExperience' {configuration} -> configuration) (\s@CreateExperience' {} a -> s {configuration = a} :: CreateExperience)
+
+-- | A description for your Amazon Kendra experience.
+createExperience_description :: Lens.Lens' CreateExperience (Prelude.Maybe Prelude.Text)
+createExperience_description = Lens.lens (\CreateExperience' {description} -> description) (\s@CreateExperience' {} a -> s {description = a} :: CreateExperience)
+
+-- | The Amazon Resource Name (ARN) of a role with permission to access
+-- @Query@ API, @QuerySuggestions@ API, @SubmitFeedback@ API, and IAM
+-- Identity Center that stores your user and group information. For more
+-- information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html IAM roles for Amazon Kendra>.
+createExperience_roleArn :: Lens.Lens' CreateExperience (Prelude.Maybe Prelude.Text)
+createExperience_roleArn = Lens.lens (\CreateExperience' {roleArn} -> roleArn) (\s@CreateExperience' {} a -> s {roleArn = a} :: CreateExperience)
+
+-- | A name for your Amazon Kendra experience.
+createExperience_name :: Lens.Lens' CreateExperience Prelude.Text
+createExperience_name = Lens.lens (\CreateExperience' {name} -> name) (\s@CreateExperience' {} a -> s {name = a} :: CreateExperience)
+
+-- | The identifier of the index for your Amazon Kendra experience.
+createExperience_indexId :: Lens.Lens' CreateExperience Prelude.Text
+createExperience_indexId = Lens.lens (\CreateExperience' {indexId} -> indexId) (\s@CreateExperience' {} a -> s {indexId = a} :: CreateExperience)
+
+instance Core.AWSRequest CreateExperience where
+  type
+    AWSResponse CreateExperience =
+      CreateExperienceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateExperienceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Id")
+      )
+
+instance Prelude.Hashable CreateExperience where
+  hashWithSalt _salt CreateExperience' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` configuration
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` indexId
+
+instance Prelude.NFData CreateExperience where
+  rnf CreateExperience' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf configuration
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf indexId
+
+instance Data.ToHeaders CreateExperience where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.CreateExperience" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateExperience where
+  toJSON CreateExperience' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientToken" Data..=) Prelude.<$> clientToken,
+            ("Configuration" Data..=) Prelude.<$> configuration,
+            ("Description" Data..=) Prelude.<$> description,
+            ("RoleArn" Data..=) Prelude.<$> roleArn,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("IndexId" Data..= indexId)
+          ]
+      )
+
+instance Data.ToPath CreateExperience where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateExperience where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateExperienceResponse' smart constructor.
+data CreateExperienceResponse = CreateExperienceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The identifier for your created Amazon Kendra experience.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateExperienceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createExperienceResponse_httpStatus' - The response's http status code.
+--
+-- 'id', 'createExperienceResponse_id' - The identifier for your created Amazon Kendra experience.
+newCreateExperienceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'id'
+  Prelude.Text ->
+  CreateExperienceResponse
+newCreateExperienceResponse pHttpStatus_ pId_ =
+  CreateExperienceResponse'
+    { httpStatus =
+        pHttpStatus_,
+      id = pId_
+    }
+
+-- | The response's http status code.
+createExperienceResponse_httpStatus :: Lens.Lens' CreateExperienceResponse Prelude.Int
+createExperienceResponse_httpStatus = Lens.lens (\CreateExperienceResponse' {httpStatus} -> httpStatus) (\s@CreateExperienceResponse' {} a -> s {httpStatus = a} :: CreateExperienceResponse)
+
+-- | The identifier for your created Amazon Kendra experience.
+createExperienceResponse_id :: Lens.Lens' CreateExperienceResponse Prelude.Text
+createExperienceResponse_id = Lens.lens (\CreateExperienceResponse' {id} -> id) (\s@CreateExperienceResponse' {} a -> s {id = a} :: CreateExperienceResponse)
+
+instance Prelude.NFData CreateExperienceResponse where
+  rnf CreateExperienceResponse' {..} =
+    Prelude.rnf httpStatus `Prelude.seq` Prelude.rnf id
diff --git a/gen/Amazonka/Kendra/CreateFaq.hs b/gen/Amazonka/Kendra/CreateFaq.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/CreateFaq.hs
@@ -0,0 +1,334 @@
+{-# 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.Kendra.CreateFaq
+-- 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 new set of frequently asked question (FAQ) questions and
+-- answers.
+--
+-- Adding FAQs to an index is an asynchronous operation.
+--
+-- For an example of adding an FAQ to an index using Python and Java SDKs,
+-- see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/in-creating-faq.html#using-faq-file Using your FAQ file>.
+module Amazonka.Kendra.CreateFaq
+  ( -- * Creating a Request
+    CreateFaq (..),
+    newCreateFaq,
+
+    -- * Request Lenses
+    createFaq_clientToken,
+    createFaq_description,
+    createFaq_fileFormat,
+    createFaq_languageCode,
+    createFaq_tags,
+    createFaq_indexId,
+    createFaq_name,
+    createFaq_s3Path,
+    createFaq_roleArn,
+
+    -- * Destructuring the Response
+    CreateFaqResponse (..),
+    newCreateFaqResponse,
+
+    -- * Response Lenses
+    createFaqResponse_id,
+    createFaqResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateFaq' smart constructor.
+data CreateFaq = CreateFaq'
+  { -- | A token that you provide to identify the request to create a FAQ.
+    -- Multiple calls to the @CreateFaqRequest@ API with the same client token
+    -- will create only one FAQ.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description for the FAQ.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The format of the FAQ input file. You can choose between a basic CSV
+    -- format, a CSV format that includes customs attributes in a header, and a
+    -- JSON format that includes custom attributes.
+    --
+    -- The format must match the format of the file stored in the S3 bucket
+    -- identified in the @S3Path@ parameter.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/in-creating-faq.html Adding questions and answers>.
+    fileFormat :: Prelude.Maybe FaqFileFormat,
+    -- | The code for a language. This allows you to support a language for the
+    -- FAQ document. English is supported by default. For more information on
+    -- supported languages, including their codes, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/in-adding-languages.html Adding documents in languages other than English>.
+    languageCode :: Prelude.Maybe Prelude.Text,
+    -- | A list of key-value pairs that identify the FAQ. You can use the tags to
+    -- identify and organize your resources and to control access to resources.
+    tags :: Prelude.Maybe [Tag],
+    -- | The identifier of the index for the FAQ.
+    indexId :: Prelude.Text,
+    -- | A name for the FAQ.
+    name :: Prelude.Text,
+    -- | The path to the FAQ file in S3.
+    s3Path :: S3Path,
+    -- | The Amazon Resource Name (ARN) of a role with permission to access the
+    -- S3 bucket that contains the FAQs. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html IAM Roles for Amazon Kendra>.
+    roleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateFaq' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createFaq_clientToken' - A token that you provide to identify the request to create a FAQ.
+-- Multiple calls to the @CreateFaqRequest@ API with the same client token
+-- will create only one FAQ.
+--
+-- 'description', 'createFaq_description' - A description for the FAQ.
+--
+-- 'fileFormat', 'createFaq_fileFormat' - The format of the FAQ input file. You can choose between a basic CSV
+-- format, a CSV format that includes customs attributes in a header, and a
+-- JSON format that includes custom attributes.
+--
+-- The format must match the format of the file stored in the S3 bucket
+-- identified in the @S3Path@ parameter.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/in-creating-faq.html Adding questions and answers>.
+--
+-- 'languageCode', 'createFaq_languageCode' - The code for a language. This allows you to support a language for the
+-- FAQ document. English is supported by default. For more information on
+-- supported languages, including their codes, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/in-adding-languages.html Adding documents in languages other than English>.
+--
+-- 'tags', 'createFaq_tags' - A list of key-value pairs that identify the FAQ. You can use the tags to
+-- identify and organize your resources and to control access to resources.
+--
+-- 'indexId', 'createFaq_indexId' - The identifier of the index for the FAQ.
+--
+-- 'name', 'createFaq_name' - A name for the FAQ.
+--
+-- 's3Path', 'createFaq_s3Path' - The path to the FAQ file in S3.
+--
+-- 'roleArn', 'createFaq_roleArn' - The Amazon Resource Name (ARN) of a role with permission to access the
+-- S3 bucket that contains the FAQs. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html IAM Roles for Amazon Kendra>.
+newCreateFaq ::
+  -- | 'indexId'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 's3Path'
+  S3Path ->
+  -- | 'roleArn'
+  Prelude.Text ->
+  CreateFaq
+newCreateFaq pIndexId_ pName_ pS3Path_ pRoleArn_ =
+  CreateFaq'
+    { clientToken = Prelude.Nothing,
+      description = Prelude.Nothing,
+      fileFormat = Prelude.Nothing,
+      languageCode = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      indexId = pIndexId_,
+      name = pName_,
+      s3Path = pS3Path_,
+      roleArn = pRoleArn_
+    }
+
+-- | A token that you provide to identify the request to create a FAQ.
+-- Multiple calls to the @CreateFaqRequest@ API with the same client token
+-- will create only one FAQ.
+createFaq_clientToken :: Lens.Lens' CreateFaq (Prelude.Maybe Prelude.Text)
+createFaq_clientToken = Lens.lens (\CreateFaq' {clientToken} -> clientToken) (\s@CreateFaq' {} a -> s {clientToken = a} :: CreateFaq)
+
+-- | A description for the FAQ.
+createFaq_description :: Lens.Lens' CreateFaq (Prelude.Maybe Prelude.Text)
+createFaq_description = Lens.lens (\CreateFaq' {description} -> description) (\s@CreateFaq' {} a -> s {description = a} :: CreateFaq)
+
+-- | The format of the FAQ input file. You can choose between a basic CSV
+-- format, a CSV format that includes customs attributes in a header, and a
+-- JSON format that includes custom attributes.
+--
+-- The format must match the format of the file stored in the S3 bucket
+-- identified in the @S3Path@ parameter.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/in-creating-faq.html Adding questions and answers>.
+createFaq_fileFormat :: Lens.Lens' CreateFaq (Prelude.Maybe FaqFileFormat)
+createFaq_fileFormat = Lens.lens (\CreateFaq' {fileFormat} -> fileFormat) (\s@CreateFaq' {} a -> s {fileFormat = a} :: CreateFaq)
+
+-- | The code for a language. This allows you to support a language for the
+-- FAQ document. English is supported by default. For more information on
+-- supported languages, including their codes, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/in-adding-languages.html Adding documents in languages other than English>.
+createFaq_languageCode :: Lens.Lens' CreateFaq (Prelude.Maybe Prelude.Text)
+createFaq_languageCode = Lens.lens (\CreateFaq' {languageCode} -> languageCode) (\s@CreateFaq' {} a -> s {languageCode = a} :: CreateFaq)
+
+-- | A list of key-value pairs that identify the FAQ. You can use the tags to
+-- identify and organize your resources and to control access to resources.
+createFaq_tags :: Lens.Lens' CreateFaq (Prelude.Maybe [Tag])
+createFaq_tags = Lens.lens (\CreateFaq' {tags} -> tags) (\s@CreateFaq' {} a -> s {tags = a} :: CreateFaq) Prelude.. Lens.mapping Lens.coerced
+
+-- | The identifier of the index for the FAQ.
+createFaq_indexId :: Lens.Lens' CreateFaq Prelude.Text
+createFaq_indexId = Lens.lens (\CreateFaq' {indexId} -> indexId) (\s@CreateFaq' {} a -> s {indexId = a} :: CreateFaq)
+
+-- | A name for the FAQ.
+createFaq_name :: Lens.Lens' CreateFaq Prelude.Text
+createFaq_name = Lens.lens (\CreateFaq' {name} -> name) (\s@CreateFaq' {} a -> s {name = a} :: CreateFaq)
+
+-- | The path to the FAQ file in S3.
+createFaq_s3Path :: Lens.Lens' CreateFaq S3Path
+createFaq_s3Path = Lens.lens (\CreateFaq' {s3Path} -> s3Path) (\s@CreateFaq' {} a -> s {s3Path = a} :: CreateFaq)
+
+-- | The Amazon Resource Name (ARN) of a role with permission to access the
+-- S3 bucket that contains the FAQs. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html IAM Roles for Amazon Kendra>.
+createFaq_roleArn :: Lens.Lens' CreateFaq Prelude.Text
+createFaq_roleArn = Lens.lens (\CreateFaq' {roleArn} -> roleArn) (\s@CreateFaq' {} a -> s {roleArn = a} :: CreateFaq)
+
+instance Core.AWSRequest CreateFaq where
+  type AWSResponse CreateFaq = CreateFaqResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateFaqResponse'
+            Prelude.<$> (x Data..?> "Id")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateFaq where
+  hashWithSalt _salt CreateFaq' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` fileFormat
+      `Prelude.hashWithSalt` languageCode
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` indexId
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` s3Path
+      `Prelude.hashWithSalt` roleArn
+
+instance Prelude.NFData CreateFaq where
+  rnf CreateFaq' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf fileFormat
+      `Prelude.seq` Prelude.rnf languageCode
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf indexId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf s3Path
+      `Prelude.seq` Prelude.rnf roleArn
+
+instance Data.ToHeaders CreateFaq where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.CreateFaq" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateFaq where
+  toJSON CreateFaq' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientToken" Data..=) Prelude.<$> clientToken,
+            ("Description" Data..=) Prelude.<$> description,
+            ("FileFormat" Data..=) Prelude.<$> fileFormat,
+            ("LanguageCode" Data..=) Prelude.<$> languageCode,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("IndexId" Data..= indexId),
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("S3Path" Data..= s3Path),
+            Prelude.Just ("RoleArn" Data..= roleArn)
+          ]
+      )
+
+instance Data.ToPath CreateFaq where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateFaq where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateFaqResponse' smart constructor.
+data CreateFaqResponse = CreateFaqResponse'
+  { -- | The identifier of the FAQ.
+    id :: 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 'CreateFaqResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'createFaqResponse_id' - The identifier of the FAQ.
+--
+-- 'httpStatus', 'createFaqResponse_httpStatus' - The response's http status code.
+newCreateFaqResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateFaqResponse
+newCreateFaqResponse pHttpStatus_ =
+  CreateFaqResponse'
+    { id = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the FAQ.
+createFaqResponse_id :: Lens.Lens' CreateFaqResponse (Prelude.Maybe Prelude.Text)
+createFaqResponse_id = Lens.lens (\CreateFaqResponse' {id} -> id) (\s@CreateFaqResponse' {} a -> s {id = a} :: CreateFaqResponse)
+
+-- | The response's http status code.
+createFaqResponse_httpStatus :: Lens.Lens' CreateFaqResponse Prelude.Int
+createFaqResponse_httpStatus = Lens.lens (\CreateFaqResponse' {httpStatus} -> httpStatus) (\s@CreateFaqResponse' {} a -> s {httpStatus = a} :: CreateFaqResponse)
+
+instance Prelude.NFData CreateFaqResponse where
+  rnf CreateFaqResponse' {..} =
+    Prelude.rnf id `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/CreateIndex.hs b/gen/Amazonka/Kendra/CreateIndex.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/CreateIndex.hs
@@ -0,0 +1,407 @@
+{-# 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.Kendra.CreateIndex
+-- 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 Kendra index. Index creation is an asynchronous API.
+-- To determine if index creation has completed, check the @Status@ field
+-- returned from a call to @DescribeIndex@. The @Status@ field is set to
+-- @ACTIVE@ when the index is ready to use.
+--
+-- Once the index is active you can index your documents using the
+-- @BatchPutDocument@ API or using one of the supported data sources.
+--
+-- For an example of creating an index and data source using the Python
+-- SDK, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/gs-python.html Getting started with Python SDK>.
+-- For an example of creating an index and data source using the Java SDK,
+-- see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/gs-java.html Getting started with Java SDK>.
+module Amazonka.Kendra.CreateIndex
+  ( -- * Creating a Request
+    CreateIndex (..),
+    newCreateIndex,
+
+    -- * Request Lenses
+    createIndex_clientToken,
+    createIndex_description,
+    createIndex_edition,
+    createIndex_serverSideEncryptionConfiguration,
+    createIndex_tags,
+    createIndex_userContextPolicy,
+    createIndex_userGroupResolutionConfiguration,
+    createIndex_userTokenConfigurations,
+    createIndex_name,
+    createIndex_roleArn,
+
+    -- * Destructuring the Response
+    CreateIndexResponse (..),
+    newCreateIndexResponse,
+
+    -- * Response Lenses
+    createIndexResponse_id,
+    createIndexResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateIndex' smart constructor.
+data CreateIndex = CreateIndex'
+  { -- | A token that you provide to identify the request to create an index.
+    -- Multiple calls to the @CreateIndex@ API with the same client token will
+    -- create only one index.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description for the index.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Kendra edition to use for the index. Choose
+    -- @DEVELOPER_EDITION@ for indexes intended for development, testing, or
+    -- proof of concept. Use @ENTERPRISE_EDITION@ for your production
+    -- databases. Once you set the edition for an index, it can\'t be changed.
+    --
+    -- The @Edition@ parameter is optional. If you don\'t supply a value, the
+    -- default is @ENTERPRISE_EDITION@.
+    --
+    -- For more information on quota limits for enterprise and developer
+    -- editions, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/quotas.html Quotas>.
+    edition :: Prelude.Maybe IndexEdition,
+    -- | The identifier of the KMS customer managed key (CMK) that\'s used to
+    -- encrypt data indexed by Amazon Kendra. Amazon Kendra doesn\'t support
+    -- asymmetric CMKs.
+    serverSideEncryptionConfiguration :: Prelude.Maybe ServerSideEncryptionConfiguration,
+    -- | A list of key-value pairs that identify the index. You can use the tags
+    -- to identify and organize your resources and to control access to
+    -- resources.
+    tags :: Prelude.Maybe [Tag],
+    -- | The user context policy.
+    --
+    -- [ATTRIBUTE_FILTER]
+    --     All indexed content is searchable and displayable for all users. If
+    --     you want to filter search results on user context, you can use the
+    --     attribute filters of @_user_id@ and @_group_ids@ or you can provide
+    --     user and group information in @UserContext@.
+    --
+    -- [USER_TOKEN]
+    --     Enables token-based user access control to filter search results on
+    --     user context. All documents with no access control and all documents
+    --     accessible to the user will be searchable and displayable.
+    userContextPolicy :: Prelude.Maybe UserContextPolicy,
+    -- | Enables fetching access levels of groups and users from an IAM Identity
+    -- Center (successor to Single Sign-On) identity source. To configure this,
+    -- see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/API_UserGroupResolutionConfiguration.html UserGroupResolutionConfiguration>.
+    userGroupResolutionConfiguration :: Prelude.Maybe UserGroupResolutionConfiguration,
+    -- | The user token configuration.
+    userTokenConfigurations :: Prelude.Maybe [UserTokenConfiguration],
+    -- | A name for the index.
+    name :: Prelude.Text,
+    -- | An Identity and Access Management (IAM) role that gives Amazon Kendra
+    -- permissions to access your Amazon CloudWatch logs and metrics. This is
+    -- also the role you use when you call the @BatchPutDocument@ API to index
+    -- documents from an Amazon S3 bucket.
+    roleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateIndex' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createIndex_clientToken' - A token that you provide to identify the request to create an index.
+-- Multiple calls to the @CreateIndex@ API with the same client token will
+-- create only one index.
+--
+-- 'description', 'createIndex_description' - A description for the index.
+--
+-- 'edition', 'createIndex_edition' - The Amazon Kendra edition to use for the index. Choose
+-- @DEVELOPER_EDITION@ for indexes intended for development, testing, or
+-- proof of concept. Use @ENTERPRISE_EDITION@ for your production
+-- databases. Once you set the edition for an index, it can\'t be changed.
+--
+-- The @Edition@ parameter is optional. If you don\'t supply a value, the
+-- default is @ENTERPRISE_EDITION@.
+--
+-- For more information on quota limits for enterprise and developer
+-- editions, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/quotas.html Quotas>.
+--
+-- 'serverSideEncryptionConfiguration', 'createIndex_serverSideEncryptionConfiguration' - The identifier of the KMS customer managed key (CMK) that\'s used to
+-- encrypt data indexed by Amazon Kendra. Amazon Kendra doesn\'t support
+-- asymmetric CMKs.
+--
+-- 'tags', 'createIndex_tags' - A list of key-value pairs that identify the index. You can use the tags
+-- to identify and organize your resources and to control access to
+-- resources.
+--
+-- 'userContextPolicy', 'createIndex_userContextPolicy' - The user context policy.
+--
+-- [ATTRIBUTE_FILTER]
+--     All indexed content is searchable and displayable for all users. If
+--     you want to filter search results on user context, you can use the
+--     attribute filters of @_user_id@ and @_group_ids@ or you can provide
+--     user and group information in @UserContext@.
+--
+-- [USER_TOKEN]
+--     Enables token-based user access control to filter search results on
+--     user context. All documents with no access control and all documents
+--     accessible to the user will be searchable and displayable.
+--
+-- 'userGroupResolutionConfiguration', 'createIndex_userGroupResolutionConfiguration' - Enables fetching access levels of groups and users from an IAM Identity
+-- Center (successor to Single Sign-On) identity source. To configure this,
+-- see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_UserGroupResolutionConfiguration.html UserGroupResolutionConfiguration>.
+--
+-- 'userTokenConfigurations', 'createIndex_userTokenConfigurations' - The user token configuration.
+--
+-- 'name', 'createIndex_name' - A name for the index.
+--
+-- 'roleArn', 'createIndex_roleArn' - An Identity and Access Management (IAM) role that gives Amazon Kendra
+-- permissions to access your Amazon CloudWatch logs and metrics. This is
+-- also the role you use when you call the @BatchPutDocument@ API to index
+-- documents from an Amazon S3 bucket.
+newCreateIndex ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'roleArn'
+  Prelude.Text ->
+  CreateIndex
+newCreateIndex pName_ pRoleArn_ =
+  CreateIndex'
+    { clientToken = Prelude.Nothing,
+      description = Prelude.Nothing,
+      edition = Prelude.Nothing,
+      serverSideEncryptionConfiguration = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      userContextPolicy = Prelude.Nothing,
+      userGroupResolutionConfiguration = Prelude.Nothing,
+      userTokenConfigurations = Prelude.Nothing,
+      name = pName_,
+      roleArn = pRoleArn_
+    }
+
+-- | A token that you provide to identify the request to create an index.
+-- Multiple calls to the @CreateIndex@ API with the same client token will
+-- create only one index.
+createIndex_clientToken :: Lens.Lens' CreateIndex (Prelude.Maybe Prelude.Text)
+createIndex_clientToken = Lens.lens (\CreateIndex' {clientToken} -> clientToken) (\s@CreateIndex' {} a -> s {clientToken = a} :: CreateIndex)
+
+-- | A description for the index.
+createIndex_description :: Lens.Lens' CreateIndex (Prelude.Maybe Prelude.Text)
+createIndex_description = Lens.lens (\CreateIndex' {description} -> description) (\s@CreateIndex' {} a -> s {description = a} :: CreateIndex)
+
+-- | The Amazon Kendra edition to use for the index. Choose
+-- @DEVELOPER_EDITION@ for indexes intended for development, testing, or
+-- proof of concept. Use @ENTERPRISE_EDITION@ for your production
+-- databases. Once you set the edition for an index, it can\'t be changed.
+--
+-- The @Edition@ parameter is optional. If you don\'t supply a value, the
+-- default is @ENTERPRISE_EDITION@.
+--
+-- For more information on quota limits for enterprise and developer
+-- editions, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/quotas.html Quotas>.
+createIndex_edition :: Lens.Lens' CreateIndex (Prelude.Maybe IndexEdition)
+createIndex_edition = Lens.lens (\CreateIndex' {edition} -> edition) (\s@CreateIndex' {} a -> s {edition = a} :: CreateIndex)
+
+-- | The identifier of the KMS customer managed key (CMK) that\'s used to
+-- encrypt data indexed by Amazon Kendra. Amazon Kendra doesn\'t support
+-- asymmetric CMKs.
+createIndex_serverSideEncryptionConfiguration :: Lens.Lens' CreateIndex (Prelude.Maybe ServerSideEncryptionConfiguration)
+createIndex_serverSideEncryptionConfiguration = Lens.lens (\CreateIndex' {serverSideEncryptionConfiguration} -> serverSideEncryptionConfiguration) (\s@CreateIndex' {} a -> s {serverSideEncryptionConfiguration = a} :: CreateIndex)
+
+-- | A list of key-value pairs that identify the index. You can use the tags
+-- to identify and organize your resources and to control access to
+-- resources.
+createIndex_tags :: Lens.Lens' CreateIndex (Prelude.Maybe [Tag])
+createIndex_tags = Lens.lens (\CreateIndex' {tags} -> tags) (\s@CreateIndex' {} a -> s {tags = a} :: CreateIndex) Prelude.. Lens.mapping Lens.coerced
+
+-- | The user context policy.
+--
+-- [ATTRIBUTE_FILTER]
+--     All indexed content is searchable and displayable for all users. If
+--     you want to filter search results on user context, you can use the
+--     attribute filters of @_user_id@ and @_group_ids@ or you can provide
+--     user and group information in @UserContext@.
+--
+-- [USER_TOKEN]
+--     Enables token-based user access control to filter search results on
+--     user context. All documents with no access control and all documents
+--     accessible to the user will be searchable and displayable.
+createIndex_userContextPolicy :: Lens.Lens' CreateIndex (Prelude.Maybe UserContextPolicy)
+createIndex_userContextPolicy = Lens.lens (\CreateIndex' {userContextPolicy} -> userContextPolicy) (\s@CreateIndex' {} a -> s {userContextPolicy = a} :: CreateIndex)
+
+-- | Enables fetching access levels of groups and users from an IAM Identity
+-- Center (successor to Single Sign-On) identity source. To configure this,
+-- see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_UserGroupResolutionConfiguration.html UserGroupResolutionConfiguration>.
+createIndex_userGroupResolutionConfiguration :: Lens.Lens' CreateIndex (Prelude.Maybe UserGroupResolutionConfiguration)
+createIndex_userGroupResolutionConfiguration = Lens.lens (\CreateIndex' {userGroupResolutionConfiguration} -> userGroupResolutionConfiguration) (\s@CreateIndex' {} a -> s {userGroupResolutionConfiguration = a} :: CreateIndex)
+
+-- | The user token configuration.
+createIndex_userTokenConfigurations :: Lens.Lens' CreateIndex (Prelude.Maybe [UserTokenConfiguration])
+createIndex_userTokenConfigurations = Lens.lens (\CreateIndex' {userTokenConfigurations} -> userTokenConfigurations) (\s@CreateIndex' {} a -> s {userTokenConfigurations = a} :: CreateIndex) Prelude.. Lens.mapping Lens.coerced
+
+-- | A name for the index.
+createIndex_name :: Lens.Lens' CreateIndex Prelude.Text
+createIndex_name = Lens.lens (\CreateIndex' {name} -> name) (\s@CreateIndex' {} a -> s {name = a} :: CreateIndex)
+
+-- | An Identity and Access Management (IAM) role that gives Amazon Kendra
+-- permissions to access your Amazon CloudWatch logs and metrics. This is
+-- also the role you use when you call the @BatchPutDocument@ API to index
+-- documents from an Amazon S3 bucket.
+createIndex_roleArn :: Lens.Lens' CreateIndex Prelude.Text
+createIndex_roleArn = Lens.lens (\CreateIndex' {roleArn} -> roleArn) (\s@CreateIndex' {} a -> s {roleArn = a} :: CreateIndex)
+
+instance Core.AWSRequest CreateIndex where
+  type AWSResponse CreateIndex = CreateIndexResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateIndexResponse'
+            Prelude.<$> (x Data..?> "Id")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateIndex where
+  hashWithSalt _salt CreateIndex' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` edition
+      `Prelude.hashWithSalt` serverSideEncryptionConfiguration
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` userContextPolicy
+      `Prelude.hashWithSalt` userGroupResolutionConfiguration
+      `Prelude.hashWithSalt` userTokenConfigurations
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` roleArn
+
+instance Prelude.NFData CreateIndex where
+  rnf CreateIndex' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf edition
+      `Prelude.seq` Prelude.rnf serverSideEncryptionConfiguration
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf userContextPolicy
+      `Prelude.seq` Prelude.rnf userGroupResolutionConfiguration
+      `Prelude.seq` Prelude.rnf userTokenConfigurations
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf roleArn
+
+instance Data.ToHeaders CreateIndex where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.CreateIndex" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateIndex where
+  toJSON CreateIndex' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientToken" Data..=) Prelude.<$> clientToken,
+            ("Description" Data..=) Prelude.<$> description,
+            ("Edition" Data..=) Prelude.<$> edition,
+            ("ServerSideEncryptionConfiguration" Data..=)
+              Prelude.<$> serverSideEncryptionConfiguration,
+            ("Tags" Data..=) Prelude.<$> tags,
+            ("UserContextPolicy" Data..=)
+              Prelude.<$> userContextPolicy,
+            ("UserGroupResolutionConfiguration" Data..=)
+              Prelude.<$> userGroupResolutionConfiguration,
+            ("UserTokenConfigurations" Data..=)
+              Prelude.<$> userTokenConfigurations,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("RoleArn" Data..= roleArn)
+          ]
+      )
+
+instance Data.ToPath CreateIndex where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateIndex where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateIndexResponse' smart constructor.
+data CreateIndexResponse = CreateIndexResponse'
+  { -- | The identifier of the index. Use this identifier when you query an
+    -- index, set up a data source, or index a document.
+    id :: 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 'CreateIndexResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'createIndexResponse_id' - The identifier of the index. Use this identifier when you query an
+-- index, set up a data source, or index a document.
+--
+-- 'httpStatus', 'createIndexResponse_httpStatus' - The response's http status code.
+newCreateIndexResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateIndexResponse
+newCreateIndexResponse pHttpStatus_ =
+  CreateIndexResponse'
+    { id = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the index. Use this identifier when you query an
+-- index, set up a data source, or index a document.
+createIndexResponse_id :: Lens.Lens' CreateIndexResponse (Prelude.Maybe Prelude.Text)
+createIndexResponse_id = Lens.lens (\CreateIndexResponse' {id} -> id) (\s@CreateIndexResponse' {} a -> s {id = a} :: CreateIndexResponse)
+
+-- | The response's http status code.
+createIndexResponse_httpStatus :: Lens.Lens' CreateIndexResponse Prelude.Int
+createIndexResponse_httpStatus = Lens.lens (\CreateIndexResponse' {httpStatus} -> httpStatus) (\s@CreateIndexResponse' {} a -> s {httpStatus = a} :: CreateIndexResponse)
+
+instance Prelude.NFData CreateIndexResponse where
+  rnf CreateIndexResponse' {..} =
+    Prelude.rnf id `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/CreateQuerySuggestionsBlockList.hs b/gen/Amazonka/Kendra/CreateQuerySuggestionsBlockList.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/CreateQuerySuggestionsBlockList.hs
@@ -0,0 +1,359 @@
+{-# 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.Kendra.CreateQuerySuggestionsBlockList
+-- 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 block list to exlcude certain queries from suggestions.
+--
+-- Any query that contains words or phrases specified in the block list is
+-- blocked or filtered out from being shown as a suggestion.
+--
+-- You need to provide the file location of your block list text file in
+-- your S3 bucket. In your text file, enter each block word or phrase on a
+-- separate line.
+--
+-- For information on the current quota limits for block lists, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/quotas.html Quotas for Amazon Kendra>.
+--
+-- @CreateQuerySuggestionsBlockList@ is currently not supported in the
+-- Amazon Web Services GovCloud (US-West) region.
+--
+-- For an example of creating a block list for query suggestions using the
+-- Python SDK, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/query-suggestions.html#suggestions-block-list Query suggestions block list>.
+module Amazonka.Kendra.CreateQuerySuggestionsBlockList
+  ( -- * Creating a Request
+    CreateQuerySuggestionsBlockList (..),
+    newCreateQuerySuggestionsBlockList,
+
+    -- * Request Lenses
+    createQuerySuggestionsBlockList_clientToken,
+    createQuerySuggestionsBlockList_description,
+    createQuerySuggestionsBlockList_tags,
+    createQuerySuggestionsBlockList_indexId,
+    createQuerySuggestionsBlockList_name,
+    createQuerySuggestionsBlockList_sourceS3Path,
+    createQuerySuggestionsBlockList_roleArn,
+
+    -- * Destructuring the Response
+    CreateQuerySuggestionsBlockListResponse (..),
+    newCreateQuerySuggestionsBlockListResponse,
+
+    -- * Response Lenses
+    createQuerySuggestionsBlockListResponse_id,
+    createQuerySuggestionsBlockListResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateQuerySuggestionsBlockList' smart constructor.
+data CreateQuerySuggestionsBlockList = CreateQuerySuggestionsBlockList'
+  { -- | A token that you provide to identify the request to create a query
+    -- suggestions block list.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A user-friendly description for the block list.
+    --
+    -- For example, the description \"List of all offensive words that can
+    -- appear in user queries and need to be blocked from suggestions.\"
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A tag that you can assign to a block list that categorizes the block
+    -- list.
+    tags :: Prelude.Maybe [Tag],
+    -- | The identifier of the index you want to create a query suggestions block
+    -- list for.
+    indexId :: Prelude.Text,
+    -- | A user friendly name for the block list.
+    --
+    -- For example, the block list named \'offensive-words\' includes all
+    -- offensive words that could appear in user queries and need to be blocked
+    -- from suggestions.
+    name :: Prelude.Text,
+    -- | The S3 path to your block list text file in your S3 bucket.
+    --
+    -- Each block word or phrase should be on a separate line in a text file.
+    --
+    -- For information on the current quota limits for block lists, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/quotas.html Quotas for Amazon Kendra>.
+    sourceS3Path :: S3Path,
+    -- | The IAM (Identity and Access Management) role used by Amazon Kendra to
+    -- access the block list text file in your S3 bucket.
+    --
+    -- You need permissions to the role ARN (Amazon Web Services Resource
+    -- Name). The role needs S3 read permissions to your file in S3 and needs
+    -- to give STS (Security Token Service) assume role permissions to Amazon
+    -- Kendra.
+    roleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateQuerySuggestionsBlockList' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createQuerySuggestionsBlockList_clientToken' - A token that you provide to identify the request to create a query
+-- suggestions block list.
+--
+-- 'description', 'createQuerySuggestionsBlockList_description' - A user-friendly description for the block list.
+--
+-- For example, the description \"List of all offensive words that can
+-- appear in user queries and need to be blocked from suggestions.\"
+--
+-- 'tags', 'createQuerySuggestionsBlockList_tags' - A tag that you can assign to a block list that categorizes the block
+-- list.
+--
+-- 'indexId', 'createQuerySuggestionsBlockList_indexId' - The identifier of the index you want to create a query suggestions block
+-- list for.
+--
+-- 'name', 'createQuerySuggestionsBlockList_name' - A user friendly name for the block list.
+--
+-- For example, the block list named \'offensive-words\' includes all
+-- offensive words that could appear in user queries and need to be blocked
+-- from suggestions.
+--
+-- 'sourceS3Path', 'createQuerySuggestionsBlockList_sourceS3Path' - The S3 path to your block list text file in your S3 bucket.
+--
+-- Each block word or phrase should be on a separate line in a text file.
+--
+-- For information on the current quota limits for block lists, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/quotas.html Quotas for Amazon Kendra>.
+--
+-- 'roleArn', 'createQuerySuggestionsBlockList_roleArn' - The IAM (Identity and Access Management) role used by Amazon Kendra to
+-- access the block list text file in your S3 bucket.
+--
+-- You need permissions to the role ARN (Amazon Web Services Resource
+-- Name). The role needs S3 read permissions to your file in S3 and needs
+-- to give STS (Security Token Service) assume role permissions to Amazon
+-- Kendra.
+newCreateQuerySuggestionsBlockList ::
+  -- | 'indexId'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'sourceS3Path'
+  S3Path ->
+  -- | 'roleArn'
+  Prelude.Text ->
+  CreateQuerySuggestionsBlockList
+newCreateQuerySuggestionsBlockList
+  pIndexId_
+  pName_
+  pSourceS3Path_
+  pRoleArn_ =
+    CreateQuerySuggestionsBlockList'
+      { clientToken =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        indexId = pIndexId_,
+        name = pName_,
+        sourceS3Path = pSourceS3Path_,
+        roleArn = pRoleArn_
+      }
+
+-- | A token that you provide to identify the request to create a query
+-- suggestions block list.
+createQuerySuggestionsBlockList_clientToken :: Lens.Lens' CreateQuerySuggestionsBlockList (Prelude.Maybe Prelude.Text)
+createQuerySuggestionsBlockList_clientToken = Lens.lens (\CreateQuerySuggestionsBlockList' {clientToken} -> clientToken) (\s@CreateQuerySuggestionsBlockList' {} a -> s {clientToken = a} :: CreateQuerySuggestionsBlockList)
+
+-- | A user-friendly description for the block list.
+--
+-- For example, the description \"List of all offensive words that can
+-- appear in user queries and need to be blocked from suggestions.\"
+createQuerySuggestionsBlockList_description :: Lens.Lens' CreateQuerySuggestionsBlockList (Prelude.Maybe Prelude.Text)
+createQuerySuggestionsBlockList_description = Lens.lens (\CreateQuerySuggestionsBlockList' {description} -> description) (\s@CreateQuerySuggestionsBlockList' {} a -> s {description = a} :: CreateQuerySuggestionsBlockList)
+
+-- | A tag that you can assign to a block list that categorizes the block
+-- list.
+createQuerySuggestionsBlockList_tags :: Lens.Lens' CreateQuerySuggestionsBlockList (Prelude.Maybe [Tag])
+createQuerySuggestionsBlockList_tags = Lens.lens (\CreateQuerySuggestionsBlockList' {tags} -> tags) (\s@CreateQuerySuggestionsBlockList' {} a -> s {tags = a} :: CreateQuerySuggestionsBlockList) Prelude.. Lens.mapping Lens.coerced
+
+-- | The identifier of the index you want to create a query suggestions block
+-- list for.
+createQuerySuggestionsBlockList_indexId :: Lens.Lens' CreateQuerySuggestionsBlockList Prelude.Text
+createQuerySuggestionsBlockList_indexId = Lens.lens (\CreateQuerySuggestionsBlockList' {indexId} -> indexId) (\s@CreateQuerySuggestionsBlockList' {} a -> s {indexId = a} :: CreateQuerySuggestionsBlockList)
+
+-- | A user friendly name for the block list.
+--
+-- For example, the block list named \'offensive-words\' includes all
+-- offensive words that could appear in user queries and need to be blocked
+-- from suggestions.
+createQuerySuggestionsBlockList_name :: Lens.Lens' CreateQuerySuggestionsBlockList Prelude.Text
+createQuerySuggestionsBlockList_name = Lens.lens (\CreateQuerySuggestionsBlockList' {name} -> name) (\s@CreateQuerySuggestionsBlockList' {} a -> s {name = a} :: CreateQuerySuggestionsBlockList)
+
+-- | The S3 path to your block list text file in your S3 bucket.
+--
+-- Each block word or phrase should be on a separate line in a text file.
+--
+-- For information on the current quota limits for block lists, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/quotas.html Quotas for Amazon Kendra>.
+createQuerySuggestionsBlockList_sourceS3Path :: Lens.Lens' CreateQuerySuggestionsBlockList S3Path
+createQuerySuggestionsBlockList_sourceS3Path = Lens.lens (\CreateQuerySuggestionsBlockList' {sourceS3Path} -> sourceS3Path) (\s@CreateQuerySuggestionsBlockList' {} a -> s {sourceS3Path = a} :: CreateQuerySuggestionsBlockList)
+
+-- | The IAM (Identity and Access Management) role used by Amazon Kendra to
+-- access the block list text file in your S3 bucket.
+--
+-- You need permissions to the role ARN (Amazon Web Services Resource
+-- Name). The role needs S3 read permissions to your file in S3 and needs
+-- to give STS (Security Token Service) assume role permissions to Amazon
+-- Kendra.
+createQuerySuggestionsBlockList_roleArn :: Lens.Lens' CreateQuerySuggestionsBlockList Prelude.Text
+createQuerySuggestionsBlockList_roleArn = Lens.lens (\CreateQuerySuggestionsBlockList' {roleArn} -> roleArn) (\s@CreateQuerySuggestionsBlockList' {} a -> s {roleArn = a} :: CreateQuerySuggestionsBlockList)
+
+instance
+  Core.AWSRequest
+    CreateQuerySuggestionsBlockList
+  where
+  type
+    AWSResponse CreateQuerySuggestionsBlockList =
+      CreateQuerySuggestionsBlockListResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateQuerySuggestionsBlockListResponse'
+            Prelude.<$> (x Data..?> "Id")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateQuerySuggestionsBlockList
+  where
+  hashWithSalt
+    _salt
+    CreateQuerySuggestionsBlockList' {..} =
+      _salt
+        `Prelude.hashWithSalt` clientToken
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` tags
+        `Prelude.hashWithSalt` indexId
+        `Prelude.hashWithSalt` name
+        `Prelude.hashWithSalt` sourceS3Path
+        `Prelude.hashWithSalt` roleArn
+
+instance
+  Prelude.NFData
+    CreateQuerySuggestionsBlockList
+  where
+  rnf CreateQuerySuggestionsBlockList' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf indexId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf sourceS3Path
+      `Prelude.seq` Prelude.rnf roleArn
+
+instance
+  Data.ToHeaders
+    CreateQuerySuggestionsBlockList
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.CreateQuerySuggestionsBlockList" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateQuerySuggestionsBlockList where
+  toJSON CreateQuerySuggestionsBlockList' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientToken" Data..=) Prelude.<$> clientToken,
+            ("Description" Data..=) Prelude.<$> description,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("IndexId" Data..= indexId),
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("SourceS3Path" Data..= sourceS3Path),
+            Prelude.Just ("RoleArn" Data..= roleArn)
+          ]
+      )
+
+instance Data.ToPath CreateQuerySuggestionsBlockList where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateQuerySuggestionsBlockList where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateQuerySuggestionsBlockListResponse' smart constructor.
+data CreateQuerySuggestionsBlockListResponse = CreateQuerySuggestionsBlockListResponse'
+  { -- | The identifier of the created block list.
+    id :: 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 'CreateQuerySuggestionsBlockListResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'createQuerySuggestionsBlockListResponse_id' - The identifier of the created block list.
+--
+-- 'httpStatus', 'createQuerySuggestionsBlockListResponse_httpStatus' - The response's http status code.
+newCreateQuerySuggestionsBlockListResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateQuerySuggestionsBlockListResponse
+newCreateQuerySuggestionsBlockListResponse
+  pHttpStatus_ =
+    CreateQuerySuggestionsBlockListResponse'
+      { id =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The identifier of the created block list.
+createQuerySuggestionsBlockListResponse_id :: Lens.Lens' CreateQuerySuggestionsBlockListResponse (Prelude.Maybe Prelude.Text)
+createQuerySuggestionsBlockListResponse_id = Lens.lens (\CreateQuerySuggestionsBlockListResponse' {id} -> id) (\s@CreateQuerySuggestionsBlockListResponse' {} a -> s {id = a} :: CreateQuerySuggestionsBlockListResponse)
+
+-- | The response's http status code.
+createQuerySuggestionsBlockListResponse_httpStatus :: Lens.Lens' CreateQuerySuggestionsBlockListResponse Prelude.Int
+createQuerySuggestionsBlockListResponse_httpStatus = Lens.lens (\CreateQuerySuggestionsBlockListResponse' {httpStatus} -> httpStatus) (\s@CreateQuerySuggestionsBlockListResponse' {} a -> s {httpStatus = a} :: CreateQuerySuggestionsBlockListResponse)
+
+instance
+  Prelude.NFData
+    CreateQuerySuggestionsBlockListResponse
+  where
+  rnf CreateQuerySuggestionsBlockListResponse' {..} =
+    Prelude.rnf id `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/CreateThesaurus.hs b/gen/Amazonka/Kendra/CreateThesaurus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/CreateThesaurus.hs
@@ -0,0 +1,278 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.CreateThesaurus
+-- 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 thesaurus for an index. The thesaurus contains a list of
+-- synonyms in Solr format.
+--
+-- For an example of adding a thesaurus file to an index, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/index-synonyms-adding-thesaurus-file.html Adding custom synonyms to an index>.
+module Amazonka.Kendra.CreateThesaurus
+  ( -- * Creating a Request
+    CreateThesaurus (..),
+    newCreateThesaurus,
+
+    -- * Request Lenses
+    createThesaurus_clientToken,
+    createThesaurus_description,
+    createThesaurus_tags,
+    createThesaurus_indexId,
+    createThesaurus_name,
+    createThesaurus_roleArn,
+    createThesaurus_sourceS3Path,
+
+    -- * Destructuring the Response
+    CreateThesaurusResponse (..),
+    newCreateThesaurusResponse,
+
+    -- * Response Lenses
+    createThesaurusResponse_id,
+    createThesaurusResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateThesaurus' smart constructor.
+data CreateThesaurus = CreateThesaurus'
+  { -- | A token that you provide to identify the request to create a thesaurus.
+    -- Multiple calls to the @CreateThesaurus@ API with the same client token
+    -- will create only one thesaurus.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description for the thesaurus.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A list of key-value pairs that identify the thesaurus. You can use the
+    -- tags to identify and organize your resources and to control access to
+    -- resources.
+    tags :: Prelude.Maybe [Tag],
+    -- | The identifier of the index for the thesaurus.
+    indexId :: Prelude.Text,
+    -- | A name for the thesaurus.
+    name :: Prelude.Text,
+    -- | An IAM role that gives Amazon Kendra permissions to access thesaurus
+    -- file specified in @SourceS3Path@.
+    roleArn :: Prelude.Text,
+    -- | The path to the thesaurus file in S3.
+    sourceS3Path :: S3Path
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateThesaurus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createThesaurus_clientToken' - A token that you provide to identify the request to create a thesaurus.
+-- Multiple calls to the @CreateThesaurus@ API with the same client token
+-- will create only one thesaurus.
+--
+-- 'description', 'createThesaurus_description' - A description for the thesaurus.
+--
+-- 'tags', 'createThesaurus_tags' - A list of key-value pairs that identify the thesaurus. You can use the
+-- tags to identify and organize your resources and to control access to
+-- resources.
+--
+-- 'indexId', 'createThesaurus_indexId' - The identifier of the index for the thesaurus.
+--
+-- 'name', 'createThesaurus_name' - A name for the thesaurus.
+--
+-- 'roleArn', 'createThesaurus_roleArn' - An IAM role that gives Amazon Kendra permissions to access thesaurus
+-- file specified in @SourceS3Path@.
+--
+-- 'sourceS3Path', 'createThesaurus_sourceS3Path' - The path to the thesaurus file in S3.
+newCreateThesaurus ::
+  -- | 'indexId'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'roleArn'
+  Prelude.Text ->
+  -- | 'sourceS3Path'
+  S3Path ->
+  CreateThesaurus
+newCreateThesaurus
+  pIndexId_
+  pName_
+  pRoleArn_
+  pSourceS3Path_ =
+    CreateThesaurus'
+      { clientToken = Prelude.Nothing,
+        description = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        indexId = pIndexId_,
+        name = pName_,
+        roleArn = pRoleArn_,
+        sourceS3Path = pSourceS3Path_
+      }
+
+-- | A token that you provide to identify the request to create a thesaurus.
+-- Multiple calls to the @CreateThesaurus@ API with the same client token
+-- will create only one thesaurus.
+createThesaurus_clientToken :: Lens.Lens' CreateThesaurus (Prelude.Maybe Prelude.Text)
+createThesaurus_clientToken = Lens.lens (\CreateThesaurus' {clientToken} -> clientToken) (\s@CreateThesaurus' {} a -> s {clientToken = a} :: CreateThesaurus)
+
+-- | A description for the thesaurus.
+createThesaurus_description :: Lens.Lens' CreateThesaurus (Prelude.Maybe Prelude.Text)
+createThesaurus_description = Lens.lens (\CreateThesaurus' {description} -> description) (\s@CreateThesaurus' {} a -> s {description = a} :: CreateThesaurus)
+
+-- | A list of key-value pairs that identify the thesaurus. You can use the
+-- tags to identify and organize your resources and to control access to
+-- resources.
+createThesaurus_tags :: Lens.Lens' CreateThesaurus (Prelude.Maybe [Tag])
+createThesaurus_tags = Lens.lens (\CreateThesaurus' {tags} -> tags) (\s@CreateThesaurus' {} a -> s {tags = a} :: CreateThesaurus) Prelude.. Lens.mapping Lens.coerced
+
+-- | The identifier of the index for the thesaurus.
+createThesaurus_indexId :: Lens.Lens' CreateThesaurus Prelude.Text
+createThesaurus_indexId = Lens.lens (\CreateThesaurus' {indexId} -> indexId) (\s@CreateThesaurus' {} a -> s {indexId = a} :: CreateThesaurus)
+
+-- | A name for the thesaurus.
+createThesaurus_name :: Lens.Lens' CreateThesaurus Prelude.Text
+createThesaurus_name = Lens.lens (\CreateThesaurus' {name} -> name) (\s@CreateThesaurus' {} a -> s {name = a} :: CreateThesaurus)
+
+-- | An IAM role that gives Amazon Kendra permissions to access thesaurus
+-- file specified in @SourceS3Path@.
+createThesaurus_roleArn :: Lens.Lens' CreateThesaurus Prelude.Text
+createThesaurus_roleArn = Lens.lens (\CreateThesaurus' {roleArn} -> roleArn) (\s@CreateThesaurus' {} a -> s {roleArn = a} :: CreateThesaurus)
+
+-- | The path to the thesaurus file in S3.
+createThesaurus_sourceS3Path :: Lens.Lens' CreateThesaurus S3Path
+createThesaurus_sourceS3Path = Lens.lens (\CreateThesaurus' {sourceS3Path} -> sourceS3Path) (\s@CreateThesaurus' {} a -> s {sourceS3Path = a} :: CreateThesaurus)
+
+instance Core.AWSRequest CreateThesaurus where
+  type
+    AWSResponse CreateThesaurus =
+      CreateThesaurusResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateThesaurusResponse'
+            Prelude.<$> (x Data..?> "Id")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateThesaurus where
+  hashWithSalt _salt CreateThesaurus' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` indexId
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` sourceS3Path
+
+instance Prelude.NFData CreateThesaurus where
+  rnf CreateThesaurus' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf indexId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf sourceS3Path
+
+instance Data.ToHeaders CreateThesaurus where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.CreateThesaurus" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateThesaurus where
+  toJSON CreateThesaurus' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientToken" Data..=) Prelude.<$> clientToken,
+            ("Description" Data..=) Prelude.<$> description,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("IndexId" Data..= indexId),
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("RoleArn" Data..= roleArn),
+            Prelude.Just ("SourceS3Path" Data..= sourceS3Path)
+          ]
+      )
+
+instance Data.ToPath CreateThesaurus where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateThesaurus where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateThesaurusResponse' smart constructor.
+data CreateThesaurusResponse = CreateThesaurusResponse'
+  { -- | The identifier of the thesaurus.
+    id :: 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 'CreateThesaurusResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'createThesaurusResponse_id' - The identifier of the thesaurus.
+--
+-- 'httpStatus', 'createThesaurusResponse_httpStatus' - The response's http status code.
+newCreateThesaurusResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateThesaurusResponse
+newCreateThesaurusResponse pHttpStatus_ =
+  CreateThesaurusResponse'
+    { id = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the thesaurus.
+createThesaurusResponse_id :: Lens.Lens' CreateThesaurusResponse (Prelude.Maybe Prelude.Text)
+createThesaurusResponse_id = Lens.lens (\CreateThesaurusResponse' {id} -> id) (\s@CreateThesaurusResponse' {} a -> s {id = a} :: CreateThesaurusResponse)
+
+-- | The response's http status code.
+createThesaurusResponse_httpStatus :: Lens.Lens' CreateThesaurusResponse Prelude.Int
+createThesaurusResponse_httpStatus = Lens.lens (\CreateThesaurusResponse' {httpStatus} -> httpStatus) (\s@CreateThesaurusResponse' {} a -> s {httpStatus = a} :: CreateThesaurusResponse)
+
+instance Prelude.NFData CreateThesaurusResponse where
+  rnf CreateThesaurusResponse' {..} =
+    Prelude.rnf id `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/DeleteAccessControlConfiguration.hs b/gen/Amazonka/Kendra/DeleteAccessControlConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/DeleteAccessControlConfiguration.hs
@@ -0,0 +1,201 @@
+{-# 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.Kendra.DeleteAccessControlConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an access control configuration that you created for your
+-- documents in an index. This includes user and group access information
+-- for your documents. This is useful for user context filtering, where
+-- search results are filtered based on the user or their group access to
+-- documents.
+module Amazonka.Kendra.DeleteAccessControlConfiguration
+  ( -- * Creating a Request
+    DeleteAccessControlConfiguration (..),
+    newDeleteAccessControlConfiguration,
+
+    -- * Request Lenses
+    deleteAccessControlConfiguration_indexId,
+    deleteAccessControlConfiguration_id,
+
+    -- * Destructuring the Response
+    DeleteAccessControlConfigurationResponse (..),
+    newDeleteAccessControlConfigurationResponse,
+
+    -- * Response Lenses
+    deleteAccessControlConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteAccessControlConfiguration' smart constructor.
+data DeleteAccessControlConfiguration = DeleteAccessControlConfiguration'
+  { -- | The identifier of the index for an access control configuration.
+    indexId :: Prelude.Text,
+    -- | The identifier of the access control configuration you want to delete.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAccessControlConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'indexId', 'deleteAccessControlConfiguration_indexId' - The identifier of the index for an access control configuration.
+--
+-- 'id', 'deleteAccessControlConfiguration_id' - The identifier of the access control configuration you want to delete.
+newDeleteAccessControlConfiguration ::
+  -- | 'indexId'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  DeleteAccessControlConfiguration
+newDeleteAccessControlConfiguration pIndexId_ pId_ =
+  DeleteAccessControlConfiguration'
+    { indexId =
+        pIndexId_,
+      id = pId_
+    }
+
+-- | The identifier of the index for an access control configuration.
+deleteAccessControlConfiguration_indexId :: Lens.Lens' DeleteAccessControlConfiguration Prelude.Text
+deleteAccessControlConfiguration_indexId = Lens.lens (\DeleteAccessControlConfiguration' {indexId} -> indexId) (\s@DeleteAccessControlConfiguration' {} a -> s {indexId = a} :: DeleteAccessControlConfiguration)
+
+-- | The identifier of the access control configuration you want to delete.
+deleteAccessControlConfiguration_id :: Lens.Lens' DeleteAccessControlConfiguration Prelude.Text
+deleteAccessControlConfiguration_id = Lens.lens (\DeleteAccessControlConfiguration' {id} -> id) (\s@DeleteAccessControlConfiguration' {} a -> s {id = a} :: DeleteAccessControlConfiguration)
+
+instance
+  Core.AWSRequest
+    DeleteAccessControlConfiguration
+  where
+  type
+    AWSResponse DeleteAccessControlConfiguration =
+      DeleteAccessControlConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteAccessControlConfigurationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteAccessControlConfiguration
+  where
+  hashWithSalt
+    _salt
+    DeleteAccessControlConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` indexId
+        `Prelude.hashWithSalt` id
+
+instance
+  Prelude.NFData
+    DeleteAccessControlConfiguration
+  where
+  rnf DeleteAccessControlConfiguration' {..} =
+    Prelude.rnf indexId `Prelude.seq` Prelude.rnf id
+
+instance
+  Data.ToHeaders
+    DeleteAccessControlConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.DeleteAccessControlConfiguration" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteAccessControlConfiguration where
+  toJSON DeleteAccessControlConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("IndexId" Data..= indexId),
+            Prelude.Just ("Id" Data..= id)
+          ]
+      )
+
+instance Data.ToPath DeleteAccessControlConfiguration where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DeleteAccessControlConfiguration
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteAccessControlConfigurationResponse' smart constructor.
+data DeleteAccessControlConfigurationResponse = DeleteAccessControlConfigurationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAccessControlConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteAccessControlConfigurationResponse_httpStatus' - The response's http status code.
+newDeleteAccessControlConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteAccessControlConfigurationResponse
+newDeleteAccessControlConfigurationResponse
+  pHttpStatus_ =
+    DeleteAccessControlConfigurationResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+deleteAccessControlConfigurationResponse_httpStatus :: Lens.Lens' DeleteAccessControlConfigurationResponse Prelude.Int
+deleteAccessControlConfigurationResponse_httpStatus = Lens.lens (\DeleteAccessControlConfigurationResponse' {httpStatus} -> httpStatus) (\s@DeleteAccessControlConfigurationResponse' {} a -> s {httpStatus = a} :: DeleteAccessControlConfigurationResponse)
+
+instance
+  Prelude.NFData
+    DeleteAccessControlConfigurationResponse
+  where
+  rnf DeleteAccessControlConfigurationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/DeleteDataSource.hs b/gen/Amazonka/Kendra/DeleteDataSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/DeleteDataSource.hs
@@ -0,0 +1,153 @@
+{-# 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.Kendra.DeleteDataSource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an Amazon Kendra data source connector. An exception is not
+-- thrown if the data source is already being deleted. While the data
+-- source is being deleted, the @Status@ field returned by a call to the
+-- @DescribeDataSource@ API is set to @DELETING@. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/delete-data-source.html Deleting Data Sources>.
+module Amazonka.Kendra.DeleteDataSource
+  ( -- * Creating a Request
+    DeleteDataSource (..),
+    newDeleteDataSource,
+
+    -- * Request Lenses
+    deleteDataSource_id,
+    deleteDataSource_indexId,
+
+    -- * Destructuring the Response
+    DeleteDataSourceResponse (..),
+    newDeleteDataSourceResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteDataSource' smart constructor.
+data DeleteDataSource = DeleteDataSource'
+  { -- | The identifier of the data source connector you want to delete.
+    id :: Prelude.Text,
+    -- | The identifier of the index used with the data source connector.
+    indexId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDataSource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'deleteDataSource_id' - The identifier of the data source connector you want to delete.
+--
+-- 'indexId', 'deleteDataSource_indexId' - The identifier of the index used with the data source connector.
+newDeleteDataSource ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'indexId'
+  Prelude.Text ->
+  DeleteDataSource
+newDeleteDataSource pId_ pIndexId_ =
+  DeleteDataSource' {id = pId_, indexId = pIndexId_}
+
+-- | The identifier of the data source connector you want to delete.
+deleteDataSource_id :: Lens.Lens' DeleteDataSource Prelude.Text
+deleteDataSource_id = Lens.lens (\DeleteDataSource' {id} -> id) (\s@DeleteDataSource' {} a -> s {id = a} :: DeleteDataSource)
+
+-- | The identifier of the index used with the data source connector.
+deleteDataSource_indexId :: Lens.Lens' DeleteDataSource Prelude.Text
+deleteDataSource_indexId = Lens.lens (\DeleteDataSource' {indexId} -> indexId) (\s@DeleteDataSource' {} a -> s {indexId = a} :: DeleteDataSource)
+
+instance Core.AWSRequest DeleteDataSource where
+  type
+    AWSResponse DeleteDataSource =
+      DeleteDataSourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull DeleteDataSourceResponse'
+
+instance Prelude.Hashable DeleteDataSource where
+  hashWithSalt _salt DeleteDataSource' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` indexId
+
+instance Prelude.NFData DeleteDataSource where
+  rnf DeleteDataSource' {..} =
+    Prelude.rnf id `Prelude.seq` Prelude.rnf indexId
+
+instance Data.ToHeaders DeleteDataSource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.DeleteDataSource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteDataSource where
+  toJSON DeleteDataSource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Id" Data..= id),
+            Prelude.Just ("IndexId" Data..= indexId)
+          ]
+      )
+
+instance Data.ToPath DeleteDataSource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteDataSource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteDataSourceResponse' smart constructor.
+data DeleteDataSourceResponse = DeleteDataSourceResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDataSourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteDataSourceResponse ::
+  DeleteDataSourceResponse
+newDeleteDataSourceResponse =
+  DeleteDataSourceResponse'
+
+instance Prelude.NFData DeleteDataSourceResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Kendra/DeleteExperience.hs b/gen/Amazonka/Kendra/DeleteExperience.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/DeleteExperience.hs
@@ -0,0 +1,174 @@
+{-# 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.Kendra.DeleteExperience
+-- 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 your Amazon Kendra experience such as a search application. For
+-- more information on creating a search application experience, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/deploying-search-experience-no-code.html Building a search experience with no code>.
+module Amazonka.Kendra.DeleteExperience
+  ( -- * Creating a Request
+    DeleteExperience (..),
+    newDeleteExperience,
+
+    -- * Request Lenses
+    deleteExperience_id,
+    deleteExperience_indexId,
+
+    -- * Destructuring the Response
+    DeleteExperienceResponse (..),
+    newDeleteExperienceResponse,
+
+    -- * Response Lenses
+    deleteExperienceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteExperience' smart constructor.
+data DeleteExperience = DeleteExperience'
+  { -- | The identifier of your Amazon Kendra experience you want to delete.
+    id :: Prelude.Text,
+    -- | The identifier of the index for your Amazon Kendra experience.
+    indexId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteExperience' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'deleteExperience_id' - The identifier of your Amazon Kendra experience you want to delete.
+--
+-- 'indexId', 'deleteExperience_indexId' - The identifier of the index for your Amazon Kendra experience.
+newDeleteExperience ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'indexId'
+  Prelude.Text ->
+  DeleteExperience
+newDeleteExperience pId_ pIndexId_ =
+  DeleteExperience' {id = pId_, indexId = pIndexId_}
+
+-- | The identifier of your Amazon Kendra experience you want to delete.
+deleteExperience_id :: Lens.Lens' DeleteExperience Prelude.Text
+deleteExperience_id = Lens.lens (\DeleteExperience' {id} -> id) (\s@DeleteExperience' {} a -> s {id = a} :: DeleteExperience)
+
+-- | The identifier of the index for your Amazon Kendra experience.
+deleteExperience_indexId :: Lens.Lens' DeleteExperience Prelude.Text
+deleteExperience_indexId = Lens.lens (\DeleteExperience' {indexId} -> indexId) (\s@DeleteExperience' {} a -> s {indexId = a} :: DeleteExperience)
+
+instance Core.AWSRequest DeleteExperience where
+  type
+    AWSResponse DeleteExperience =
+      DeleteExperienceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteExperienceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteExperience where
+  hashWithSalt _salt DeleteExperience' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` indexId
+
+instance Prelude.NFData DeleteExperience where
+  rnf DeleteExperience' {..} =
+    Prelude.rnf id `Prelude.seq` Prelude.rnf indexId
+
+instance Data.ToHeaders DeleteExperience where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.DeleteExperience" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteExperience where
+  toJSON DeleteExperience' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Id" Data..= id),
+            Prelude.Just ("IndexId" Data..= indexId)
+          ]
+      )
+
+instance Data.ToPath DeleteExperience where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteExperience where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteExperienceResponse' smart constructor.
+data DeleteExperienceResponse = DeleteExperienceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteExperienceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteExperienceResponse_httpStatus' - The response's http status code.
+newDeleteExperienceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteExperienceResponse
+newDeleteExperienceResponse pHttpStatus_ =
+  DeleteExperienceResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteExperienceResponse_httpStatus :: Lens.Lens' DeleteExperienceResponse Prelude.Int
+deleteExperienceResponse_httpStatus = Lens.lens (\DeleteExperienceResponse' {httpStatus} -> httpStatus) (\s@DeleteExperienceResponse' {} a -> s {httpStatus = a} :: DeleteExperienceResponse)
+
+instance Prelude.NFData DeleteExperienceResponse where
+  rnf DeleteExperienceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/DeleteFaq.hs b/gen/Amazonka/Kendra/DeleteFaq.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/DeleteFaq.hs
@@ -0,0 +1,145 @@
+{-# 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.Kendra.DeleteFaq
+-- 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 FAQ from an index.
+module Amazonka.Kendra.DeleteFaq
+  ( -- * Creating a Request
+    DeleteFaq (..),
+    newDeleteFaq,
+
+    -- * Request Lenses
+    deleteFaq_id,
+    deleteFaq_indexId,
+
+    -- * Destructuring the Response
+    DeleteFaqResponse (..),
+    newDeleteFaqResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteFaq' smart constructor.
+data DeleteFaq = DeleteFaq'
+  { -- | The identifier of the FAQ you want to remove.
+    id :: Prelude.Text,
+    -- | The identifier of the index for the FAQ.
+    indexId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteFaq' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'deleteFaq_id' - The identifier of the FAQ you want to remove.
+--
+-- 'indexId', 'deleteFaq_indexId' - The identifier of the index for the FAQ.
+newDeleteFaq ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'indexId'
+  Prelude.Text ->
+  DeleteFaq
+newDeleteFaq pId_ pIndexId_ =
+  DeleteFaq' {id = pId_, indexId = pIndexId_}
+
+-- | The identifier of the FAQ you want to remove.
+deleteFaq_id :: Lens.Lens' DeleteFaq Prelude.Text
+deleteFaq_id = Lens.lens (\DeleteFaq' {id} -> id) (\s@DeleteFaq' {} a -> s {id = a} :: DeleteFaq)
+
+-- | The identifier of the index for the FAQ.
+deleteFaq_indexId :: Lens.Lens' DeleteFaq Prelude.Text
+deleteFaq_indexId = Lens.lens (\DeleteFaq' {indexId} -> indexId) (\s@DeleteFaq' {} a -> s {indexId = a} :: DeleteFaq)
+
+instance Core.AWSRequest DeleteFaq where
+  type AWSResponse DeleteFaq = DeleteFaqResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response = Response.receiveNull DeleteFaqResponse'
+
+instance Prelude.Hashable DeleteFaq where
+  hashWithSalt _salt DeleteFaq' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` indexId
+
+instance Prelude.NFData DeleteFaq where
+  rnf DeleteFaq' {..} =
+    Prelude.rnf id `Prelude.seq` Prelude.rnf indexId
+
+instance Data.ToHeaders DeleteFaq where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.DeleteFaq" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteFaq where
+  toJSON DeleteFaq' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Id" Data..= id),
+            Prelude.Just ("IndexId" Data..= indexId)
+          ]
+      )
+
+instance Data.ToPath DeleteFaq where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteFaq where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteFaqResponse' smart constructor.
+data DeleteFaqResponse = DeleteFaqResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteFaqResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteFaqResponse ::
+  DeleteFaqResponse
+newDeleteFaqResponse = DeleteFaqResponse'
+
+instance Prelude.NFData DeleteFaqResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Kendra/DeleteIndex.hs b/gen/Amazonka/Kendra/DeleteIndex.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/DeleteIndex.hs
@@ -0,0 +1,129 @@
+{-# 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.Kendra.DeleteIndex
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an existing Amazon Kendra index. An exception is not thrown if
+-- the index is already being deleted. While the index is being deleted,
+-- the @Status@ field returned by a call to the @DescribeIndex@ API is set
+-- to @DELETING@.
+module Amazonka.Kendra.DeleteIndex
+  ( -- * Creating a Request
+    DeleteIndex (..),
+    newDeleteIndex,
+
+    -- * Request Lenses
+    deleteIndex_id,
+
+    -- * Destructuring the Response
+    DeleteIndexResponse (..),
+    newDeleteIndexResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteIndex' smart constructor.
+data DeleteIndex = DeleteIndex'
+  { -- | The identifier of the index you want to delete.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteIndex' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'deleteIndex_id' - The identifier of the index you want to delete.
+newDeleteIndex ::
+  -- | 'id'
+  Prelude.Text ->
+  DeleteIndex
+newDeleteIndex pId_ = DeleteIndex' {id = pId_}
+
+-- | The identifier of the index you want to delete.
+deleteIndex_id :: Lens.Lens' DeleteIndex Prelude.Text
+deleteIndex_id = Lens.lens (\DeleteIndex' {id} -> id) (\s@DeleteIndex' {} a -> s {id = a} :: DeleteIndex)
+
+instance Core.AWSRequest DeleteIndex where
+  type AWSResponse DeleteIndex = DeleteIndexResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response = Response.receiveNull DeleteIndexResponse'
+
+instance Prelude.Hashable DeleteIndex where
+  hashWithSalt _salt DeleteIndex' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeleteIndex where
+  rnf DeleteIndex' {..} = Prelude.rnf id
+
+instance Data.ToHeaders DeleteIndex where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.DeleteIndex" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteIndex where
+  toJSON DeleteIndex' {..} =
+    Data.object
+      (Prelude.catMaybes [Prelude.Just ("Id" Data..= id)])
+
+instance Data.ToPath DeleteIndex where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteIndex where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteIndexResponse' smart constructor.
+data DeleteIndexResponse = DeleteIndexResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteIndexResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteIndexResponse ::
+  DeleteIndexResponse
+newDeleteIndexResponse = DeleteIndexResponse'
+
+instance Prelude.NFData DeleteIndexResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Kendra/DeletePrincipalMapping.hs b/gen/Amazonka/Kendra/DeletePrincipalMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/DeletePrincipalMapping.hs
@@ -0,0 +1,272 @@
+{-# 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.Kendra.DeletePrincipalMapping
+-- 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 group so that all users and sub groups that belong to the
+-- group can no longer access documents only available to that group.
+--
+-- For example, after deleting the group \"Summer Interns\", all interns
+-- who belonged to that group no longer see intern-only documents in their
+-- search results.
+--
+-- If you want to delete or replace users or sub groups of a group, you
+-- need to use the @PutPrincipalMapping@ operation. For example, if a user
+-- in the group \"Engineering\" leaves the engineering team and another
+-- user takes their place, you provide an updated list of users or sub
+-- groups that belong to the \"Engineering\" group when calling
+-- @PutPrincipalMapping@. You can update your internal list of users or sub
+-- groups and input this list when calling @PutPrincipalMapping@.
+--
+-- @DeletePrincipalMapping@ is currently not supported in the Amazon Web
+-- Services GovCloud (US-West) region.
+module Amazonka.Kendra.DeletePrincipalMapping
+  ( -- * Creating a Request
+    DeletePrincipalMapping (..),
+    newDeletePrincipalMapping,
+
+    -- * Request Lenses
+    deletePrincipalMapping_dataSourceId,
+    deletePrincipalMapping_orderingId,
+    deletePrincipalMapping_indexId,
+    deletePrincipalMapping_groupId,
+
+    -- * Destructuring the Response
+    DeletePrincipalMappingResponse (..),
+    newDeletePrincipalMappingResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeletePrincipalMapping' smart constructor.
+data DeletePrincipalMapping = DeletePrincipalMapping'
+  { -- | The identifier of the data source you want to delete a group from.
+    --
+    -- A group can be tied to multiple data sources. You can delete a group
+    -- from accessing documents in a certain data source. For example, the
+    -- groups \"Research\", \"Engineering\", and \"Sales and Marketing\" are
+    -- all tied to the company\'s documents stored in the data sources
+    -- Confluence and Salesforce. You want to delete \"Research\" and
+    -- \"Engineering\" groups from Salesforce, so that these groups cannot
+    -- access customer-related documents stored in Salesforce. Only \"Sales and
+    -- Marketing\" should access documents in the Salesforce data source.
+    dataSourceId :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp identifier you specify to ensure Amazon Kendra does not
+    -- override the latest @DELETE@ action with previous actions. The highest
+    -- number ID, which is the ordering ID, is the latest action you want to
+    -- process and apply on top of other actions with lower number IDs. This
+    -- prevents previous actions with lower number IDs from possibly overriding
+    -- the latest action.
+    --
+    -- The ordering ID can be the UNIX time of the last update you made to a
+    -- group members list. You would then provide this list when calling
+    -- @PutPrincipalMapping@. This ensures your @DELETE@ action for that
+    -- updated group with the latest members list doesn\'t get overwritten by
+    -- earlier @DELETE@ actions for the same group which are yet to be
+    -- processed.
+    --
+    -- The default ordering ID is the current UNIX time in milliseconds that
+    -- the action was received by Amazon Kendra.
+    orderingId :: Prelude.Maybe Prelude.Natural,
+    -- | The identifier of the index you want to delete a group from.
+    indexId :: Prelude.Text,
+    -- | The identifier of the group you want to delete.
+    groupId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeletePrincipalMapping' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSourceId', 'deletePrincipalMapping_dataSourceId' - The identifier of the data source you want to delete a group from.
+--
+-- A group can be tied to multiple data sources. You can delete a group
+-- from accessing documents in a certain data source. For example, the
+-- groups \"Research\", \"Engineering\", and \"Sales and Marketing\" are
+-- all tied to the company\'s documents stored in the data sources
+-- Confluence and Salesforce. You want to delete \"Research\" and
+-- \"Engineering\" groups from Salesforce, so that these groups cannot
+-- access customer-related documents stored in Salesforce. Only \"Sales and
+-- Marketing\" should access documents in the Salesforce data source.
+--
+-- 'orderingId', 'deletePrincipalMapping_orderingId' - The timestamp identifier you specify to ensure Amazon Kendra does not
+-- override the latest @DELETE@ action with previous actions. The highest
+-- number ID, which is the ordering ID, is the latest action you want to
+-- process and apply on top of other actions with lower number IDs. This
+-- prevents previous actions with lower number IDs from possibly overriding
+-- the latest action.
+--
+-- The ordering ID can be the UNIX time of the last update you made to a
+-- group members list. You would then provide this list when calling
+-- @PutPrincipalMapping@. This ensures your @DELETE@ action for that
+-- updated group with the latest members list doesn\'t get overwritten by
+-- earlier @DELETE@ actions for the same group which are yet to be
+-- processed.
+--
+-- The default ordering ID is the current UNIX time in milliseconds that
+-- the action was received by Amazon Kendra.
+--
+-- 'indexId', 'deletePrincipalMapping_indexId' - The identifier of the index you want to delete a group from.
+--
+-- 'groupId', 'deletePrincipalMapping_groupId' - The identifier of the group you want to delete.
+newDeletePrincipalMapping ::
+  -- | 'indexId'
+  Prelude.Text ->
+  -- | 'groupId'
+  Prelude.Text ->
+  DeletePrincipalMapping
+newDeletePrincipalMapping pIndexId_ pGroupId_ =
+  DeletePrincipalMapping'
+    { dataSourceId =
+        Prelude.Nothing,
+      orderingId = Prelude.Nothing,
+      indexId = pIndexId_,
+      groupId = pGroupId_
+    }
+
+-- | The identifier of the data source you want to delete a group from.
+--
+-- A group can be tied to multiple data sources. You can delete a group
+-- from accessing documents in a certain data source. For example, the
+-- groups \"Research\", \"Engineering\", and \"Sales and Marketing\" are
+-- all tied to the company\'s documents stored in the data sources
+-- Confluence and Salesforce. You want to delete \"Research\" and
+-- \"Engineering\" groups from Salesforce, so that these groups cannot
+-- access customer-related documents stored in Salesforce. Only \"Sales and
+-- Marketing\" should access documents in the Salesforce data source.
+deletePrincipalMapping_dataSourceId :: Lens.Lens' DeletePrincipalMapping (Prelude.Maybe Prelude.Text)
+deletePrincipalMapping_dataSourceId = Lens.lens (\DeletePrincipalMapping' {dataSourceId} -> dataSourceId) (\s@DeletePrincipalMapping' {} a -> s {dataSourceId = a} :: DeletePrincipalMapping)
+
+-- | The timestamp identifier you specify to ensure Amazon Kendra does not
+-- override the latest @DELETE@ action with previous actions. The highest
+-- number ID, which is the ordering ID, is the latest action you want to
+-- process and apply on top of other actions with lower number IDs. This
+-- prevents previous actions with lower number IDs from possibly overriding
+-- the latest action.
+--
+-- The ordering ID can be the UNIX time of the last update you made to a
+-- group members list. You would then provide this list when calling
+-- @PutPrincipalMapping@. This ensures your @DELETE@ action for that
+-- updated group with the latest members list doesn\'t get overwritten by
+-- earlier @DELETE@ actions for the same group which are yet to be
+-- processed.
+--
+-- The default ordering ID is the current UNIX time in milliseconds that
+-- the action was received by Amazon Kendra.
+deletePrincipalMapping_orderingId :: Lens.Lens' DeletePrincipalMapping (Prelude.Maybe Prelude.Natural)
+deletePrincipalMapping_orderingId = Lens.lens (\DeletePrincipalMapping' {orderingId} -> orderingId) (\s@DeletePrincipalMapping' {} a -> s {orderingId = a} :: DeletePrincipalMapping)
+
+-- | The identifier of the index you want to delete a group from.
+deletePrincipalMapping_indexId :: Lens.Lens' DeletePrincipalMapping Prelude.Text
+deletePrincipalMapping_indexId = Lens.lens (\DeletePrincipalMapping' {indexId} -> indexId) (\s@DeletePrincipalMapping' {} a -> s {indexId = a} :: DeletePrincipalMapping)
+
+-- | The identifier of the group you want to delete.
+deletePrincipalMapping_groupId :: Lens.Lens' DeletePrincipalMapping Prelude.Text
+deletePrincipalMapping_groupId = Lens.lens (\DeletePrincipalMapping' {groupId} -> groupId) (\s@DeletePrincipalMapping' {} a -> s {groupId = a} :: DeletePrincipalMapping)
+
+instance Core.AWSRequest DeletePrincipalMapping where
+  type
+    AWSResponse DeletePrincipalMapping =
+      DeletePrincipalMappingResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull
+      DeletePrincipalMappingResponse'
+
+instance Prelude.Hashable DeletePrincipalMapping where
+  hashWithSalt _salt DeletePrincipalMapping' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataSourceId
+      `Prelude.hashWithSalt` orderingId
+      `Prelude.hashWithSalt` indexId
+      `Prelude.hashWithSalt` groupId
+
+instance Prelude.NFData DeletePrincipalMapping where
+  rnf DeletePrincipalMapping' {..} =
+    Prelude.rnf dataSourceId
+      `Prelude.seq` Prelude.rnf orderingId
+      `Prelude.seq` Prelude.rnf indexId
+      `Prelude.seq` Prelude.rnf groupId
+
+instance Data.ToHeaders DeletePrincipalMapping where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.DeletePrincipalMapping" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeletePrincipalMapping where
+  toJSON DeletePrincipalMapping' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DataSourceId" Data..=) Prelude.<$> dataSourceId,
+            ("OrderingId" Data..=) Prelude.<$> orderingId,
+            Prelude.Just ("IndexId" Data..= indexId),
+            Prelude.Just ("GroupId" Data..= groupId)
+          ]
+      )
+
+instance Data.ToPath DeletePrincipalMapping where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeletePrincipalMapping where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeletePrincipalMappingResponse' smart constructor.
+data DeletePrincipalMappingResponse = DeletePrincipalMappingResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeletePrincipalMappingResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeletePrincipalMappingResponse ::
+  DeletePrincipalMappingResponse
+newDeletePrincipalMappingResponse =
+  DeletePrincipalMappingResponse'
+
+instance
+  Prelude.NFData
+    DeletePrincipalMappingResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/Kendra/DeleteQuerySuggestionsBlockList.hs b/gen/Amazonka/Kendra/DeleteQuerySuggestionsBlockList.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/DeleteQuerySuggestionsBlockList.hs
@@ -0,0 +1,178 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.DeleteQuerySuggestionsBlockList
+-- 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 block list used for query suggestions for an index.
+--
+-- A deleted block list might not take effect right away. Amazon Kendra
+-- needs to refresh the entire suggestions list to add back the queries
+-- that were previously blocked.
+--
+-- @DeleteQuerySuggestionsBlockList@ is currently not supported in the
+-- Amazon Web Services GovCloud (US-West) region.
+module Amazonka.Kendra.DeleteQuerySuggestionsBlockList
+  ( -- * Creating a Request
+    DeleteQuerySuggestionsBlockList (..),
+    newDeleteQuerySuggestionsBlockList,
+
+    -- * Request Lenses
+    deleteQuerySuggestionsBlockList_indexId,
+    deleteQuerySuggestionsBlockList_id,
+
+    -- * Destructuring the Response
+    DeleteQuerySuggestionsBlockListResponse (..),
+    newDeleteQuerySuggestionsBlockListResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteQuerySuggestionsBlockList' smart constructor.
+data DeleteQuerySuggestionsBlockList = DeleteQuerySuggestionsBlockList'
+  { -- | The identifier of the index for the block list.
+    indexId :: Prelude.Text,
+    -- | The identifier of the block list you want to delete.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteQuerySuggestionsBlockList' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'indexId', 'deleteQuerySuggestionsBlockList_indexId' - The identifier of the index for the block list.
+--
+-- 'id', 'deleteQuerySuggestionsBlockList_id' - The identifier of the block list you want to delete.
+newDeleteQuerySuggestionsBlockList ::
+  -- | 'indexId'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  DeleteQuerySuggestionsBlockList
+newDeleteQuerySuggestionsBlockList pIndexId_ pId_ =
+  DeleteQuerySuggestionsBlockList'
+    { indexId =
+        pIndexId_,
+      id = pId_
+    }
+
+-- | The identifier of the index for the block list.
+deleteQuerySuggestionsBlockList_indexId :: Lens.Lens' DeleteQuerySuggestionsBlockList Prelude.Text
+deleteQuerySuggestionsBlockList_indexId = Lens.lens (\DeleteQuerySuggestionsBlockList' {indexId} -> indexId) (\s@DeleteQuerySuggestionsBlockList' {} a -> s {indexId = a} :: DeleteQuerySuggestionsBlockList)
+
+-- | The identifier of the block list you want to delete.
+deleteQuerySuggestionsBlockList_id :: Lens.Lens' DeleteQuerySuggestionsBlockList Prelude.Text
+deleteQuerySuggestionsBlockList_id = Lens.lens (\DeleteQuerySuggestionsBlockList' {id} -> id) (\s@DeleteQuerySuggestionsBlockList' {} a -> s {id = a} :: DeleteQuerySuggestionsBlockList)
+
+instance
+  Core.AWSRequest
+    DeleteQuerySuggestionsBlockList
+  where
+  type
+    AWSResponse DeleteQuerySuggestionsBlockList =
+      DeleteQuerySuggestionsBlockListResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull
+      DeleteQuerySuggestionsBlockListResponse'
+
+instance
+  Prelude.Hashable
+    DeleteQuerySuggestionsBlockList
+  where
+  hashWithSalt
+    _salt
+    DeleteQuerySuggestionsBlockList' {..} =
+      _salt
+        `Prelude.hashWithSalt` indexId
+        `Prelude.hashWithSalt` id
+
+instance
+  Prelude.NFData
+    DeleteQuerySuggestionsBlockList
+  where
+  rnf DeleteQuerySuggestionsBlockList' {..} =
+    Prelude.rnf indexId `Prelude.seq` Prelude.rnf id
+
+instance
+  Data.ToHeaders
+    DeleteQuerySuggestionsBlockList
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.DeleteQuerySuggestionsBlockList" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteQuerySuggestionsBlockList where
+  toJSON DeleteQuerySuggestionsBlockList' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("IndexId" Data..= indexId),
+            Prelude.Just ("Id" Data..= id)
+          ]
+      )
+
+instance Data.ToPath DeleteQuerySuggestionsBlockList where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteQuerySuggestionsBlockList where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteQuerySuggestionsBlockListResponse' smart constructor.
+data DeleteQuerySuggestionsBlockListResponse = DeleteQuerySuggestionsBlockListResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteQuerySuggestionsBlockListResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteQuerySuggestionsBlockListResponse ::
+  DeleteQuerySuggestionsBlockListResponse
+newDeleteQuerySuggestionsBlockListResponse =
+  DeleteQuerySuggestionsBlockListResponse'
+
+instance
+  Prelude.NFData
+    DeleteQuerySuggestionsBlockListResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/Kendra/DeleteThesaurus.hs b/gen/Amazonka/Kendra/DeleteThesaurus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/DeleteThesaurus.hs
@@ -0,0 +1,148 @@
+{-# 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.Kendra.DeleteThesaurus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an existing Amazon Kendra thesaurus.
+module Amazonka.Kendra.DeleteThesaurus
+  ( -- * Creating a Request
+    DeleteThesaurus (..),
+    newDeleteThesaurus,
+
+    -- * Request Lenses
+    deleteThesaurus_id,
+    deleteThesaurus_indexId,
+
+    -- * Destructuring the Response
+    DeleteThesaurusResponse (..),
+    newDeleteThesaurusResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteThesaurus' smart constructor.
+data DeleteThesaurus = DeleteThesaurus'
+  { -- | The identifier of the thesaurus you want to delete.
+    id :: Prelude.Text,
+    -- | The identifier of the index for the thesaurus.
+    indexId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteThesaurus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'deleteThesaurus_id' - The identifier of the thesaurus you want to delete.
+--
+-- 'indexId', 'deleteThesaurus_indexId' - The identifier of the index for the thesaurus.
+newDeleteThesaurus ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'indexId'
+  Prelude.Text ->
+  DeleteThesaurus
+newDeleteThesaurus pId_ pIndexId_ =
+  DeleteThesaurus' {id = pId_, indexId = pIndexId_}
+
+-- | The identifier of the thesaurus you want to delete.
+deleteThesaurus_id :: Lens.Lens' DeleteThesaurus Prelude.Text
+deleteThesaurus_id = Lens.lens (\DeleteThesaurus' {id} -> id) (\s@DeleteThesaurus' {} a -> s {id = a} :: DeleteThesaurus)
+
+-- | The identifier of the index for the thesaurus.
+deleteThesaurus_indexId :: Lens.Lens' DeleteThesaurus Prelude.Text
+deleteThesaurus_indexId = Lens.lens (\DeleteThesaurus' {indexId} -> indexId) (\s@DeleteThesaurus' {} a -> s {indexId = a} :: DeleteThesaurus)
+
+instance Core.AWSRequest DeleteThesaurus where
+  type
+    AWSResponse DeleteThesaurus =
+      DeleteThesaurusResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull DeleteThesaurusResponse'
+
+instance Prelude.Hashable DeleteThesaurus where
+  hashWithSalt _salt DeleteThesaurus' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` indexId
+
+instance Prelude.NFData DeleteThesaurus where
+  rnf DeleteThesaurus' {..} =
+    Prelude.rnf id `Prelude.seq` Prelude.rnf indexId
+
+instance Data.ToHeaders DeleteThesaurus where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.DeleteThesaurus" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteThesaurus where
+  toJSON DeleteThesaurus' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Id" Data..= id),
+            Prelude.Just ("IndexId" Data..= indexId)
+          ]
+      )
+
+instance Data.ToPath DeleteThesaurus where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteThesaurus where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteThesaurusResponse' smart constructor.
+data DeleteThesaurusResponse = DeleteThesaurusResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteThesaurusResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteThesaurusResponse ::
+  DeleteThesaurusResponse
+newDeleteThesaurusResponse = DeleteThesaurusResponse'
+
+instance Prelude.NFData DeleteThesaurusResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Kendra/DescribeAccessControlConfiguration.hs b/gen/Amazonka/Kendra/DescribeAccessControlConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/DescribeAccessControlConfiguration.hs
@@ -0,0 +1,298 @@
+{-# 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.Kendra.DescribeAccessControlConfiguration
+-- 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 an access control configuration that you created
+-- for your documents in an index. This includes user and group access
+-- information for your documents. This is useful for user context
+-- filtering, where search results are filtered based on the user or their
+-- group access to documents.
+module Amazonka.Kendra.DescribeAccessControlConfiguration
+  ( -- * Creating a Request
+    DescribeAccessControlConfiguration (..),
+    newDescribeAccessControlConfiguration,
+
+    -- * Request Lenses
+    describeAccessControlConfiguration_indexId,
+    describeAccessControlConfiguration_id,
+
+    -- * Destructuring the Response
+    DescribeAccessControlConfigurationResponse (..),
+    newDescribeAccessControlConfigurationResponse,
+
+    -- * Response Lenses
+    describeAccessControlConfigurationResponse_accessControlList,
+    describeAccessControlConfigurationResponse_description,
+    describeAccessControlConfigurationResponse_errorMessage,
+    describeAccessControlConfigurationResponse_hierarchicalAccessControlList,
+    describeAccessControlConfigurationResponse_httpStatus,
+    describeAccessControlConfigurationResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeAccessControlConfiguration' smart constructor.
+data DescribeAccessControlConfiguration = DescribeAccessControlConfiguration'
+  { -- | The identifier of the index for an access control configuration.
+    indexId :: Prelude.Text,
+    -- | The identifier of the access control configuration you want to get
+    -- information on.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAccessControlConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'indexId', 'describeAccessControlConfiguration_indexId' - The identifier of the index for an access control configuration.
+--
+-- 'id', 'describeAccessControlConfiguration_id' - The identifier of the access control configuration you want to get
+-- information on.
+newDescribeAccessControlConfiguration ::
+  -- | 'indexId'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  DescribeAccessControlConfiguration
+newDescribeAccessControlConfiguration pIndexId_ pId_ =
+  DescribeAccessControlConfiguration'
+    { indexId =
+        pIndexId_,
+      id = pId_
+    }
+
+-- | The identifier of the index for an access control configuration.
+describeAccessControlConfiguration_indexId :: Lens.Lens' DescribeAccessControlConfiguration Prelude.Text
+describeAccessControlConfiguration_indexId = Lens.lens (\DescribeAccessControlConfiguration' {indexId} -> indexId) (\s@DescribeAccessControlConfiguration' {} a -> s {indexId = a} :: DescribeAccessControlConfiguration)
+
+-- | The identifier of the access control configuration you want to get
+-- information on.
+describeAccessControlConfiguration_id :: Lens.Lens' DescribeAccessControlConfiguration Prelude.Text
+describeAccessControlConfiguration_id = Lens.lens (\DescribeAccessControlConfiguration' {id} -> id) (\s@DescribeAccessControlConfiguration' {} a -> s {id = a} :: DescribeAccessControlConfiguration)
+
+instance
+  Core.AWSRequest
+    DescribeAccessControlConfiguration
+  where
+  type
+    AWSResponse DescribeAccessControlConfiguration =
+      DescribeAccessControlConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAccessControlConfigurationResponse'
+            Prelude.<$> ( x
+                            Data..?> "AccessControlList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "Description")
+            Prelude.<*> (x Data..?> "ErrorMessage")
+            Prelude.<*> (x Data..?> "HierarchicalAccessControlList")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Name")
+      )
+
+instance
+  Prelude.Hashable
+    DescribeAccessControlConfiguration
+  where
+  hashWithSalt
+    _salt
+    DescribeAccessControlConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` indexId
+        `Prelude.hashWithSalt` id
+
+instance
+  Prelude.NFData
+    DescribeAccessControlConfiguration
+  where
+  rnf DescribeAccessControlConfiguration' {..} =
+    Prelude.rnf indexId `Prelude.seq` Prelude.rnf id
+
+instance
+  Data.ToHeaders
+    DescribeAccessControlConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.DescribeAccessControlConfiguration" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    DescribeAccessControlConfiguration
+  where
+  toJSON DescribeAccessControlConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("IndexId" Data..= indexId),
+            Prelude.Just ("Id" Data..= id)
+          ]
+      )
+
+instance
+  Data.ToPath
+    DescribeAccessControlConfiguration
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeAccessControlConfiguration
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeAccessControlConfigurationResponse' smart constructor.
+data DescribeAccessControlConfigurationResponse = DescribeAccessControlConfigurationResponse'
+  { -- | Information on principals (users and\/or groups) and which documents
+    -- they should have access to. This is useful for user context filtering,
+    -- where search results are filtered based on the user or their group
+    -- access to documents.
+    accessControlList :: Prelude.Maybe [Principal],
+    -- | The description for the access control configuration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The error message containing details if there are issues processing the
+    -- access control configuration.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The list of
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/API_Principal.html principal>
+    -- lists that define the hierarchy for which documents users should have
+    -- access to.
+    hierarchicalAccessControlList :: Prelude.Maybe (Prelude.NonEmpty HierarchicalPrincipal),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name for the access control configuration.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAccessControlConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessControlList', 'describeAccessControlConfigurationResponse_accessControlList' - Information on principals (users and\/or groups) and which documents
+-- they should have access to. This is useful for user context filtering,
+-- where search results are filtered based on the user or their group
+-- access to documents.
+--
+-- 'description', 'describeAccessControlConfigurationResponse_description' - The description for the access control configuration.
+--
+-- 'errorMessage', 'describeAccessControlConfigurationResponse_errorMessage' - The error message containing details if there are issues processing the
+-- access control configuration.
+--
+-- 'hierarchicalAccessControlList', 'describeAccessControlConfigurationResponse_hierarchicalAccessControlList' - The list of
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_Principal.html principal>
+-- lists that define the hierarchy for which documents users should have
+-- access to.
+--
+-- 'httpStatus', 'describeAccessControlConfigurationResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'describeAccessControlConfigurationResponse_name' - The name for the access control configuration.
+newDescribeAccessControlConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  DescribeAccessControlConfigurationResponse
+newDescribeAccessControlConfigurationResponse
+  pHttpStatus_
+  pName_ =
+    DescribeAccessControlConfigurationResponse'
+      { accessControlList =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        errorMessage = Prelude.Nothing,
+        hierarchicalAccessControlList =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        name = pName_
+      }
+
+-- | Information on principals (users and\/or groups) and which documents
+-- they should have access to. This is useful for user context filtering,
+-- where search results are filtered based on the user or their group
+-- access to documents.
+describeAccessControlConfigurationResponse_accessControlList :: Lens.Lens' DescribeAccessControlConfigurationResponse (Prelude.Maybe [Principal])
+describeAccessControlConfigurationResponse_accessControlList = Lens.lens (\DescribeAccessControlConfigurationResponse' {accessControlList} -> accessControlList) (\s@DescribeAccessControlConfigurationResponse' {} a -> s {accessControlList = a} :: DescribeAccessControlConfigurationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The description for the access control configuration.
+describeAccessControlConfigurationResponse_description :: Lens.Lens' DescribeAccessControlConfigurationResponse (Prelude.Maybe Prelude.Text)
+describeAccessControlConfigurationResponse_description = Lens.lens (\DescribeAccessControlConfigurationResponse' {description} -> description) (\s@DescribeAccessControlConfigurationResponse' {} a -> s {description = a} :: DescribeAccessControlConfigurationResponse)
+
+-- | The error message containing details if there are issues processing the
+-- access control configuration.
+describeAccessControlConfigurationResponse_errorMessage :: Lens.Lens' DescribeAccessControlConfigurationResponse (Prelude.Maybe Prelude.Text)
+describeAccessControlConfigurationResponse_errorMessage = Lens.lens (\DescribeAccessControlConfigurationResponse' {errorMessage} -> errorMessage) (\s@DescribeAccessControlConfigurationResponse' {} a -> s {errorMessage = a} :: DescribeAccessControlConfigurationResponse)
+
+-- | The list of
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_Principal.html principal>
+-- lists that define the hierarchy for which documents users should have
+-- access to.
+describeAccessControlConfigurationResponse_hierarchicalAccessControlList :: Lens.Lens' DescribeAccessControlConfigurationResponse (Prelude.Maybe (Prelude.NonEmpty HierarchicalPrincipal))
+describeAccessControlConfigurationResponse_hierarchicalAccessControlList = Lens.lens (\DescribeAccessControlConfigurationResponse' {hierarchicalAccessControlList} -> hierarchicalAccessControlList) (\s@DescribeAccessControlConfigurationResponse' {} a -> s {hierarchicalAccessControlList = a} :: DescribeAccessControlConfigurationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeAccessControlConfigurationResponse_httpStatus :: Lens.Lens' DescribeAccessControlConfigurationResponse Prelude.Int
+describeAccessControlConfigurationResponse_httpStatus = Lens.lens (\DescribeAccessControlConfigurationResponse' {httpStatus} -> httpStatus) (\s@DescribeAccessControlConfigurationResponse' {} a -> s {httpStatus = a} :: DescribeAccessControlConfigurationResponse)
+
+-- | The name for the access control configuration.
+describeAccessControlConfigurationResponse_name :: Lens.Lens' DescribeAccessControlConfigurationResponse Prelude.Text
+describeAccessControlConfigurationResponse_name = Lens.lens (\DescribeAccessControlConfigurationResponse' {name} -> name) (\s@DescribeAccessControlConfigurationResponse' {} a -> s {name = a} :: DescribeAccessControlConfigurationResponse)
+
+instance
+  Prelude.NFData
+    DescribeAccessControlConfigurationResponse
+  where
+  rnf DescribeAccessControlConfigurationResponse' {..} =
+    Prelude.rnf accessControlList
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf hierarchicalAccessControlList
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/Kendra/DescribeDataSource.hs b/gen/Amazonka/Kendra/DescribeDataSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/DescribeDataSource.hs
@@ -0,0 +1,407 @@
+{-# 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.Kendra.DescribeDataSource
+-- 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 an Amazon Kendra data source connector.
+module Amazonka.Kendra.DescribeDataSource
+  ( -- * Creating a Request
+    DescribeDataSource (..),
+    newDescribeDataSource,
+
+    -- * Request Lenses
+    describeDataSource_id,
+    describeDataSource_indexId,
+
+    -- * Destructuring the Response
+    DescribeDataSourceResponse (..),
+    newDescribeDataSourceResponse,
+
+    -- * Response Lenses
+    describeDataSourceResponse_configuration,
+    describeDataSourceResponse_createdAt,
+    describeDataSourceResponse_customDocumentEnrichmentConfiguration,
+    describeDataSourceResponse_description,
+    describeDataSourceResponse_errorMessage,
+    describeDataSourceResponse_id,
+    describeDataSourceResponse_indexId,
+    describeDataSourceResponse_languageCode,
+    describeDataSourceResponse_name,
+    describeDataSourceResponse_roleArn,
+    describeDataSourceResponse_schedule,
+    describeDataSourceResponse_status,
+    describeDataSourceResponse_type,
+    describeDataSourceResponse_updatedAt,
+    describeDataSourceResponse_vpcConfiguration,
+    describeDataSourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeDataSource' smart constructor.
+data DescribeDataSource = DescribeDataSource'
+  { -- | The identifier of the data source connector.
+    id :: Prelude.Text,
+    -- | The identifier of the index used with the data source connector.
+    indexId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeDataSource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'describeDataSource_id' - The identifier of the data source connector.
+--
+-- 'indexId', 'describeDataSource_indexId' - The identifier of the index used with the data source connector.
+newDescribeDataSource ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'indexId'
+  Prelude.Text ->
+  DescribeDataSource
+newDescribeDataSource pId_ pIndexId_ =
+  DescribeDataSource' {id = pId_, indexId = pIndexId_}
+
+-- | The identifier of the data source connector.
+describeDataSource_id :: Lens.Lens' DescribeDataSource Prelude.Text
+describeDataSource_id = Lens.lens (\DescribeDataSource' {id} -> id) (\s@DescribeDataSource' {} a -> s {id = a} :: DescribeDataSource)
+
+-- | The identifier of the index used with the data source connector.
+describeDataSource_indexId :: Lens.Lens' DescribeDataSource Prelude.Text
+describeDataSource_indexId = Lens.lens (\DescribeDataSource' {indexId} -> indexId) (\s@DescribeDataSource' {} a -> s {indexId = a} :: DescribeDataSource)
+
+instance Core.AWSRequest DescribeDataSource where
+  type
+    AWSResponse DescribeDataSource =
+      DescribeDataSourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeDataSourceResponse'
+            Prelude.<$> (x Data..?> "Configuration")
+            Prelude.<*> (x Data..?> "CreatedAt")
+            Prelude.<*> (x Data..?> "CustomDocumentEnrichmentConfiguration")
+            Prelude.<*> (x Data..?> "Description")
+            Prelude.<*> (x Data..?> "ErrorMessage")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (x Data..?> "IndexId")
+            Prelude.<*> (x Data..?> "LanguageCode")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "RoleArn")
+            Prelude.<*> (x Data..?> "Schedule")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (x Data..?> "Type")
+            Prelude.<*> (x Data..?> "UpdatedAt")
+            Prelude.<*> (x Data..?> "VpcConfiguration")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeDataSource where
+  hashWithSalt _salt DescribeDataSource' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` indexId
+
+instance Prelude.NFData DescribeDataSource where
+  rnf DescribeDataSource' {..} =
+    Prelude.rnf id `Prelude.seq` Prelude.rnf indexId
+
+instance Data.ToHeaders DescribeDataSource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.DescribeDataSource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeDataSource where
+  toJSON DescribeDataSource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Id" Data..= id),
+            Prelude.Just ("IndexId" Data..= indexId)
+          ]
+      )
+
+instance Data.ToPath DescribeDataSource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeDataSource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeDataSourceResponse' smart constructor.
+data DescribeDataSourceResponse = DescribeDataSourceResponse'
+  { -- | Configuration details for the data source connector. This shows how the
+    -- data source is configured. The configuration options for a data source
+    -- depend on the data source provider.
+    configuration :: Prelude.Maybe DataSourceConfiguration,
+    -- | The Unix timestamp of when the data source connector was created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | Configuration information for altering document metadata and content
+    -- during the document ingestion process when you describe a data source.
+    --
+    -- For more information on how to create, modify and delete document
+    -- metadata, or make other content alterations when you ingest documents
+    -- into Amazon Kendra, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/custom-document-enrichment.html Customizing document metadata during the ingestion process>.
+    customDocumentEnrichmentConfiguration :: Prelude.Maybe CustomDocumentEnrichmentConfiguration,
+    -- | The description for the data source connector.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | When the @Status@ field value is @FAILED@, the @ErrorMessage@ field
+    -- contains a description of the error that caused the data source to fail.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the data source connector.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the index used with the data source connector.
+    indexId :: Prelude.Maybe Prelude.Text,
+    -- | The code for a language. This shows a supported language for all
+    -- documents in the data source. English is supported by default. For more
+    -- information on supported languages, including their codes, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/in-adding-languages.html Adding documents in languages other than English>.
+    languageCode :: Prelude.Maybe Prelude.Text,
+    -- | The name for the data source connector.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the role with permission to access the
+    -- data source and required resources.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | The schedule for Amazon Kendra to update the index.
+    schedule :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the data source connector. When the status is
+    -- @ACTIVE@ the data source is ready to use. When the status is @FAILED@,
+    -- the @ErrorMessage@ field contains the reason that the data source
+    -- failed.
+    status :: Prelude.Maybe DataSourceStatus,
+    -- | The type of the data source. For example, @SHAREPOINT@.
+    type' :: Prelude.Maybe DataSourceType,
+    -- | The Unix timestamp of when the data source connector was last updated.
+    updatedAt :: Prelude.Maybe Data.POSIX,
+    -- | Configuration information for an Amazon Virtual Private Cloud to connect
+    -- to your data source. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+    vpcConfiguration :: Prelude.Maybe DataSourceVpcConfiguration,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeDataSourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configuration', 'describeDataSourceResponse_configuration' - Configuration details for the data source connector. This shows how the
+-- data source is configured. The configuration options for a data source
+-- depend on the data source provider.
+--
+-- 'createdAt', 'describeDataSourceResponse_createdAt' - The Unix timestamp of when the data source connector was created.
+--
+-- 'customDocumentEnrichmentConfiguration', 'describeDataSourceResponse_customDocumentEnrichmentConfiguration' - Configuration information for altering document metadata and content
+-- during the document ingestion process when you describe a data source.
+--
+-- For more information on how to create, modify and delete document
+-- metadata, or make other content alterations when you ingest documents
+-- into Amazon Kendra, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/custom-document-enrichment.html Customizing document metadata during the ingestion process>.
+--
+-- 'description', 'describeDataSourceResponse_description' - The description for the data source connector.
+--
+-- 'errorMessage', 'describeDataSourceResponse_errorMessage' - When the @Status@ field value is @FAILED@, the @ErrorMessage@ field
+-- contains a description of the error that caused the data source to fail.
+--
+-- 'id', 'describeDataSourceResponse_id' - The identifier of the data source connector.
+--
+-- 'indexId', 'describeDataSourceResponse_indexId' - The identifier of the index used with the data source connector.
+--
+-- 'languageCode', 'describeDataSourceResponse_languageCode' - The code for a language. This shows a supported language for all
+-- documents in the data source. English is supported by default. For more
+-- information on supported languages, including their codes, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/in-adding-languages.html Adding documents in languages other than English>.
+--
+-- 'name', 'describeDataSourceResponse_name' - The name for the data source connector.
+--
+-- 'roleArn', 'describeDataSourceResponse_roleArn' - The Amazon Resource Name (ARN) of the role with permission to access the
+-- data source and required resources.
+--
+-- 'schedule', 'describeDataSourceResponse_schedule' - The schedule for Amazon Kendra to update the index.
+--
+-- 'status', 'describeDataSourceResponse_status' - The current status of the data source connector. When the status is
+-- @ACTIVE@ the data source is ready to use. When the status is @FAILED@,
+-- the @ErrorMessage@ field contains the reason that the data source
+-- failed.
+--
+-- 'type'', 'describeDataSourceResponse_type' - The type of the data source. For example, @SHAREPOINT@.
+--
+-- 'updatedAt', 'describeDataSourceResponse_updatedAt' - The Unix timestamp of when the data source connector was last updated.
+--
+-- 'vpcConfiguration', 'describeDataSourceResponse_vpcConfiguration' - Configuration information for an Amazon Virtual Private Cloud to connect
+-- to your data source. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+--
+-- 'httpStatus', 'describeDataSourceResponse_httpStatus' - The response's http status code.
+newDescribeDataSourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeDataSourceResponse
+newDescribeDataSourceResponse pHttpStatus_ =
+  DescribeDataSourceResponse'
+    { configuration =
+        Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      customDocumentEnrichmentConfiguration =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      id = Prelude.Nothing,
+      indexId = Prelude.Nothing,
+      languageCode = Prelude.Nothing,
+      name = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      schedule = Prelude.Nothing,
+      status = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      updatedAt = Prelude.Nothing,
+      vpcConfiguration = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Configuration details for the data source connector. This shows how the
+-- data source is configured. The configuration options for a data source
+-- depend on the data source provider.
+describeDataSourceResponse_configuration :: Lens.Lens' DescribeDataSourceResponse (Prelude.Maybe DataSourceConfiguration)
+describeDataSourceResponse_configuration = Lens.lens (\DescribeDataSourceResponse' {configuration} -> configuration) (\s@DescribeDataSourceResponse' {} a -> s {configuration = a} :: DescribeDataSourceResponse)
+
+-- | The Unix timestamp of when the data source connector was created.
+describeDataSourceResponse_createdAt :: Lens.Lens' DescribeDataSourceResponse (Prelude.Maybe Prelude.UTCTime)
+describeDataSourceResponse_createdAt = Lens.lens (\DescribeDataSourceResponse' {createdAt} -> createdAt) (\s@DescribeDataSourceResponse' {} a -> s {createdAt = a} :: DescribeDataSourceResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Configuration information for altering document metadata and content
+-- during the document ingestion process when you describe a data source.
+--
+-- For more information on how to create, modify and delete document
+-- metadata, or make other content alterations when you ingest documents
+-- into Amazon Kendra, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/custom-document-enrichment.html Customizing document metadata during the ingestion process>.
+describeDataSourceResponse_customDocumentEnrichmentConfiguration :: Lens.Lens' DescribeDataSourceResponse (Prelude.Maybe CustomDocumentEnrichmentConfiguration)
+describeDataSourceResponse_customDocumentEnrichmentConfiguration = Lens.lens (\DescribeDataSourceResponse' {customDocumentEnrichmentConfiguration} -> customDocumentEnrichmentConfiguration) (\s@DescribeDataSourceResponse' {} a -> s {customDocumentEnrichmentConfiguration = a} :: DescribeDataSourceResponse)
+
+-- | The description for the data source connector.
+describeDataSourceResponse_description :: Lens.Lens' DescribeDataSourceResponse (Prelude.Maybe Prelude.Text)
+describeDataSourceResponse_description = Lens.lens (\DescribeDataSourceResponse' {description} -> description) (\s@DescribeDataSourceResponse' {} a -> s {description = a} :: DescribeDataSourceResponse)
+
+-- | When the @Status@ field value is @FAILED@, the @ErrorMessage@ field
+-- contains a description of the error that caused the data source to fail.
+describeDataSourceResponse_errorMessage :: Lens.Lens' DescribeDataSourceResponse (Prelude.Maybe Prelude.Text)
+describeDataSourceResponse_errorMessage = Lens.lens (\DescribeDataSourceResponse' {errorMessage} -> errorMessage) (\s@DescribeDataSourceResponse' {} a -> s {errorMessage = a} :: DescribeDataSourceResponse)
+
+-- | The identifier of the data source connector.
+describeDataSourceResponse_id :: Lens.Lens' DescribeDataSourceResponse (Prelude.Maybe Prelude.Text)
+describeDataSourceResponse_id = Lens.lens (\DescribeDataSourceResponse' {id} -> id) (\s@DescribeDataSourceResponse' {} a -> s {id = a} :: DescribeDataSourceResponse)
+
+-- | The identifier of the index used with the data source connector.
+describeDataSourceResponse_indexId :: Lens.Lens' DescribeDataSourceResponse (Prelude.Maybe Prelude.Text)
+describeDataSourceResponse_indexId = Lens.lens (\DescribeDataSourceResponse' {indexId} -> indexId) (\s@DescribeDataSourceResponse' {} a -> s {indexId = a} :: DescribeDataSourceResponse)
+
+-- | The code for a language. This shows a supported language for all
+-- documents in the data source. English is supported by default. For more
+-- information on supported languages, including their codes, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/in-adding-languages.html Adding documents in languages other than English>.
+describeDataSourceResponse_languageCode :: Lens.Lens' DescribeDataSourceResponse (Prelude.Maybe Prelude.Text)
+describeDataSourceResponse_languageCode = Lens.lens (\DescribeDataSourceResponse' {languageCode} -> languageCode) (\s@DescribeDataSourceResponse' {} a -> s {languageCode = a} :: DescribeDataSourceResponse)
+
+-- | The name for the data source connector.
+describeDataSourceResponse_name :: Lens.Lens' DescribeDataSourceResponse (Prelude.Maybe Prelude.Text)
+describeDataSourceResponse_name = Lens.lens (\DescribeDataSourceResponse' {name} -> name) (\s@DescribeDataSourceResponse' {} a -> s {name = a} :: DescribeDataSourceResponse)
+
+-- | The Amazon Resource Name (ARN) of the role with permission to access the
+-- data source and required resources.
+describeDataSourceResponse_roleArn :: Lens.Lens' DescribeDataSourceResponse (Prelude.Maybe Prelude.Text)
+describeDataSourceResponse_roleArn = Lens.lens (\DescribeDataSourceResponse' {roleArn} -> roleArn) (\s@DescribeDataSourceResponse' {} a -> s {roleArn = a} :: DescribeDataSourceResponse)
+
+-- | The schedule for Amazon Kendra to update the index.
+describeDataSourceResponse_schedule :: Lens.Lens' DescribeDataSourceResponse (Prelude.Maybe Prelude.Text)
+describeDataSourceResponse_schedule = Lens.lens (\DescribeDataSourceResponse' {schedule} -> schedule) (\s@DescribeDataSourceResponse' {} a -> s {schedule = a} :: DescribeDataSourceResponse)
+
+-- | The current status of the data source connector. When the status is
+-- @ACTIVE@ the data source is ready to use. When the status is @FAILED@,
+-- the @ErrorMessage@ field contains the reason that the data source
+-- failed.
+describeDataSourceResponse_status :: Lens.Lens' DescribeDataSourceResponse (Prelude.Maybe DataSourceStatus)
+describeDataSourceResponse_status = Lens.lens (\DescribeDataSourceResponse' {status} -> status) (\s@DescribeDataSourceResponse' {} a -> s {status = a} :: DescribeDataSourceResponse)
+
+-- | The type of the data source. For example, @SHAREPOINT@.
+describeDataSourceResponse_type :: Lens.Lens' DescribeDataSourceResponse (Prelude.Maybe DataSourceType)
+describeDataSourceResponse_type = Lens.lens (\DescribeDataSourceResponse' {type'} -> type') (\s@DescribeDataSourceResponse' {} a -> s {type' = a} :: DescribeDataSourceResponse)
+
+-- | The Unix timestamp of when the data source connector was last updated.
+describeDataSourceResponse_updatedAt :: Lens.Lens' DescribeDataSourceResponse (Prelude.Maybe Prelude.UTCTime)
+describeDataSourceResponse_updatedAt = Lens.lens (\DescribeDataSourceResponse' {updatedAt} -> updatedAt) (\s@DescribeDataSourceResponse' {} a -> s {updatedAt = a} :: DescribeDataSourceResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Configuration information for an Amazon Virtual Private Cloud to connect
+-- to your data source. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+describeDataSourceResponse_vpcConfiguration :: Lens.Lens' DescribeDataSourceResponse (Prelude.Maybe DataSourceVpcConfiguration)
+describeDataSourceResponse_vpcConfiguration = Lens.lens (\DescribeDataSourceResponse' {vpcConfiguration} -> vpcConfiguration) (\s@DescribeDataSourceResponse' {} a -> s {vpcConfiguration = a} :: DescribeDataSourceResponse)
+
+-- | The response's http status code.
+describeDataSourceResponse_httpStatus :: Lens.Lens' DescribeDataSourceResponse Prelude.Int
+describeDataSourceResponse_httpStatus = Lens.lens (\DescribeDataSourceResponse' {httpStatus} -> httpStatus) (\s@DescribeDataSourceResponse' {} a -> s {httpStatus = a} :: DescribeDataSourceResponse)
+
+instance Prelude.NFData DescribeDataSourceResponse where
+  rnf DescribeDataSourceResponse' {..} =
+    Prelude.rnf configuration
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf customDocumentEnrichmentConfiguration
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf indexId
+      `Prelude.seq` Prelude.rnf languageCode
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf schedule
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf vpcConfiguration
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/DescribeExperience.hs b/gen/Amazonka/Kendra/DescribeExperience.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/DescribeExperience.hs
@@ -0,0 +1,340 @@
+{-# 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.Kendra.DescribeExperience
+-- 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 your Amazon Kendra experience such as a search
+-- application. For more information on creating a search application
+-- experience, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/deploying-search-experience-no-code.html Building a search experience with no code>.
+module Amazonka.Kendra.DescribeExperience
+  ( -- * Creating a Request
+    DescribeExperience (..),
+    newDescribeExperience,
+
+    -- * Request Lenses
+    describeExperience_id,
+    describeExperience_indexId,
+
+    -- * Destructuring the Response
+    DescribeExperienceResponse (..),
+    newDescribeExperienceResponse,
+
+    -- * Response Lenses
+    describeExperienceResponse_configuration,
+    describeExperienceResponse_createdAt,
+    describeExperienceResponse_description,
+    describeExperienceResponse_endpoints,
+    describeExperienceResponse_errorMessage,
+    describeExperienceResponse_id,
+    describeExperienceResponse_indexId,
+    describeExperienceResponse_name,
+    describeExperienceResponse_roleArn,
+    describeExperienceResponse_status,
+    describeExperienceResponse_updatedAt,
+    describeExperienceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeExperience' smart constructor.
+data DescribeExperience = DescribeExperience'
+  { -- | The identifier of your Amazon Kendra experience you want to get
+    -- information on.
+    id :: Prelude.Text,
+    -- | The identifier of the index for your Amazon Kendra experience.
+    indexId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeExperience' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'describeExperience_id' - The identifier of your Amazon Kendra experience you want to get
+-- information on.
+--
+-- 'indexId', 'describeExperience_indexId' - The identifier of the index for your Amazon Kendra experience.
+newDescribeExperience ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'indexId'
+  Prelude.Text ->
+  DescribeExperience
+newDescribeExperience pId_ pIndexId_ =
+  DescribeExperience' {id = pId_, indexId = pIndexId_}
+
+-- | The identifier of your Amazon Kendra experience you want to get
+-- information on.
+describeExperience_id :: Lens.Lens' DescribeExperience Prelude.Text
+describeExperience_id = Lens.lens (\DescribeExperience' {id} -> id) (\s@DescribeExperience' {} a -> s {id = a} :: DescribeExperience)
+
+-- | The identifier of the index for your Amazon Kendra experience.
+describeExperience_indexId :: Lens.Lens' DescribeExperience Prelude.Text
+describeExperience_indexId = Lens.lens (\DescribeExperience' {indexId} -> indexId) (\s@DescribeExperience' {} a -> s {indexId = a} :: DescribeExperience)
+
+instance Core.AWSRequest DescribeExperience where
+  type
+    AWSResponse DescribeExperience =
+      DescribeExperienceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeExperienceResponse'
+            Prelude.<$> (x Data..?> "Configuration")
+            Prelude.<*> (x Data..?> "CreatedAt")
+            Prelude.<*> (x Data..?> "Description")
+            Prelude.<*> (x Data..?> "Endpoints")
+            Prelude.<*> (x Data..?> "ErrorMessage")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (x Data..?> "IndexId")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "RoleArn")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (x Data..?> "UpdatedAt")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeExperience where
+  hashWithSalt _salt DescribeExperience' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` indexId
+
+instance Prelude.NFData DescribeExperience where
+  rnf DescribeExperience' {..} =
+    Prelude.rnf id `Prelude.seq` Prelude.rnf indexId
+
+instance Data.ToHeaders DescribeExperience where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.DescribeExperience" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeExperience where
+  toJSON DescribeExperience' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Id" Data..= id),
+            Prelude.Just ("IndexId" Data..= indexId)
+          ]
+      )
+
+instance Data.ToPath DescribeExperience where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeExperience where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeExperienceResponse' smart constructor.
+data DescribeExperienceResponse = DescribeExperienceResponse'
+  { -- | Shows the configuration information for your Amazon Kendra experience.
+    -- This includes @ContentSourceConfiguration@, which specifies the data
+    -- source IDs and\/or FAQ IDs, and @UserIdentityConfiguration@, which
+    -- specifies the user or group information to grant access to your Amazon
+    -- Kendra experience.
+    configuration :: Prelude.Maybe ExperienceConfiguration,
+    -- | Shows the date-time your Amazon Kendra experience was created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | Shows the description for your Amazon Kendra experience.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Shows the endpoint URLs for your Amazon Kendra experiences. The URLs are
+    -- unique and fully hosted by Amazon Web Services.
+    endpoints :: Prelude.Maybe (Prelude.NonEmpty ExperienceEndpoint),
+    -- | The reason your Amazon Kendra experience could not properly process.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | Shows the identifier of your Amazon Kendra experience.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | Shows the identifier of the index for your Amazon Kendra experience.
+    indexId :: Prelude.Maybe Prelude.Text,
+    -- | Shows the name of your Amazon Kendra experience.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Shows the Amazon Resource Name (ARN) of a role with permission to access
+    -- @Query@ API, @QuerySuggestions@ API, @SubmitFeedback@ API, and IAM
+    -- Identity Center that stores your user and group information.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | The current processing status of your Amazon Kendra experience. When the
+    -- status is @ACTIVE@, your Amazon Kendra experience is ready to use. When
+    -- the status is @FAILED@, the @ErrorMessage@ field contains the reason
+    -- that this failed.
+    status :: Prelude.Maybe ExperienceStatus,
+    -- | Shows the date-time your Amazon Kendra experience was last updated.
+    updatedAt :: Prelude.Maybe Data.POSIX,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeExperienceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configuration', 'describeExperienceResponse_configuration' - Shows the configuration information for your Amazon Kendra experience.
+-- This includes @ContentSourceConfiguration@, which specifies the data
+-- source IDs and\/or FAQ IDs, and @UserIdentityConfiguration@, which
+-- specifies the user or group information to grant access to your Amazon
+-- Kendra experience.
+--
+-- 'createdAt', 'describeExperienceResponse_createdAt' - Shows the date-time your Amazon Kendra experience was created.
+--
+-- 'description', 'describeExperienceResponse_description' - Shows the description for your Amazon Kendra experience.
+--
+-- 'endpoints', 'describeExperienceResponse_endpoints' - Shows the endpoint URLs for your Amazon Kendra experiences. The URLs are
+-- unique and fully hosted by Amazon Web Services.
+--
+-- 'errorMessage', 'describeExperienceResponse_errorMessage' - The reason your Amazon Kendra experience could not properly process.
+--
+-- 'id', 'describeExperienceResponse_id' - Shows the identifier of your Amazon Kendra experience.
+--
+-- 'indexId', 'describeExperienceResponse_indexId' - Shows the identifier of the index for your Amazon Kendra experience.
+--
+-- 'name', 'describeExperienceResponse_name' - Shows the name of your Amazon Kendra experience.
+--
+-- 'roleArn', 'describeExperienceResponse_roleArn' - Shows the Amazon Resource Name (ARN) of a role with permission to access
+-- @Query@ API, @QuerySuggestions@ API, @SubmitFeedback@ API, and IAM
+-- Identity Center that stores your user and group information.
+--
+-- 'status', 'describeExperienceResponse_status' - The current processing status of your Amazon Kendra experience. When the
+-- status is @ACTIVE@, your Amazon Kendra experience is ready to use. When
+-- the status is @FAILED@, the @ErrorMessage@ field contains the reason
+-- that this failed.
+--
+-- 'updatedAt', 'describeExperienceResponse_updatedAt' - Shows the date-time your Amazon Kendra experience was last updated.
+--
+-- 'httpStatus', 'describeExperienceResponse_httpStatus' - The response's http status code.
+newDescribeExperienceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeExperienceResponse
+newDescribeExperienceResponse pHttpStatus_ =
+  DescribeExperienceResponse'
+    { configuration =
+        Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      description = Prelude.Nothing,
+      endpoints = Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      id = Prelude.Nothing,
+      indexId = Prelude.Nothing,
+      name = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      status = Prelude.Nothing,
+      updatedAt = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Shows the configuration information for your Amazon Kendra experience.
+-- This includes @ContentSourceConfiguration@, which specifies the data
+-- source IDs and\/or FAQ IDs, and @UserIdentityConfiguration@, which
+-- specifies the user or group information to grant access to your Amazon
+-- Kendra experience.
+describeExperienceResponse_configuration :: Lens.Lens' DescribeExperienceResponse (Prelude.Maybe ExperienceConfiguration)
+describeExperienceResponse_configuration = Lens.lens (\DescribeExperienceResponse' {configuration} -> configuration) (\s@DescribeExperienceResponse' {} a -> s {configuration = a} :: DescribeExperienceResponse)
+
+-- | Shows the date-time your Amazon Kendra experience was created.
+describeExperienceResponse_createdAt :: Lens.Lens' DescribeExperienceResponse (Prelude.Maybe Prelude.UTCTime)
+describeExperienceResponse_createdAt = Lens.lens (\DescribeExperienceResponse' {createdAt} -> createdAt) (\s@DescribeExperienceResponse' {} a -> s {createdAt = a} :: DescribeExperienceResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Shows the description for your Amazon Kendra experience.
+describeExperienceResponse_description :: Lens.Lens' DescribeExperienceResponse (Prelude.Maybe Prelude.Text)
+describeExperienceResponse_description = Lens.lens (\DescribeExperienceResponse' {description} -> description) (\s@DescribeExperienceResponse' {} a -> s {description = a} :: DescribeExperienceResponse)
+
+-- | Shows the endpoint URLs for your Amazon Kendra experiences. The URLs are
+-- unique and fully hosted by Amazon Web Services.
+describeExperienceResponse_endpoints :: Lens.Lens' DescribeExperienceResponse (Prelude.Maybe (Prelude.NonEmpty ExperienceEndpoint))
+describeExperienceResponse_endpoints = Lens.lens (\DescribeExperienceResponse' {endpoints} -> endpoints) (\s@DescribeExperienceResponse' {} a -> s {endpoints = a} :: DescribeExperienceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The reason your Amazon Kendra experience could not properly process.
+describeExperienceResponse_errorMessage :: Lens.Lens' DescribeExperienceResponse (Prelude.Maybe Prelude.Text)
+describeExperienceResponse_errorMessage = Lens.lens (\DescribeExperienceResponse' {errorMessage} -> errorMessage) (\s@DescribeExperienceResponse' {} a -> s {errorMessage = a} :: DescribeExperienceResponse)
+
+-- | Shows the identifier of your Amazon Kendra experience.
+describeExperienceResponse_id :: Lens.Lens' DescribeExperienceResponse (Prelude.Maybe Prelude.Text)
+describeExperienceResponse_id = Lens.lens (\DescribeExperienceResponse' {id} -> id) (\s@DescribeExperienceResponse' {} a -> s {id = a} :: DescribeExperienceResponse)
+
+-- | Shows the identifier of the index for your Amazon Kendra experience.
+describeExperienceResponse_indexId :: Lens.Lens' DescribeExperienceResponse (Prelude.Maybe Prelude.Text)
+describeExperienceResponse_indexId = Lens.lens (\DescribeExperienceResponse' {indexId} -> indexId) (\s@DescribeExperienceResponse' {} a -> s {indexId = a} :: DescribeExperienceResponse)
+
+-- | Shows the name of your Amazon Kendra experience.
+describeExperienceResponse_name :: Lens.Lens' DescribeExperienceResponse (Prelude.Maybe Prelude.Text)
+describeExperienceResponse_name = Lens.lens (\DescribeExperienceResponse' {name} -> name) (\s@DescribeExperienceResponse' {} a -> s {name = a} :: DescribeExperienceResponse)
+
+-- | Shows the Amazon Resource Name (ARN) of a role with permission to access
+-- @Query@ API, @QuerySuggestions@ API, @SubmitFeedback@ API, and IAM
+-- Identity Center that stores your user and group information.
+describeExperienceResponse_roleArn :: Lens.Lens' DescribeExperienceResponse (Prelude.Maybe Prelude.Text)
+describeExperienceResponse_roleArn = Lens.lens (\DescribeExperienceResponse' {roleArn} -> roleArn) (\s@DescribeExperienceResponse' {} a -> s {roleArn = a} :: DescribeExperienceResponse)
+
+-- | The current processing status of your Amazon Kendra experience. When the
+-- status is @ACTIVE@, your Amazon Kendra experience is ready to use. When
+-- the status is @FAILED@, the @ErrorMessage@ field contains the reason
+-- that this failed.
+describeExperienceResponse_status :: Lens.Lens' DescribeExperienceResponse (Prelude.Maybe ExperienceStatus)
+describeExperienceResponse_status = Lens.lens (\DescribeExperienceResponse' {status} -> status) (\s@DescribeExperienceResponse' {} a -> s {status = a} :: DescribeExperienceResponse)
+
+-- | Shows the date-time your Amazon Kendra experience was last updated.
+describeExperienceResponse_updatedAt :: Lens.Lens' DescribeExperienceResponse (Prelude.Maybe Prelude.UTCTime)
+describeExperienceResponse_updatedAt = Lens.lens (\DescribeExperienceResponse' {updatedAt} -> updatedAt) (\s@DescribeExperienceResponse' {} a -> s {updatedAt = a} :: DescribeExperienceResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+describeExperienceResponse_httpStatus :: Lens.Lens' DescribeExperienceResponse Prelude.Int
+describeExperienceResponse_httpStatus = Lens.lens (\DescribeExperienceResponse' {httpStatus} -> httpStatus) (\s@DescribeExperienceResponse' {} a -> s {httpStatus = a} :: DescribeExperienceResponse)
+
+instance Prelude.NFData DescribeExperienceResponse where
+  rnf DescribeExperienceResponse' {..} =
+    Prelude.rnf configuration
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf endpoints
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf indexId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/DescribeFaq.hs b/gen/Amazonka/Kendra/DescribeFaq.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/DescribeFaq.hs
@@ -0,0 +1,327 @@
+{-# 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.Kendra.DescribeFaq
+-- 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 an FAQ list.
+module Amazonka.Kendra.DescribeFaq
+  ( -- * Creating a Request
+    DescribeFaq (..),
+    newDescribeFaq,
+
+    -- * Request Lenses
+    describeFaq_id,
+    describeFaq_indexId,
+
+    -- * Destructuring the Response
+    DescribeFaqResponse (..),
+    newDescribeFaqResponse,
+
+    -- * Response Lenses
+    describeFaqResponse_createdAt,
+    describeFaqResponse_description,
+    describeFaqResponse_errorMessage,
+    describeFaqResponse_fileFormat,
+    describeFaqResponse_id,
+    describeFaqResponse_indexId,
+    describeFaqResponse_languageCode,
+    describeFaqResponse_name,
+    describeFaqResponse_roleArn,
+    describeFaqResponse_s3Path,
+    describeFaqResponse_status,
+    describeFaqResponse_updatedAt,
+    describeFaqResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeFaq' smart constructor.
+data DescribeFaq = DescribeFaq'
+  { -- | The identifier of the FAQ you want to get information on.
+    id :: Prelude.Text,
+    -- | The identifier of the index for the FAQ.
+    indexId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFaq' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'describeFaq_id' - The identifier of the FAQ you want to get information on.
+--
+-- 'indexId', 'describeFaq_indexId' - The identifier of the index for the FAQ.
+newDescribeFaq ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'indexId'
+  Prelude.Text ->
+  DescribeFaq
+newDescribeFaq pId_ pIndexId_ =
+  DescribeFaq' {id = pId_, indexId = pIndexId_}
+
+-- | The identifier of the FAQ you want to get information on.
+describeFaq_id :: Lens.Lens' DescribeFaq Prelude.Text
+describeFaq_id = Lens.lens (\DescribeFaq' {id} -> id) (\s@DescribeFaq' {} a -> s {id = a} :: DescribeFaq)
+
+-- | The identifier of the index for the FAQ.
+describeFaq_indexId :: Lens.Lens' DescribeFaq Prelude.Text
+describeFaq_indexId = Lens.lens (\DescribeFaq' {indexId} -> indexId) (\s@DescribeFaq' {} a -> s {indexId = a} :: DescribeFaq)
+
+instance Core.AWSRequest DescribeFaq where
+  type AWSResponse DescribeFaq = DescribeFaqResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeFaqResponse'
+            Prelude.<$> (x Data..?> "CreatedAt")
+            Prelude.<*> (x Data..?> "Description")
+            Prelude.<*> (x Data..?> "ErrorMessage")
+            Prelude.<*> (x Data..?> "FileFormat")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (x Data..?> "IndexId")
+            Prelude.<*> (x Data..?> "LanguageCode")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "RoleArn")
+            Prelude.<*> (x Data..?> "S3Path")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (x Data..?> "UpdatedAt")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeFaq where
+  hashWithSalt _salt DescribeFaq' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` indexId
+
+instance Prelude.NFData DescribeFaq where
+  rnf DescribeFaq' {..} =
+    Prelude.rnf id `Prelude.seq` Prelude.rnf indexId
+
+instance Data.ToHeaders DescribeFaq where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.DescribeFaq" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeFaq where
+  toJSON DescribeFaq' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Id" Data..= id),
+            Prelude.Just ("IndexId" Data..= indexId)
+          ]
+      )
+
+instance Data.ToPath DescribeFaq where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeFaq where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeFaqResponse' smart constructor.
+data DescribeFaqResponse = DescribeFaqResponse'
+  { -- | The date and time that the FAQ was created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The description of the FAQ that you provided when it was created.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | If the @Status@ field is @FAILED@, the @ErrorMessage@ field contains the
+    -- reason why the FAQ failed.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The file format used by the input files for the FAQ.
+    fileFormat :: Prelude.Maybe FaqFileFormat,
+    -- | The identifier of the FAQ.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the index for the FAQ.
+    indexId :: Prelude.Maybe Prelude.Text,
+    -- | The code for a language. This shows a supported language for the FAQ
+    -- document. English is supported by default. For more information on
+    -- supported languages, including their codes, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/in-adding-languages.html Adding documents in languages other than English>.
+    languageCode :: Prelude.Maybe Prelude.Text,
+    -- | The name that you gave the FAQ when it was created.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the role that provides access to the
+    -- S3 bucket containing the input files for the FAQ.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    s3Path :: Prelude.Maybe S3Path,
+    -- | The status of the FAQ. It is ready to use when the status is @ACTIVE@.
+    status :: Prelude.Maybe FaqStatus,
+    -- | The date and time that the FAQ was last updated.
+    updatedAt :: Prelude.Maybe Data.POSIX,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFaqResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdAt', 'describeFaqResponse_createdAt' - The date and time that the FAQ was created.
+--
+-- 'description', 'describeFaqResponse_description' - The description of the FAQ that you provided when it was created.
+--
+-- 'errorMessage', 'describeFaqResponse_errorMessage' - If the @Status@ field is @FAILED@, the @ErrorMessage@ field contains the
+-- reason why the FAQ failed.
+--
+-- 'fileFormat', 'describeFaqResponse_fileFormat' - The file format used by the input files for the FAQ.
+--
+-- 'id', 'describeFaqResponse_id' - The identifier of the FAQ.
+--
+-- 'indexId', 'describeFaqResponse_indexId' - The identifier of the index for the FAQ.
+--
+-- 'languageCode', 'describeFaqResponse_languageCode' - The code for a language. This shows a supported language for the FAQ
+-- document. English is supported by default. For more information on
+-- supported languages, including their codes, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/in-adding-languages.html Adding documents in languages other than English>.
+--
+-- 'name', 'describeFaqResponse_name' - The name that you gave the FAQ when it was created.
+--
+-- 'roleArn', 'describeFaqResponse_roleArn' - The Amazon Resource Name (ARN) of the role that provides access to the
+-- S3 bucket containing the input files for the FAQ.
+--
+-- 's3Path', 'describeFaqResponse_s3Path' - Undocumented member.
+--
+-- 'status', 'describeFaqResponse_status' - The status of the FAQ. It is ready to use when the status is @ACTIVE@.
+--
+-- 'updatedAt', 'describeFaqResponse_updatedAt' - The date and time that the FAQ was last updated.
+--
+-- 'httpStatus', 'describeFaqResponse_httpStatus' - The response's http status code.
+newDescribeFaqResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeFaqResponse
+newDescribeFaqResponse pHttpStatus_ =
+  DescribeFaqResponse'
+    { createdAt = Prelude.Nothing,
+      description = Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      fileFormat = Prelude.Nothing,
+      id = Prelude.Nothing,
+      indexId = Prelude.Nothing,
+      languageCode = Prelude.Nothing,
+      name = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      s3Path = Prelude.Nothing,
+      status = Prelude.Nothing,
+      updatedAt = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The date and time that the FAQ was created.
+describeFaqResponse_createdAt :: Lens.Lens' DescribeFaqResponse (Prelude.Maybe Prelude.UTCTime)
+describeFaqResponse_createdAt = Lens.lens (\DescribeFaqResponse' {createdAt} -> createdAt) (\s@DescribeFaqResponse' {} a -> s {createdAt = a} :: DescribeFaqResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the FAQ that you provided when it was created.
+describeFaqResponse_description :: Lens.Lens' DescribeFaqResponse (Prelude.Maybe Prelude.Text)
+describeFaqResponse_description = Lens.lens (\DescribeFaqResponse' {description} -> description) (\s@DescribeFaqResponse' {} a -> s {description = a} :: DescribeFaqResponse)
+
+-- | If the @Status@ field is @FAILED@, the @ErrorMessage@ field contains the
+-- reason why the FAQ failed.
+describeFaqResponse_errorMessage :: Lens.Lens' DescribeFaqResponse (Prelude.Maybe Prelude.Text)
+describeFaqResponse_errorMessage = Lens.lens (\DescribeFaqResponse' {errorMessage} -> errorMessage) (\s@DescribeFaqResponse' {} a -> s {errorMessage = a} :: DescribeFaqResponse)
+
+-- | The file format used by the input files for the FAQ.
+describeFaqResponse_fileFormat :: Lens.Lens' DescribeFaqResponse (Prelude.Maybe FaqFileFormat)
+describeFaqResponse_fileFormat = Lens.lens (\DescribeFaqResponse' {fileFormat} -> fileFormat) (\s@DescribeFaqResponse' {} a -> s {fileFormat = a} :: DescribeFaqResponse)
+
+-- | The identifier of the FAQ.
+describeFaqResponse_id :: Lens.Lens' DescribeFaqResponse (Prelude.Maybe Prelude.Text)
+describeFaqResponse_id = Lens.lens (\DescribeFaqResponse' {id} -> id) (\s@DescribeFaqResponse' {} a -> s {id = a} :: DescribeFaqResponse)
+
+-- | The identifier of the index for the FAQ.
+describeFaqResponse_indexId :: Lens.Lens' DescribeFaqResponse (Prelude.Maybe Prelude.Text)
+describeFaqResponse_indexId = Lens.lens (\DescribeFaqResponse' {indexId} -> indexId) (\s@DescribeFaqResponse' {} a -> s {indexId = a} :: DescribeFaqResponse)
+
+-- | The code for a language. This shows a supported language for the FAQ
+-- document. English is supported by default. For more information on
+-- supported languages, including their codes, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/in-adding-languages.html Adding documents in languages other than English>.
+describeFaqResponse_languageCode :: Lens.Lens' DescribeFaqResponse (Prelude.Maybe Prelude.Text)
+describeFaqResponse_languageCode = Lens.lens (\DescribeFaqResponse' {languageCode} -> languageCode) (\s@DescribeFaqResponse' {} a -> s {languageCode = a} :: DescribeFaqResponse)
+
+-- | The name that you gave the FAQ when it was created.
+describeFaqResponse_name :: Lens.Lens' DescribeFaqResponse (Prelude.Maybe Prelude.Text)
+describeFaqResponse_name = Lens.lens (\DescribeFaqResponse' {name} -> name) (\s@DescribeFaqResponse' {} a -> s {name = a} :: DescribeFaqResponse)
+
+-- | The Amazon Resource Name (ARN) of the role that provides access to the
+-- S3 bucket containing the input files for the FAQ.
+describeFaqResponse_roleArn :: Lens.Lens' DescribeFaqResponse (Prelude.Maybe Prelude.Text)
+describeFaqResponse_roleArn = Lens.lens (\DescribeFaqResponse' {roleArn} -> roleArn) (\s@DescribeFaqResponse' {} a -> s {roleArn = a} :: DescribeFaqResponse)
+
+-- | Undocumented member.
+describeFaqResponse_s3Path :: Lens.Lens' DescribeFaqResponse (Prelude.Maybe S3Path)
+describeFaqResponse_s3Path = Lens.lens (\DescribeFaqResponse' {s3Path} -> s3Path) (\s@DescribeFaqResponse' {} a -> s {s3Path = a} :: DescribeFaqResponse)
+
+-- | The status of the FAQ. It is ready to use when the status is @ACTIVE@.
+describeFaqResponse_status :: Lens.Lens' DescribeFaqResponse (Prelude.Maybe FaqStatus)
+describeFaqResponse_status = Lens.lens (\DescribeFaqResponse' {status} -> status) (\s@DescribeFaqResponse' {} a -> s {status = a} :: DescribeFaqResponse)
+
+-- | The date and time that the FAQ was last updated.
+describeFaqResponse_updatedAt :: Lens.Lens' DescribeFaqResponse (Prelude.Maybe Prelude.UTCTime)
+describeFaqResponse_updatedAt = Lens.lens (\DescribeFaqResponse' {updatedAt} -> updatedAt) (\s@DescribeFaqResponse' {} a -> s {updatedAt = a} :: DescribeFaqResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+describeFaqResponse_httpStatus :: Lens.Lens' DescribeFaqResponse Prelude.Int
+describeFaqResponse_httpStatus = Lens.lens (\DescribeFaqResponse' {httpStatus} -> httpStatus) (\s@DescribeFaqResponse' {} a -> s {httpStatus = a} :: DescribeFaqResponse)
+
+instance Prelude.NFData DescribeFaqResponse where
+  rnf DescribeFaqResponse' {..} =
+    Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf fileFormat
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf indexId
+      `Prelude.seq` Prelude.rnf languageCode
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf s3Path
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/DescribeIndex.hs b/gen/Amazonka/Kendra/DescribeIndex.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/DescribeIndex.hs
@@ -0,0 +1,400 @@
+{-# 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.Kendra.DescribeIndex
+-- 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 an existing Amazon Kendra index.
+module Amazonka.Kendra.DescribeIndex
+  ( -- * Creating a Request
+    DescribeIndex (..),
+    newDescribeIndex,
+
+    -- * Request Lenses
+    describeIndex_id,
+
+    -- * Destructuring the Response
+    DescribeIndexResponse (..),
+    newDescribeIndexResponse,
+
+    -- * Response Lenses
+    describeIndexResponse_capacityUnits,
+    describeIndexResponse_createdAt,
+    describeIndexResponse_description,
+    describeIndexResponse_documentMetadataConfigurations,
+    describeIndexResponse_edition,
+    describeIndexResponse_errorMessage,
+    describeIndexResponse_id,
+    describeIndexResponse_indexStatistics,
+    describeIndexResponse_name,
+    describeIndexResponse_roleArn,
+    describeIndexResponse_serverSideEncryptionConfiguration,
+    describeIndexResponse_status,
+    describeIndexResponse_updatedAt,
+    describeIndexResponse_userContextPolicy,
+    describeIndexResponse_userGroupResolutionConfiguration,
+    describeIndexResponse_userTokenConfigurations,
+    describeIndexResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeIndex' smart constructor.
+data DescribeIndex = DescribeIndex'
+  { -- | The identifier of the index you want to get information on.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeIndex' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'describeIndex_id' - The identifier of the index you want to get information on.
+newDescribeIndex ::
+  -- | 'id'
+  Prelude.Text ->
+  DescribeIndex
+newDescribeIndex pId_ = DescribeIndex' {id = pId_}
+
+-- | The identifier of the index you want to get information on.
+describeIndex_id :: Lens.Lens' DescribeIndex Prelude.Text
+describeIndex_id = Lens.lens (\DescribeIndex' {id} -> id) (\s@DescribeIndex' {} a -> s {id = a} :: DescribeIndex)
+
+instance Core.AWSRequest DescribeIndex where
+  type
+    AWSResponse DescribeIndex =
+      DescribeIndexResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeIndexResponse'
+            Prelude.<$> (x Data..?> "CapacityUnits")
+            Prelude.<*> (x Data..?> "CreatedAt")
+            Prelude.<*> (x Data..?> "Description")
+            Prelude.<*> ( x
+                            Data..?> "DocumentMetadataConfigurations"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "Edition")
+            Prelude.<*> (x Data..?> "ErrorMessage")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (x Data..?> "IndexStatistics")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "RoleArn")
+            Prelude.<*> (x Data..?> "ServerSideEncryptionConfiguration")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (x Data..?> "UpdatedAt")
+            Prelude.<*> (x Data..?> "UserContextPolicy")
+            Prelude.<*> (x Data..?> "UserGroupResolutionConfiguration")
+            Prelude.<*> ( x
+                            Data..?> "UserTokenConfigurations"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeIndex where
+  hashWithSalt _salt DescribeIndex' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DescribeIndex where
+  rnf DescribeIndex' {..} = Prelude.rnf id
+
+instance Data.ToHeaders DescribeIndex where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.DescribeIndex" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeIndex where
+  toJSON DescribeIndex' {..} =
+    Data.object
+      (Prelude.catMaybes [Prelude.Just ("Id" Data..= id)])
+
+instance Data.ToPath DescribeIndex where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeIndex where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeIndexResponse' smart constructor.
+data DescribeIndexResponse = DescribeIndexResponse'
+  { -- | For Enterprise Edition indexes, you can choose to use additional
+    -- capacity to meet the needs of your application. This contains the
+    -- capacity units used for the index. A query or document storage capacity
+    -- of zero indicates that the index is using the default capacity. For more
+    -- information on the default capacity for an index and adjusting this, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/adjusting-capacity.html Adjusting capacity>.
+    capacityUnits :: Prelude.Maybe CapacityUnitsConfiguration,
+    -- | The Unix datetime that the index was created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The description for the index.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Configuration information for document metadata or fields. Document
+    -- metadata are fields or attributes associated with your documents. For
+    -- example, the company department name associated with each document.
+    documentMetadataConfigurations :: Prelude.Maybe [DocumentMetadataConfiguration],
+    -- | The Amazon Kendra edition used for the index. You decide the edition
+    -- when you create the index.
+    edition :: Prelude.Maybe IndexEdition,
+    -- | When the @Status@ field value is @FAILED@, the @ErrorMessage@ field
+    -- contains a message that explains why.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the index.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | Provides information about the number of FAQ questions and answers and
+    -- the number of text documents indexed.
+    indexStatistics :: Prelude.Maybe IndexStatistics,
+    -- | The name of the index.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the IAM role that gives Amazon Kendra
+    -- permission to write to your Amazon Cloudwatch logs.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the KMScustomer master key (CMK) that is used to
+    -- encrypt your data. Amazon Kendra doesn\'t support asymmetric CMKs.
+    serverSideEncryptionConfiguration :: Prelude.Maybe ServerSideEncryptionConfiguration,
+    -- | The current status of the index. When the value is @ACTIVE@, the index
+    -- is ready for use. If the @Status@ field value is @FAILED@, the
+    -- @ErrorMessage@ field contains a message that explains why.
+    status :: Prelude.Maybe IndexStatus,
+    -- | The Unix datetime that the index was last updated.
+    updatedAt :: Prelude.Maybe Data.POSIX,
+    -- | The user context policy for the Amazon Kendra index.
+    userContextPolicy :: Prelude.Maybe UserContextPolicy,
+    -- | Whether you have enabled the configuration for fetching access levels of
+    -- groups and users from an IAM Identity Center (successor to Single
+    -- Sign-On) identity source.
+    userGroupResolutionConfiguration :: Prelude.Maybe UserGroupResolutionConfiguration,
+    -- | The user token configuration for the Amazon Kendra index.
+    userTokenConfigurations :: Prelude.Maybe [UserTokenConfiguration],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeIndexResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'capacityUnits', 'describeIndexResponse_capacityUnits' - For Enterprise Edition indexes, you can choose to use additional
+-- capacity to meet the needs of your application. This contains the
+-- capacity units used for the index. A query or document storage capacity
+-- of zero indicates that the index is using the default capacity. For more
+-- information on the default capacity for an index and adjusting this, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/adjusting-capacity.html Adjusting capacity>.
+--
+-- 'createdAt', 'describeIndexResponse_createdAt' - The Unix datetime that the index was created.
+--
+-- 'description', 'describeIndexResponse_description' - The description for the index.
+--
+-- 'documentMetadataConfigurations', 'describeIndexResponse_documentMetadataConfigurations' - Configuration information for document metadata or fields. Document
+-- metadata are fields or attributes associated with your documents. For
+-- example, the company department name associated with each document.
+--
+-- 'edition', 'describeIndexResponse_edition' - The Amazon Kendra edition used for the index. You decide the edition
+-- when you create the index.
+--
+-- 'errorMessage', 'describeIndexResponse_errorMessage' - When the @Status@ field value is @FAILED@, the @ErrorMessage@ field
+-- contains a message that explains why.
+--
+-- 'id', 'describeIndexResponse_id' - The identifier of the index.
+--
+-- 'indexStatistics', 'describeIndexResponse_indexStatistics' - Provides information about the number of FAQ questions and answers and
+-- the number of text documents indexed.
+--
+-- 'name', 'describeIndexResponse_name' - The name of the index.
+--
+-- 'roleArn', 'describeIndexResponse_roleArn' - The Amazon Resource Name (ARN) of the IAM role that gives Amazon Kendra
+-- permission to write to your Amazon Cloudwatch logs.
+--
+-- 'serverSideEncryptionConfiguration', 'describeIndexResponse_serverSideEncryptionConfiguration' - The identifier of the KMScustomer master key (CMK) that is used to
+-- encrypt your data. Amazon Kendra doesn\'t support asymmetric CMKs.
+--
+-- 'status', 'describeIndexResponse_status' - The current status of the index. When the value is @ACTIVE@, the index
+-- is ready for use. If the @Status@ field value is @FAILED@, the
+-- @ErrorMessage@ field contains a message that explains why.
+--
+-- 'updatedAt', 'describeIndexResponse_updatedAt' - The Unix datetime that the index was last updated.
+--
+-- 'userContextPolicy', 'describeIndexResponse_userContextPolicy' - The user context policy for the Amazon Kendra index.
+--
+-- 'userGroupResolutionConfiguration', 'describeIndexResponse_userGroupResolutionConfiguration' - Whether you have enabled the configuration for fetching access levels of
+-- groups and users from an IAM Identity Center (successor to Single
+-- Sign-On) identity source.
+--
+-- 'userTokenConfigurations', 'describeIndexResponse_userTokenConfigurations' - The user token configuration for the Amazon Kendra index.
+--
+-- 'httpStatus', 'describeIndexResponse_httpStatus' - The response's http status code.
+newDescribeIndexResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeIndexResponse
+newDescribeIndexResponse pHttpStatus_ =
+  DescribeIndexResponse'
+    { capacityUnits =
+        Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      description = Prelude.Nothing,
+      documentMetadataConfigurations = Prelude.Nothing,
+      edition = Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      id = Prelude.Nothing,
+      indexStatistics = Prelude.Nothing,
+      name = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      serverSideEncryptionConfiguration = Prelude.Nothing,
+      status = Prelude.Nothing,
+      updatedAt = Prelude.Nothing,
+      userContextPolicy = Prelude.Nothing,
+      userGroupResolutionConfiguration = Prelude.Nothing,
+      userTokenConfigurations = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | For Enterprise Edition indexes, you can choose to use additional
+-- capacity to meet the needs of your application. This contains the
+-- capacity units used for the index. A query or document storage capacity
+-- of zero indicates that the index is using the default capacity. For more
+-- information on the default capacity for an index and adjusting this, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/adjusting-capacity.html Adjusting capacity>.
+describeIndexResponse_capacityUnits :: Lens.Lens' DescribeIndexResponse (Prelude.Maybe CapacityUnitsConfiguration)
+describeIndexResponse_capacityUnits = Lens.lens (\DescribeIndexResponse' {capacityUnits} -> capacityUnits) (\s@DescribeIndexResponse' {} a -> s {capacityUnits = a} :: DescribeIndexResponse)
+
+-- | The Unix datetime that the index was created.
+describeIndexResponse_createdAt :: Lens.Lens' DescribeIndexResponse (Prelude.Maybe Prelude.UTCTime)
+describeIndexResponse_createdAt = Lens.lens (\DescribeIndexResponse' {createdAt} -> createdAt) (\s@DescribeIndexResponse' {} a -> s {createdAt = a} :: DescribeIndexResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description for the index.
+describeIndexResponse_description :: Lens.Lens' DescribeIndexResponse (Prelude.Maybe Prelude.Text)
+describeIndexResponse_description = Lens.lens (\DescribeIndexResponse' {description} -> description) (\s@DescribeIndexResponse' {} a -> s {description = a} :: DescribeIndexResponse)
+
+-- | Configuration information for document metadata or fields. Document
+-- metadata are fields or attributes associated with your documents. For
+-- example, the company department name associated with each document.
+describeIndexResponse_documentMetadataConfigurations :: Lens.Lens' DescribeIndexResponse (Prelude.Maybe [DocumentMetadataConfiguration])
+describeIndexResponse_documentMetadataConfigurations = Lens.lens (\DescribeIndexResponse' {documentMetadataConfigurations} -> documentMetadataConfigurations) (\s@DescribeIndexResponse' {} a -> s {documentMetadataConfigurations = a} :: DescribeIndexResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Kendra edition used for the index. You decide the edition
+-- when you create the index.
+describeIndexResponse_edition :: Lens.Lens' DescribeIndexResponse (Prelude.Maybe IndexEdition)
+describeIndexResponse_edition = Lens.lens (\DescribeIndexResponse' {edition} -> edition) (\s@DescribeIndexResponse' {} a -> s {edition = a} :: DescribeIndexResponse)
+
+-- | When the @Status@ field value is @FAILED@, the @ErrorMessage@ field
+-- contains a message that explains why.
+describeIndexResponse_errorMessage :: Lens.Lens' DescribeIndexResponse (Prelude.Maybe Prelude.Text)
+describeIndexResponse_errorMessage = Lens.lens (\DescribeIndexResponse' {errorMessage} -> errorMessage) (\s@DescribeIndexResponse' {} a -> s {errorMessage = a} :: DescribeIndexResponse)
+
+-- | The identifier of the index.
+describeIndexResponse_id :: Lens.Lens' DescribeIndexResponse (Prelude.Maybe Prelude.Text)
+describeIndexResponse_id = Lens.lens (\DescribeIndexResponse' {id} -> id) (\s@DescribeIndexResponse' {} a -> s {id = a} :: DescribeIndexResponse)
+
+-- | Provides information about the number of FAQ questions and answers and
+-- the number of text documents indexed.
+describeIndexResponse_indexStatistics :: Lens.Lens' DescribeIndexResponse (Prelude.Maybe IndexStatistics)
+describeIndexResponse_indexStatistics = Lens.lens (\DescribeIndexResponse' {indexStatistics} -> indexStatistics) (\s@DescribeIndexResponse' {} a -> s {indexStatistics = a} :: DescribeIndexResponse)
+
+-- | The name of the index.
+describeIndexResponse_name :: Lens.Lens' DescribeIndexResponse (Prelude.Maybe Prelude.Text)
+describeIndexResponse_name = Lens.lens (\DescribeIndexResponse' {name} -> name) (\s@DescribeIndexResponse' {} a -> s {name = a} :: DescribeIndexResponse)
+
+-- | The Amazon Resource Name (ARN) of the IAM role that gives Amazon Kendra
+-- permission to write to your Amazon Cloudwatch logs.
+describeIndexResponse_roleArn :: Lens.Lens' DescribeIndexResponse (Prelude.Maybe Prelude.Text)
+describeIndexResponse_roleArn = Lens.lens (\DescribeIndexResponse' {roleArn} -> roleArn) (\s@DescribeIndexResponse' {} a -> s {roleArn = a} :: DescribeIndexResponse)
+
+-- | The identifier of the KMScustomer master key (CMK) that is used to
+-- encrypt your data. Amazon Kendra doesn\'t support asymmetric CMKs.
+describeIndexResponse_serverSideEncryptionConfiguration :: Lens.Lens' DescribeIndexResponse (Prelude.Maybe ServerSideEncryptionConfiguration)
+describeIndexResponse_serverSideEncryptionConfiguration = Lens.lens (\DescribeIndexResponse' {serverSideEncryptionConfiguration} -> serverSideEncryptionConfiguration) (\s@DescribeIndexResponse' {} a -> s {serverSideEncryptionConfiguration = a} :: DescribeIndexResponse)
+
+-- | The current status of the index. When the value is @ACTIVE@, the index
+-- is ready for use. If the @Status@ field value is @FAILED@, the
+-- @ErrorMessage@ field contains a message that explains why.
+describeIndexResponse_status :: Lens.Lens' DescribeIndexResponse (Prelude.Maybe IndexStatus)
+describeIndexResponse_status = Lens.lens (\DescribeIndexResponse' {status} -> status) (\s@DescribeIndexResponse' {} a -> s {status = a} :: DescribeIndexResponse)
+
+-- | The Unix datetime that the index was last updated.
+describeIndexResponse_updatedAt :: Lens.Lens' DescribeIndexResponse (Prelude.Maybe Prelude.UTCTime)
+describeIndexResponse_updatedAt = Lens.lens (\DescribeIndexResponse' {updatedAt} -> updatedAt) (\s@DescribeIndexResponse' {} a -> s {updatedAt = a} :: DescribeIndexResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The user context policy for the Amazon Kendra index.
+describeIndexResponse_userContextPolicy :: Lens.Lens' DescribeIndexResponse (Prelude.Maybe UserContextPolicy)
+describeIndexResponse_userContextPolicy = Lens.lens (\DescribeIndexResponse' {userContextPolicy} -> userContextPolicy) (\s@DescribeIndexResponse' {} a -> s {userContextPolicy = a} :: DescribeIndexResponse)
+
+-- | Whether you have enabled the configuration for fetching access levels of
+-- groups and users from an IAM Identity Center (successor to Single
+-- Sign-On) identity source.
+describeIndexResponse_userGroupResolutionConfiguration :: Lens.Lens' DescribeIndexResponse (Prelude.Maybe UserGroupResolutionConfiguration)
+describeIndexResponse_userGroupResolutionConfiguration = Lens.lens (\DescribeIndexResponse' {userGroupResolutionConfiguration} -> userGroupResolutionConfiguration) (\s@DescribeIndexResponse' {} a -> s {userGroupResolutionConfiguration = a} :: DescribeIndexResponse)
+
+-- | The user token configuration for the Amazon Kendra index.
+describeIndexResponse_userTokenConfigurations :: Lens.Lens' DescribeIndexResponse (Prelude.Maybe [UserTokenConfiguration])
+describeIndexResponse_userTokenConfigurations = Lens.lens (\DescribeIndexResponse' {userTokenConfigurations} -> userTokenConfigurations) (\s@DescribeIndexResponse' {} a -> s {userTokenConfigurations = a} :: DescribeIndexResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeIndexResponse_httpStatus :: Lens.Lens' DescribeIndexResponse Prelude.Int
+describeIndexResponse_httpStatus = Lens.lens (\DescribeIndexResponse' {httpStatus} -> httpStatus) (\s@DescribeIndexResponse' {} a -> s {httpStatus = a} :: DescribeIndexResponse)
+
+instance Prelude.NFData DescribeIndexResponse where
+  rnf DescribeIndexResponse' {..} =
+    Prelude.rnf capacityUnits
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf documentMetadataConfigurations
+      `Prelude.seq` Prelude.rnf edition
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf indexStatistics
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf serverSideEncryptionConfiguration
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf userContextPolicy
+      `Prelude.seq` Prelude.rnf
+        userGroupResolutionConfiguration
+      `Prelude.seq` Prelude.rnf userTokenConfigurations
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/DescribePrincipalMapping.hs b/gen/Amazonka/Kendra/DescribePrincipalMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/DescribePrincipalMapping.hs
@@ -0,0 +1,313 @@
+{-# 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.Kendra.DescribePrincipalMapping
+-- 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 processing of @PUT@ and @DELETE@ actions for mapping users
+-- to their groups. This includes information on the status of actions
+-- currently processing or yet to be processed, when actions were last
+-- updated, when actions were received by Amazon Kendra, the latest action
+-- that should process and apply after other actions, and useful error
+-- messages if an action could not be processed.
+--
+-- @DescribePrincipalMapping@ is currently not supported in the Amazon Web
+-- Services GovCloud (US-West) region.
+module Amazonka.Kendra.DescribePrincipalMapping
+  ( -- * Creating a Request
+    DescribePrincipalMapping (..),
+    newDescribePrincipalMapping,
+
+    -- * Request Lenses
+    describePrincipalMapping_dataSourceId,
+    describePrincipalMapping_indexId,
+    describePrincipalMapping_groupId,
+
+    -- * Destructuring the Response
+    DescribePrincipalMappingResponse (..),
+    newDescribePrincipalMappingResponse,
+
+    -- * Response Lenses
+    describePrincipalMappingResponse_dataSourceId,
+    describePrincipalMappingResponse_groupId,
+    describePrincipalMappingResponse_groupOrderingIdSummaries,
+    describePrincipalMappingResponse_indexId,
+    describePrincipalMappingResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribePrincipalMapping' smart constructor.
+data DescribePrincipalMapping = DescribePrincipalMapping'
+  { -- | The identifier of the data source to check the processing of @PUT@ and
+    -- @DELETE@ actions for mapping users to their groups.
+    dataSourceId :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the index required to check the processing of @PUT@
+    -- and @DELETE@ actions for mapping users to their groups.
+    indexId :: Prelude.Text,
+    -- | The identifier of the group required to check the processing of @PUT@
+    -- and @DELETE@ actions for mapping users to their groups.
+    groupId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribePrincipalMapping' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSourceId', 'describePrincipalMapping_dataSourceId' - The identifier of the data source to check the processing of @PUT@ and
+-- @DELETE@ actions for mapping users to their groups.
+--
+-- 'indexId', 'describePrincipalMapping_indexId' - The identifier of the index required to check the processing of @PUT@
+-- and @DELETE@ actions for mapping users to their groups.
+--
+-- 'groupId', 'describePrincipalMapping_groupId' - The identifier of the group required to check the processing of @PUT@
+-- and @DELETE@ actions for mapping users to their groups.
+newDescribePrincipalMapping ::
+  -- | 'indexId'
+  Prelude.Text ->
+  -- | 'groupId'
+  Prelude.Text ->
+  DescribePrincipalMapping
+newDescribePrincipalMapping pIndexId_ pGroupId_ =
+  DescribePrincipalMapping'
+    { dataSourceId =
+        Prelude.Nothing,
+      indexId = pIndexId_,
+      groupId = pGroupId_
+    }
+
+-- | The identifier of the data source to check the processing of @PUT@ and
+-- @DELETE@ actions for mapping users to their groups.
+describePrincipalMapping_dataSourceId :: Lens.Lens' DescribePrincipalMapping (Prelude.Maybe Prelude.Text)
+describePrincipalMapping_dataSourceId = Lens.lens (\DescribePrincipalMapping' {dataSourceId} -> dataSourceId) (\s@DescribePrincipalMapping' {} a -> s {dataSourceId = a} :: DescribePrincipalMapping)
+
+-- | The identifier of the index required to check the processing of @PUT@
+-- and @DELETE@ actions for mapping users to their groups.
+describePrincipalMapping_indexId :: Lens.Lens' DescribePrincipalMapping Prelude.Text
+describePrincipalMapping_indexId = Lens.lens (\DescribePrincipalMapping' {indexId} -> indexId) (\s@DescribePrincipalMapping' {} a -> s {indexId = a} :: DescribePrincipalMapping)
+
+-- | The identifier of the group required to check the processing of @PUT@
+-- and @DELETE@ actions for mapping users to their groups.
+describePrincipalMapping_groupId :: Lens.Lens' DescribePrincipalMapping Prelude.Text
+describePrincipalMapping_groupId = Lens.lens (\DescribePrincipalMapping' {groupId} -> groupId) (\s@DescribePrincipalMapping' {} a -> s {groupId = a} :: DescribePrincipalMapping)
+
+instance Core.AWSRequest DescribePrincipalMapping where
+  type
+    AWSResponse DescribePrincipalMapping =
+      DescribePrincipalMappingResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribePrincipalMappingResponse'
+            Prelude.<$> (x Data..?> "DataSourceId")
+            Prelude.<*> (x Data..?> "GroupId")
+            Prelude.<*> ( x
+                            Data..?> "GroupOrderingIdSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "IndexId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribePrincipalMapping where
+  hashWithSalt _salt DescribePrincipalMapping' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataSourceId
+      `Prelude.hashWithSalt` indexId
+      `Prelude.hashWithSalt` groupId
+
+instance Prelude.NFData DescribePrincipalMapping where
+  rnf DescribePrincipalMapping' {..} =
+    Prelude.rnf dataSourceId
+      `Prelude.seq` Prelude.rnf indexId
+      `Prelude.seq` Prelude.rnf groupId
+
+instance Data.ToHeaders DescribePrincipalMapping where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.DescribePrincipalMapping" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribePrincipalMapping where
+  toJSON DescribePrincipalMapping' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DataSourceId" Data..=) Prelude.<$> dataSourceId,
+            Prelude.Just ("IndexId" Data..= indexId),
+            Prelude.Just ("GroupId" Data..= groupId)
+          ]
+      )
+
+instance Data.ToPath DescribePrincipalMapping where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribePrincipalMapping where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribePrincipalMappingResponse' smart constructor.
+data DescribePrincipalMappingResponse = DescribePrincipalMappingResponse'
+  { -- | Shows the identifier of the data source to see information on the
+    -- processing of @PUT@ and @DELETE@ actions for mapping users to their
+    -- groups.
+    dataSourceId :: Prelude.Maybe Prelude.Text,
+    -- | Shows the identifier of the group to see information on the processing
+    -- of @PUT@ and @DELETE@ actions for mapping users to their groups.
+    groupId :: Prelude.Maybe Prelude.Text,
+    -- | Shows the following information on the processing of @PUT@ and @DELETE@
+    -- actions for mapping users to their groups:
+    --
+    -- -   Status – the status can be either @PROCESSING@, @SUCCEEDED@,
+    --     @DELETING@, @DELETED@, or @FAILED@.
+    --
+    -- -   Last updated – the last date-time an action was updated.
+    --
+    -- -   Received – the last date-time an action was received or submitted.
+    --
+    -- -   Ordering ID – the latest action that should process and apply after
+    --     other actions.
+    --
+    -- -   Failure reason – the reason an action could not be processed.
+    groupOrderingIdSummaries :: Prelude.Maybe [GroupOrderingIdSummary],
+    -- | Shows the identifier of the index to see information on the processing
+    -- of @PUT@ and @DELETE@ actions for mapping users to their groups.
+    indexId :: 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 'DescribePrincipalMappingResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSourceId', 'describePrincipalMappingResponse_dataSourceId' - Shows the identifier of the data source to see information on the
+-- processing of @PUT@ and @DELETE@ actions for mapping users to their
+-- groups.
+--
+-- 'groupId', 'describePrincipalMappingResponse_groupId' - Shows the identifier of the group to see information on the processing
+-- of @PUT@ and @DELETE@ actions for mapping users to their groups.
+--
+-- 'groupOrderingIdSummaries', 'describePrincipalMappingResponse_groupOrderingIdSummaries' - Shows the following information on the processing of @PUT@ and @DELETE@
+-- actions for mapping users to their groups:
+--
+-- -   Status – the status can be either @PROCESSING@, @SUCCEEDED@,
+--     @DELETING@, @DELETED@, or @FAILED@.
+--
+-- -   Last updated – the last date-time an action was updated.
+--
+-- -   Received – the last date-time an action was received or submitted.
+--
+-- -   Ordering ID – the latest action that should process and apply after
+--     other actions.
+--
+-- -   Failure reason – the reason an action could not be processed.
+--
+-- 'indexId', 'describePrincipalMappingResponse_indexId' - Shows the identifier of the index to see information on the processing
+-- of @PUT@ and @DELETE@ actions for mapping users to their groups.
+--
+-- 'httpStatus', 'describePrincipalMappingResponse_httpStatus' - The response's http status code.
+newDescribePrincipalMappingResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribePrincipalMappingResponse
+newDescribePrincipalMappingResponse pHttpStatus_ =
+  DescribePrincipalMappingResponse'
+    { dataSourceId =
+        Prelude.Nothing,
+      groupId = Prelude.Nothing,
+      groupOrderingIdSummaries =
+        Prelude.Nothing,
+      indexId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Shows the identifier of the data source to see information on the
+-- processing of @PUT@ and @DELETE@ actions for mapping users to their
+-- groups.
+describePrincipalMappingResponse_dataSourceId :: Lens.Lens' DescribePrincipalMappingResponse (Prelude.Maybe Prelude.Text)
+describePrincipalMappingResponse_dataSourceId = Lens.lens (\DescribePrincipalMappingResponse' {dataSourceId} -> dataSourceId) (\s@DescribePrincipalMappingResponse' {} a -> s {dataSourceId = a} :: DescribePrincipalMappingResponse)
+
+-- | Shows the identifier of the group to see information on the processing
+-- of @PUT@ and @DELETE@ actions for mapping users to their groups.
+describePrincipalMappingResponse_groupId :: Lens.Lens' DescribePrincipalMappingResponse (Prelude.Maybe Prelude.Text)
+describePrincipalMappingResponse_groupId = Lens.lens (\DescribePrincipalMappingResponse' {groupId} -> groupId) (\s@DescribePrincipalMappingResponse' {} a -> s {groupId = a} :: DescribePrincipalMappingResponse)
+
+-- | Shows the following information on the processing of @PUT@ and @DELETE@
+-- actions for mapping users to their groups:
+--
+-- -   Status – the status can be either @PROCESSING@, @SUCCEEDED@,
+--     @DELETING@, @DELETED@, or @FAILED@.
+--
+-- -   Last updated – the last date-time an action was updated.
+--
+-- -   Received – the last date-time an action was received or submitted.
+--
+-- -   Ordering ID – the latest action that should process and apply after
+--     other actions.
+--
+-- -   Failure reason – the reason an action could not be processed.
+describePrincipalMappingResponse_groupOrderingIdSummaries :: Lens.Lens' DescribePrincipalMappingResponse (Prelude.Maybe [GroupOrderingIdSummary])
+describePrincipalMappingResponse_groupOrderingIdSummaries = Lens.lens (\DescribePrincipalMappingResponse' {groupOrderingIdSummaries} -> groupOrderingIdSummaries) (\s@DescribePrincipalMappingResponse' {} a -> s {groupOrderingIdSummaries = a} :: DescribePrincipalMappingResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Shows the identifier of the index to see information on the processing
+-- of @PUT@ and @DELETE@ actions for mapping users to their groups.
+describePrincipalMappingResponse_indexId :: Lens.Lens' DescribePrincipalMappingResponse (Prelude.Maybe Prelude.Text)
+describePrincipalMappingResponse_indexId = Lens.lens (\DescribePrincipalMappingResponse' {indexId} -> indexId) (\s@DescribePrincipalMappingResponse' {} a -> s {indexId = a} :: DescribePrincipalMappingResponse)
+
+-- | The response's http status code.
+describePrincipalMappingResponse_httpStatus :: Lens.Lens' DescribePrincipalMappingResponse Prelude.Int
+describePrincipalMappingResponse_httpStatus = Lens.lens (\DescribePrincipalMappingResponse' {httpStatus} -> httpStatus) (\s@DescribePrincipalMappingResponse' {} a -> s {httpStatus = a} :: DescribePrincipalMappingResponse)
+
+instance
+  Prelude.NFData
+    DescribePrincipalMappingResponse
+  where
+  rnf DescribePrincipalMappingResponse' {..} =
+    Prelude.rnf dataSourceId
+      `Prelude.seq` Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf groupOrderingIdSummaries
+      `Prelude.seq` Prelude.rnf indexId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/DescribeQuerySuggestionsBlockList.hs b/gen/Amazonka/Kendra/DescribeQuerySuggestionsBlockList.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/DescribeQuerySuggestionsBlockList.hs
@@ -0,0 +1,393 @@
+{-# 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.Kendra.DescribeQuerySuggestionsBlockList
+-- 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 block list used for query suggestions for an
+-- index.
+--
+-- This is used to check the current settings that are applied to a block
+-- list.
+--
+-- @DescribeQuerySuggestionsBlockList@ is currently not supported in the
+-- Amazon Web Services GovCloud (US-West) region.
+module Amazonka.Kendra.DescribeQuerySuggestionsBlockList
+  ( -- * Creating a Request
+    DescribeQuerySuggestionsBlockList (..),
+    newDescribeQuerySuggestionsBlockList,
+
+    -- * Request Lenses
+    describeQuerySuggestionsBlockList_indexId,
+    describeQuerySuggestionsBlockList_id,
+
+    -- * Destructuring the Response
+    DescribeQuerySuggestionsBlockListResponse (..),
+    newDescribeQuerySuggestionsBlockListResponse,
+
+    -- * Response Lenses
+    describeQuerySuggestionsBlockListResponse_createdAt,
+    describeQuerySuggestionsBlockListResponse_description,
+    describeQuerySuggestionsBlockListResponse_errorMessage,
+    describeQuerySuggestionsBlockListResponse_fileSizeBytes,
+    describeQuerySuggestionsBlockListResponse_id,
+    describeQuerySuggestionsBlockListResponse_indexId,
+    describeQuerySuggestionsBlockListResponse_itemCount,
+    describeQuerySuggestionsBlockListResponse_name,
+    describeQuerySuggestionsBlockListResponse_roleArn,
+    describeQuerySuggestionsBlockListResponse_sourceS3Path,
+    describeQuerySuggestionsBlockListResponse_status,
+    describeQuerySuggestionsBlockListResponse_updatedAt,
+    describeQuerySuggestionsBlockListResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeQuerySuggestionsBlockList' smart constructor.
+data DescribeQuerySuggestionsBlockList = DescribeQuerySuggestionsBlockList'
+  { -- | The identifier of the index for the block list.
+    indexId :: Prelude.Text,
+    -- | The identifier of the block list you want to get information on.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeQuerySuggestionsBlockList' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'indexId', 'describeQuerySuggestionsBlockList_indexId' - The identifier of the index for the block list.
+--
+-- 'id', 'describeQuerySuggestionsBlockList_id' - The identifier of the block list you want to get information on.
+newDescribeQuerySuggestionsBlockList ::
+  -- | 'indexId'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  DescribeQuerySuggestionsBlockList
+newDescribeQuerySuggestionsBlockList pIndexId_ pId_ =
+  DescribeQuerySuggestionsBlockList'
+    { indexId =
+        pIndexId_,
+      id = pId_
+    }
+
+-- | The identifier of the index for the block list.
+describeQuerySuggestionsBlockList_indexId :: Lens.Lens' DescribeQuerySuggestionsBlockList Prelude.Text
+describeQuerySuggestionsBlockList_indexId = Lens.lens (\DescribeQuerySuggestionsBlockList' {indexId} -> indexId) (\s@DescribeQuerySuggestionsBlockList' {} a -> s {indexId = a} :: DescribeQuerySuggestionsBlockList)
+
+-- | The identifier of the block list you want to get information on.
+describeQuerySuggestionsBlockList_id :: Lens.Lens' DescribeQuerySuggestionsBlockList Prelude.Text
+describeQuerySuggestionsBlockList_id = Lens.lens (\DescribeQuerySuggestionsBlockList' {id} -> id) (\s@DescribeQuerySuggestionsBlockList' {} a -> s {id = a} :: DescribeQuerySuggestionsBlockList)
+
+instance
+  Core.AWSRequest
+    DescribeQuerySuggestionsBlockList
+  where
+  type
+    AWSResponse DescribeQuerySuggestionsBlockList =
+      DescribeQuerySuggestionsBlockListResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeQuerySuggestionsBlockListResponse'
+            Prelude.<$> (x Data..?> "CreatedAt")
+            Prelude.<*> (x Data..?> "Description")
+            Prelude.<*> (x Data..?> "ErrorMessage")
+            Prelude.<*> (x Data..?> "FileSizeBytes")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (x Data..?> "IndexId")
+            Prelude.<*> (x Data..?> "ItemCount")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "RoleArn")
+            Prelude.<*> (x Data..?> "SourceS3Path")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (x Data..?> "UpdatedAt")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeQuerySuggestionsBlockList
+  where
+  hashWithSalt
+    _salt
+    DescribeQuerySuggestionsBlockList' {..} =
+      _salt
+        `Prelude.hashWithSalt` indexId
+        `Prelude.hashWithSalt` id
+
+instance
+  Prelude.NFData
+    DescribeQuerySuggestionsBlockList
+  where
+  rnf DescribeQuerySuggestionsBlockList' {..} =
+    Prelude.rnf indexId `Prelude.seq` Prelude.rnf id
+
+instance
+  Data.ToHeaders
+    DescribeQuerySuggestionsBlockList
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.DescribeQuerySuggestionsBlockList" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    DescribeQuerySuggestionsBlockList
+  where
+  toJSON DescribeQuerySuggestionsBlockList' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("IndexId" Data..= indexId),
+            Prelude.Just ("Id" Data..= id)
+          ]
+      )
+
+instance
+  Data.ToPath
+    DescribeQuerySuggestionsBlockList
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeQuerySuggestionsBlockList
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeQuerySuggestionsBlockListResponse' smart constructor.
+data DescribeQuerySuggestionsBlockListResponse = DescribeQuerySuggestionsBlockListResponse'
+  { -- | The date-time a block list for query suggestions was created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The description for the block list.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The error message containing details if there are issues processing the
+    -- block list.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The current size of the block list text file in S3.
+    fileSizeBytes :: Prelude.Maybe Prelude.Integer,
+    -- | The identifier of the block list.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the index for the block list.
+    indexId :: Prelude.Maybe Prelude.Text,
+    -- | The current number of valid, non-empty words or phrases in the block
+    -- list text file.
+    itemCount :: Prelude.Maybe Prelude.Int,
+    -- | The name of the block list.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The IAM (Identity and Access Management) role used by Amazon Kendra to
+    -- access the block list text file in S3.
+    --
+    -- The role needs S3 read permissions to your file in S3 and needs to give
+    -- STS (Security Token Service) assume role permissions to Amazon Kendra.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | Shows the current S3 path to your block list text file in your S3
+    -- bucket.
+    --
+    -- Each block word or phrase should be on a separate line in a text file.
+    --
+    -- For information on the current quota limits for block lists, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/quotas.html Quotas for Amazon Kendra>.
+    sourceS3Path :: Prelude.Maybe S3Path,
+    -- | The current status of the block list. When the value is @ACTIVE@, the
+    -- block list is ready for use.
+    status :: Prelude.Maybe QuerySuggestionsBlockListStatus,
+    -- | The date-time a block list for query suggestions was last updated.
+    updatedAt :: Prelude.Maybe Data.POSIX,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeQuerySuggestionsBlockListResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdAt', 'describeQuerySuggestionsBlockListResponse_createdAt' - The date-time a block list for query suggestions was created.
+--
+-- 'description', 'describeQuerySuggestionsBlockListResponse_description' - The description for the block list.
+--
+-- 'errorMessage', 'describeQuerySuggestionsBlockListResponse_errorMessage' - The error message containing details if there are issues processing the
+-- block list.
+--
+-- 'fileSizeBytes', 'describeQuerySuggestionsBlockListResponse_fileSizeBytes' - The current size of the block list text file in S3.
+--
+-- 'id', 'describeQuerySuggestionsBlockListResponse_id' - The identifier of the block list.
+--
+-- 'indexId', 'describeQuerySuggestionsBlockListResponse_indexId' - The identifier of the index for the block list.
+--
+-- 'itemCount', 'describeQuerySuggestionsBlockListResponse_itemCount' - The current number of valid, non-empty words or phrases in the block
+-- list text file.
+--
+-- 'name', 'describeQuerySuggestionsBlockListResponse_name' - The name of the block list.
+--
+-- 'roleArn', 'describeQuerySuggestionsBlockListResponse_roleArn' - The IAM (Identity and Access Management) role used by Amazon Kendra to
+-- access the block list text file in S3.
+--
+-- The role needs S3 read permissions to your file in S3 and needs to give
+-- STS (Security Token Service) assume role permissions to Amazon Kendra.
+--
+-- 'sourceS3Path', 'describeQuerySuggestionsBlockListResponse_sourceS3Path' - Shows the current S3 path to your block list text file in your S3
+-- bucket.
+--
+-- Each block word or phrase should be on a separate line in a text file.
+--
+-- For information on the current quota limits for block lists, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/quotas.html Quotas for Amazon Kendra>.
+--
+-- 'status', 'describeQuerySuggestionsBlockListResponse_status' - The current status of the block list. When the value is @ACTIVE@, the
+-- block list is ready for use.
+--
+-- 'updatedAt', 'describeQuerySuggestionsBlockListResponse_updatedAt' - The date-time a block list for query suggestions was last updated.
+--
+-- 'httpStatus', 'describeQuerySuggestionsBlockListResponse_httpStatus' - The response's http status code.
+newDescribeQuerySuggestionsBlockListResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeQuerySuggestionsBlockListResponse
+newDescribeQuerySuggestionsBlockListResponse
+  pHttpStatus_ =
+    DescribeQuerySuggestionsBlockListResponse'
+      { createdAt =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        errorMessage = Prelude.Nothing,
+        fileSizeBytes = Prelude.Nothing,
+        id = Prelude.Nothing,
+        indexId = Prelude.Nothing,
+        itemCount = Prelude.Nothing,
+        name = Prelude.Nothing,
+        roleArn = Prelude.Nothing,
+        sourceS3Path = Prelude.Nothing,
+        status = Prelude.Nothing,
+        updatedAt = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The date-time a block list for query suggestions was created.
+describeQuerySuggestionsBlockListResponse_createdAt :: Lens.Lens' DescribeQuerySuggestionsBlockListResponse (Prelude.Maybe Prelude.UTCTime)
+describeQuerySuggestionsBlockListResponse_createdAt = Lens.lens (\DescribeQuerySuggestionsBlockListResponse' {createdAt} -> createdAt) (\s@DescribeQuerySuggestionsBlockListResponse' {} a -> s {createdAt = a} :: DescribeQuerySuggestionsBlockListResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description for the block list.
+describeQuerySuggestionsBlockListResponse_description :: Lens.Lens' DescribeQuerySuggestionsBlockListResponse (Prelude.Maybe Prelude.Text)
+describeQuerySuggestionsBlockListResponse_description = Lens.lens (\DescribeQuerySuggestionsBlockListResponse' {description} -> description) (\s@DescribeQuerySuggestionsBlockListResponse' {} a -> s {description = a} :: DescribeQuerySuggestionsBlockListResponse)
+
+-- | The error message containing details if there are issues processing the
+-- block list.
+describeQuerySuggestionsBlockListResponse_errorMessage :: Lens.Lens' DescribeQuerySuggestionsBlockListResponse (Prelude.Maybe Prelude.Text)
+describeQuerySuggestionsBlockListResponse_errorMessage = Lens.lens (\DescribeQuerySuggestionsBlockListResponse' {errorMessage} -> errorMessage) (\s@DescribeQuerySuggestionsBlockListResponse' {} a -> s {errorMessage = a} :: DescribeQuerySuggestionsBlockListResponse)
+
+-- | The current size of the block list text file in S3.
+describeQuerySuggestionsBlockListResponse_fileSizeBytes :: Lens.Lens' DescribeQuerySuggestionsBlockListResponse (Prelude.Maybe Prelude.Integer)
+describeQuerySuggestionsBlockListResponse_fileSizeBytes = Lens.lens (\DescribeQuerySuggestionsBlockListResponse' {fileSizeBytes} -> fileSizeBytes) (\s@DescribeQuerySuggestionsBlockListResponse' {} a -> s {fileSizeBytes = a} :: DescribeQuerySuggestionsBlockListResponse)
+
+-- | The identifier of the block list.
+describeQuerySuggestionsBlockListResponse_id :: Lens.Lens' DescribeQuerySuggestionsBlockListResponse (Prelude.Maybe Prelude.Text)
+describeQuerySuggestionsBlockListResponse_id = Lens.lens (\DescribeQuerySuggestionsBlockListResponse' {id} -> id) (\s@DescribeQuerySuggestionsBlockListResponse' {} a -> s {id = a} :: DescribeQuerySuggestionsBlockListResponse)
+
+-- | The identifier of the index for the block list.
+describeQuerySuggestionsBlockListResponse_indexId :: Lens.Lens' DescribeQuerySuggestionsBlockListResponse (Prelude.Maybe Prelude.Text)
+describeQuerySuggestionsBlockListResponse_indexId = Lens.lens (\DescribeQuerySuggestionsBlockListResponse' {indexId} -> indexId) (\s@DescribeQuerySuggestionsBlockListResponse' {} a -> s {indexId = a} :: DescribeQuerySuggestionsBlockListResponse)
+
+-- | The current number of valid, non-empty words or phrases in the block
+-- list text file.
+describeQuerySuggestionsBlockListResponse_itemCount :: Lens.Lens' DescribeQuerySuggestionsBlockListResponse (Prelude.Maybe Prelude.Int)
+describeQuerySuggestionsBlockListResponse_itemCount = Lens.lens (\DescribeQuerySuggestionsBlockListResponse' {itemCount} -> itemCount) (\s@DescribeQuerySuggestionsBlockListResponse' {} a -> s {itemCount = a} :: DescribeQuerySuggestionsBlockListResponse)
+
+-- | The name of the block list.
+describeQuerySuggestionsBlockListResponse_name :: Lens.Lens' DescribeQuerySuggestionsBlockListResponse (Prelude.Maybe Prelude.Text)
+describeQuerySuggestionsBlockListResponse_name = Lens.lens (\DescribeQuerySuggestionsBlockListResponse' {name} -> name) (\s@DescribeQuerySuggestionsBlockListResponse' {} a -> s {name = a} :: DescribeQuerySuggestionsBlockListResponse)
+
+-- | The IAM (Identity and Access Management) role used by Amazon Kendra to
+-- access the block list text file in S3.
+--
+-- The role needs S3 read permissions to your file in S3 and needs to give
+-- STS (Security Token Service) assume role permissions to Amazon Kendra.
+describeQuerySuggestionsBlockListResponse_roleArn :: Lens.Lens' DescribeQuerySuggestionsBlockListResponse (Prelude.Maybe Prelude.Text)
+describeQuerySuggestionsBlockListResponse_roleArn = Lens.lens (\DescribeQuerySuggestionsBlockListResponse' {roleArn} -> roleArn) (\s@DescribeQuerySuggestionsBlockListResponse' {} a -> s {roleArn = a} :: DescribeQuerySuggestionsBlockListResponse)
+
+-- | Shows the current S3 path to your block list text file in your S3
+-- bucket.
+--
+-- Each block word or phrase should be on a separate line in a text file.
+--
+-- For information on the current quota limits for block lists, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/quotas.html Quotas for Amazon Kendra>.
+describeQuerySuggestionsBlockListResponse_sourceS3Path :: Lens.Lens' DescribeQuerySuggestionsBlockListResponse (Prelude.Maybe S3Path)
+describeQuerySuggestionsBlockListResponse_sourceS3Path = Lens.lens (\DescribeQuerySuggestionsBlockListResponse' {sourceS3Path} -> sourceS3Path) (\s@DescribeQuerySuggestionsBlockListResponse' {} a -> s {sourceS3Path = a} :: DescribeQuerySuggestionsBlockListResponse)
+
+-- | The current status of the block list. When the value is @ACTIVE@, the
+-- block list is ready for use.
+describeQuerySuggestionsBlockListResponse_status :: Lens.Lens' DescribeQuerySuggestionsBlockListResponse (Prelude.Maybe QuerySuggestionsBlockListStatus)
+describeQuerySuggestionsBlockListResponse_status = Lens.lens (\DescribeQuerySuggestionsBlockListResponse' {status} -> status) (\s@DescribeQuerySuggestionsBlockListResponse' {} a -> s {status = a} :: DescribeQuerySuggestionsBlockListResponse)
+
+-- | The date-time a block list for query suggestions was last updated.
+describeQuerySuggestionsBlockListResponse_updatedAt :: Lens.Lens' DescribeQuerySuggestionsBlockListResponse (Prelude.Maybe Prelude.UTCTime)
+describeQuerySuggestionsBlockListResponse_updatedAt = Lens.lens (\DescribeQuerySuggestionsBlockListResponse' {updatedAt} -> updatedAt) (\s@DescribeQuerySuggestionsBlockListResponse' {} a -> s {updatedAt = a} :: DescribeQuerySuggestionsBlockListResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+describeQuerySuggestionsBlockListResponse_httpStatus :: Lens.Lens' DescribeQuerySuggestionsBlockListResponse Prelude.Int
+describeQuerySuggestionsBlockListResponse_httpStatus = Lens.lens (\DescribeQuerySuggestionsBlockListResponse' {httpStatus} -> httpStatus) (\s@DescribeQuerySuggestionsBlockListResponse' {} a -> s {httpStatus = a} :: DescribeQuerySuggestionsBlockListResponse)
+
+instance
+  Prelude.NFData
+    DescribeQuerySuggestionsBlockListResponse
+  where
+  rnf DescribeQuerySuggestionsBlockListResponse' {..} =
+    Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf fileSizeBytes
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf indexId
+      `Prelude.seq` Prelude.rnf itemCount
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf sourceS3Path
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/DescribeQuerySuggestionsConfig.hs b/gen/Amazonka/Kendra/DescribeQuerySuggestionsConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/DescribeQuerySuggestionsConfig.hs
@@ -0,0 +1,367 @@
+{-# 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.Kendra.DescribeQuerySuggestionsConfig
+-- 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 on the settings of query suggestions for an index.
+--
+-- This is used to check the current settings applied to query suggestions.
+--
+-- @DescribeQuerySuggestionsConfig@ is currently not supported in the
+-- Amazon Web Services GovCloud (US-West) region.
+module Amazonka.Kendra.DescribeQuerySuggestionsConfig
+  ( -- * Creating a Request
+    DescribeQuerySuggestionsConfig (..),
+    newDescribeQuerySuggestionsConfig,
+
+    -- * Request Lenses
+    describeQuerySuggestionsConfig_indexId,
+
+    -- * Destructuring the Response
+    DescribeQuerySuggestionsConfigResponse (..),
+    newDescribeQuerySuggestionsConfigResponse,
+
+    -- * Response Lenses
+    describeQuerySuggestionsConfigResponse_includeQueriesWithoutUserInformation,
+    describeQuerySuggestionsConfigResponse_lastClearTime,
+    describeQuerySuggestionsConfigResponse_lastSuggestionsBuildTime,
+    describeQuerySuggestionsConfigResponse_minimumNumberOfQueryingUsers,
+    describeQuerySuggestionsConfigResponse_minimumQueryCount,
+    describeQuerySuggestionsConfigResponse_mode,
+    describeQuerySuggestionsConfigResponse_queryLogLookBackWindowInDays,
+    describeQuerySuggestionsConfigResponse_status,
+    describeQuerySuggestionsConfigResponse_totalSuggestionsCount,
+    describeQuerySuggestionsConfigResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeQuerySuggestionsConfig' smart constructor.
+data DescribeQuerySuggestionsConfig = DescribeQuerySuggestionsConfig'
+  { -- | The identifier of the index with query suggestions that you want to get
+    -- information on.
+    indexId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeQuerySuggestionsConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'indexId', 'describeQuerySuggestionsConfig_indexId' - The identifier of the index with query suggestions that you want to get
+-- information on.
+newDescribeQuerySuggestionsConfig ::
+  -- | 'indexId'
+  Prelude.Text ->
+  DescribeQuerySuggestionsConfig
+newDescribeQuerySuggestionsConfig pIndexId_ =
+  DescribeQuerySuggestionsConfig'
+    { indexId =
+        pIndexId_
+    }
+
+-- | The identifier of the index with query suggestions that you want to get
+-- information on.
+describeQuerySuggestionsConfig_indexId :: Lens.Lens' DescribeQuerySuggestionsConfig Prelude.Text
+describeQuerySuggestionsConfig_indexId = Lens.lens (\DescribeQuerySuggestionsConfig' {indexId} -> indexId) (\s@DescribeQuerySuggestionsConfig' {} a -> s {indexId = a} :: DescribeQuerySuggestionsConfig)
+
+instance
+  Core.AWSRequest
+    DescribeQuerySuggestionsConfig
+  where
+  type
+    AWSResponse DescribeQuerySuggestionsConfig =
+      DescribeQuerySuggestionsConfigResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeQuerySuggestionsConfigResponse'
+            Prelude.<$> (x Data..?> "IncludeQueriesWithoutUserInformation")
+            Prelude.<*> (x Data..?> "LastClearTime")
+            Prelude.<*> (x Data..?> "LastSuggestionsBuildTime")
+            Prelude.<*> (x Data..?> "MinimumNumberOfQueryingUsers")
+            Prelude.<*> (x Data..?> "MinimumQueryCount")
+            Prelude.<*> (x Data..?> "Mode")
+            Prelude.<*> (x Data..?> "QueryLogLookBackWindowInDays")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (x Data..?> "TotalSuggestionsCount")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeQuerySuggestionsConfig
+  where
+  hashWithSalt
+    _salt
+    DescribeQuerySuggestionsConfig' {..} =
+      _salt `Prelude.hashWithSalt` indexId
+
+instance
+  Prelude.NFData
+    DescribeQuerySuggestionsConfig
+  where
+  rnf DescribeQuerySuggestionsConfig' {..} =
+    Prelude.rnf indexId
+
+instance
+  Data.ToHeaders
+    DescribeQuerySuggestionsConfig
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.DescribeQuerySuggestionsConfig" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeQuerySuggestionsConfig where
+  toJSON DescribeQuerySuggestionsConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("IndexId" Data..= indexId)]
+      )
+
+instance Data.ToPath DescribeQuerySuggestionsConfig where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeQuerySuggestionsConfig where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeQuerySuggestionsConfigResponse' smart constructor.
+data DescribeQuerySuggestionsConfigResponse = DescribeQuerySuggestionsConfigResponse'
+  { -- | @TRUE@ to use all queries, otherwise use only queries that include user
+    -- information to generate the query suggestions.
+    includeQueriesWithoutUserInformation :: Prelude.Maybe Prelude.Bool,
+    -- | The date-time query suggestions for an index was last cleared.
+    --
+    -- After you clear suggestions, Amazon Kendra learns new suggestions based
+    -- on new queries added to the query log from the time you cleared
+    -- suggestions. Amazon Kendra only considers re-occurences of a query from
+    -- the time you cleared suggestions.
+    lastClearTime :: Prelude.Maybe Data.POSIX,
+    -- | The date-time query suggestions for an index was last updated.
+    lastSuggestionsBuildTime :: Prelude.Maybe Data.POSIX,
+    -- | The minimum number of unique users who must search a query in order for
+    -- the query to be eligible to suggest to your users.
+    minimumNumberOfQueryingUsers :: Prelude.Maybe Prelude.Natural,
+    -- | The minimum number of times a query must be searched in order for the
+    -- query to be eligible to suggest to your users.
+    minimumQueryCount :: Prelude.Maybe Prelude.Natural,
+    -- | Whether query suggestions are currently in @ENABLED@ mode or
+    -- @LEARN_ONLY@ mode.
+    --
+    -- By default, Amazon Kendra enables query suggestions.@LEARN_ONLY@ turns
+    -- off query suggestions for your users. You can change the mode using the
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/API_UpdateQuerySuggestionsConfig.html UpdateQuerySuggestionsConfig>
+    -- API.
+    mode :: Prelude.Maybe Mode,
+    -- | How recent your queries are in your query log time window (in days).
+    queryLogLookBackWindowInDays :: Prelude.Maybe Prelude.Int,
+    -- | Whether the status of query suggestions settings is currently @ACTIVE@
+    -- or @UPDATING@.
+    --
+    -- Active means the current settings apply and Updating means your changed
+    -- settings are in the process of applying.
+    status :: Prelude.Maybe QuerySuggestionsStatus,
+    -- | The current total count of query suggestions for an index.
+    --
+    -- This count can change when you update your query suggestions settings,
+    -- if you filter out certain queries from suggestions using a block list,
+    -- and as the query log accumulates more queries for Amazon Kendra to learn
+    -- from.
+    totalSuggestionsCount :: Prelude.Maybe Prelude.Int,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeQuerySuggestionsConfigResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'includeQueriesWithoutUserInformation', 'describeQuerySuggestionsConfigResponse_includeQueriesWithoutUserInformation' - @TRUE@ to use all queries, otherwise use only queries that include user
+-- information to generate the query suggestions.
+--
+-- 'lastClearTime', 'describeQuerySuggestionsConfigResponse_lastClearTime' - The date-time query suggestions for an index was last cleared.
+--
+-- After you clear suggestions, Amazon Kendra learns new suggestions based
+-- on new queries added to the query log from the time you cleared
+-- suggestions. Amazon Kendra only considers re-occurences of a query from
+-- the time you cleared suggestions.
+--
+-- 'lastSuggestionsBuildTime', 'describeQuerySuggestionsConfigResponse_lastSuggestionsBuildTime' - The date-time query suggestions for an index was last updated.
+--
+-- 'minimumNumberOfQueryingUsers', 'describeQuerySuggestionsConfigResponse_minimumNumberOfQueryingUsers' - The minimum number of unique users who must search a query in order for
+-- the query to be eligible to suggest to your users.
+--
+-- 'minimumQueryCount', 'describeQuerySuggestionsConfigResponse_minimumQueryCount' - The minimum number of times a query must be searched in order for the
+-- query to be eligible to suggest to your users.
+--
+-- 'mode', 'describeQuerySuggestionsConfigResponse_mode' - Whether query suggestions are currently in @ENABLED@ mode or
+-- @LEARN_ONLY@ mode.
+--
+-- By default, Amazon Kendra enables query suggestions.@LEARN_ONLY@ turns
+-- off query suggestions for your users. You can change the mode using the
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_UpdateQuerySuggestionsConfig.html UpdateQuerySuggestionsConfig>
+-- API.
+--
+-- 'queryLogLookBackWindowInDays', 'describeQuerySuggestionsConfigResponse_queryLogLookBackWindowInDays' - How recent your queries are in your query log time window (in days).
+--
+-- 'status', 'describeQuerySuggestionsConfigResponse_status' - Whether the status of query suggestions settings is currently @ACTIVE@
+-- or @UPDATING@.
+--
+-- Active means the current settings apply and Updating means your changed
+-- settings are in the process of applying.
+--
+-- 'totalSuggestionsCount', 'describeQuerySuggestionsConfigResponse_totalSuggestionsCount' - The current total count of query suggestions for an index.
+--
+-- This count can change when you update your query suggestions settings,
+-- if you filter out certain queries from suggestions using a block list,
+-- and as the query log accumulates more queries for Amazon Kendra to learn
+-- from.
+--
+-- 'httpStatus', 'describeQuerySuggestionsConfigResponse_httpStatus' - The response's http status code.
+newDescribeQuerySuggestionsConfigResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeQuerySuggestionsConfigResponse
+newDescribeQuerySuggestionsConfigResponse
+  pHttpStatus_ =
+    DescribeQuerySuggestionsConfigResponse'
+      { includeQueriesWithoutUserInformation =
+          Prelude.Nothing,
+        lastClearTime = Prelude.Nothing,
+        lastSuggestionsBuildTime =
+          Prelude.Nothing,
+        minimumNumberOfQueryingUsers =
+          Prelude.Nothing,
+        minimumQueryCount = Prelude.Nothing,
+        mode = Prelude.Nothing,
+        queryLogLookBackWindowInDays =
+          Prelude.Nothing,
+        status = Prelude.Nothing,
+        totalSuggestionsCount =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | @TRUE@ to use all queries, otherwise use only queries that include user
+-- information to generate the query suggestions.
+describeQuerySuggestionsConfigResponse_includeQueriesWithoutUserInformation :: Lens.Lens' DescribeQuerySuggestionsConfigResponse (Prelude.Maybe Prelude.Bool)
+describeQuerySuggestionsConfigResponse_includeQueriesWithoutUserInformation = Lens.lens (\DescribeQuerySuggestionsConfigResponse' {includeQueriesWithoutUserInformation} -> includeQueriesWithoutUserInformation) (\s@DescribeQuerySuggestionsConfigResponse' {} a -> s {includeQueriesWithoutUserInformation = a} :: DescribeQuerySuggestionsConfigResponse)
+
+-- | The date-time query suggestions for an index was last cleared.
+--
+-- After you clear suggestions, Amazon Kendra learns new suggestions based
+-- on new queries added to the query log from the time you cleared
+-- suggestions. Amazon Kendra only considers re-occurences of a query from
+-- the time you cleared suggestions.
+describeQuerySuggestionsConfigResponse_lastClearTime :: Lens.Lens' DescribeQuerySuggestionsConfigResponse (Prelude.Maybe Prelude.UTCTime)
+describeQuerySuggestionsConfigResponse_lastClearTime = Lens.lens (\DescribeQuerySuggestionsConfigResponse' {lastClearTime} -> lastClearTime) (\s@DescribeQuerySuggestionsConfigResponse' {} a -> s {lastClearTime = a} :: DescribeQuerySuggestionsConfigResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The date-time query suggestions for an index was last updated.
+describeQuerySuggestionsConfigResponse_lastSuggestionsBuildTime :: Lens.Lens' DescribeQuerySuggestionsConfigResponse (Prelude.Maybe Prelude.UTCTime)
+describeQuerySuggestionsConfigResponse_lastSuggestionsBuildTime = Lens.lens (\DescribeQuerySuggestionsConfigResponse' {lastSuggestionsBuildTime} -> lastSuggestionsBuildTime) (\s@DescribeQuerySuggestionsConfigResponse' {} a -> s {lastSuggestionsBuildTime = a} :: DescribeQuerySuggestionsConfigResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The minimum number of unique users who must search a query in order for
+-- the query to be eligible to suggest to your users.
+describeQuerySuggestionsConfigResponse_minimumNumberOfQueryingUsers :: Lens.Lens' DescribeQuerySuggestionsConfigResponse (Prelude.Maybe Prelude.Natural)
+describeQuerySuggestionsConfigResponse_minimumNumberOfQueryingUsers = Lens.lens (\DescribeQuerySuggestionsConfigResponse' {minimumNumberOfQueryingUsers} -> minimumNumberOfQueryingUsers) (\s@DescribeQuerySuggestionsConfigResponse' {} a -> s {minimumNumberOfQueryingUsers = a} :: DescribeQuerySuggestionsConfigResponse)
+
+-- | The minimum number of times a query must be searched in order for the
+-- query to be eligible to suggest to your users.
+describeQuerySuggestionsConfigResponse_minimumQueryCount :: Lens.Lens' DescribeQuerySuggestionsConfigResponse (Prelude.Maybe Prelude.Natural)
+describeQuerySuggestionsConfigResponse_minimumQueryCount = Lens.lens (\DescribeQuerySuggestionsConfigResponse' {minimumQueryCount} -> minimumQueryCount) (\s@DescribeQuerySuggestionsConfigResponse' {} a -> s {minimumQueryCount = a} :: DescribeQuerySuggestionsConfigResponse)
+
+-- | Whether query suggestions are currently in @ENABLED@ mode or
+-- @LEARN_ONLY@ mode.
+--
+-- By default, Amazon Kendra enables query suggestions.@LEARN_ONLY@ turns
+-- off query suggestions for your users. You can change the mode using the
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_UpdateQuerySuggestionsConfig.html UpdateQuerySuggestionsConfig>
+-- API.
+describeQuerySuggestionsConfigResponse_mode :: Lens.Lens' DescribeQuerySuggestionsConfigResponse (Prelude.Maybe Mode)
+describeQuerySuggestionsConfigResponse_mode = Lens.lens (\DescribeQuerySuggestionsConfigResponse' {mode} -> mode) (\s@DescribeQuerySuggestionsConfigResponse' {} a -> s {mode = a} :: DescribeQuerySuggestionsConfigResponse)
+
+-- | How recent your queries are in your query log time window (in days).
+describeQuerySuggestionsConfigResponse_queryLogLookBackWindowInDays :: Lens.Lens' DescribeQuerySuggestionsConfigResponse (Prelude.Maybe Prelude.Int)
+describeQuerySuggestionsConfigResponse_queryLogLookBackWindowInDays = Lens.lens (\DescribeQuerySuggestionsConfigResponse' {queryLogLookBackWindowInDays} -> queryLogLookBackWindowInDays) (\s@DescribeQuerySuggestionsConfigResponse' {} a -> s {queryLogLookBackWindowInDays = a} :: DescribeQuerySuggestionsConfigResponse)
+
+-- | Whether the status of query suggestions settings is currently @ACTIVE@
+-- or @UPDATING@.
+--
+-- Active means the current settings apply and Updating means your changed
+-- settings are in the process of applying.
+describeQuerySuggestionsConfigResponse_status :: Lens.Lens' DescribeQuerySuggestionsConfigResponse (Prelude.Maybe QuerySuggestionsStatus)
+describeQuerySuggestionsConfigResponse_status = Lens.lens (\DescribeQuerySuggestionsConfigResponse' {status} -> status) (\s@DescribeQuerySuggestionsConfigResponse' {} a -> s {status = a} :: DescribeQuerySuggestionsConfigResponse)
+
+-- | The current total count of query suggestions for an index.
+--
+-- This count can change when you update your query suggestions settings,
+-- if you filter out certain queries from suggestions using a block list,
+-- and as the query log accumulates more queries for Amazon Kendra to learn
+-- from.
+describeQuerySuggestionsConfigResponse_totalSuggestionsCount :: Lens.Lens' DescribeQuerySuggestionsConfigResponse (Prelude.Maybe Prelude.Int)
+describeQuerySuggestionsConfigResponse_totalSuggestionsCount = Lens.lens (\DescribeQuerySuggestionsConfigResponse' {totalSuggestionsCount} -> totalSuggestionsCount) (\s@DescribeQuerySuggestionsConfigResponse' {} a -> s {totalSuggestionsCount = a} :: DescribeQuerySuggestionsConfigResponse)
+
+-- | The response's http status code.
+describeQuerySuggestionsConfigResponse_httpStatus :: Lens.Lens' DescribeQuerySuggestionsConfigResponse Prelude.Int
+describeQuerySuggestionsConfigResponse_httpStatus = Lens.lens (\DescribeQuerySuggestionsConfigResponse' {httpStatus} -> httpStatus) (\s@DescribeQuerySuggestionsConfigResponse' {} a -> s {httpStatus = a} :: DescribeQuerySuggestionsConfigResponse)
+
+instance
+  Prelude.NFData
+    DescribeQuerySuggestionsConfigResponse
+  where
+  rnf DescribeQuerySuggestionsConfigResponse' {..} =
+    Prelude.rnf includeQueriesWithoutUserInformation
+      `Prelude.seq` Prelude.rnf lastClearTime
+      `Prelude.seq` Prelude.rnf lastSuggestionsBuildTime
+      `Prelude.seq` Prelude.rnf minimumNumberOfQueryingUsers
+      `Prelude.seq` Prelude.rnf minimumQueryCount
+      `Prelude.seq` Prelude.rnf mode
+      `Prelude.seq` Prelude.rnf queryLogLookBackWindowInDays
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf totalSuggestionsCount
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/DescribeThesaurus.hs b/gen/Amazonka/Kendra/DescribeThesaurus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/DescribeThesaurus.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.Kendra.DescribeThesaurus
+-- 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 an existing Amazon Kendra thesaurus.
+module Amazonka.Kendra.DescribeThesaurus
+  ( -- * Creating a Request
+    DescribeThesaurus (..),
+    newDescribeThesaurus,
+
+    -- * Request Lenses
+    describeThesaurus_id,
+    describeThesaurus_indexId,
+
+    -- * Destructuring the Response
+    DescribeThesaurusResponse (..),
+    newDescribeThesaurusResponse,
+
+    -- * Response Lenses
+    describeThesaurusResponse_createdAt,
+    describeThesaurusResponse_description,
+    describeThesaurusResponse_errorMessage,
+    describeThesaurusResponse_fileSizeBytes,
+    describeThesaurusResponse_id,
+    describeThesaurusResponse_indexId,
+    describeThesaurusResponse_name,
+    describeThesaurusResponse_roleArn,
+    describeThesaurusResponse_sourceS3Path,
+    describeThesaurusResponse_status,
+    describeThesaurusResponse_synonymRuleCount,
+    describeThesaurusResponse_termCount,
+    describeThesaurusResponse_updatedAt,
+    describeThesaurusResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeThesaurus' smart constructor.
+data DescribeThesaurus = DescribeThesaurus'
+  { -- | The identifier of the thesaurus you want to get information on.
+    id :: Prelude.Text,
+    -- | The identifier of the index for the thesaurus.
+    indexId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeThesaurus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'describeThesaurus_id' - The identifier of the thesaurus you want to get information on.
+--
+-- 'indexId', 'describeThesaurus_indexId' - The identifier of the index for the thesaurus.
+newDescribeThesaurus ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'indexId'
+  Prelude.Text ->
+  DescribeThesaurus
+newDescribeThesaurus pId_ pIndexId_ =
+  DescribeThesaurus' {id = pId_, indexId = pIndexId_}
+
+-- | The identifier of the thesaurus you want to get information on.
+describeThesaurus_id :: Lens.Lens' DescribeThesaurus Prelude.Text
+describeThesaurus_id = Lens.lens (\DescribeThesaurus' {id} -> id) (\s@DescribeThesaurus' {} a -> s {id = a} :: DescribeThesaurus)
+
+-- | The identifier of the index for the thesaurus.
+describeThesaurus_indexId :: Lens.Lens' DescribeThesaurus Prelude.Text
+describeThesaurus_indexId = Lens.lens (\DescribeThesaurus' {indexId} -> indexId) (\s@DescribeThesaurus' {} a -> s {indexId = a} :: DescribeThesaurus)
+
+instance Core.AWSRequest DescribeThesaurus where
+  type
+    AWSResponse DescribeThesaurus =
+      DescribeThesaurusResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeThesaurusResponse'
+            Prelude.<$> (x Data..?> "CreatedAt")
+            Prelude.<*> (x Data..?> "Description")
+            Prelude.<*> (x Data..?> "ErrorMessage")
+            Prelude.<*> (x Data..?> "FileSizeBytes")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (x Data..?> "IndexId")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "RoleArn")
+            Prelude.<*> (x Data..?> "SourceS3Path")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (x Data..?> "SynonymRuleCount")
+            Prelude.<*> (x Data..?> "TermCount")
+            Prelude.<*> (x Data..?> "UpdatedAt")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeThesaurus where
+  hashWithSalt _salt DescribeThesaurus' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` indexId
+
+instance Prelude.NFData DescribeThesaurus where
+  rnf DescribeThesaurus' {..} =
+    Prelude.rnf id `Prelude.seq` Prelude.rnf indexId
+
+instance Data.ToHeaders DescribeThesaurus where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.DescribeThesaurus" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeThesaurus where
+  toJSON DescribeThesaurus' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Id" Data..= id),
+            Prelude.Just ("IndexId" Data..= indexId)
+          ]
+      )
+
+instance Data.ToPath DescribeThesaurus where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeThesaurus where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeThesaurusResponse' smart constructor.
+data DescribeThesaurusResponse = DescribeThesaurusResponse'
+  { -- | The Unix datetime that the thesaurus was created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The thesaurus description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | When the @Status@ field value is @FAILED@, the @ErrorMessage@ field
+    -- provides more information.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The size of the thesaurus file in bytes.
+    fileSizeBytes :: Prelude.Maybe Prelude.Integer,
+    -- | The identifier of the thesaurus.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the index for the thesaurus.
+    indexId :: Prelude.Maybe Prelude.Text,
+    -- | The thesaurus name.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | An IAM role that gives Amazon Kendra permissions to access thesaurus
+    -- file specified in @SourceS3Path@.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    sourceS3Path :: Prelude.Maybe S3Path,
+    -- | The current status of the thesaurus. When the value is @ACTIVE@, queries
+    -- are able to use the thesaurus. If the @Status@ field value is @FAILED@,
+    -- the @ErrorMessage@ field provides more information.
+    --
+    -- If the status is @ACTIVE_BUT_UPDATE_FAILED@, it means that Amazon Kendra
+    -- could not ingest the new thesaurus file. The old thesaurus file is still
+    -- active.
+    status :: Prelude.Maybe ThesaurusStatus,
+    -- | The number of synonym rules in the thesaurus file.
+    synonymRuleCount :: Prelude.Maybe Prelude.Integer,
+    -- | The number of unique terms in the thesaurus file. For example, the
+    -- synonyms @a,b,c@ and @a=>d@, the term count would be 4.
+    termCount :: Prelude.Maybe Prelude.Integer,
+    -- | The Unix datetime that the thesaurus was last updated.
+    updatedAt :: Prelude.Maybe Data.POSIX,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeThesaurusResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdAt', 'describeThesaurusResponse_createdAt' - The Unix datetime that the thesaurus was created.
+--
+-- 'description', 'describeThesaurusResponse_description' - The thesaurus description.
+--
+-- 'errorMessage', 'describeThesaurusResponse_errorMessage' - When the @Status@ field value is @FAILED@, the @ErrorMessage@ field
+-- provides more information.
+--
+-- 'fileSizeBytes', 'describeThesaurusResponse_fileSizeBytes' - The size of the thesaurus file in bytes.
+--
+-- 'id', 'describeThesaurusResponse_id' - The identifier of the thesaurus.
+--
+-- 'indexId', 'describeThesaurusResponse_indexId' - The identifier of the index for the thesaurus.
+--
+-- 'name', 'describeThesaurusResponse_name' - The thesaurus name.
+--
+-- 'roleArn', 'describeThesaurusResponse_roleArn' - An IAM role that gives Amazon Kendra permissions to access thesaurus
+-- file specified in @SourceS3Path@.
+--
+-- 'sourceS3Path', 'describeThesaurusResponse_sourceS3Path' - Undocumented member.
+--
+-- 'status', 'describeThesaurusResponse_status' - The current status of the thesaurus. When the value is @ACTIVE@, queries
+-- are able to use the thesaurus. If the @Status@ field value is @FAILED@,
+-- the @ErrorMessage@ field provides more information.
+--
+-- If the status is @ACTIVE_BUT_UPDATE_FAILED@, it means that Amazon Kendra
+-- could not ingest the new thesaurus file. The old thesaurus file is still
+-- active.
+--
+-- 'synonymRuleCount', 'describeThesaurusResponse_synonymRuleCount' - The number of synonym rules in the thesaurus file.
+--
+-- 'termCount', 'describeThesaurusResponse_termCount' - The number of unique terms in the thesaurus file. For example, the
+-- synonyms @a,b,c@ and @a=>d@, the term count would be 4.
+--
+-- 'updatedAt', 'describeThesaurusResponse_updatedAt' - The Unix datetime that the thesaurus was last updated.
+--
+-- 'httpStatus', 'describeThesaurusResponse_httpStatus' - The response's http status code.
+newDescribeThesaurusResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeThesaurusResponse
+newDescribeThesaurusResponse pHttpStatus_ =
+  DescribeThesaurusResponse'
+    { createdAt =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      fileSizeBytes = Prelude.Nothing,
+      id = Prelude.Nothing,
+      indexId = Prelude.Nothing,
+      name = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      sourceS3Path = Prelude.Nothing,
+      status = Prelude.Nothing,
+      synonymRuleCount = Prelude.Nothing,
+      termCount = Prelude.Nothing,
+      updatedAt = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Unix datetime that the thesaurus was created.
+describeThesaurusResponse_createdAt :: Lens.Lens' DescribeThesaurusResponse (Prelude.Maybe Prelude.UTCTime)
+describeThesaurusResponse_createdAt = Lens.lens (\DescribeThesaurusResponse' {createdAt} -> createdAt) (\s@DescribeThesaurusResponse' {} a -> s {createdAt = a} :: DescribeThesaurusResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The thesaurus description.
+describeThesaurusResponse_description :: Lens.Lens' DescribeThesaurusResponse (Prelude.Maybe Prelude.Text)
+describeThesaurusResponse_description = Lens.lens (\DescribeThesaurusResponse' {description} -> description) (\s@DescribeThesaurusResponse' {} a -> s {description = a} :: DescribeThesaurusResponse)
+
+-- | When the @Status@ field value is @FAILED@, the @ErrorMessage@ field
+-- provides more information.
+describeThesaurusResponse_errorMessage :: Lens.Lens' DescribeThesaurusResponse (Prelude.Maybe Prelude.Text)
+describeThesaurusResponse_errorMessage = Lens.lens (\DescribeThesaurusResponse' {errorMessage} -> errorMessage) (\s@DescribeThesaurusResponse' {} a -> s {errorMessage = a} :: DescribeThesaurusResponse)
+
+-- | The size of the thesaurus file in bytes.
+describeThesaurusResponse_fileSizeBytes :: Lens.Lens' DescribeThesaurusResponse (Prelude.Maybe Prelude.Integer)
+describeThesaurusResponse_fileSizeBytes = Lens.lens (\DescribeThesaurusResponse' {fileSizeBytes} -> fileSizeBytes) (\s@DescribeThesaurusResponse' {} a -> s {fileSizeBytes = a} :: DescribeThesaurusResponse)
+
+-- | The identifier of the thesaurus.
+describeThesaurusResponse_id :: Lens.Lens' DescribeThesaurusResponse (Prelude.Maybe Prelude.Text)
+describeThesaurusResponse_id = Lens.lens (\DescribeThesaurusResponse' {id} -> id) (\s@DescribeThesaurusResponse' {} a -> s {id = a} :: DescribeThesaurusResponse)
+
+-- | The identifier of the index for the thesaurus.
+describeThesaurusResponse_indexId :: Lens.Lens' DescribeThesaurusResponse (Prelude.Maybe Prelude.Text)
+describeThesaurusResponse_indexId = Lens.lens (\DescribeThesaurusResponse' {indexId} -> indexId) (\s@DescribeThesaurusResponse' {} a -> s {indexId = a} :: DescribeThesaurusResponse)
+
+-- | The thesaurus name.
+describeThesaurusResponse_name :: Lens.Lens' DescribeThesaurusResponse (Prelude.Maybe Prelude.Text)
+describeThesaurusResponse_name = Lens.lens (\DescribeThesaurusResponse' {name} -> name) (\s@DescribeThesaurusResponse' {} a -> s {name = a} :: DescribeThesaurusResponse)
+
+-- | An IAM role that gives Amazon Kendra permissions to access thesaurus
+-- file specified in @SourceS3Path@.
+describeThesaurusResponse_roleArn :: Lens.Lens' DescribeThesaurusResponse (Prelude.Maybe Prelude.Text)
+describeThesaurusResponse_roleArn = Lens.lens (\DescribeThesaurusResponse' {roleArn} -> roleArn) (\s@DescribeThesaurusResponse' {} a -> s {roleArn = a} :: DescribeThesaurusResponse)
+
+-- | Undocumented member.
+describeThesaurusResponse_sourceS3Path :: Lens.Lens' DescribeThesaurusResponse (Prelude.Maybe S3Path)
+describeThesaurusResponse_sourceS3Path = Lens.lens (\DescribeThesaurusResponse' {sourceS3Path} -> sourceS3Path) (\s@DescribeThesaurusResponse' {} a -> s {sourceS3Path = a} :: DescribeThesaurusResponse)
+
+-- | The current status of the thesaurus. When the value is @ACTIVE@, queries
+-- are able to use the thesaurus. If the @Status@ field value is @FAILED@,
+-- the @ErrorMessage@ field provides more information.
+--
+-- If the status is @ACTIVE_BUT_UPDATE_FAILED@, it means that Amazon Kendra
+-- could not ingest the new thesaurus file. The old thesaurus file is still
+-- active.
+describeThesaurusResponse_status :: Lens.Lens' DescribeThesaurusResponse (Prelude.Maybe ThesaurusStatus)
+describeThesaurusResponse_status = Lens.lens (\DescribeThesaurusResponse' {status} -> status) (\s@DescribeThesaurusResponse' {} a -> s {status = a} :: DescribeThesaurusResponse)
+
+-- | The number of synonym rules in the thesaurus file.
+describeThesaurusResponse_synonymRuleCount :: Lens.Lens' DescribeThesaurusResponse (Prelude.Maybe Prelude.Integer)
+describeThesaurusResponse_synonymRuleCount = Lens.lens (\DescribeThesaurusResponse' {synonymRuleCount} -> synonymRuleCount) (\s@DescribeThesaurusResponse' {} a -> s {synonymRuleCount = a} :: DescribeThesaurusResponse)
+
+-- | The number of unique terms in the thesaurus file. For example, the
+-- synonyms @a,b,c@ and @a=>d@, the term count would be 4.
+describeThesaurusResponse_termCount :: Lens.Lens' DescribeThesaurusResponse (Prelude.Maybe Prelude.Integer)
+describeThesaurusResponse_termCount = Lens.lens (\DescribeThesaurusResponse' {termCount} -> termCount) (\s@DescribeThesaurusResponse' {} a -> s {termCount = a} :: DescribeThesaurusResponse)
+
+-- | The Unix datetime that the thesaurus was last updated.
+describeThesaurusResponse_updatedAt :: Lens.Lens' DescribeThesaurusResponse (Prelude.Maybe Prelude.UTCTime)
+describeThesaurusResponse_updatedAt = Lens.lens (\DescribeThesaurusResponse' {updatedAt} -> updatedAt) (\s@DescribeThesaurusResponse' {} a -> s {updatedAt = a} :: DescribeThesaurusResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+describeThesaurusResponse_httpStatus :: Lens.Lens' DescribeThesaurusResponse Prelude.Int
+describeThesaurusResponse_httpStatus = Lens.lens (\DescribeThesaurusResponse' {httpStatus} -> httpStatus) (\s@DescribeThesaurusResponse' {} a -> s {httpStatus = a} :: DescribeThesaurusResponse)
+
+instance Prelude.NFData DescribeThesaurusResponse where
+  rnf DescribeThesaurusResponse' {..} =
+    Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf fileSizeBytes
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf indexId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf sourceS3Path
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf synonymRuleCount
+      `Prelude.seq` Prelude.rnf termCount
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/DisassociateEntitiesFromExperience.hs b/gen/Amazonka/Kendra/DisassociateEntitiesFromExperience.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/DisassociateEntitiesFromExperience.hs
@@ -0,0 +1,241 @@
+{-# 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.Kendra.DisassociateEntitiesFromExperience
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Prevents users or groups in your IAM Identity Center identity source
+-- from accessing your Amazon Kendra experience. You can create an Amazon
+-- Kendra experience such as a search application. For more information on
+-- creating a search application experience, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/deploying-search-experience-no-code.html Building a search experience with no code>.
+module Amazonka.Kendra.DisassociateEntitiesFromExperience
+  ( -- * Creating a Request
+    DisassociateEntitiesFromExperience (..),
+    newDisassociateEntitiesFromExperience,
+
+    -- * Request Lenses
+    disassociateEntitiesFromExperience_id,
+    disassociateEntitiesFromExperience_indexId,
+    disassociateEntitiesFromExperience_entityList,
+
+    -- * Destructuring the Response
+    DisassociateEntitiesFromExperienceResponse (..),
+    newDisassociateEntitiesFromExperienceResponse,
+
+    -- * Response Lenses
+    disassociateEntitiesFromExperienceResponse_failedEntityList,
+    disassociateEntitiesFromExperienceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateEntitiesFromExperience' smart constructor.
+data DisassociateEntitiesFromExperience = DisassociateEntitiesFromExperience'
+  { -- | The identifier of your Amazon Kendra experience.
+    id :: Prelude.Text,
+    -- | The identifier of the index for your Amazon Kendra experience.
+    indexId :: Prelude.Text,
+    -- | Lists users or groups in your IAM Identity Center identity source.
+    entityList :: Prelude.NonEmpty EntityConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateEntitiesFromExperience' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'disassociateEntitiesFromExperience_id' - The identifier of your Amazon Kendra experience.
+--
+-- 'indexId', 'disassociateEntitiesFromExperience_indexId' - The identifier of the index for your Amazon Kendra experience.
+--
+-- 'entityList', 'disassociateEntitiesFromExperience_entityList' - Lists users or groups in your IAM Identity Center identity source.
+newDisassociateEntitiesFromExperience ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'indexId'
+  Prelude.Text ->
+  -- | 'entityList'
+  Prelude.NonEmpty EntityConfiguration ->
+  DisassociateEntitiesFromExperience
+newDisassociateEntitiesFromExperience
+  pId_
+  pIndexId_
+  pEntityList_ =
+    DisassociateEntitiesFromExperience'
+      { id = pId_,
+        indexId = pIndexId_,
+        entityList =
+          Lens.coerced Lens.# pEntityList_
+      }
+
+-- | The identifier of your Amazon Kendra experience.
+disassociateEntitiesFromExperience_id :: Lens.Lens' DisassociateEntitiesFromExperience Prelude.Text
+disassociateEntitiesFromExperience_id = Lens.lens (\DisassociateEntitiesFromExperience' {id} -> id) (\s@DisassociateEntitiesFromExperience' {} a -> s {id = a} :: DisassociateEntitiesFromExperience)
+
+-- | The identifier of the index for your Amazon Kendra experience.
+disassociateEntitiesFromExperience_indexId :: Lens.Lens' DisassociateEntitiesFromExperience Prelude.Text
+disassociateEntitiesFromExperience_indexId = Lens.lens (\DisassociateEntitiesFromExperience' {indexId} -> indexId) (\s@DisassociateEntitiesFromExperience' {} a -> s {indexId = a} :: DisassociateEntitiesFromExperience)
+
+-- | Lists users or groups in your IAM Identity Center identity source.
+disassociateEntitiesFromExperience_entityList :: Lens.Lens' DisassociateEntitiesFromExperience (Prelude.NonEmpty EntityConfiguration)
+disassociateEntitiesFromExperience_entityList = Lens.lens (\DisassociateEntitiesFromExperience' {entityList} -> entityList) (\s@DisassociateEntitiesFromExperience' {} a -> s {entityList = a} :: DisassociateEntitiesFromExperience) Prelude.. Lens.coerced
+
+instance
+  Core.AWSRequest
+    DisassociateEntitiesFromExperience
+  where
+  type
+    AWSResponse DisassociateEntitiesFromExperience =
+      DisassociateEntitiesFromExperienceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DisassociateEntitiesFromExperienceResponse'
+            Prelude.<$> (x Data..?> "FailedEntityList")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisassociateEntitiesFromExperience
+  where
+  hashWithSalt
+    _salt
+    DisassociateEntitiesFromExperience' {..} =
+      _salt
+        `Prelude.hashWithSalt` id
+        `Prelude.hashWithSalt` indexId
+        `Prelude.hashWithSalt` entityList
+
+instance
+  Prelude.NFData
+    DisassociateEntitiesFromExperience
+  where
+  rnf DisassociateEntitiesFromExperience' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf indexId
+      `Prelude.seq` Prelude.rnf entityList
+
+instance
+  Data.ToHeaders
+    DisassociateEntitiesFromExperience
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.DisassociateEntitiesFromExperience" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    DisassociateEntitiesFromExperience
+  where
+  toJSON DisassociateEntitiesFromExperience' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Id" Data..= id),
+            Prelude.Just ("IndexId" Data..= indexId),
+            Prelude.Just ("EntityList" Data..= entityList)
+          ]
+      )
+
+instance
+  Data.ToPath
+    DisassociateEntitiesFromExperience
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DisassociateEntitiesFromExperience
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateEntitiesFromExperienceResponse' smart constructor.
+data DisassociateEntitiesFromExperienceResponse = DisassociateEntitiesFromExperienceResponse'
+  { -- | Lists the users or groups in your IAM Identity Center identity source
+    -- that failed to properly remove access to your Amazon Kendra experience.
+    failedEntityList :: Prelude.Maybe (Prelude.NonEmpty FailedEntity),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateEntitiesFromExperienceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failedEntityList', 'disassociateEntitiesFromExperienceResponse_failedEntityList' - Lists the users or groups in your IAM Identity Center identity source
+-- that failed to properly remove access to your Amazon Kendra experience.
+--
+-- 'httpStatus', 'disassociateEntitiesFromExperienceResponse_httpStatus' - The response's http status code.
+newDisassociateEntitiesFromExperienceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateEntitiesFromExperienceResponse
+newDisassociateEntitiesFromExperienceResponse
+  pHttpStatus_ =
+    DisassociateEntitiesFromExperienceResponse'
+      { failedEntityList =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Lists the users or groups in your IAM Identity Center identity source
+-- that failed to properly remove access to your Amazon Kendra experience.
+disassociateEntitiesFromExperienceResponse_failedEntityList :: Lens.Lens' DisassociateEntitiesFromExperienceResponse (Prelude.Maybe (Prelude.NonEmpty FailedEntity))
+disassociateEntitiesFromExperienceResponse_failedEntityList = Lens.lens (\DisassociateEntitiesFromExperienceResponse' {failedEntityList} -> failedEntityList) (\s@DisassociateEntitiesFromExperienceResponse' {} a -> s {failedEntityList = a} :: DisassociateEntitiesFromExperienceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+disassociateEntitiesFromExperienceResponse_httpStatus :: Lens.Lens' DisassociateEntitiesFromExperienceResponse Prelude.Int
+disassociateEntitiesFromExperienceResponse_httpStatus = Lens.lens (\DisassociateEntitiesFromExperienceResponse' {httpStatus} -> httpStatus) (\s@DisassociateEntitiesFromExperienceResponse' {} a -> s {httpStatus = a} :: DisassociateEntitiesFromExperienceResponse)
+
+instance
+  Prelude.NFData
+    DisassociateEntitiesFromExperienceResponse
+  where
+  rnf DisassociateEntitiesFromExperienceResponse' {..} =
+    Prelude.rnf failedEntityList
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/DisassociatePersonasFromEntities.hs b/gen/Amazonka/Kendra/DisassociatePersonasFromEntities.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/DisassociatePersonasFromEntities.hs
@@ -0,0 +1,238 @@
+{-# 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.Kendra.DisassociatePersonasFromEntities
+-- 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 specific permissions of users or groups in your IAM Identity
+-- Center identity source with access to your Amazon Kendra experience. You
+-- can create an Amazon Kendra experience such as a search application. For
+-- more information on creating a search application experience, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/deploying-search-experience-no-code.html Building a search experience with no code>.
+module Amazonka.Kendra.DisassociatePersonasFromEntities
+  ( -- * Creating a Request
+    DisassociatePersonasFromEntities (..),
+    newDisassociatePersonasFromEntities,
+
+    -- * Request Lenses
+    disassociatePersonasFromEntities_id,
+    disassociatePersonasFromEntities_indexId,
+    disassociatePersonasFromEntities_entityIds,
+
+    -- * Destructuring the Response
+    DisassociatePersonasFromEntitiesResponse (..),
+    newDisassociatePersonasFromEntitiesResponse,
+
+    -- * Response Lenses
+    disassociatePersonasFromEntitiesResponse_failedEntityList,
+    disassociatePersonasFromEntitiesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociatePersonasFromEntities' smart constructor.
+data DisassociatePersonasFromEntities = DisassociatePersonasFromEntities'
+  { -- | The identifier of your Amazon Kendra experience.
+    id :: Prelude.Text,
+    -- | The identifier of the index for your Amazon Kendra experience.
+    indexId :: Prelude.Text,
+    -- | The identifiers of users or groups in your IAM Identity Center identity
+    -- source. For example, user IDs could be user emails.
+    entityIds :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociatePersonasFromEntities' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'disassociatePersonasFromEntities_id' - The identifier of your Amazon Kendra experience.
+--
+-- 'indexId', 'disassociatePersonasFromEntities_indexId' - The identifier of the index for your Amazon Kendra experience.
+--
+-- 'entityIds', 'disassociatePersonasFromEntities_entityIds' - The identifiers of users or groups in your IAM Identity Center identity
+-- source. For example, user IDs could be user emails.
+newDisassociatePersonasFromEntities ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'indexId'
+  Prelude.Text ->
+  -- | 'entityIds'
+  Prelude.NonEmpty Prelude.Text ->
+  DisassociatePersonasFromEntities
+newDisassociatePersonasFromEntities
+  pId_
+  pIndexId_
+  pEntityIds_ =
+    DisassociatePersonasFromEntities'
+      { id = pId_,
+        indexId = pIndexId_,
+        entityIds =
+          Lens.coerced Lens.# pEntityIds_
+      }
+
+-- | The identifier of your Amazon Kendra experience.
+disassociatePersonasFromEntities_id :: Lens.Lens' DisassociatePersonasFromEntities Prelude.Text
+disassociatePersonasFromEntities_id = Lens.lens (\DisassociatePersonasFromEntities' {id} -> id) (\s@DisassociatePersonasFromEntities' {} a -> s {id = a} :: DisassociatePersonasFromEntities)
+
+-- | The identifier of the index for your Amazon Kendra experience.
+disassociatePersonasFromEntities_indexId :: Lens.Lens' DisassociatePersonasFromEntities Prelude.Text
+disassociatePersonasFromEntities_indexId = Lens.lens (\DisassociatePersonasFromEntities' {indexId} -> indexId) (\s@DisassociatePersonasFromEntities' {} a -> s {indexId = a} :: DisassociatePersonasFromEntities)
+
+-- | The identifiers of users or groups in your IAM Identity Center identity
+-- source. For example, user IDs could be user emails.
+disassociatePersonasFromEntities_entityIds :: Lens.Lens' DisassociatePersonasFromEntities (Prelude.NonEmpty Prelude.Text)
+disassociatePersonasFromEntities_entityIds = Lens.lens (\DisassociatePersonasFromEntities' {entityIds} -> entityIds) (\s@DisassociatePersonasFromEntities' {} a -> s {entityIds = a} :: DisassociatePersonasFromEntities) Prelude.. Lens.coerced
+
+instance
+  Core.AWSRequest
+    DisassociatePersonasFromEntities
+  where
+  type
+    AWSResponse DisassociatePersonasFromEntities =
+      DisassociatePersonasFromEntitiesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DisassociatePersonasFromEntitiesResponse'
+            Prelude.<$> (x Data..?> "FailedEntityList")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisassociatePersonasFromEntities
+  where
+  hashWithSalt
+    _salt
+    DisassociatePersonasFromEntities' {..} =
+      _salt
+        `Prelude.hashWithSalt` id
+        `Prelude.hashWithSalt` indexId
+        `Prelude.hashWithSalt` entityIds
+
+instance
+  Prelude.NFData
+    DisassociatePersonasFromEntities
+  where
+  rnf DisassociatePersonasFromEntities' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf indexId
+      `Prelude.seq` Prelude.rnf entityIds
+
+instance
+  Data.ToHeaders
+    DisassociatePersonasFromEntities
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.DisassociatePersonasFromEntities" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DisassociatePersonasFromEntities where
+  toJSON DisassociatePersonasFromEntities' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Id" Data..= id),
+            Prelude.Just ("IndexId" Data..= indexId),
+            Prelude.Just ("EntityIds" Data..= entityIds)
+          ]
+      )
+
+instance Data.ToPath DisassociatePersonasFromEntities where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DisassociatePersonasFromEntities
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociatePersonasFromEntitiesResponse' smart constructor.
+data DisassociatePersonasFromEntitiesResponse = DisassociatePersonasFromEntitiesResponse'
+  { -- | Lists the users or groups in your IAM Identity Center identity source
+    -- that failed to properly remove access to your Amazon Kendra experience.
+    failedEntityList :: Prelude.Maybe (Prelude.NonEmpty FailedEntity),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociatePersonasFromEntitiesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failedEntityList', 'disassociatePersonasFromEntitiesResponse_failedEntityList' - Lists the users or groups in your IAM Identity Center identity source
+-- that failed to properly remove access to your Amazon Kendra experience.
+--
+-- 'httpStatus', 'disassociatePersonasFromEntitiesResponse_httpStatus' - The response's http status code.
+newDisassociatePersonasFromEntitiesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociatePersonasFromEntitiesResponse
+newDisassociatePersonasFromEntitiesResponse
+  pHttpStatus_ =
+    DisassociatePersonasFromEntitiesResponse'
+      { failedEntityList =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Lists the users or groups in your IAM Identity Center identity source
+-- that failed to properly remove access to your Amazon Kendra experience.
+disassociatePersonasFromEntitiesResponse_failedEntityList :: Lens.Lens' DisassociatePersonasFromEntitiesResponse (Prelude.Maybe (Prelude.NonEmpty FailedEntity))
+disassociatePersonasFromEntitiesResponse_failedEntityList = Lens.lens (\DisassociatePersonasFromEntitiesResponse' {failedEntityList} -> failedEntityList) (\s@DisassociatePersonasFromEntitiesResponse' {} a -> s {failedEntityList = a} :: DisassociatePersonasFromEntitiesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+disassociatePersonasFromEntitiesResponse_httpStatus :: Lens.Lens' DisassociatePersonasFromEntitiesResponse Prelude.Int
+disassociatePersonasFromEntitiesResponse_httpStatus = Lens.lens (\DisassociatePersonasFromEntitiesResponse' {httpStatus} -> httpStatus) (\s@DisassociatePersonasFromEntitiesResponse' {} a -> s {httpStatus = a} :: DisassociatePersonasFromEntitiesResponse)
+
+instance
+  Prelude.NFData
+    DisassociatePersonasFromEntitiesResponse
+  where
+  rnf DisassociatePersonasFromEntitiesResponse' {..} =
+    Prelude.rnf failedEntityList
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/GetQuerySuggestions.hs b/gen/Amazonka/Kendra/GetQuerySuggestions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/GetQuerySuggestions.hs
@@ -0,0 +1,242 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.GetQuerySuggestions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Fetches the queries that are suggested to your users.
+--
+-- @GetQuerySuggestions@ is currently not supported in the Amazon Web
+-- Services GovCloud (US-West) region.
+module Amazonka.Kendra.GetQuerySuggestions
+  ( -- * Creating a Request
+    GetQuerySuggestions (..),
+    newGetQuerySuggestions,
+
+    -- * Request Lenses
+    getQuerySuggestions_maxSuggestionsCount,
+    getQuerySuggestions_indexId,
+    getQuerySuggestions_queryText,
+
+    -- * Destructuring the Response
+    GetQuerySuggestionsResponse (..),
+    newGetQuerySuggestionsResponse,
+
+    -- * Response Lenses
+    getQuerySuggestionsResponse_querySuggestionsId,
+    getQuerySuggestionsResponse_suggestions,
+    getQuerySuggestionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetQuerySuggestions' smart constructor.
+data GetQuerySuggestions = GetQuerySuggestions'
+  { -- | The maximum number of query suggestions you want to show to your users.
+    maxSuggestionsCount :: Prelude.Maybe Prelude.Int,
+    -- | The identifier of the index you want to get query suggestions from.
+    indexId :: Prelude.Text,
+    -- | The text of a user\'s query to generate query suggestions.
+    --
+    -- A query is suggested if the query prefix matches what a user starts to
+    -- type as their query.
+    --
+    -- Amazon Kendra does not show any suggestions if a user types fewer than
+    -- two characters or more than 60 characters. A query must also have at
+    -- least one search result and contain at least one word of more than four
+    -- characters.
+    queryText :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetQuerySuggestions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxSuggestionsCount', 'getQuerySuggestions_maxSuggestionsCount' - The maximum number of query suggestions you want to show to your users.
+--
+-- 'indexId', 'getQuerySuggestions_indexId' - The identifier of the index you want to get query suggestions from.
+--
+-- 'queryText', 'getQuerySuggestions_queryText' - The text of a user\'s query to generate query suggestions.
+--
+-- A query is suggested if the query prefix matches what a user starts to
+-- type as their query.
+--
+-- Amazon Kendra does not show any suggestions if a user types fewer than
+-- two characters or more than 60 characters. A query must also have at
+-- least one search result and contain at least one word of more than four
+-- characters.
+newGetQuerySuggestions ::
+  -- | 'indexId'
+  Prelude.Text ->
+  -- | 'queryText'
+  Prelude.Text ->
+  GetQuerySuggestions
+newGetQuerySuggestions pIndexId_ pQueryText_ =
+  GetQuerySuggestions'
+    { maxSuggestionsCount =
+        Prelude.Nothing,
+      indexId = pIndexId_,
+      queryText = pQueryText_
+    }
+
+-- | The maximum number of query suggestions you want to show to your users.
+getQuerySuggestions_maxSuggestionsCount :: Lens.Lens' GetQuerySuggestions (Prelude.Maybe Prelude.Int)
+getQuerySuggestions_maxSuggestionsCount = Lens.lens (\GetQuerySuggestions' {maxSuggestionsCount} -> maxSuggestionsCount) (\s@GetQuerySuggestions' {} a -> s {maxSuggestionsCount = a} :: GetQuerySuggestions)
+
+-- | The identifier of the index you want to get query suggestions from.
+getQuerySuggestions_indexId :: Lens.Lens' GetQuerySuggestions Prelude.Text
+getQuerySuggestions_indexId = Lens.lens (\GetQuerySuggestions' {indexId} -> indexId) (\s@GetQuerySuggestions' {} a -> s {indexId = a} :: GetQuerySuggestions)
+
+-- | The text of a user\'s query to generate query suggestions.
+--
+-- A query is suggested if the query prefix matches what a user starts to
+-- type as their query.
+--
+-- Amazon Kendra does not show any suggestions if a user types fewer than
+-- two characters or more than 60 characters. A query must also have at
+-- least one search result and contain at least one word of more than four
+-- characters.
+getQuerySuggestions_queryText :: Lens.Lens' GetQuerySuggestions Prelude.Text
+getQuerySuggestions_queryText = Lens.lens (\GetQuerySuggestions' {queryText} -> queryText) (\s@GetQuerySuggestions' {} a -> s {queryText = a} :: GetQuerySuggestions)
+
+instance Core.AWSRequest GetQuerySuggestions where
+  type
+    AWSResponse GetQuerySuggestions =
+      GetQuerySuggestionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetQuerySuggestionsResponse'
+            Prelude.<$> (x Data..?> "QuerySuggestionsId")
+            Prelude.<*> (x Data..?> "Suggestions" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetQuerySuggestions where
+  hashWithSalt _salt GetQuerySuggestions' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxSuggestionsCount
+      `Prelude.hashWithSalt` indexId
+      `Prelude.hashWithSalt` queryText
+
+instance Prelude.NFData GetQuerySuggestions where
+  rnf GetQuerySuggestions' {..} =
+    Prelude.rnf maxSuggestionsCount
+      `Prelude.seq` Prelude.rnf indexId
+      `Prelude.seq` Prelude.rnf queryText
+
+instance Data.ToHeaders GetQuerySuggestions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.GetQuerySuggestions" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetQuerySuggestions where
+  toJSON GetQuerySuggestions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxSuggestionsCount" Data..=)
+              Prelude.<$> maxSuggestionsCount,
+            Prelude.Just ("IndexId" Data..= indexId),
+            Prelude.Just ("QueryText" Data..= queryText)
+          ]
+      )
+
+instance Data.ToPath GetQuerySuggestions where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetQuerySuggestions where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetQuerySuggestionsResponse' smart constructor.
+data GetQuerySuggestionsResponse = GetQuerySuggestionsResponse'
+  { -- | The identifier for a list of query suggestions for an index.
+    querySuggestionsId :: Prelude.Maybe Prelude.Text,
+    -- | A list of query suggestions for an index.
+    suggestions :: Prelude.Maybe [Suggestion],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetQuerySuggestionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'querySuggestionsId', 'getQuerySuggestionsResponse_querySuggestionsId' - The identifier for a list of query suggestions for an index.
+--
+-- 'suggestions', 'getQuerySuggestionsResponse_suggestions' - A list of query suggestions for an index.
+--
+-- 'httpStatus', 'getQuerySuggestionsResponse_httpStatus' - The response's http status code.
+newGetQuerySuggestionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetQuerySuggestionsResponse
+newGetQuerySuggestionsResponse pHttpStatus_ =
+  GetQuerySuggestionsResponse'
+    { querySuggestionsId =
+        Prelude.Nothing,
+      suggestions = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier for a list of query suggestions for an index.
+getQuerySuggestionsResponse_querySuggestionsId :: Lens.Lens' GetQuerySuggestionsResponse (Prelude.Maybe Prelude.Text)
+getQuerySuggestionsResponse_querySuggestionsId = Lens.lens (\GetQuerySuggestionsResponse' {querySuggestionsId} -> querySuggestionsId) (\s@GetQuerySuggestionsResponse' {} a -> s {querySuggestionsId = a} :: GetQuerySuggestionsResponse)
+
+-- | A list of query suggestions for an index.
+getQuerySuggestionsResponse_suggestions :: Lens.Lens' GetQuerySuggestionsResponse (Prelude.Maybe [Suggestion])
+getQuerySuggestionsResponse_suggestions = Lens.lens (\GetQuerySuggestionsResponse' {suggestions} -> suggestions) (\s@GetQuerySuggestionsResponse' {} a -> s {suggestions = a} :: GetQuerySuggestionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getQuerySuggestionsResponse_httpStatus :: Lens.Lens' GetQuerySuggestionsResponse Prelude.Int
+getQuerySuggestionsResponse_httpStatus = Lens.lens (\GetQuerySuggestionsResponse' {httpStatus} -> httpStatus) (\s@GetQuerySuggestionsResponse' {} a -> s {httpStatus = a} :: GetQuerySuggestionsResponse)
+
+instance Prelude.NFData GetQuerySuggestionsResponse where
+  rnf GetQuerySuggestionsResponse' {..} =
+    Prelude.rnf querySuggestionsId
+      `Prelude.seq` Prelude.rnf suggestions
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/GetSnapshots.hs b/gen/Amazonka/Kendra/GetSnapshots.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/GetSnapshots.hs
@@ -0,0 +1,360 @@
+{-# 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.Kendra.GetSnapshots
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves search metrics data. The data provides a snapshot of how your
+-- users interact with your search application and how effective the
+-- application is.
+module Amazonka.Kendra.GetSnapshots
+  ( -- * Creating a Request
+    GetSnapshots (..),
+    newGetSnapshots,
+
+    -- * Request Lenses
+    getSnapshots_maxResults,
+    getSnapshots_nextToken,
+    getSnapshots_indexId,
+    getSnapshots_interval,
+    getSnapshots_metricType,
+
+    -- * Destructuring the Response
+    GetSnapshotsResponse (..),
+    newGetSnapshotsResponse,
+
+    -- * Response Lenses
+    getSnapshotsResponse_nextToken,
+    getSnapshotsResponse_snapShotTimeFilter,
+    getSnapshotsResponse_snapshotsData,
+    getSnapshotsResponse_snapshotsDataHeader,
+    getSnapshotsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetSnapshots' smart constructor.
+data GetSnapshots = GetSnapshots'
+  { -- | The maximum number of returned data for the metric.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | If the previous response was incomplete (because there is more data to
+    -- retrieve), Amazon Kendra returns a pagination token in the response. You
+    -- can use this pagination token to retrieve the next set of search metrics
+    -- data.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the index to get search metrics data.
+    indexId :: Prelude.Text,
+    -- | The time interval or time window to get search metrics data. The time
+    -- interval uses the time zone of your index. You can view data in the
+    -- following time windows:
+    --
+    -- -   @THIS_WEEK@: The current week, starting on the Sunday and ending on
+    --     the day before the current date.
+    --
+    -- -   @ONE_WEEK_AGO@: The previous week, starting on the Sunday and ending
+    --     on the following Saturday.
+    --
+    -- -   @TWO_WEEKS_AGO@: The week before the previous week, starting on the
+    --     Sunday and ending on the following Saturday.
+    --
+    -- -   @THIS_MONTH@: The current month, starting on the first day of the
+    --     month and ending on the day before the current date.
+    --
+    -- -   @ONE_MONTH_AGO@: The previous month, starting on the first day of
+    --     the month and ending on the last day of the month.
+    --
+    -- -   @TWO_MONTHS_AGO@: The month before the previous month, starting on
+    --     the first day of the month and ending on last day of the month.
+    interval :: Interval,
+    -- | The metric you want to retrieve. You can specify only one metric per
+    -- call.
+    --
+    -- For more information about the metrics you can view, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/search-analytics.html Gaining insights with search analytics>.
+    metricType :: MetricType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSnapshots' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getSnapshots_maxResults' - The maximum number of returned data for the metric.
+--
+-- 'nextToken', 'getSnapshots_nextToken' - If the previous response was incomplete (because there is more data to
+-- retrieve), Amazon Kendra returns a pagination token in the response. You
+-- can use this pagination token to retrieve the next set of search metrics
+-- data.
+--
+-- 'indexId', 'getSnapshots_indexId' - The identifier of the index to get search metrics data.
+--
+-- 'interval', 'getSnapshots_interval' - The time interval or time window to get search metrics data. The time
+-- interval uses the time zone of your index. You can view data in the
+-- following time windows:
+--
+-- -   @THIS_WEEK@: The current week, starting on the Sunday and ending on
+--     the day before the current date.
+--
+-- -   @ONE_WEEK_AGO@: The previous week, starting on the Sunday and ending
+--     on the following Saturday.
+--
+-- -   @TWO_WEEKS_AGO@: The week before the previous week, starting on the
+--     Sunday and ending on the following Saturday.
+--
+-- -   @THIS_MONTH@: The current month, starting on the first day of the
+--     month and ending on the day before the current date.
+--
+-- -   @ONE_MONTH_AGO@: The previous month, starting on the first day of
+--     the month and ending on the last day of the month.
+--
+-- -   @TWO_MONTHS_AGO@: The month before the previous month, starting on
+--     the first day of the month and ending on last day of the month.
+--
+-- 'metricType', 'getSnapshots_metricType' - The metric you want to retrieve. You can specify only one metric per
+-- call.
+--
+-- For more information about the metrics you can view, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/search-analytics.html Gaining insights with search analytics>.
+newGetSnapshots ::
+  -- | 'indexId'
+  Prelude.Text ->
+  -- | 'interval'
+  Interval ->
+  -- | 'metricType'
+  MetricType ->
+  GetSnapshots
+newGetSnapshots pIndexId_ pInterval_ pMetricType_ =
+  GetSnapshots'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      indexId = pIndexId_,
+      interval = pInterval_,
+      metricType = pMetricType_
+    }
+
+-- | The maximum number of returned data for the metric.
+getSnapshots_maxResults :: Lens.Lens' GetSnapshots (Prelude.Maybe Prelude.Int)
+getSnapshots_maxResults = Lens.lens (\GetSnapshots' {maxResults} -> maxResults) (\s@GetSnapshots' {} a -> s {maxResults = a} :: GetSnapshots)
+
+-- | If the previous response was incomplete (because there is more data to
+-- retrieve), Amazon Kendra returns a pagination token in the response. You
+-- can use this pagination token to retrieve the next set of search metrics
+-- data.
+getSnapshots_nextToken :: Lens.Lens' GetSnapshots (Prelude.Maybe Prelude.Text)
+getSnapshots_nextToken = Lens.lens (\GetSnapshots' {nextToken} -> nextToken) (\s@GetSnapshots' {} a -> s {nextToken = a} :: GetSnapshots)
+
+-- | The identifier of the index to get search metrics data.
+getSnapshots_indexId :: Lens.Lens' GetSnapshots Prelude.Text
+getSnapshots_indexId = Lens.lens (\GetSnapshots' {indexId} -> indexId) (\s@GetSnapshots' {} a -> s {indexId = a} :: GetSnapshots)
+
+-- | The time interval or time window to get search metrics data. The time
+-- interval uses the time zone of your index. You can view data in the
+-- following time windows:
+--
+-- -   @THIS_WEEK@: The current week, starting on the Sunday and ending on
+--     the day before the current date.
+--
+-- -   @ONE_WEEK_AGO@: The previous week, starting on the Sunday and ending
+--     on the following Saturday.
+--
+-- -   @TWO_WEEKS_AGO@: The week before the previous week, starting on the
+--     Sunday and ending on the following Saturday.
+--
+-- -   @THIS_MONTH@: The current month, starting on the first day of the
+--     month and ending on the day before the current date.
+--
+-- -   @ONE_MONTH_AGO@: The previous month, starting on the first day of
+--     the month and ending on the last day of the month.
+--
+-- -   @TWO_MONTHS_AGO@: The month before the previous month, starting on
+--     the first day of the month and ending on last day of the month.
+getSnapshots_interval :: Lens.Lens' GetSnapshots Interval
+getSnapshots_interval = Lens.lens (\GetSnapshots' {interval} -> interval) (\s@GetSnapshots' {} a -> s {interval = a} :: GetSnapshots)
+
+-- | The metric you want to retrieve. You can specify only one metric per
+-- call.
+--
+-- For more information about the metrics you can view, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/search-analytics.html Gaining insights with search analytics>.
+getSnapshots_metricType :: Lens.Lens' GetSnapshots MetricType
+getSnapshots_metricType = Lens.lens (\GetSnapshots' {metricType} -> metricType) (\s@GetSnapshots' {} a -> s {metricType = a} :: GetSnapshots)
+
+instance Core.AWSRequest GetSnapshots where
+  type AWSResponse GetSnapshots = GetSnapshotsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetSnapshotsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "SnapShotTimeFilter")
+            Prelude.<*> (x Data..?> "SnapshotsData" Core..!@ Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..?> "SnapshotsDataHeader"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetSnapshots where
+  hashWithSalt _salt GetSnapshots' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` indexId
+      `Prelude.hashWithSalt` interval
+      `Prelude.hashWithSalt` metricType
+
+instance Prelude.NFData GetSnapshots where
+  rnf GetSnapshots' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf indexId
+      `Prelude.seq` Prelude.rnf interval
+      `Prelude.seq` Prelude.rnf metricType
+
+instance Data.ToHeaders GetSnapshots where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.GetSnapshots" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetSnapshots where
+  toJSON GetSnapshots' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("IndexId" Data..= indexId),
+            Prelude.Just ("Interval" Data..= interval),
+            Prelude.Just ("MetricType" Data..= metricType)
+          ]
+      )
+
+instance Data.ToPath GetSnapshots where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetSnapshots where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetSnapshotsResponse' smart constructor.
+data GetSnapshotsResponse = GetSnapshotsResponse'
+  { -- | If the response is truncated, Amazon Kendra returns this token, which
+    -- you can use in a later request to retrieve the next set of search
+    -- metrics data.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The date-time for the beginning and end of the time window for the
+    -- search metrics data.
+    snapShotTimeFilter :: Prelude.Maybe TimeRange,
+    -- | The search metrics data. The data returned depends on the metric type
+    -- you requested.
+    snapshotsData :: Prelude.Maybe [[Prelude.Text]],
+    -- | The column headers for the search metrics data.
+    snapshotsDataHeader :: 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 'GetSnapshotsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'getSnapshotsResponse_nextToken' - If the response is truncated, Amazon Kendra returns this token, which
+-- you can use in a later request to retrieve the next set of search
+-- metrics data.
+--
+-- 'snapShotTimeFilter', 'getSnapshotsResponse_snapShotTimeFilter' - The date-time for the beginning and end of the time window for the
+-- search metrics data.
+--
+-- 'snapshotsData', 'getSnapshotsResponse_snapshotsData' - The search metrics data. The data returned depends on the metric type
+-- you requested.
+--
+-- 'snapshotsDataHeader', 'getSnapshotsResponse_snapshotsDataHeader' - The column headers for the search metrics data.
+--
+-- 'httpStatus', 'getSnapshotsResponse_httpStatus' - The response's http status code.
+newGetSnapshotsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetSnapshotsResponse
+newGetSnapshotsResponse pHttpStatus_ =
+  GetSnapshotsResponse'
+    { nextToken = Prelude.Nothing,
+      snapShotTimeFilter = Prelude.Nothing,
+      snapshotsData = Prelude.Nothing,
+      snapshotsDataHeader = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | If the response is truncated, Amazon Kendra returns this token, which
+-- you can use in a later request to retrieve the next set of search
+-- metrics data.
+getSnapshotsResponse_nextToken :: Lens.Lens' GetSnapshotsResponse (Prelude.Maybe Prelude.Text)
+getSnapshotsResponse_nextToken = Lens.lens (\GetSnapshotsResponse' {nextToken} -> nextToken) (\s@GetSnapshotsResponse' {} a -> s {nextToken = a} :: GetSnapshotsResponse)
+
+-- | The date-time for the beginning and end of the time window for the
+-- search metrics data.
+getSnapshotsResponse_snapShotTimeFilter :: Lens.Lens' GetSnapshotsResponse (Prelude.Maybe TimeRange)
+getSnapshotsResponse_snapShotTimeFilter = Lens.lens (\GetSnapshotsResponse' {snapShotTimeFilter} -> snapShotTimeFilter) (\s@GetSnapshotsResponse' {} a -> s {snapShotTimeFilter = a} :: GetSnapshotsResponse)
+
+-- | The search metrics data. The data returned depends on the metric type
+-- you requested.
+getSnapshotsResponse_snapshotsData :: Lens.Lens' GetSnapshotsResponse (Prelude.Maybe [[Prelude.Text]])
+getSnapshotsResponse_snapshotsData = Lens.lens (\GetSnapshotsResponse' {snapshotsData} -> snapshotsData) (\s@GetSnapshotsResponse' {} a -> s {snapshotsData = a} :: GetSnapshotsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The column headers for the search metrics data.
+getSnapshotsResponse_snapshotsDataHeader :: Lens.Lens' GetSnapshotsResponse (Prelude.Maybe [Prelude.Text])
+getSnapshotsResponse_snapshotsDataHeader = Lens.lens (\GetSnapshotsResponse' {snapshotsDataHeader} -> snapshotsDataHeader) (\s@GetSnapshotsResponse' {} a -> s {snapshotsDataHeader = a} :: GetSnapshotsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getSnapshotsResponse_httpStatus :: Lens.Lens' GetSnapshotsResponse Prelude.Int
+getSnapshotsResponse_httpStatus = Lens.lens (\GetSnapshotsResponse' {httpStatus} -> httpStatus) (\s@GetSnapshotsResponse' {} a -> s {httpStatus = a} :: GetSnapshotsResponse)
+
+instance Prelude.NFData GetSnapshotsResponse where
+  rnf GetSnapshotsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf snapShotTimeFilter
+      `Prelude.seq` Prelude.rnf snapshotsData
+      `Prelude.seq` Prelude.rnf snapshotsDataHeader
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/Lens.hs b/gen/Amazonka/Kendra/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Lens.hs
@@ -0,0 +1,1596 @@
+{-# 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.Kendra.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.Kendra.Lens
+  ( -- * Operations
+
+    -- ** AssociateEntitiesToExperience
+    associateEntitiesToExperience_id,
+    associateEntitiesToExperience_indexId,
+    associateEntitiesToExperience_entityList,
+    associateEntitiesToExperienceResponse_failedEntityList,
+    associateEntitiesToExperienceResponse_httpStatus,
+
+    -- ** AssociatePersonasToEntities
+    associatePersonasToEntities_id,
+    associatePersonasToEntities_indexId,
+    associatePersonasToEntities_personas,
+    associatePersonasToEntitiesResponse_failedEntityList,
+    associatePersonasToEntitiesResponse_httpStatus,
+
+    -- ** BatchDeleteDocument
+    batchDeleteDocument_dataSourceSyncJobMetricTarget,
+    batchDeleteDocument_indexId,
+    batchDeleteDocument_documentIdList,
+    batchDeleteDocumentResponse_failedDocuments,
+    batchDeleteDocumentResponse_httpStatus,
+
+    -- ** BatchGetDocumentStatus
+    batchGetDocumentStatus_indexId,
+    batchGetDocumentStatus_documentInfoList,
+    batchGetDocumentStatusResponse_documentStatusList,
+    batchGetDocumentStatusResponse_errors,
+    batchGetDocumentStatusResponse_httpStatus,
+
+    -- ** BatchPutDocument
+    batchPutDocument_customDocumentEnrichmentConfiguration,
+    batchPutDocument_roleArn,
+    batchPutDocument_indexId,
+    batchPutDocument_documents,
+    batchPutDocumentResponse_failedDocuments,
+    batchPutDocumentResponse_httpStatus,
+
+    -- ** ClearQuerySuggestions
+    clearQuerySuggestions_indexId,
+
+    -- ** CreateAccessControlConfiguration
+    createAccessControlConfiguration_accessControlList,
+    createAccessControlConfiguration_clientToken,
+    createAccessControlConfiguration_description,
+    createAccessControlConfiguration_hierarchicalAccessControlList,
+    createAccessControlConfiguration_indexId,
+    createAccessControlConfiguration_name,
+    createAccessControlConfigurationResponse_httpStatus,
+    createAccessControlConfigurationResponse_id,
+
+    -- ** CreateDataSource
+    createDataSource_clientToken,
+    createDataSource_configuration,
+    createDataSource_customDocumentEnrichmentConfiguration,
+    createDataSource_description,
+    createDataSource_languageCode,
+    createDataSource_roleArn,
+    createDataSource_schedule,
+    createDataSource_tags,
+    createDataSource_vpcConfiguration,
+    createDataSource_name,
+    createDataSource_indexId,
+    createDataSource_type,
+    createDataSourceResponse_httpStatus,
+    createDataSourceResponse_id,
+
+    -- ** CreateExperience
+    createExperience_clientToken,
+    createExperience_configuration,
+    createExperience_description,
+    createExperience_roleArn,
+    createExperience_name,
+    createExperience_indexId,
+    createExperienceResponse_httpStatus,
+    createExperienceResponse_id,
+
+    -- ** CreateFaq
+    createFaq_clientToken,
+    createFaq_description,
+    createFaq_fileFormat,
+    createFaq_languageCode,
+    createFaq_tags,
+    createFaq_indexId,
+    createFaq_name,
+    createFaq_s3Path,
+    createFaq_roleArn,
+    createFaqResponse_id,
+    createFaqResponse_httpStatus,
+
+    -- ** CreateIndex
+    createIndex_clientToken,
+    createIndex_description,
+    createIndex_edition,
+    createIndex_serverSideEncryptionConfiguration,
+    createIndex_tags,
+    createIndex_userContextPolicy,
+    createIndex_userGroupResolutionConfiguration,
+    createIndex_userTokenConfigurations,
+    createIndex_name,
+    createIndex_roleArn,
+    createIndexResponse_id,
+    createIndexResponse_httpStatus,
+
+    -- ** CreateQuerySuggestionsBlockList
+    createQuerySuggestionsBlockList_clientToken,
+    createQuerySuggestionsBlockList_description,
+    createQuerySuggestionsBlockList_tags,
+    createQuerySuggestionsBlockList_indexId,
+    createQuerySuggestionsBlockList_name,
+    createQuerySuggestionsBlockList_sourceS3Path,
+    createQuerySuggestionsBlockList_roleArn,
+    createQuerySuggestionsBlockListResponse_id,
+    createQuerySuggestionsBlockListResponse_httpStatus,
+
+    -- ** CreateThesaurus
+    createThesaurus_clientToken,
+    createThesaurus_description,
+    createThesaurus_tags,
+    createThesaurus_indexId,
+    createThesaurus_name,
+    createThesaurus_roleArn,
+    createThesaurus_sourceS3Path,
+    createThesaurusResponse_id,
+    createThesaurusResponse_httpStatus,
+
+    -- ** DeleteAccessControlConfiguration
+    deleteAccessControlConfiguration_indexId,
+    deleteAccessControlConfiguration_id,
+    deleteAccessControlConfigurationResponse_httpStatus,
+
+    -- ** DeleteDataSource
+    deleteDataSource_id,
+    deleteDataSource_indexId,
+
+    -- ** DeleteExperience
+    deleteExperience_id,
+    deleteExperience_indexId,
+    deleteExperienceResponse_httpStatus,
+
+    -- ** DeleteFaq
+    deleteFaq_id,
+    deleteFaq_indexId,
+
+    -- ** DeleteIndex
+    deleteIndex_id,
+
+    -- ** DeletePrincipalMapping
+    deletePrincipalMapping_dataSourceId,
+    deletePrincipalMapping_orderingId,
+    deletePrincipalMapping_indexId,
+    deletePrincipalMapping_groupId,
+
+    -- ** DeleteQuerySuggestionsBlockList
+    deleteQuerySuggestionsBlockList_indexId,
+    deleteQuerySuggestionsBlockList_id,
+
+    -- ** DeleteThesaurus
+    deleteThesaurus_id,
+    deleteThesaurus_indexId,
+
+    -- ** DescribeAccessControlConfiguration
+    describeAccessControlConfiguration_indexId,
+    describeAccessControlConfiguration_id,
+    describeAccessControlConfigurationResponse_accessControlList,
+    describeAccessControlConfigurationResponse_description,
+    describeAccessControlConfigurationResponse_errorMessage,
+    describeAccessControlConfigurationResponse_hierarchicalAccessControlList,
+    describeAccessControlConfigurationResponse_httpStatus,
+    describeAccessControlConfigurationResponse_name,
+
+    -- ** DescribeDataSource
+    describeDataSource_id,
+    describeDataSource_indexId,
+    describeDataSourceResponse_configuration,
+    describeDataSourceResponse_createdAt,
+    describeDataSourceResponse_customDocumentEnrichmentConfiguration,
+    describeDataSourceResponse_description,
+    describeDataSourceResponse_errorMessage,
+    describeDataSourceResponse_id,
+    describeDataSourceResponse_indexId,
+    describeDataSourceResponse_languageCode,
+    describeDataSourceResponse_name,
+    describeDataSourceResponse_roleArn,
+    describeDataSourceResponse_schedule,
+    describeDataSourceResponse_status,
+    describeDataSourceResponse_type,
+    describeDataSourceResponse_updatedAt,
+    describeDataSourceResponse_vpcConfiguration,
+    describeDataSourceResponse_httpStatus,
+
+    -- ** DescribeExperience
+    describeExperience_id,
+    describeExperience_indexId,
+    describeExperienceResponse_configuration,
+    describeExperienceResponse_createdAt,
+    describeExperienceResponse_description,
+    describeExperienceResponse_endpoints,
+    describeExperienceResponse_errorMessage,
+    describeExperienceResponse_id,
+    describeExperienceResponse_indexId,
+    describeExperienceResponse_name,
+    describeExperienceResponse_roleArn,
+    describeExperienceResponse_status,
+    describeExperienceResponse_updatedAt,
+    describeExperienceResponse_httpStatus,
+
+    -- ** DescribeFaq
+    describeFaq_id,
+    describeFaq_indexId,
+    describeFaqResponse_createdAt,
+    describeFaqResponse_description,
+    describeFaqResponse_errorMessage,
+    describeFaqResponse_fileFormat,
+    describeFaqResponse_id,
+    describeFaqResponse_indexId,
+    describeFaqResponse_languageCode,
+    describeFaqResponse_name,
+    describeFaqResponse_roleArn,
+    describeFaqResponse_s3Path,
+    describeFaqResponse_status,
+    describeFaqResponse_updatedAt,
+    describeFaqResponse_httpStatus,
+
+    -- ** DescribeIndex
+    describeIndex_id,
+    describeIndexResponse_capacityUnits,
+    describeIndexResponse_createdAt,
+    describeIndexResponse_description,
+    describeIndexResponse_documentMetadataConfigurations,
+    describeIndexResponse_edition,
+    describeIndexResponse_errorMessage,
+    describeIndexResponse_id,
+    describeIndexResponse_indexStatistics,
+    describeIndexResponse_name,
+    describeIndexResponse_roleArn,
+    describeIndexResponse_serverSideEncryptionConfiguration,
+    describeIndexResponse_status,
+    describeIndexResponse_updatedAt,
+    describeIndexResponse_userContextPolicy,
+    describeIndexResponse_userGroupResolutionConfiguration,
+    describeIndexResponse_userTokenConfigurations,
+    describeIndexResponse_httpStatus,
+
+    -- ** DescribePrincipalMapping
+    describePrincipalMapping_dataSourceId,
+    describePrincipalMapping_indexId,
+    describePrincipalMapping_groupId,
+    describePrincipalMappingResponse_dataSourceId,
+    describePrincipalMappingResponse_groupId,
+    describePrincipalMappingResponse_groupOrderingIdSummaries,
+    describePrincipalMappingResponse_indexId,
+    describePrincipalMappingResponse_httpStatus,
+
+    -- ** DescribeQuerySuggestionsBlockList
+    describeQuerySuggestionsBlockList_indexId,
+    describeQuerySuggestionsBlockList_id,
+    describeQuerySuggestionsBlockListResponse_createdAt,
+    describeQuerySuggestionsBlockListResponse_description,
+    describeQuerySuggestionsBlockListResponse_errorMessage,
+    describeQuerySuggestionsBlockListResponse_fileSizeBytes,
+    describeQuerySuggestionsBlockListResponse_id,
+    describeQuerySuggestionsBlockListResponse_indexId,
+    describeQuerySuggestionsBlockListResponse_itemCount,
+    describeQuerySuggestionsBlockListResponse_name,
+    describeQuerySuggestionsBlockListResponse_roleArn,
+    describeQuerySuggestionsBlockListResponse_sourceS3Path,
+    describeQuerySuggestionsBlockListResponse_status,
+    describeQuerySuggestionsBlockListResponse_updatedAt,
+    describeQuerySuggestionsBlockListResponse_httpStatus,
+
+    -- ** DescribeQuerySuggestionsConfig
+    describeQuerySuggestionsConfig_indexId,
+    describeQuerySuggestionsConfigResponse_includeQueriesWithoutUserInformation,
+    describeQuerySuggestionsConfigResponse_lastClearTime,
+    describeQuerySuggestionsConfigResponse_lastSuggestionsBuildTime,
+    describeQuerySuggestionsConfigResponse_minimumNumberOfQueryingUsers,
+    describeQuerySuggestionsConfigResponse_minimumQueryCount,
+    describeQuerySuggestionsConfigResponse_mode,
+    describeQuerySuggestionsConfigResponse_queryLogLookBackWindowInDays,
+    describeQuerySuggestionsConfigResponse_status,
+    describeQuerySuggestionsConfigResponse_totalSuggestionsCount,
+    describeQuerySuggestionsConfigResponse_httpStatus,
+
+    -- ** DescribeThesaurus
+    describeThesaurus_id,
+    describeThesaurus_indexId,
+    describeThesaurusResponse_createdAt,
+    describeThesaurusResponse_description,
+    describeThesaurusResponse_errorMessage,
+    describeThesaurusResponse_fileSizeBytes,
+    describeThesaurusResponse_id,
+    describeThesaurusResponse_indexId,
+    describeThesaurusResponse_name,
+    describeThesaurusResponse_roleArn,
+    describeThesaurusResponse_sourceS3Path,
+    describeThesaurusResponse_status,
+    describeThesaurusResponse_synonymRuleCount,
+    describeThesaurusResponse_termCount,
+    describeThesaurusResponse_updatedAt,
+    describeThesaurusResponse_httpStatus,
+
+    -- ** DisassociateEntitiesFromExperience
+    disassociateEntitiesFromExperience_id,
+    disassociateEntitiesFromExperience_indexId,
+    disassociateEntitiesFromExperience_entityList,
+    disassociateEntitiesFromExperienceResponse_failedEntityList,
+    disassociateEntitiesFromExperienceResponse_httpStatus,
+
+    -- ** DisassociatePersonasFromEntities
+    disassociatePersonasFromEntities_id,
+    disassociatePersonasFromEntities_indexId,
+    disassociatePersonasFromEntities_entityIds,
+    disassociatePersonasFromEntitiesResponse_failedEntityList,
+    disassociatePersonasFromEntitiesResponse_httpStatus,
+
+    -- ** GetQuerySuggestions
+    getQuerySuggestions_maxSuggestionsCount,
+    getQuerySuggestions_indexId,
+    getQuerySuggestions_queryText,
+    getQuerySuggestionsResponse_querySuggestionsId,
+    getQuerySuggestionsResponse_suggestions,
+    getQuerySuggestionsResponse_httpStatus,
+
+    -- ** GetSnapshots
+    getSnapshots_maxResults,
+    getSnapshots_nextToken,
+    getSnapshots_indexId,
+    getSnapshots_interval,
+    getSnapshots_metricType,
+    getSnapshotsResponse_nextToken,
+    getSnapshotsResponse_snapShotTimeFilter,
+    getSnapshotsResponse_snapshotsData,
+    getSnapshotsResponse_snapshotsDataHeader,
+    getSnapshotsResponse_httpStatus,
+
+    -- ** ListAccessControlConfigurations
+    listAccessControlConfigurations_maxResults,
+    listAccessControlConfigurations_nextToken,
+    listAccessControlConfigurations_indexId,
+    listAccessControlConfigurationsResponse_nextToken,
+    listAccessControlConfigurationsResponse_httpStatus,
+    listAccessControlConfigurationsResponse_accessControlConfigurations,
+
+    -- ** ListDataSourceSyncJobs
+    listDataSourceSyncJobs_maxResults,
+    listDataSourceSyncJobs_nextToken,
+    listDataSourceSyncJobs_startTimeFilter,
+    listDataSourceSyncJobs_statusFilter,
+    listDataSourceSyncJobs_id,
+    listDataSourceSyncJobs_indexId,
+    listDataSourceSyncJobsResponse_history,
+    listDataSourceSyncJobsResponse_nextToken,
+    listDataSourceSyncJobsResponse_httpStatus,
+
+    -- ** ListDataSources
+    listDataSources_maxResults,
+    listDataSources_nextToken,
+    listDataSources_indexId,
+    listDataSourcesResponse_nextToken,
+    listDataSourcesResponse_summaryItems,
+    listDataSourcesResponse_httpStatus,
+
+    -- ** ListEntityPersonas
+    listEntityPersonas_maxResults,
+    listEntityPersonas_nextToken,
+    listEntityPersonas_id,
+    listEntityPersonas_indexId,
+    listEntityPersonasResponse_nextToken,
+    listEntityPersonasResponse_summaryItems,
+    listEntityPersonasResponse_httpStatus,
+
+    -- ** ListExperienceEntities
+    listExperienceEntities_nextToken,
+    listExperienceEntities_id,
+    listExperienceEntities_indexId,
+    listExperienceEntitiesResponse_nextToken,
+    listExperienceEntitiesResponse_summaryItems,
+    listExperienceEntitiesResponse_httpStatus,
+
+    -- ** ListExperiences
+    listExperiences_maxResults,
+    listExperiences_nextToken,
+    listExperiences_indexId,
+    listExperiencesResponse_nextToken,
+    listExperiencesResponse_summaryItems,
+    listExperiencesResponse_httpStatus,
+
+    -- ** ListFaqs
+    listFaqs_maxResults,
+    listFaqs_nextToken,
+    listFaqs_indexId,
+    listFaqsResponse_faqSummaryItems,
+    listFaqsResponse_nextToken,
+    listFaqsResponse_httpStatus,
+
+    -- ** ListGroupsOlderThanOrderingId
+    listGroupsOlderThanOrderingId_dataSourceId,
+    listGroupsOlderThanOrderingId_maxResults,
+    listGroupsOlderThanOrderingId_nextToken,
+    listGroupsOlderThanOrderingId_indexId,
+    listGroupsOlderThanOrderingId_orderingId,
+    listGroupsOlderThanOrderingIdResponse_groupsSummaries,
+    listGroupsOlderThanOrderingIdResponse_nextToken,
+    listGroupsOlderThanOrderingIdResponse_httpStatus,
+
+    -- ** ListIndices
+    listIndices_maxResults,
+    listIndices_nextToken,
+    listIndicesResponse_indexConfigurationSummaryItems,
+    listIndicesResponse_nextToken,
+    listIndicesResponse_httpStatus,
+
+    -- ** ListQuerySuggestionsBlockLists
+    listQuerySuggestionsBlockLists_maxResults,
+    listQuerySuggestionsBlockLists_nextToken,
+    listQuerySuggestionsBlockLists_indexId,
+    listQuerySuggestionsBlockListsResponse_blockListSummaryItems,
+    listQuerySuggestionsBlockListsResponse_nextToken,
+    listQuerySuggestionsBlockListsResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceARN,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** ListThesauri
+    listThesauri_maxResults,
+    listThesauri_nextToken,
+    listThesauri_indexId,
+    listThesauriResponse_nextToken,
+    listThesauriResponse_thesaurusSummaryItems,
+    listThesauriResponse_httpStatus,
+
+    -- ** PutPrincipalMapping
+    putPrincipalMapping_dataSourceId,
+    putPrincipalMapping_orderingId,
+    putPrincipalMapping_roleArn,
+    putPrincipalMapping_indexId,
+    putPrincipalMapping_groupId,
+    putPrincipalMapping_groupMembers,
+
+    -- ** Query
+    query_attributeFilter,
+    query_documentRelevanceOverrideConfigurations,
+    query_facets,
+    query_pageNumber,
+    query_pageSize,
+    query_queryResultTypeFilter,
+    query_queryText,
+    query_requestedDocumentAttributes,
+    query_sortingConfiguration,
+    query_spellCorrectionConfiguration,
+    query_userContext,
+    query_visitorId,
+    query_indexId,
+    queryResponse_facetResults,
+    queryResponse_queryId,
+    queryResponse_resultItems,
+    queryResponse_spellCorrectedQueries,
+    queryResponse_totalNumberOfResults,
+    queryResponse_warnings,
+    queryResponse_httpStatus,
+
+    -- ** StartDataSourceSyncJob
+    startDataSourceSyncJob_id,
+    startDataSourceSyncJob_indexId,
+    startDataSourceSyncJobResponse_executionId,
+    startDataSourceSyncJobResponse_httpStatus,
+
+    -- ** StopDataSourceSyncJob
+    stopDataSourceSyncJob_id,
+    stopDataSourceSyncJob_indexId,
+
+    -- ** SubmitFeedback
+    submitFeedback_clickFeedbackItems,
+    submitFeedback_relevanceFeedbackItems,
+    submitFeedback_indexId,
+    submitFeedback_queryId,
+
+    -- ** TagResource
+    tagResource_resourceARN,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceARN,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateAccessControlConfiguration
+    updateAccessControlConfiguration_accessControlList,
+    updateAccessControlConfiguration_description,
+    updateAccessControlConfiguration_hierarchicalAccessControlList,
+    updateAccessControlConfiguration_name,
+    updateAccessControlConfiguration_indexId,
+    updateAccessControlConfiguration_id,
+    updateAccessControlConfigurationResponse_httpStatus,
+
+    -- ** UpdateDataSource
+    updateDataSource_configuration,
+    updateDataSource_customDocumentEnrichmentConfiguration,
+    updateDataSource_description,
+    updateDataSource_languageCode,
+    updateDataSource_name,
+    updateDataSource_roleArn,
+    updateDataSource_schedule,
+    updateDataSource_vpcConfiguration,
+    updateDataSource_id,
+    updateDataSource_indexId,
+
+    -- ** UpdateExperience
+    updateExperience_configuration,
+    updateExperience_description,
+    updateExperience_name,
+    updateExperience_roleArn,
+    updateExperience_id,
+    updateExperience_indexId,
+
+    -- ** UpdateIndex
+    updateIndex_capacityUnits,
+    updateIndex_description,
+    updateIndex_documentMetadataConfigurationUpdates,
+    updateIndex_name,
+    updateIndex_roleArn,
+    updateIndex_userContextPolicy,
+    updateIndex_userGroupResolutionConfiguration,
+    updateIndex_userTokenConfigurations,
+    updateIndex_id,
+
+    -- ** UpdateQuerySuggestionsBlockList
+    updateQuerySuggestionsBlockList_description,
+    updateQuerySuggestionsBlockList_name,
+    updateQuerySuggestionsBlockList_roleArn,
+    updateQuerySuggestionsBlockList_sourceS3Path,
+    updateQuerySuggestionsBlockList_indexId,
+    updateQuerySuggestionsBlockList_id,
+
+    -- ** UpdateQuerySuggestionsConfig
+    updateQuerySuggestionsConfig_includeQueriesWithoutUserInformation,
+    updateQuerySuggestionsConfig_minimumNumberOfQueryingUsers,
+    updateQuerySuggestionsConfig_minimumQueryCount,
+    updateQuerySuggestionsConfig_mode,
+    updateQuerySuggestionsConfig_queryLogLookBackWindowInDays,
+    updateQuerySuggestionsConfig_indexId,
+
+    -- ** UpdateThesaurus
+    updateThesaurus_description,
+    updateThesaurus_name,
+    updateThesaurus_roleArn,
+    updateThesaurus_sourceS3Path,
+    updateThesaurus_id,
+    updateThesaurus_indexId,
+
+    -- * Types
+
+    -- ** AccessControlConfigurationSummary
+    accessControlConfigurationSummary_id,
+
+    -- ** AccessControlListConfiguration
+    accessControlListConfiguration_keyPath,
+
+    -- ** AclConfiguration
+    aclConfiguration_allowedGroupsColumnName,
+
+    -- ** AdditionalResultAttribute
+    additionalResultAttribute_key,
+    additionalResultAttribute_valueType,
+    additionalResultAttribute_value,
+
+    -- ** AdditionalResultAttributeValue
+    additionalResultAttributeValue_textWithHighlightsValue,
+
+    -- ** AlfrescoConfiguration
+    alfrescoConfiguration_blogFieldMappings,
+    alfrescoConfiguration_crawlComments,
+    alfrescoConfiguration_crawlSystemFolders,
+    alfrescoConfiguration_documentLibraryFieldMappings,
+    alfrescoConfiguration_entityFilter,
+    alfrescoConfiguration_exclusionPatterns,
+    alfrescoConfiguration_inclusionPatterns,
+    alfrescoConfiguration_vpcConfiguration,
+    alfrescoConfiguration_wikiFieldMappings,
+    alfrescoConfiguration_siteUrl,
+    alfrescoConfiguration_siteId,
+    alfrescoConfiguration_secretArn,
+    alfrescoConfiguration_sslCertificateS3Path,
+
+    -- ** AttributeFilter
+    attributeFilter_andAllFilters,
+    attributeFilter_containsAll,
+    attributeFilter_containsAny,
+    attributeFilter_equalsTo,
+    attributeFilter_greaterThan,
+    attributeFilter_greaterThanOrEquals,
+    attributeFilter_lessThan,
+    attributeFilter_lessThanOrEquals,
+    attributeFilter_notFilter,
+    attributeFilter_orAllFilters,
+
+    -- ** AuthenticationConfiguration
+    authenticationConfiguration_basicAuthentication,
+
+    -- ** BasicAuthenticationConfiguration
+    basicAuthenticationConfiguration_host,
+    basicAuthenticationConfiguration_port,
+    basicAuthenticationConfiguration_credentials,
+
+    -- ** BatchDeleteDocumentResponseFailedDocument
+    batchDeleteDocumentResponseFailedDocument_errorCode,
+    batchDeleteDocumentResponseFailedDocument_errorMessage,
+    batchDeleteDocumentResponseFailedDocument_id,
+
+    -- ** BatchGetDocumentStatusResponseError
+    batchGetDocumentStatusResponseError_documentId,
+    batchGetDocumentStatusResponseError_errorCode,
+    batchGetDocumentStatusResponseError_errorMessage,
+
+    -- ** BatchPutDocumentResponseFailedDocument
+    batchPutDocumentResponseFailedDocument_errorCode,
+    batchPutDocumentResponseFailedDocument_errorMessage,
+    batchPutDocumentResponseFailedDocument_id,
+
+    -- ** BoxConfiguration
+    boxConfiguration_commentFieldMappings,
+    boxConfiguration_crawlComments,
+    boxConfiguration_crawlTasks,
+    boxConfiguration_crawlWebLinks,
+    boxConfiguration_exclusionPatterns,
+    boxConfiguration_fileFieldMappings,
+    boxConfiguration_inclusionPatterns,
+    boxConfiguration_taskFieldMappings,
+    boxConfiguration_useChangeLog,
+    boxConfiguration_vpcConfiguration,
+    boxConfiguration_webLinkFieldMappings,
+    boxConfiguration_enterpriseId,
+    boxConfiguration_secretArn,
+
+    -- ** CapacityUnitsConfiguration
+    capacityUnitsConfiguration_storageCapacityUnits,
+    capacityUnitsConfiguration_queryCapacityUnits,
+
+    -- ** ClickFeedback
+    clickFeedback_resultId,
+    clickFeedback_clickTime,
+
+    -- ** ColumnConfiguration
+    columnConfiguration_documentTitleColumnName,
+    columnConfiguration_fieldMappings,
+    columnConfiguration_documentIdColumnName,
+    columnConfiguration_documentDataColumnName,
+    columnConfiguration_changeDetectingColumns,
+
+    -- ** ConfluenceAttachmentConfiguration
+    confluenceAttachmentConfiguration_attachmentFieldMappings,
+    confluenceAttachmentConfiguration_crawlAttachments,
+
+    -- ** ConfluenceAttachmentToIndexFieldMapping
+    confluenceAttachmentToIndexFieldMapping_dataSourceFieldName,
+    confluenceAttachmentToIndexFieldMapping_dateFieldFormat,
+    confluenceAttachmentToIndexFieldMapping_indexFieldName,
+
+    -- ** ConfluenceBlogConfiguration
+    confluenceBlogConfiguration_blogFieldMappings,
+
+    -- ** ConfluenceBlogToIndexFieldMapping
+    confluenceBlogToIndexFieldMapping_dataSourceFieldName,
+    confluenceBlogToIndexFieldMapping_dateFieldFormat,
+    confluenceBlogToIndexFieldMapping_indexFieldName,
+
+    -- ** ConfluenceConfiguration
+    confluenceConfiguration_attachmentConfiguration,
+    confluenceConfiguration_authenticationType,
+    confluenceConfiguration_blogConfiguration,
+    confluenceConfiguration_exclusionPatterns,
+    confluenceConfiguration_inclusionPatterns,
+    confluenceConfiguration_pageConfiguration,
+    confluenceConfiguration_proxyConfiguration,
+    confluenceConfiguration_spaceConfiguration,
+    confluenceConfiguration_vpcConfiguration,
+    confluenceConfiguration_serverUrl,
+    confluenceConfiguration_secretArn,
+    confluenceConfiguration_version,
+
+    -- ** ConfluencePageConfiguration
+    confluencePageConfiguration_pageFieldMappings,
+
+    -- ** ConfluencePageToIndexFieldMapping
+    confluencePageToIndexFieldMapping_dataSourceFieldName,
+    confluencePageToIndexFieldMapping_dateFieldFormat,
+    confluencePageToIndexFieldMapping_indexFieldName,
+
+    -- ** ConfluenceSpaceConfiguration
+    confluenceSpaceConfiguration_crawlArchivedSpaces,
+    confluenceSpaceConfiguration_crawlPersonalSpaces,
+    confluenceSpaceConfiguration_excludeSpaces,
+    confluenceSpaceConfiguration_includeSpaces,
+    confluenceSpaceConfiguration_spaceFieldMappings,
+
+    -- ** ConfluenceSpaceToIndexFieldMapping
+    confluenceSpaceToIndexFieldMapping_dataSourceFieldName,
+    confluenceSpaceToIndexFieldMapping_dateFieldFormat,
+    confluenceSpaceToIndexFieldMapping_indexFieldName,
+
+    -- ** ConnectionConfiguration
+    connectionConfiguration_databaseHost,
+    connectionConfiguration_databasePort,
+    connectionConfiguration_databaseName,
+    connectionConfiguration_tableName,
+    connectionConfiguration_secretArn,
+
+    -- ** ContentSourceConfiguration
+    contentSourceConfiguration_dataSourceIds,
+    contentSourceConfiguration_directPutContent,
+    contentSourceConfiguration_faqIds,
+
+    -- ** Correction
+    correction_beginOffset,
+    correction_correctedTerm,
+    correction_endOffset,
+    correction_term,
+
+    -- ** CustomDocumentEnrichmentConfiguration
+    customDocumentEnrichmentConfiguration_inlineConfigurations,
+    customDocumentEnrichmentConfiguration_postExtractionHookConfiguration,
+    customDocumentEnrichmentConfiguration_preExtractionHookConfiguration,
+    customDocumentEnrichmentConfiguration_roleArn,
+
+    -- ** DataSourceConfiguration
+    dataSourceConfiguration_alfrescoConfiguration,
+    dataSourceConfiguration_boxConfiguration,
+    dataSourceConfiguration_confluenceConfiguration,
+    dataSourceConfiguration_databaseConfiguration,
+    dataSourceConfiguration_fsxConfiguration,
+    dataSourceConfiguration_gitHubConfiguration,
+    dataSourceConfiguration_googleDriveConfiguration,
+    dataSourceConfiguration_jiraConfiguration,
+    dataSourceConfiguration_oneDriveConfiguration,
+    dataSourceConfiguration_quipConfiguration,
+    dataSourceConfiguration_s3Configuration,
+    dataSourceConfiguration_salesforceConfiguration,
+    dataSourceConfiguration_serviceNowConfiguration,
+    dataSourceConfiguration_sharePointConfiguration,
+    dataSourceConfiguration_slackConfiguration,
+    dataSourceConfiguration_templateConfiguration,
+    dataSourceConfiguration_webCrawlerConfiguration,
+    dataSourceConfiguration_workDocsConfiguration,
+
+    -- ** DataSourceGroup
+    dataSourceGroup_groupId,
+    dataSourceGroup_dataSourceId,
+
+    -- ** DataSourceSummary
+    dataSourceSummary_createdAt,
+    dataSourceSummary_id,
+    dataSourceSummary_languageCode,
+    dataSourceSummary_name,
+    dataSourceSummary_status,
+    dataSourceSummary_type,
+    dataSourceSummary_updatedAt,
+
+    -- ** DataSourceSyncJob
+    dataSourceSyncJob_dataSourceErrorCode,
+    dataSourceSyncJob_endTime,
+    dataSourceSyncJob_errorCode,
+    dataSourceSyncJob_errorMessage,
+    dataSourceSyncJob_executionId,
+    dataSourceSyncJob_metrics,
+    dataSourceSyncJob_startTime,
+    dataSourceSyncJob_status,
+
+    -- ** DataSourceSyncJobMetricTarget
+    dataSourceSyncJobMetricTarget_dataSourceSyncJobId,
+    dataSourceSyncJobMetricTarget_dataSourceId,
+
+    -- ** DataSourceSyncJobMetrics
+    dataSourceSyncJobMetrics_documentsAdded,
+    dataSourceSyncJobMetrics_documentsDeleted,
+    dataSourceSyncJobMetrics_documentsFailed,
+    dataSourceSyncJobMetrics_documentsModified,
+    dataSourceSyncJobMetrics_documentsScanned,
+
+    -- ** DataSourceToIndexFieldMapping
+    dataSourceToIndexFieldMapping_dateFieldFormat,
+    dataSourceToIndexFieldMapping_dataSourceFieldName,
+    dataSourceToIndexFieldMapping_indexFieldName,
+
+    -- ** DataSourceVpcConfiguration
+    dataSourceVpcConfiguration_subnetIds,
+    dataSourceVpcConfiguration_securityGroupIds,
+
+    -- ** DatabaseConfiguration
+    databaseConfiguration_aclConfiguration,
+    databaseConfiguration_sqlConfiguration,
+    databaseConfiguration_vpcConfiguration,
+    databaseConfiguration_databaseEngineType,
+    databaseConfiguration_connectionConfiguration,
+    databaseConfiguration_columnConfiguration,
+
+    -- ** Document
+    document_accessControlConfigurationId,
+    document_accessControlList,
+    document_attributes,
+    document_blob,
+    document_contentType,
+    document_hierarchicalAccessControlList,
+    document_s3Path,
+    document_title,
+    document_id,
+
+    -- ** DocumentAttribute
+    documentAttribute_key,
+    documentAttribute_value,
+
+    -- ** DocumentAttributeCondition
+    documentAttributeCondition_conditionOnValue,
+    documentAttributeCondition_conditionDocumentAttributeKey,
+    documentAttributeCondition_operator,
+
+    -- ** DocumentAttributeTarget
+    documentAttributeTarget_targetDocumentAttributeKey,
+    documentAttributeTarget_targetDocumentAttributeValue,
+    documentAttributeTarget_targetDocumentAttributeValueDeletion,
+
+    -- ** DocumentAttributeValue
+    documentAttributeValue_dateValue,
+    documentAttributeValue_longValue,
+    documentAttributeValue_stringListValue,
+    documentAttributeValue_stringValue,
+
+    -- ** DocumentAttributeValueCountPair
+    documentAttributeValueCountPair_count,
+    documentAttributeValueCountPair_documentAttributeValue,
+    documentAttributeValueCountPair_facetResults,
+
+    -- ** DocumentInfo
+    documentInfo_attributes,
+    documentInfo_documentId,
+
+    -- ** DocumentMetadataConfiguration
+    documentMetadataConfiguration_relevance,
+    documentMetadataConfiguration_search,
+    documentMetadataConfiguration_name,
+    documentMetadataConfiguration_type,
+
+    -- ** DocumentRelevanceConfiguration
+    documentRelevanceConfiguration_name,
+    documentRelevanceConfiguration_relevance,
+
+    -- ** DocumentsMetadataConfiguration
+    documentsMetadataConfiguration_s3Prefix,
+
+    -- ** EntityConfiguration
+    entityConfiguration_entityId,
+    entityConfiguration_entityType,
+
+    -- ** EntityDisplayData
+    entityDisplayData_firstName,
+    entityDisplayData_groupName,
+    entityDisplayData_identifiedUserName,
+    entityDisplayData_lastName,
+    entityDisplayData_userName,
+
+    -- ** EntityPersonaConfiguration
+    entityPersonaConfiguration_entityId,
+    entityPersonaConfiguration_persona,
+
+    -- ** ExperienceConfiguration
+    experienceConfiguration_contentSourceConfiguration,
+    experienceConfiguration_userIdentityConfiguration,
+
+    -- ** ExperienceEndpoint
+    experienceEndpoint_endpoint,
+    experienceEndpoint_endpointType,
+
+    -- ** ExperienceEntitiesSummary
+    experienceEntitiesSummary_displayData,
+    experienceEntitiesSummary_entityId,
+    experienceEntitiesSummary_entityType,
+
+    -- ** ExperiencesSummary
+    experiencesSummary_createdAt,
+    experiencesSummary_endpoints,
+    experiencesSummary_id,
+    experiencesSummary_name,
+    experiencesSummary_status,
+
+    -- ** Facet
+    facet_documentAttributeKey,
+    facet_facets,
+    facet_maxResults,
+
+    -- ** FacetResult
+    facetResult_documentAttributeKey,
+    facetResult_documentAttributeValueCountPairs,
+    facetResult_documentAttributeValueType,
+
+    -- ** FailedEntity
+    failedEntity_entityId,
+    failedEntity_errorMessage,
+
+    -- ** FaqStatistics
+    faqStatistics_indexedQuestionAnswersCount,
+
+    -- ** FaqSummary
+    faqSummary_createdAt,
+    faqSummary_fileFormat,
+    faqSummary_id,
+    faqSummary_languageCode,
+    faqSummary_name,
+    faqSummary_status,
+    faqSummary_updatedAt,
+
+    -- ** FsxConfiguration
+    fsxConfiguration_exclusionPatterns,
+    fsxConfiguration_fieldMappings,
+    fsxConfiguration_inclusionPatterns,
+    fsxConfiguration_secretArn,
+    fsxConfiguration_fileSystemId,
+    fsxConfiguration_fileSystemType,
+    fsxConfiguration_vpcConfiguration,
+
+    -- ** GitHubConfiguration
+    gitHubConfiguration_exclusionFileNamePatterns,
+    gitHubConfiguration_exclusionFileTypePatterns,
+    gitHubConfiguration_exclusionFolderNamePatterns,
+    gitHubConfiguration_gitHubCommitConfigurationFieldMappings,
+    gitHubConfiguration_gitHubDocumentCrawlProperties,
+    gitHubConfiguration_gitHubIssueAttachmentConfigurationFieldMappings,
+    gitHubConfiguration_gitHubIssueCommentConfigurationFieldMappings,
+    gitHubConfiguration_gitHubIssueDocumentConfigurationFieldMappings,
+    gitHubConfiguration_gitHubPullRequestCommentConfigurationFieldMappings,
+    gitHubConfiguration_gitHubPullRequestDocumentAttachmentConfigurationFieldMappings,
+    gitHubConfiguration_gitHubPullRequestDocumentConfigurationFieldMappings,
+    gitHubConfiguration_gitHubRepositoryConfigurationFieldMappings,
+    gitHubConfiguration_inclusionFileNamePatterns,
+    gitHubConfiguration_inclusionFileTypePatterns,
+    gitHubConfiguration_inclusionFolderNamePatterns,
+    gitHubConfiguration_onPremiseConfiguration,
+    gitHubConfiguration_repositoryFilter,
+    gitHubConfiguration_saaSConfiguration,
+    gitHubConfiguration_type,
+    gitHubConfiguration_useChangeLog,
+    gitHubConfiguration_vpcConfiguration,
+    gitHubConfiguration_secretArn,
+
+    -- ** GitHubDocumentCrawlProperties
+    gitHubDocumentCrawlProperties_crawlIssue,
+    gitHubDocumentCrawlProperties_crawlIssueComment,
+    gitHubDocumentCrawlProperties_crawlIssueCommentAttachment,
+    gitHubDocumentCrawlProperties_crawlPullRequest,
+    gitHubDocumentCrawlProperties_crawlPullRequestComment,
+    gitHubDocumentCrawlProperties_crawlPullRequestCommentAttachment,
+    gitHubDocumentCrawlProperties_crawlRepositoryDocuments,
+
+    -- ** GoogleDriveConfiguration
+    googleDriveConfiguration_excludeMimeTypes,
+    googleDriveConfiguration_excludeSharedDrives,
+    googleDriveConfiguration_excludeUserAccounts,
+    googleDriveConfiguration_exclusionPatterns,
+    googleDriveConfiguration_fieldMappings,
+    googleDriveConfiguration_inclusionPatterns,
+    googleDriveConfiguration_secretArn,
+
+    -- ** GroupMembers
+    groupMembers_memberGroups,
+    groupMembers_memberUsers,
+    groupMembers_s3PathforGroupMembers,
+
+    -- ** GroupOrderingIdSummary
+    groupOrderingIdSummary_failureReason,
+    groupOrderingIdSummary_lastUpdatedAt,
+    groupOrderingIdSummary_orderingId,
+    groupOrderingIdSummary_receivedAt,
+    groupOrderingIdSummary_status,
+
+    -- ** GroupSummary
+    groupSummary_groupId,
+    groupSummary_orderingId,
+
+    -- ** HierarchicalPrincipal
+    hierarchicalPrincipal_principalList,
+
+    -- ** Highlight
+    highlight_topAnswer,
+    highlight_type,
+    highlight_beginOffset,
+    highlight_endOffset,
+
+    -- ** HookConfiguration
+    hookConfiguration_invocationCondition,
+    hookConfiguration_lambdaArn,
+    hookConfiguration_s3Bucket,
+
+    -- ** IndexConfigurationSummary
+    indexConfigurationSummary_edition,
+    indexConfigurationSummary_id,
+    indexConfigurationSummary_name,
+    indexConfigurationSummary_createdAt,
+    indexConfigurationSummary_updatedAt,
+    indexConfigurationSummary_status,
+
+    -- ** IndexStatistics
+    indexStatistics_faqStatistics,
+    indexStatistics_textDocumentStatistics,
+
+    -- ** InlineCustomDocumentEnrichmentConfiguration
+    inlineCustomDocumentEnrichmentConfiguration_condition,
+    inlineCustomDocumentEnrichmentConfiguration_documentContentDeletion,
+    inlineCustomDocumentEnrichmentConfiguration_target,
+
+    -- ** JiraConfiguration
+    jiraConfiguration_attachmentFieldMappings,
+    jiraConfiguration_commentFieldMappings,
+    jiraConfiguration_exclusionPatterns,
+    jiraConfiguration_inclusionPatterns,
+    jiraConfiguration_issueFieldMappings,
+    jiraConfiguration_issueSubEntityFilter,
+    jiraConfiguration_issueType,
+    jiraConfiguration_project,
+    jiraConfiguration_projectFieldMappings,
+    jiraConfiguration_status,
+    jiraConfiguration_useChangeLog,
+    jiraConfiguration_vpcConfiguration,
+    jiraConfiguration_workLogFieldMappings,
+    jiraConfiguration_jiraAccountUrl,
+    jiraConfiguration_secretArn,
+
+    -- ** JsonTokenTypeConfiguration
+    jsonTokenTypeConfiguration_userNameAttributeField,
+    jsonTokenTypeConfiguration_groupAttributeField,
+
+    -- ** JwtTokenTypeConfiguration
+    jwtTokenTypeConfiguration_claimRegex,
+    jwtTokenTypeConfiguration_groupAttributeField,
+    jwtTokenTypeConfiguration_issuer,
+    jwtTokenTypeConfiguration_secretManagerArn,
+    jwtTokenTypeConfiguration_url,
+    jwtTokenTypeConfiguration_userNameAttributeField,
+    jwtTokenTypeConfiguration_keyLocation,
+
+    -- ** MemberGroup
+    memberGroup_dataSourceId,
+    memberGroup_groupId,
+
+    -- ** MemberUser
+    memberUser_userId,
+
+    -- ** OnPremiseConfiguration
+    onPremiseConfiguration_hostUrl,
+    onPremiseConfiguration_organizationName,
+    onPremiseConfiguration_sslCertificateS3Path,
+
+    -- ** OneDriveConfiguration
+    oneDriveConfiguration_disableLocalGroups,
+    oneDriveConfiguration_exclusionPatterns,
+    oneDriveConfiguration_fieldMappings,
+    oneDriveConfiguration_inclusionPatterns,
+    oneDriveConfiguration_tenantDomain,
+    oneDriveConfiguration_secretArn,
+    oneDriveConfiguration_oneDriveUsers,
+
+    -- ** OneDriveUsers
+    oneDriveUsers_oneDriveUserList,
+    oneDriveUsers_oneDriveUserS3Path,
+
+    -- ** PersonasSummary
+    personasSummary_createdAt,
+    personasSummary_entityId,
+    personasSummary_persona,
+    personasSummary_updatedAt,
+
+    -- ** Principal
+    principal_dataSourceId,
+    principal_name,
+    principal_type,
+    principal_access,
+
+    -- ** ProxyConfiguration
+    proxyConfiguration_credentials,
+    proxyConfiguration_host,
+    proxyConfiguration_port,
+
+    -- ** QueryResultItem
+    queryResultItem_additionalAttributes,
+    queryResultItem_documentAttributes,
+    queryResultItem_documentExcerpt,
+    queryResultItem_documentId,
+    queryResultItem_documentTitle,
+    queryResultItem_documentURI,
+    queryResultItem_feedbackToken,
+    queryResultItem_format,
+    queryResultItem_id,
+    queryResultItem_scoreAttributes,
+    queryResultItem_tableExcerpt,
+    queryResultItem_type,
+
+    -- ** QuerySuggestionsBlockListSummary
+    querySuggestionsBlockListSummary_createdAt,
+    querySuggestionsBlockListSummary_id,
+    querySuggestionsBlockListSummary_itemCount,
+    querySuggestionsBlockListSummary_name,
+    querySuggestionsBlockListSummary_status,
+    querySuggestionsBlockListSummary_updatedAt,
+
+    -- ** QuipConfiguration
+    quipConfiguration_attachmentFieldMappings,
+    quipConfiguration_crawlAttachments,
+    quipConfiguration_crawlChatRooms,
+    quipConfiguration_crawlFileComments,
+    quipConfiguration_exclusionPatterns,
+    quipConfiguration_folderIds,
+    quipConfiguration_inclusionPatterns,
+    quipConfiguration_messageFieldMappings,
+    quipConfiguration_threadFieldMappings,
+    quipConfiguration_vpcConfiguration,
+    quipConfiguration_domain,
+    quipConfiguration_secretArn,
+
+    -- ** Relevance
+    relevance_duration,
+    relevance_freshness,
+    relevance_importance,
+    relevance_rankOrder,
+    relevance_valueImportanceMap,
+
+    -- ** RelevanceFeedback
+    relevanceFeedback_resultId,
+    relevanceFeedback_relevanceValue,
+
+    -- ** S3DataSourceConfiguration
+    s3DataSourceConfiguration_accessControlListConfiguration,
+    s3DataSourceConfiguration_documentsMetadataConfiguration,
+    s3DataSourceConfiguration_exclusionPatterns,
+    s3DataSourceConfiguration_inclusionPatterns,
+    s3DataSourceConfiguration_inclusionPrefixes,
+    s3DataSourceConfiguration_bucketName,
+
+    -- ** S3Path
+    s3Path_bucket,
+    s3Path_key,
+
+    -- ** SaaSConfiguration
+    saaSConfiguration_organizationName,
+    saaSConfiguration_hostUrl,
+
+    -- ** SalesforceChatterFeedConfiguration
+    salesforceChatterFeedConfiguration_documentTitleFieldName,
+    salesforceChatterFeedConfiguration_fieldMappings,
+    salesforceChatterFeedConfiguration_includeFilterTypes,
+    salesforceChatterFeedConfiguration_documentDataFieldName,
+
+    -- ** SalesforceConfiguration
+    salesforceConfiguration_chatterFeedConfiguration,
+    salesforceConfiguration_crawlAttachments,
+    salesforceConfiguration_excludeAttachmentFilePatterns,
+    salesforceConfiguration_includeAttachmentFilePatterns,
+    salesforceConfiguration_knowledgeArticleConfiguration,
+    salesforceConfiguration_standardObjectAttachmentConfiguration,
+    salesforceConfiguration_standardObjectConfigurations,
+    salesforceConfiguration_serverUrl,
+    salesforceConfiguration_secretArn,
+
+    -- ** SalesforceCustomKnowledgeArticleTypeConfiguration
+    salesforceCustomKnowledgeArticleTypeConfiguration_documentTitleFieldName,
+    salesforceCustomKnowledgeArticleTypeConfiguration_fieldMappings,
+    salesforceCustomKnowledgeArticleTypeConfiguration_name,
+    salesforceCustomKnowledgeArticleTypeConfiguration_documentDataFieldName,
+
+    -- ** SalesforceKnowledgeArticleConfiguration
+    salesforceKnowledgeArticleConfiguration_customKnowledgeArticleTypeConfigurations,
+    salesforceKnowledgeArticleConfiguration_standardKnowledgeArticleTypeConfiguration,
+    salesforceKnowledgeArticleConfiguration_includedStates,
+
+    -- ** SalesforceStandardKnowledgeArticleTypeConfiguration
+    salesforceStandardKnowledgeArticleTypeConfiguration_documentTitleFieldName,
+    salesforceStandardKnowledgeArticleTypeConfiguration_fieldMappings,
+    salesforceStandardKnowledgeArticleTypeConfiguration_documentDataFieldName,
+
+    -- ** SalesforceStandardObjectAttachmentConfiguration
+    salesforceStandardObjectAttachmentConfiguration_documentTitleFieldName,
+    salesforceStandardObjectAttachmentConfiguration_fieldMappings,
+
+    -- ** SalesforceStandardObjectConfiguration
+    salesforceStandardObjectConfiguration_documentTitleFieldName,
+    salesforceStandardObjectConfiguration_fieldMappings,
+    salesforceStandardObjectConfiguration_name,
+    salesforceStandardObjectConfiguration_documentDataFieldName,
+
+    -- ** ScoreAttributes
+    scoreAttributes_scoreConfidence,
+
+    -- ** Search
+    search_displayable,
+    search_facetable,
+    search_searchable,
+    search_sortable,
+
+    -- ** SeedUrlConfiguration
+    seedUrlConfiguration_webCrawlerMode,
+    seedUrlConfiguration_seedUrls,
+
+    -- ** ServerSideEncryptionConfiguration
+    serverSideEncryptionConfiguration_kmsKeyId,
+
+    -- ** ServiceNowConfiguration
+    serviceNowConfiguration_authenticationType,
+    serviceNowConfiguration_knowledgeArticleConfiguration,
+    serviceNowConfiguration_serviceCatalogConfiguration,
+    serviceNowConfiguration_hostUrl,
+    serviceNowConfiguration_secretArn,
+    serviceNowConfiguration_serviceNowBuildVersion,
+
+    -- ** ServiceNowKnowledgeArticleConfiguration
+    serviceNowKnowledgeArticleConfiguration_crawlAttachments,
+    serviceNowKnowledgeArticleConfiguration_documentTitleFieldName,
+    serviceNowKnowledgeArticleConfiguration_excludeAttachmentFilePatterns,
+    serviceNowKnowledgeArticleConfiguration_fieldMappings,
+    serviceNowKnowledgeArticleConfiguration_filterQuery,
+    serviceNowKnowledgeArticleConfiguration_includeAttachmentFilePatterns,
+    serviceNowKnowledgeArticleConfiguration_documentDataFieldName,
+
+    -- ** ServiceNowServiceCatalogConfiguration
+    serviceNowServiceCatalogConfiguration_crawlAttachments,
+    serviceNowServiceCatalogConfiguration_documentTitleFieldName,
+    serviceNowServiceCatalogConfiguration_excludeAttachmentFilePatterns,
+    serviceNowServiceCatalogConfiguration_fieldMappings,
+    serviceNowServiceCatalogConfiguration_includeAttachmentFilePatterns,
+    serviceNowServiceCatalogConfiguration_documentDataFieldName,
+
+    -- ** SharePointConfiguration
+    sharePointConfiguration_authenticationType,
+    sharePointConfiguration_crawlAttachments,
+    sharePointConfiguration_disableLocalGroups,
+    sharePointConfiguration_documentTitleFieldName,
+    sharePointConfiguration_exclusionPatterns,
+    sharePointConfiguration_fieldMappings,
+    sharePointConfiguration_inclusionPatterns,
+    sharePointConfiguration_proxyConfiguration,
+    sharePointConfiguration_sslCertificateS3Path,
+    sharePointConfiguration_useChangeLog,
+    sharePointConfiguration_vpcConfiguration,
+    sharePointConfiguration_sharePointVersion,
+    sharePointConfiguration_urls,
+    sharePointConfiguration_secretArn,
+
+    -- ** SiteMapsConfiguration
+    siteMapsConfiguration_siteMaps,
+
+    -- ** SlackConfiguration
+    slackConfiguration_crawlBotMessage,
+    slackConfiguration_excludeArchived,
+    slackConfiguration_exclusionPatterns,
+    slackConfiguration_fieldMappings,
+    slackConfiguration_inclusionPatterns,
+    slackConfiguration_lookBackPeriod,
+    slackConfiguration_privateChannelFilter,
+    slackConfiguration_publicChannelFilter,
+    slackConfiguration_useChangeLog,
+    slackConfiguration_vpcConfiguration,
+    slackConfiguration_teamId,
+    slackConfiguration_secretArn,
+    slackConfiguration_slackEntityList,
+    slackConfiguration_sinceCrawlDate,
+
+    -- ** SortingConfiguration
+    sortingConfiguration_documentAttributeKey,
+    sortingConfiguration_sortOrder,
+
+    -- ** SpellCorrectedQuery
+    spellCorrectedQuery_corrections,
+    spellCorrectedQuery_suggestedQueryText,
+
+    -- ** SpellCorrectionConfiguration
+    spellCorrectionConfiguration_includeQuerySpellCheckSuggestions,
+
+    -- ** SqlConfiguration
+    sqlConfiguration_queryIdentifiersEnclosingOption,
+
+    -- ** Status
+    status_documentId,
+    status_documentStatus,
+    status_failureCode,
+    status_failureReason,
+
+    -- ** Suggestion
+    suggestion_id,
+    suggestion_value,
+
+    -- ** SuggestionHighlight
+    suggestionHighlight_beginOffset,
+    suggestionHighlight_endOffset,
+
+    -- ** SuggestionTextWithHighlights
+    suggestionTextWithHighlights_highlights,
+    suggestionTextWithHighlights_text,
+
+    -- ** SuggestionValue
+    suggestionValue_text,
+
+    -- ** TableCell
+    tableCell_header,
+    tableCell_highlighted,
+    tableCell_topAnswer,
+    tableCell_value,
+
+    -- ** TableExcerpt
+    tableExcerpt_rows,
+    tableExcerpt_totalNumberOfRows,
+
+    -- ** TableRow
+    tableRow_cells,
+
+    -- ** Tag
+    tag_key,
+    tag_value,
+
+    -- ** Template
+
+    -- ** TemplateConfiguration
+    templateConfiguration_template,
+
+    -- ** TextDocumentStatistics
+    textDocumentStatistics_indexedTextDocumentsCount,
+    textDocumentStatistics_indexedTextBytes,
+
+    -- ** TextWithHighlights
+    textWithHighlights_highlights,
+    textWithHighlights_text,
+
+    -- ** ThesaurusSummary
+    thesaurusSummary_createdAt,
+    thesaurusSummary_id,
+    thesaurusSummary_name,
+    thesaurusSummary_status,
+    thesaurusSummary_updatedAt,
+
+    -- ** TimeRange
+    timeRange_endTime,
+    timeRange_startTime,
+
+    -- ** Urls
+    urls_seedUrlConfiguration,
+    urls_siteMapsConfiguration,
+
+    -- ** UserContext
+    userContext_dataSourceGroups,
+    userContext_groups,
+    userContext_token,
+    userContext_userId,
+
+    -- ** UserGroupResolutionConfiguration
+    userGroupResolutionConfiguration_userGroupResolutionMode,
+
+    -- ** UserIdentityConfiguration
+    userIdentityConfiguration_identityAttributeName,
+
+    -- ** UserTokenConfiguration
+    userTokenConfiguration_jsonTokenTypeConfiguration,
+    userTokenConfiguration_jwtTokenTypeConfiguration,
+
+    -- ** Warning
+    warning_code,
+    warning_message,
+
+    -- ** WebCrawlerConfiguration
+    webCrawlerConfiguration_authenticationConfiguration,
+    webCrawlerConfiguration_crawlDepth,
+    webCrawlerConfiguration_maxContentSizePerPageInMegaBytes,
+    webCrawlerConfiguration_maxLinksPerPage,
+    webCrawlerConfiguration_maxUrlsPerMinuteCrawlRate,
+    webCrawlerConfiguration_proxyConfiguration,
+    webCrawlerConfiguration_urlExclusionPatterns,
+    webCrawlerConfiguration_urlInclusionPatterns,
+    webCrawlerConfiguration_urls,
+
+    -- ** WorkDocsConfiguration
+    workDocsConfiguration_crawlComments,
+    workDocsConfiguration_exclusionPatterns,
+    workDocsConfiguration_fieldMappings,
+    workDocsConfiguration_inclusionPatterns,
+    workDocsConfiguration_useChangeLog,
+    workDocsConfiguration_organizationId,
+  )
+where
+
+import Amazonka.Kendra.AssociateEntitiesToExperience
+import Amazonka.Kendra.AssociatePersonasToEntities
+import Amazonka.Kendra.BatchDeleteDocument
+import Amazonka.Kendra.BatchGetDocumentStatus
+import Amazonka.Kendra.BatchPutDocument
+import Amazonka.Kendra.ClearQuerySuggestions
+import Amazonka.Kendra.CreateAccessControlConfiguration
+import Amazonka.Kendra.CreateDataSource
+import Amazonka.Kendra.CreateExperience
+import Amazonka.Kendra.CreateFaq
+import Amazonka.Kendra.CreateIndex
+import Amazonka.Kendra.CreateQuerySuggestionsBlockList
+import Amazonka.Kendra.CreateThesaurus
+import Amazonka.Kendra.DeleteAccessControlConfiguration
+import Amazonka.Kendra.DeleteDataSource
+import Amazonka.Kendra.DeleteExperience
+import Amazonka.Kendra.DeleteFaq
+import Amazonka.Kendra.DeleteIndex
+import Amazonka.Kendra.DeletePrincipalMapping
+import Amazonka.Kendra.DeleteQuerySuggestionsBlockList
+import Amazonka.Kendra.DeleteThesaurus
+import Amazonka.Kendra.DescribeAccessControlConfiguration
+import Amazonka.Kendra.DescribeDataSource
+import Amazonka.Kendra.DescribeExperience
+import Amazonka.Kendra.DescribeFaq
+import Amazonka.Kendra.DescribeIndex
+import Amazonka.Kendra.DescribePrincipalMapping
+import Amazonka.Kendra.DescribeQuerySuggestionsBlockList
+import Amazonka.Kendra.DescribeQuerySuggestionsConfig
+import Amazonka.Kendra.DescribeThesaurus
+import Amazonka.Kendra.DisassociateEntitiesFromExperience
+import Amazonka.Kendra.DisassociatePersonasFromEntities
+import Amazonka.Kendra.GetQuerySuggestions
+import Amazonka.Kendra.GetSnapshots
+import Amazonka.Kendra.ListAccessControlConfigurations
+import Amazonka.Kendra.ListDataSourceSyncJobs
+import Amazonka.Kendra.ListDataSources
+import Amazonka.Kendra.ListEntityPersonas
+import Amazonka.Kendra.ListExperienceEntities
+import Amazonka.Kendra.ListExperiences
+import Amazonka.Kendra.ListFaqs
+import Amazonka.Kendra.ListGroupsOlderThanOrderingId
+import Amazonka.Kendra.ListIndices
+import Amazonka.Kendra.ListQuerySuggestionsBlockLists
+import Amazonka.Kendra.ListTagsForResource
+import Amazonka.Kendra.ListThesauri
+import Amazonka.Kendra.PutPrincipalMapping
+import Amazonka.Kendra.Query
+import Amazonka.Kendra.StartDataSourceSyncJob
+import Amazonka.Kendra.StopDataSourceSyncJob
+import Amazonka.Kendra.SubmitFeedback
+import Amazonka.Kendra.TagResource
+import Amazonka.Kendra.Types.AccessControlConfigurationSummary
+import Amazonka.Kendra.Types.AccessControlListConfiguration
+import Amazonka.Kendra.Types.AclConfiguration
+import Amazonka.Kendra.Types.AdditionalResultAttribute
+import Amazonka.Kendra.Types.AdditionalResultAttributeValue
+import Amazonka.Kendra.Types.AlfrescoConfiguration
+import Amazonka.Kendra.Types.AttributeFilter
+import Amazonka.Kendra.Types.AuthenticationConfiguration
+import Amazonka.Kendra.Types.BasicAuthenticationConfiguration
+import Amazonka.Kendra.Types.BatchDeleteDocumentResponseFailedDocument
+import Amazonka.Kendra.Types.BatchGetDocumentStatusResponseError
+import Amazonka.Kendra.Types.BatchPutDocumentResponseFailedDocument
+import Amazonka.Kendra.Types.BoxConfiguration
+import Amazonka.Kendra.Types.CapacityUnitsConfiguration
+import Amazonka.Kendra.Types.ClickFeedback
+import Amazonka.Kendra.Types.ColumnConfiguration
+import Amazonka.Kendra.Types.ConfluenceAttachmentConfiguration
+import Amazonka.Kendra.Types.ConfluenceAttachmentToIndexFieldMapping
+import Amazonka.Kendra.Types.ConfluenceBlogConfiguration
+import Amazonka.Kendra.Types.ConfluenceBlogToIndexFieldMapping
+import Amazonka.Kendra.Types.ConfluenceConfiguration
+import Amazonka.Kendra.Types.ConfluencePageConfiguration
+import Amazonka.Kendra.Types.ConfluencePageToIndexFieldMapping
+import Amazonka.Kendra.Types.ConfluenceSpaceConfiguration
+import Amazonka.Kendra.Types.ConfluenceSpaceToIndexFieldMapping
+import Amazonka.Kendra.Types.ConnectionConfiguration
+import Amazonka.Kendra.Types.ContentSourceConfiguration
+import Amazonka.Kendra.Types.Correction
+import Amazonka.Kendra.Types.CustomDocumentEnrichmentConfiguration
+import Amazonka.Kendra.Types.DataSourceConfiguration
+import Amazonka.Kendra.Types.DataSourceGroup
+import Amazonka.Kendra.Types.DataSourceSummary
+import Amazonka.Kendra.Types.DataSourceSyncJob
+import Amazonka.Kendra.Types.DataSourceSyncJobMetricTarget
+import Amazonka.Kendra.Types.DataSourceSyncJobMetrics
+import Amazonka.Kendra.Types.DataSourceToIndexFieldMapping
+import Amazonka.Kendra.Types.DataSourceVpcConfiguration
+import Amazonka.Kendra.Types.DatabaseConfiguration
+import Amazonka.Kendra.Types.Document
+import Amazonka.Kendra.Types.DocumentAttribute
+import Amazonka.Kendra.Types.DocumentAttributeCondition
+import Amazonka.Kendra.Types.DocumentAttributeTarget
+import Amazonka.Kendra.Types.DocumentAttributeValue
+import Amazonka.Kendra.Types.DocumentAttributeValueCountPair
+import Amazonka.Kendra.Types.DocumentInfo
+import Amazonka.Kendra.Types.DocumentMetadataConfiguration
+import Amazonka.Kendra.Types.DocumentRelevanceConfiguration
+import Amazonka.Kendra.Types.DocumentsMetadataConfiguration
+import Amazonka.Kendra.Types.EntityConfiguration
+import Amazonka.Kendra.Types.EntityDisplayData
+import Amazonka.Kendra.Types.EntityPersonaConfiguration
+import Amazonka.Kendra.Types.ExperienceConfiguration
+import Amazonka.Kendra.Types.ExperienceEndpoint
+import Amazonka.Kendra.Types.ExperienceEntitiesSummary
+import Amazonka.Kendra.Types.ExperiencesSummary
+import Amazonka.Kendra.Types.Facet
+import Amazonka.Kendra.Types.FacetResult
+import Amazonka.Kendra.Types.FailedEntity
+import Amazonka.Kendra.Types.FaqStatistics
+import Amazonka.Kendra.Types.FaqSummary
+import Amazonka.Kendra.Types.FsxConfiguration
+import Amazonka.Kendra.Types.GitHubConfiguration
+import Amazonka.Kendra.Types.GitHubDocumentCrawlProperties
+import Amazonka.Kendra.Types.GoogleDriveConfiguration
+import Amazonka.Kendra.Types.GroupMembers
+import Amazonka.Kendra.Types.GroupOrderingIdSummary
+import Amazonka.Kendra.Types.GroupSummary
+import Amazonka.Kendra.Types.HierarchicalPrincipal
+import Amazonka.Kendra.Types.Highlight
+import Amazonka.Kendra.Types.HookConfiguration
+import Amazonka.Kendra.Types.IndexConfigurationSummary
+import Amazonka.Kendra.Types.IndexStatistics
+import Amazonka.Kendra.Types.InlineCustomDocumentEnrichmentConfiguration
+import Amazonka.Kendra.Types.JiraConfiguration
+import Amazonka.Kendra.Types.JsonTokenTypeConfiguration
+import Amazonka.Kendra.Types.JwtTokenTypeConfiguration
+import Amazonka.Kendra.Types.MemberGroup
+import Amazonka.Kendra.Types.MemberUser
+import Amazonka.Kendra.Types.OnPremiseConfiguration
+import Amazonka.Kendra.Types.OneDriveConfiguration
+import Amazonka.Kendra.Types.OneDriveUsers
+import Amazonka.Kendra.Types.PersonasSummary
+import Amazonka.Kendra.Types.Principal
+import Amazonka.Kendra.Types.ProxyConfiguration
+import Amazonka.Kendra.Types.QueryResultItem
+import Amazonka.Kendra.Types.QuerySuggestionsBlockListSummary
+import Amazonka.Kendra.Types.QuipConfiguration
+import Amazonka.Kendra.Types.Relevance
+import Amazonka.Kendra.Types.RelevanceFeedback
+import Amazonka.Kendra.Types.S3DataSourceConfiguration
+import Amazonka.Kendra.Types.S3Path
+import Amazonka.Kendra.Types.SaaSConfiguration
+import Amazonka.Kendra.Types.SalesforceChatterFeedConfiguration
+import Amazonka.Kendra.Types.SalesforceConfiguration
+import Amazonka.Kendra.Types.SalesforceCustomKnowledgeArticleTypeConfiguration
+import Amazonka.Kendra.Types.SalesforceKnowledgeArticleConfiguration
+import Amazonka.Kendra.Types.SalesforceStandardKnowledgeArticleTypeConfiguration
+import Amazonka.Kendra.Types.SalesforceStandardObjectAttachmentConfiguration
+import Amazonka.Kendra.Types.SalesforceStandardObjectConfiguration
+import Amazonka.Kendra.Types.ScoreAttributes
+import Amazonka.Kendra.Types.Search
+import Amazonka.Kendra.Types.SeedUrlConfiguration
+import Amazonka.Kendra.Types.ServerSideEncryptionConfiguration
+import Amazonka.Kendra.Types.ServiceNowConfiguration
+import Amazonka.Kendra.Types.ServiceNowKnowledgeArticleConfiguration
+import Amazonka.Kendra.Types.ServiceNowServiceCatalogConfiguration
+import Amazonka.Kendra.Types.SharePointConfiguration
+import Amazonka.Kendra.Types.SiteMapsConfiguration
+import Amazonka.Kendra.Types.SlackConfiguration
+import Amazonka.Kendra.Types.SortingConfiguration
+import Amazonka.Kendra.Types.SpellCorrectedQuery
+import Amazonka.Kendra.Types.SpellCorrectionConfiguration
+import Amazonka.Kendra.Types.SqlConfiguration
+import Amazonka.Kendra.Types.Status
+import Amazonka.Kendra.Types.Suggestion
+import Amazonka.Kendra.Types.SuggestionHighlight
+import Amazonka.Kendra.Types.SuggestionTextWithHighlights
+import Amazonka.Kendra.Types.SuggestionValue
+import Amazonka.Kendra.Types.TableCell
+import Amazonka.Kendra.Types.TableExcerpt
+import Amazonka.Kendra.Types.TableRow
+import Amazonka.Kendra.Types.Tag
+import Amazonka.Kendra.Types.Template
+import Amazonka.Kendra.Types.TemplateConfiguration
+import Amazonka.Kendra.Types.TextDocumentStatistics
+import Amazonka.Kendra.Types.TextWithHighlights
+import Amazonka.Kendra.Types.ThesaurusSummary
+import Amazonka.Kendra.Types.TimeRange
+import Amazonka.Kendra.Types.Urls
+import Amazonka.Kendra.Types.UserContext
+import Amazonka.Kendra.Types.UserGroupResolutionConfiguration
+import Amazonka.Kendra.Types.UserIdentityConfiguration
+import Amazonka.Kendra.Types.UserTokenConfiguration
+import Amazonka.Kendra.Types.Warning
+import Amazonka.Kendra.Types.WebCrawlerConfiguration
+import Amazonka.Kendra.Types.WorkDocsConfiguration
+import Amazonka.Kendra.UntagResource
+import Amazonka.Kendra.UpdateAccessControlConfiguration
+import Amazonka.Kendra.UpdateDataSource
+import Amazonka.Kendra.UpdateExperience
+import Amazonka.Kendra.UpdateIndex
+import Amazonka.Kendra.UpdateQuerySuggestionsBlockList
+import Amazonka.Kendra.UpdateQuerySuggestionsConfig
+import Amazonka.Kendra.UpdateThesaurus
diff --git a/gen/Amazonka/Kendra/ListAccessControlConfigurations.hs b/gen/Amazonka/Kendra/ListAccessControlConfigurations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/ListAccessControlConfigurations.hs
@@ -0,0 +1,252 @@
+{-# 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.Kendra.ListAccessControlConfigurations
+-- 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 one or more access control configurations for an index. This
+-- includes user and group access information for your documents. This is
+-- useful for user context filtering, where search results are filtered
+-- based on the user or their group access to documents.
+module Amazonka.Kendra.ListAccessControlConfigurations
+  ( -- * Creating a Request
+    ListAccessControlConfigurations (..),
+    newListAccessControlConfigurations,
+
+    -- * Request Lenses
+    listAccessControlConfigurations_maxResults,
+    listAccessControlConfigurations_nextToken,
+    listAccessControlConfigurations_indexId,
+
+    -- * Destructuring the Response
+    ListAccessControlConfigurationsResponse (..),
+    newListAccessControlConfigurationsResponse,
+
+    -- * Response Lenses
+    listAccessControlConfigurationsResponse_nextToken,
+    listAccessControlConfigurationsResponse_httpStatus,
+    listAccessControlConfigurationsResponse_accessControlConfigurations,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListAccessControlConfigurations' smart constructor.
+data ListAccessControlConfigurations = ListAccessControlConfigurations'
+  { -- | The maximum number of access control configurations to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the previous response was incomplete (because there\'s more data to
+    -- retrieve), Amazon Kendra returns a pagination token in the response. You
+    -- can use this pagination token to retrieve the next set of access control
+    -- configurations.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the index for the access control configuration.
+    indexId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAccessControlConfigurations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listAccessControlConfigurations_maxResults' - The maximum number of access control configurations to return.
+--
+-- 'nextToken', 'listAccessControlConfigurations_nextToken' - If the previous response was incomplete (because there\'s more data to
+-- retrieve), Amazon Kendra returns a pagination token in the response. You
+-- can use this pagination token to retrieve the next set of access control
+-- configurations.
+--
+-- 'indexId', 'listAccessControlConfigurations_indexId' - The identifier of the index for the access control configuration.
+newListAccessControlConfigurations ::
+  -- | 'indexId'
+  Prelude.Text ->
+  ListAccessControlConfigurations
+newListAccessControlConfigurations pIndexId_ =
+  ListAccessControlConfigurations'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      indexId = pIndexId_
+    }
+
+-- | The maximum number of access control configurations to return.
+listAccessControlConfigurations_maxResults :: Lens.Lens' ListAccessControlConfigurations (Prelude.Maybe Prelude.Natural)
+listAccessControlConfigurations_maxResults = Lens.lens (\ListAccessControlConfigurations' {maxResults} -> maxResults) (\s@ListAccessControlConfigurations' {} a -> s {maxResults = a} :: ListAccessControlConfigurations)
+
+-- | If the previous response was incomplete (because there\'s more data to
+-- retrieve), Amazon Kendra returns a pagination token in the response. You
+-- can use this pagination token to retrieve the next set of access control
+-- configurations.
+listAccessControlConfigurations_nextToken :: Lens.Lens' ListAccessControlConfigurations (Prelude.Maybe Prelude.Text)
+listAccessControlConfigurations_nextToken = Lens.lens (\ListAccessControlConfigurations' {nextToken} -> nextToken) (\s@ListAccessControlConfigurations' {} a -> s {nextToken = a} :: ListAccessControlConfigurations)
+
+-- | The identifier of the index for the access control configuration.
+listAccessControlConfigurations_indexId :: Lens.Lens' ListAccessControlConfigurations Prelude.Text
+listAccessControlConfigurations_indexId = Lens.lens (\ListAccessControlConfigurations' {indexId} -> indexId) (\s@ListAccessControlConfigurations' {} a -> s {indexId = a} :: ListAccessControlConfigurations)
+
+instance
+  Core.AWSRequest
+    ListAccessControlConfigurations
+  where
+  type
+    AWSResponse ListAccessControlConfigurations =
+      ListAccessControlConfigurationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAccessControlConfigurationsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "AccessControlConfigurations"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance
+  Prelude.Hashable
+    ListAccessControlConfigurations
+  where
+  hashWithSalt
+    _salt
+    ListAccessControlConfigurations' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` indexId
+
+instance
+  Prelude.NFData
+    ListAccessControlConfigurations
+  where
+  rnf ListAccessControlConfigurations' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf indexId
+
+instance
+  Data.ToHeaders
+    ListAccessControlConfigurations
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.ListAccessControlConfigurations" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListAccessControlConfigurations where
+  toJSON ListAccessControlConfigurations' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("IndexId" Data..= indexId)
+          ]
+      )
+
+instance Data.ToPath ListAccessControlConfigurations where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListAccessControlConfigurations where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListAccessControlConfigurationsResponse' smart constructor.
+data ListAccessControlConfigurationsResponse = ListAccessControlConfigurationsResponse'
+  { -- | If the response is truncated, Amazon Kendra returns this token, which
+    -- you can use in the subsequent request to retrieve the next set of access
+    -- control configurations.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The details of your access control configurations.
+    accessControlConfigurations :: [AccessControlConfigurationSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAccessControlConfigurationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listAccessControlConfigurationsResponse_nextToken' - If the response is truncated, Amazon Kendra returns this token, which
+-- you can use in the subsequent request to retrieve the next set of access
+-- control configurations.
+--
+-- 'httpStatus', 'listAccessControlConfigurationsResponse_httpStatus' - The response's http status code.
+--
+-- 'accessControlConfigurations', 'listAccessControlConfigurationsResponse_accessControlConfigurations' - The details of your access control configurations.
+newListAccessControlConfigurationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAccessControlConfigurationsResponse
+newListAccessControlConfigurationsResponse
+  pHttpStatus_ =
+    ListAccessControlConfigurationsResponse'
+      { nextToken =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        accessControlConfigurations =
+          Prelude.mempty
+      }
+
+-- | If the response is truncated, Amazon Kendra returns this token, which
+-- you can use in the subsequent request to retrieve the next set of access
+-- control configurations.
+listAccessControlConfigurationsResponse_nextToken :: Lens.Lens' ListAccessControlConfigurationsResponse (Prelude.Maybe Prelude.Text)
+listAccessControlConfigurationsResponse_nextToken = Lens.lens (\ListAccessControlConfigurationsResponse' {nextToken} -> nextToken) (\s@ListAccessControlConfigurationsResponse' {} a -> s {nextToken = a} :: ListAccessControlConfigurationsResponse)
+
+-- | The response's http status code.
+listAccessControlConfigurationsResponse_httpStatus :: Lens.Lens' ListAccessControlConfigurationsResponse Prelude.Int
+listAccessControlConfigurationsResponse_httpStatus = Lens.lens (\ListAccessControlConfigurationsResponse' {httpStatus} -> httpStatus) (\s@ListAccessControlConfigurationsResponse' {} a -> s {httpStatus = a} :: ListAccessControlConfigurationsResponse)
+
+-- | The details of your access control configurations.
+listAccessControlConfigurationsResponse_accessControlConfigurations :: Lens.Lens' ListAccessControlConfigurationsResponse [AccessControlConfigurationSummary]
+listAccessControlConfigurationsResponse_accessControlConfigurations = Lens.lens (\ListAccessControlConfigurationsResponse' {accessControlConfigurations} -> accessControlConfigurations) (\s@ListAccessControlConfigurationsResponse' {} a -> s {accessControlConfigurations = a} :: ListAccessControlConfigurationsResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    ListAccessControlConfigurationsResponse
+  where
+  rnf ListAccessControlConfigurationsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf accessControlConfigurations
diff --git a/gen/Amazonka/Kendra/ListDataSourceSyncJobs.hs b/gen/Amazonka/Kendra/ListDataSourceSyncJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/ListDataSourceSyncJobs.hs
@@ -0,0 +1,278 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.ListDataSourceSyncJobs
+-- 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 statistics about synchronizing a data source connector.
+module Amazonka.Kendra.ListDataSourceSyncJobs
+  ( -- * Creating a Request
+    ListDataSourceSyncJobs (..),
+    newListDataSourceSyncJobs,
+
+    -- * Request Lenses
+    listDataSourceSyncJobs_maxResults,
+    listDataSourceSyncJobs_nextToken,
+    listDataSourceSyncJobs_startTimeFilter,
+    listDataSourceSyncJobs_statusFilter,
+    listDataSourceSyncJobs_id,
+    listDataSourceSyncJobs_indexId,
+
+    -- * Destructuring the Response
+    ListDataSourceSyncJobsResponse (..),
+    newListDataSourceSyncJobsResponse,
+
+    -- * Response Lenses
+    listDataSourceSyncJobsResponse_history,
+    listDataSourceSyncJobsResponse_nextToken,
+    listDataSourceSyncJobsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListDataSourceSyncJobs' smart constructor.
+data ListDataSourceSyncJobs = ListDataSourceSyncJobs'
+  { -- | The maximum number of synchronization jobs to return in the response. If
+    -- there are fewer results in the list, this response contains only the
+    -- actual results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the previous response was incomplete (because there is more data to
+    -- retrieve), Amazon Kendra returns a pagination token in the response. You
+    -- can use this pagination token to retrieve the next set of jobs.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | When specified, the synchronization jobs returned in the list are
+    -- limited to jobs between the specified dates.
+    startTimeFilter :: Prelude.Maybe TimeRange,
+    -- | Only returns synchronization jobs with the @Status@ field equal to the
+    -- specified status.
+    statusFilter :: Prelude.Maybe DataSourceSyncJobStatus,
+    -- | The identifier of the data source connector.
+    id :: Prelude.Text,
+    -- | The identifier of the index used with the data source connector.
+    indexId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDataSourceSyncJobs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDataSourceSyncJobs_maxResults' - The maximum number of synchronization jobs to return in the response. If
+-- there are fewer results in the list, this response contains only the
+-- actual results.
+--
+-- 'nextToken', 'listDataSourceSyncJobs_nextToken' - If the previous response was incomplete (because there is more data to
+-- retrieve), Amazon Kendra returns a pagination token in the response. You
+-- can use this pagination token to retrieve the next set of jobs.
+--
+-- 'startTimeFilter', 'listDataSourceSyncJobs_startTimeFilter' - When specified, the synchronization jobs returned in the list are
+-- limited to jobs between the specified dates.
+--
+-- 'statusFilter', 'listDataSourceSyncJobs_statusFilter' - Only returns synchronization jobs with the @Status@ field equal to the
+-- specified status.
+--
+-- 'id', 'listDataSourceSyncJobs_id' - The identifier of the data source connector.
+--
+-- 'indexId', 'listDataSourceSyncJobs_indexId' - The identifier of the index used with the data source connector.
+newListDataSourceSyncJobs ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'indexId'
+  Prelude.Text ->
+  ListDataSourceSyncJobs
+newListDataSourceSyncJobs pId_ pIndexId_ =
+  ListDataSourceSyncJobs'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      startTimeFilter = Prelude.Nothing,
+      statusFilter = Prelude.Nothing,
+      id = pId_,
+      indexId = pIndexId_
+    }
+
+-- | The maximum number of synchronization jobs to return in the response. If
+-- there are fewer results in the list, this response contains only the
+-- actual results.
+listDataSourceSyncJobs_maxResults :: Lens.Lens' ListDataSourceSyncJobs (Prelude.Maybe Prelude.Natural)
+listDataSourceSyncJobs_maxResults = Lens.lens (\ListDataSourceSyncJobs' {maxResults} -> maxResults) (\s@ListDataSourceSyncJobs' {} a -> s {maxResults = a} :: ListDataSourceSyncJobs)
+
+-- | If the previous response was incomplete (because there is more data to
+-- retrieve), Amazon Kendra returns a pagination token in the response. You
+-- can use this pagination token to retrieve the next set of jobs.
+listDataSourceSyncJobs_nextToken :: Lens.Lens' ListDataSourceSyncJobs (Prelude.Maybe Prelude.Text)
+listDataSourceSyncJobs_nextToken = Lens.lens (\ListDataSourceSyncJobs' {nextToken} -> nextToken) (\s@ListDataSourceSyncJobs' {} a -> s {nextToken = a} :: ListDataSourceSyncJobs)
+
+-- | When specified, the synchronization jobs returned in the list are
+-- limited to jobs between the specified dates.
+listDataSourceSyncJobs_startTimeFilter :: Lens.Lens' ListDataSourceSyncJobs (Prelude.Maybe TimeRange)
+listDataSourceSyncJobs_startTimeFilter = Lens.lens (\ListDataSourceSyncJobs' {startTimeFilter} -> startTimeFilter) (\s@ListDataSourceSyncJobs' {} a -> s {startTimeFilter = a} :: ListDataSourceSyncJobs)
+
+-- | Only returns synchronization jobs with the @Status@ field equal to the
+-- specified status.
+listDataSourceSyncJobs_statusFilter :: Lens.Lens' ListDataSourceSyncJobs (Prelude.Maybe DataSourceSyncJobStatus)
+listDataSourceSyncJobs_statusFilter = Lens.lens (\ListDataSourceSyncJobs' {statusFilter} -> statusFilter) (\s@ListDataSourceSyncJobs' {} a -> s {statusFilter = a} :: ListDataSourceSyncJobs)
+
+-- | The identifier of the data source connector.
+listDataSourceSyncJobs_id :: Lens.Lens' ListDataSourceSyncJobs Prelude.Text
+listDataSourceSyncJobs_id = Lens.lens (\ListDataSourceSyncJobs' {id} -> id) (\s@ListDataSourceSyncJobs' {} a -> s {id = a} :: ListDataSourceSyncJobs)
+
+-- | The identifier of the index used with the data source connector.
+listDataSourceSyncJobs_indexId :: Lens.Lens' ListDataSourceSyncJobs Prelude.Text
+listDataSourceSyncJobs_indexId = Lens.lens (\ListDataSourceSyncJobs' {indexId} -> indexId) (\s@ListDataSourceSyncJobs' {} a -> s {indexId = a} :: ListDataSourceSyncJobs)
+
+instance Core.AWSRequest ListDataSourceSyncJobs where
+  type
+    AWSResponse ListDataSourceSyncJobs =
+      ListDataSourceSyncJobsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDataSourceSyncJobsResponse'
+            Prelude.<$> (x Data..?> "History" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListDataSourceSyncJobs where
+  hashWithSalt _salt ListDataSourceSyncJobs' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` startTimeFilter
+      `Prelude.hashWithSalt` statusFilter
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` indexId
+
+instance Prelude.NFData ListDataSourceSyncJobs where
+  rnf ListDataSourceSyncJobs' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf startTimeFilter
+      `Prelude.seq` Prelude.rnf statusFilter
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf indexId
+
+instance Data.ToHeaders ListDataSourceSyncJobs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.ListDataSourceSyncJobs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListDataSourceSyncJobs where
+  toJSON ListDataSourceSyncJobs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("StartTimeFilter" Data..=)
+              Prelude.<$> startTimeFilter,
+            ("StatusFilter" Data..=) Prelude.<$> statusFilter,
+            Prelude.Just ("Id" Data..= id),
+            Prelude.Just ("IndexId" Data..= indexId)
+          ]
+      )
+
+instance Data.ToPath ListDataSourceSyncJobs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListDataSourceSyncJobs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListDataSourceSyncJobsResponse' smart constructor.
+data ListDataSourceSyncJobsResponse = ListDataSourceSyncJobsResponse'
+  { -- | A history of synchronization jobs for the data source connector.
+    history :: Prelude.Maybe [DataSourceSyncJob],
+    -- | If the response is truncated, Amazon Kendra returns this token that you
+    -- can use in the subsequent request to retrieve the next set of jobs.
+    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 'ListDataSourceSyncJobsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'history', 'listDataSourceSyncJobsResponse_history' - A history of synchronization jobs for the data source connector.
+--
+-- 'nextToken', 'listDataSourceSyncJobsResponse_nextToken' - If the response is truncated, Amazon Kendra returns this token that you
+-- can use in the subsequent request to retrieve the next set of jobs.
+--
+-- 'httpStatus', 'listDataSourceSyncJobsResponse_httpStatus' - The response's http status code.
+newListDataSourceSyncJobsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDataSourceSyncJobsResponse
+newListDataSourceSyncJobsResponse pHttpStatus_ =
+  ListDataSourceSyncJobsResponse'
+    { history =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A history of synchronization jobs for the data source connector.
+listDataSourceSyncJobsResponse_history :: Lens.Lens' ListDataSourceSyncJobsResponse (Prelude.Maybe [DataSourceSyncJob])
+listDataSourceSyncJobsResponse_history = Lens.lens (\ListDataSourceSyncJobsResponse' {history} -> history) (\s@ListDataSourceSyncJobsResponse' {} a -> s {history = a} :: ListDataSourceSyncJobsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If the response is truncated, Amazon Kendra returns this token that you
+-- can use in the subsequent request to retrieve the next set of jobs.
+listDataSourceSyncJobsResponse_nextToken :: Lens.Lens' ListDataSourceSyncJobsResponse (Prelude.Maybe Prelude.Text)
+listDataSourceSyncJobsResponse_nextToken = Lens.lens (\ListDataSourceSyncJobsResponse' {nextToken} -> nextToken) (\s@ListDataSourceSyncJobsResponse' {} a -> s {nextToken = a} :: ListDataSourceSyncJobsResponse)
+
+-- | The response's http status code.
+listDataSourceSyncJobsResponse_httpStatus :: Lens.Lens' ListDataSourceSyncJobsResponse Prelude.Int
+listDataSourceSyncJobsResponse_httpStatus = Lens.lens (\ListDataSourceSyncJobsResponse' {httpStatus} -> httpStatus) (\s@ListDataSourceSyncJobsResponse' {} a -> s {httpStatus = a} :: ListDataSourceSyncJobsResponse)
+
+instance
+  Prelude.NFData
+    ListDataSourceSyncJobsResponse
+  where
+  rnf ListDataSourceSyncJobsResponse' {..} =
+    Prelude.rnf history
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/ListDataSources.hs b/gen/Amazonka/Kendra/ListDataSources.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/ListDataSources.hs
@@ -0,0 +1,229 @@
+{-# 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.Kendra.ListDataSources
+-- 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 data source connectors that you have created.
+module Amazonka.Kendra.ListDataSources
+  ( -- * Creating a Request
+    ListDataSources (..),
+    newListDataSources,
+
+    -- * Request Lenses
+    listDataSources_maxResults,
+    listDataSources_nextToken,
+    listDataSources_indexId,
+
+    -- * Destructuring the Response
+    ListDataSourcesResponse (..),
+    newListDataSourcesResponse,
+
+    -- * Response Lenses
+    listDataSourcesResponse_nextToken,
+    listDataSourcesResponse_summaryItems,
+    listDataSourcesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListDataSources' smart constructor.
+data ListDataSources = ListDataSources'
+  { -- | The maximum number of data source connectors to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the previous response was incomplete (because there is more data to
+    -- retrieve), Amazon Kendra returns a pagination token in the response. You
+    -- can use this pagination token to retrieve the next set of data source
+    -- connectors.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the index used with one or more data source
+    -- connectors.
+    indexId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDataSources' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDataSources_maxResults' - The maximum number of data source connectors to return.
+--
+-- 'nextToken', 'listDataSources_nextToken' - If the previous response was incomplete (because there is more data to
+-- retrieve), Amazon Kendra returns a pagination token in the response. You
+-- can use this pagination token to retrieve the next set of data source
+-- connectors.
+--
+-- 'indexId', 'listDataSources_indexId' - The identifier of the index used with one or more data source
+-- connectors.
+newListDataSources ::
+  -- | 'indexId'
+  Prelude.Text ->
+  ListDataSources
+newListDataSources pIndexId_ =
+  ListDataSources'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      indexId = pIndexId_
+    }
+
+-- | The maximum number of data source connectors to return.
+listDataSources_maxResults :: Lens.Lens' ListDataSources (Prelude.Maybe Prelude.Natural)
+listDataSources_maxResults = Lens.lens (\ListDataSources' {maxResults} -> maxResults) (\s@ListDataSources' {} a -> s {maxResults = a} :: ListDataSources)
+
+-- | If the previous response was incomplete (because there is more data to
+-- retrieve), Amazon Kendra returns a pagination token in the response. You
+-- can use this pagination token to retrieve the next set of data source
+-- connectors.
+listDataSources_nextToken :: Lens.Lens' ListDataSources (Prelude.Maybe Prelude.Text)
+listDataSources_nextToken = Lens.lens (\ListDataSources' {nextToken} -> nextToken) (\s@ListDataSources' {} a -> s {nextToken = a} :: ListDataSources)
+
+-- | The identifier of the index used with one or more data source
+-- connectors.
+listDataSources_indexId :: Lens.Lens' ListDataSources Prelude.Text
+listDataSources_indexId = Lens.lens (\ListDataSources' {indexId} -> indexId) (\s@ListDataSources' {} a -> s {indexId = a} :: ListDataSources)
+
+instance Core.AWSRequest ListDataSources where
+  type
+    AWSResponse ListDataSources =
+      ListDataSourcesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDataSourcesResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "SummaryItems" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListDataSources where
+  hashWithSalt _salt ListDataSources' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` indexId
+
+instance Prelude.NFData ListDataSources where
+  rnf ListDataSources' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf indexId
+
+instance Data.ToHeaders ListDataSources where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.ListDataSources" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListDataSources where
+  toJSON ListDataSources' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("IndexId" Data..= indexId)
+          ]
+      )
+
+instance Data.ToPath ListDataSources where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListDataSources where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListDataSourcesResponse' smart constructor.
+data ListDataSourcesResponse = ListDataSourcesResponse'
+  { -- | If the response is truncated, Amazon Kendra returns this token that you
+    -- can use in the subsequent request to retrieve the next set of data
+    -- source connectors.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An array of summary information for one or more data source connector.
+    summaryItems :: Prelude.Maybe [DataSourceSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDataSourcesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listDataSourcesResponse_nextToken' - If the response is truncated, Amazon Kendra returns this token that you
+-- can use in the subsequent request to retrieve the next set of data
+-- source connectors.
+--
+-- 'summaryItems', 'listDataSourcesResponse_summaryItems' - An array of summary information for one or more data source connector.
+--
+-- 'httpStatus', 'listDataSourcesResponse_httpStatus' - The response's http status code.
+newListDataSourcesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDataSourcesResponse
+newListDataSourcesResponse pHttpStatus_ =
+  ListDataSourcesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      summaryItems = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | If the response is truncated, Amazon Kendra returns this token that you
+-- can use in the subsequent request to retrieve the next set of data
+-- source connectors.
+listDataSourcesResponse_nextToken :: Lens.Lens' ListDataSourcesResponse (Prelude.Maybe Prelude.Text)
+listDataSourcesResponse_nextToken = Lens.lens (\ListDataSourcesResponse' {nextToken} -> nextToken) (\s@ListDataSourcesResponse' {} a -> s {nextToken = a} :: ListDataSourcesResponse)
+
+-- | An array of summary information for one or more data source connector.
+listDataSourcesResponse_summaryItems :: Lens.Lens' ListDataSourcesResponse (Prelude.Maybe [DataSourceSummary])
+listDataSourcesResponse_summaryItems = Lens.lens (\ListDataSourcesResponse' {summaryItems} -> summaryItems) (\s@ListDataSourcesResponse' {} a -> s {summaryItems = a} :: ListDataSourcesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listDataSourcesResponse_httpStatus :: Lens.Lens' ListDataSourcesResponse Prelude.Int
+listDataSourcesResponse_httpStatus = Lens.lens (\ListDataSourcesResponse' {httpStatus} -> httpStatus) (\s@ListDataSourcesResponse' {} a -> s {httpStatus = a} :: ListDataSourcesResponse)
+
+instance Prelude.NFData ListDataSourcesResponse where
+  rnf ListDataSourcesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf summaryItems
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/ListEntityPersonas.hs b/gen/Amazonka/Kendra/ListEntityPersonas.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/ListEntityPersonas.hs
@@ -0,0 +1,242 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.ListEntityPersonas
+-- 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 specific permissions of users and groups with access to your
+-- Amazon Kendra experience.
+module Amazonka.Kendra.ListEntityPersonas
+  ( -- * Creating a Request
+    ListEntityPersonas (..),
+    newListEntityPersonas,
+
+    -- * Request Lenses
+    listEntityPersonas_maxResults,
+    listEntityPersonas_nextToken,
+    listEntityPersonas_id,
+    listEntityPersonas_indexId,
+
+    -- * Destructuring the Response
+    ListEntityPersonasResponse (..),
+    newListEntityPersonasResponse,
+
+    -- * Response Lenses
+    listEntityPersonasResponse_nextToken,
+    listEntityPersonasResponse_summaryItems,
+    listEntityPersonasResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListEntityPersonas' smart constructor.
+data ListEntityPersonas = ListEntityPersonas'
+  { -- | The maximum number of returned users or groups.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the previous response was incomplete (because there is more data to
+    -- retrieve), Amazon Kendra returns a pagination token in the response. You
+    -- can use this pagination token to retrieve the next set of users or
+    -- groups.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of your Amazon Kendra experience.
+    id :: Prelude.Text,
+    -- | The identifier of the index for your Amazon Kendra experience.
+    indexId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEntityPersonas' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listEntityPersonas_maxResults' - The maximum number of returned users or groups.
+--
+-- 'nextToken', 'listEntityPersonas_nextToken' - If the previous response was incomplete (because there is more data to
+-- retrieve), Amazon Kendra returns a pagination token in the response. You
+-- can use this pagination token to retrieve the next set of users or
+-- groups.
+--
+-- 'id', 'listEntityPersonas_id' - The identifier of your Amazon Kendra experience.
+--
+-- 'indexId', 'listEntityPersonas_indexId' - The identifier of the index for your Amazon Kendra experience.
+newListEntityPersonas ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'indexId'
+  Prelude.Text ->
+  ListEntityPersonas
+newListEntityPersonas pId_ pIndexId_ =
+  ListEntityPersonas'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      id = pId_,
+      indexId = pIndexId_
+    }
+
+-- | The maximum number of returned users or groups.
+listEntityPersonas_maxResults :: Lens.Lens' ListEntityPersonas (Prelude.Maybe Prelude.Natural)
+listEntityPersonas_maxResults = Lens.lens (\ListEntityPersonas' {maxResults} -> maxResults) (\s@ListEntityPersonas' {} a -> s {maxResults = a} :: ListEntityPersonas)
+
+-- | If the previous response was incomplete (because there is more data to
+-- retrieve), Amazon Kendra returns a pagination token in the response. You
+-- can use this pagination token to retrieve the next set of users or
+-- groups.
+listEntityPersonas_nextToken :: Lens.Lens' ListEntityPersonas (Prelude.Maybe Prelude.Text)
+listEntityPersonas_nextToken = Lens.lens (\ListEntityPersonas' {nextToken} -> nextToken) (\s@ListEntityPersonas' {} a -> s {nextToken = a} :: ListEntityPersonas)
+
+-- | The identifier of your Amazon Kendra experience.
+listEntityPersonas_id :: Lens.Lens' ListEntityPersonas Prelude.Text
+listEntityPersonas_id = Lens.lens (\ListEntityPersonas' {id} -> id) (\s@ListEntityPersonas' {} a -> s {id = a} :: ListEntityPersonas)
+
+-- | The identifier of the index for your Amazon Kendra experience.
+listEntityPersonas_indexId :: Lens.Lens' ListEntityPersonas Prelude.Text
+listEntityPersonas_indexId = Lens.lens (\ListEntityPersonas' {indexId} -> indexId) (\s@ListEntityPersonas' {} a -> s {indexId = a} :: ListEntityPersonas)
+
+instance Core.AWSRequest ListEntityPersonas where
+  type
+    AWSResponse ListEntityPersonas =
+      ListEntityPersonasResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListEntityPersonasResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "SummaryItems" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListEntityPersonas where
+  hashWithSalt _salt ListEntityPersonas' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` indexId
+
+instance Prelude.NFData ListEntityPersonas where
+  rnf ListEntityPersonas' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf indexId
+
+instance Data.ToHeaders ListEntityPersonas where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.ListEntityPersonas" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListEntityPersonas where
+  toJSON ListEntityPersonas' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("Id" Data..= id),
+            Prelude.Just ("IndexId" Data..= indexId)
+          ]
+      )
+
+instance Data.ToPath ListEntityPersonas where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListEntityPersonas where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListEntityPersonasResponse' smart constructor.
+data ListEntityPersonasResponse = ListEntityPersonasResponse'
+  { -- | If the response is truncated, Amazon Kendra returns this token, which
+    -- you can use in a later request to retrieve the next set of users or
+    -- groups.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An array of summary information for one or more users or groups.
+    summaryItems :: Prelude.Maybe [PersonasSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEntityPersonasResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listEntityPersonasResponse_nextToken' - If the response is truncated, Amazon Kendra returns this token, which
+-- you can use in a later request to retrieve the next set of users or
+-- groups.
+--
+-- 'summaryItems', 'listEntityPersonasResponse_summaryItems' - An array of summary information for one or more users or groups.
+--
+-- 'httpStatus', 'listEntityPersonasResponse_httpStatus' - The response's http status code.
+newListEntityPersonasResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListEntityPersonasResponse
+newListEntityPersonasResponse pHttpStatus_ =
+  ListEntityPersonasResponse'
+    { nextToken =
+        Prelude.Nothing,
+      summaryItems = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | If the response is truncated, Amazon Kendra returns this token, which
+-- you can use in a later request to retrieve the next set of users or
+-- groups.
+listEntityPersonasResponse_nextToken :: Lens.Lens' ListEntityPersonasResponse (Prelude.Maybe Prelude.Text)
+listEntityPersonasResponse_nextToken = Lens.lens (\ListEntityPersonasResponse' {nextToken} -> nextToken) (\s@ListEntityPersonasResponse' {} a -> s {nextToken = a} :: ListEntityPersonasResponse)
+
+-- | An array of summary information for one or more users or groups.
+listEntityPersonasResponse_summaryItems :: Lens.Lens' ListEntityPersonasResponse (Prelude.Maybe [PersonasSummary])
+listEntityPersonasResponse_summaryItems = Lens.lens (\ListEntityPersonasResponse' {summaryItems} -> summaryItems) (\s@ListEntityPersonasResponse' {} a -> s {summaryItems = a} :: ListEntityPersonasResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listEntityPersonasResponse_httpStatus :: Lens.Lens' ListEntityPersonasResponse Prelude.Int
+listEntityPersonasResponse_httpStatus = Lens.lens (\ListEntityPersonasResponse' {httpStatus} -> httpStatus) (\s@ListEntityPersonasResponse' {} a -> s {httpStatus = a} :: ListEntityPersonasResponse)
+
+instance Prelude.NFData ListEntityPersonasResponse where
+  rnf ListEntityPersonasResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf summaryItems
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/ListExperienceEntities.hs b/gen/Amazonka/Kendra/ListExperienceEntities.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/ListExperienceEntities.hs
@@ -0,0 +1,236 @@
+{-# 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.Kendra.ListExperienceEntities
+-- 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 users or groups in your IAM Identity Center identity source that
+-- are granted access to your Amazon Kendra experience. You can create an
+-- Amazon Kendra experience such as a search application. For more
+-- information on creating a search application experience, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/deploying-search-experience-no-code.html Building a search experience with no code>.
+module Amazonka.Kendra.ListExperienceEntities
+  ( -- * Creating a Request
+    ListExperienceEntities (..),
+    newListExperienceEntities,
+
+    -- * Request Lenses
+    listExperienceEntities_nextToken,
+    listExperienceEntities_id,
+    listExperienceEntities_indexId,
+
+    -- * Destructuring the Response
+    ListExperienceEntitiesResponse (..),
+    newListExperienceEntitiesResponse,
+
+    -- * Response Lenses
+    listExperienceEntitiesResponse_nextToken,
+    listExperienceEntitiesResponse_summaryItems,
+    listExperienceEntitiesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListExperienceEntities' smart constructor.
+data ListExperienceEntities = ListExperienceEntities'
+  { -- | If the previous response was incomplete (because there is more data to
+    -- retrieve), Amazon Kendra returns a pagination token in the response. You
+    -- can use this pagination token to retrieve the next set of users or
+    -- groups.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of your Amazon Kendra experience.
+    id :: Prelude.Text,
+    -- | The identifier of the index for your Amazon Kendra experience.
+    indexId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListExperienceEntities' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listExperienceEntities_nextToken' - If the previous response was incomplete (because there is more data to
+-- retrieve), Amazon Kendra returns a pagination token in the response. You
+-- can use this pagination token to retrieve the next set of users or
+-- groups.
+--
+-- 'id', 'listExperienceEntities_id' - The identifier of your Amazon Kendra experience.
+--
+-- 'indexId', 'listExperienceEntities_indexId' - The identifier of the index for your Amazon Kendra experience.
+newListExperienceEntities ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'indexId'
+  Prelude.Text ->
+  ListExperienceEntities
+newListExperienceEntities pId_ pIndexId_ =
+  ListExperienceEntities'
+    { nextToken =
+        Prelude.Nothing,
+      id = pId_,
+      indexId = pIndexId_
+    }
+
+-- | If the previous response was incomplete (because there is more data to
+-- retrieve), Amazon Kendra returns a pagination token in the response. You
+-- can use this pagination token to retrieve the next set of users or
+-- groups.
+listExperienceEntities_nextToken :: Lens.Lens' ListExperienceEntities (Prelude.Maybe Prelude.Text)
+listExperienceEntities_nextToken = Lens.lens (\ListExperienceEntities' {nextToken} -> nextToken) (\s@ListExperienceEntities' {} a -> s {nextToken = a} :: ListExperienceEntities)
+
+-- | The identifier of your Amazon Kendra experience.
+listExperienceEntities_id :: Lens.Lens' ListExperienceEntities Prelude.Text
+listExperienceEntities_id = Lens.lens (\ListExperienceEntities' {id} -> id) (\s@ListExperienceEntities' {} a -> s {id = a} :: ListExperienceEntities)
+
+-- | The identifier of the index for your Amazon Kendra experience.
+listExperienceEntities_indexId :: Lens.Lens' ListExperienceEntities Prelude.Text
+listExperienceEntities_indexId = Lens.lens (\ListExperienceEntities' {indexId} -> indexId) (\s@ListExperienceEntities' {} a -> s {indexId = a} :: ListExperienceEntities)
+
+instance Core.AWSRequest ListExperienceEntities where
+  type
+    AWSResponse ListExperienceEntities =
+      ListExperienceEntitiesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListExperienceEntitiesResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "SummaryItems" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListExperienceEntities where
+  hashWithSalt _salt ListExperienceEntities' {..} =
+    _salt
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` indexId
+
+instance Prelude.NFData ListExperienceEntities where
+  rnf ListExperienceEntities' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf indexId
+
+instance Data.ToHeaders ListExperienceEntities where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.ListExperienceEntities" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListExperienceEntities where
+  toJSON ListExperienceEntities' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("Id" Data..= id),
+            Prelude.Just ("IndexId" Data..= indexId)
+          ]
+      )
+
+instance Data.ToPath ListExperienceEntities where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListExperienceEntities where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListExperienceEntitiesResponse' smart constructor.
+data ListExperienceEntitiesResponse = ListExperienceEntitiesResponse'
+  { -- | If the response is truncated, Amazon Kendra returns this token, which
+    -- you can use in a later request to retrieve the next set of users or
+    -- groups.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An array of summary information for one or more users or groups.
+    summaryItems :: Prelude.Maybe [ExperienceEntitiesSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListExperienceEntitiesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listExperienceEntitiesResponse_nextToken' - If the response is truncated, Amazon Kendra returns this token, which
+-- you can use in a later request to retrieve the next set of users or
+-- groups.
+--
+-- 'summaryItems', 'listExperienceEntitiesResponse_summaryItems' - An array of summary information for one or more users or groups.
+--
+-- 'httpStatus', 'listExperienceEntitiesResponse_httpStatus' - The response's http status code.
+newListExperienceEntitiesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListExperienceEntitiesResponse
+newListExperienceEntitiesResponse pHttpStatus_ =
+  ListExperienceEntitiesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      summaryItems = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | If the response is truncated, Amazon Kendra returns this token, which
+-- you can use in a later request to retrieve the next set of users or
+-- groups.
+listExperienceEntitiesResponse_nextToken :: Lens.Lens' ListExperienceEntitiesResponse (Prelude.Maybe Prelude.Text)
+listExperienceEntitiesResponse_nextToken = Lens.lens (\ListExperienceEntitiesResponse' {nextToken} -> nextToken) (\s@ListExperienceEntitiesResponse' {} a -> s {nextToken = a} :: ListExperienceEntitiesResponse)
+
+-- | An array of summary information for one or more users or groups.
+listExperienceEntitiesResponse_summaryItems :: Lens.Lens' ListExperienceEntitiesResponse (Prelude.Maybe [ExperienceEntitiesSummary])
+listExperienceEntitiesResponse_summaryItems = Lens.lens (\ListExperienceEntitiesResponse' {summaryItems} -> summaryItems) (\s@ListExperienceEntitiesResponse' {} a -> s {summaryItems = a} :: ListExperienceEntitiesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listExperienceEntitiesResponse_httpStatus :: Lens.Lens' ListExperienceEntitiesResponse Prelude.Int
+listExperienceEntitiesResponse_httpStatus = Lens.lens (\ListExperienceEntitiesResponse' {httpStatus} -> httpStatus) (\s@ListExperienceEntitiesResponse' {} a -> s {httpStatus = a} :: ListExperienceEntitiesResponse)
+
+instance
+  Prelude.NFData
+    ListExperienceEntitiesResponse
+  where
+  rnf ListExperienceEntitiesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf summaryItems
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/ListExperiences.hs b/gen/Amazonka/Kendra/ListExperiences.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/ListExperiences.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.Kendra.ListExperiences
+-- 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 one or more Amazon Kendra experiences. You can create an Amazon
+-- Kendra experience such as a search application. For more information on
+-- creating a search application experience, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/deploying-search-experience-no-code.html Building a search experience with no code>.
+module Amazonka.Kendra.ListExperiences
+  ( -- * Creating a Request
+    ListExperiences (..),
+    newListExperiences,
+
+    -- * Request Lenses
+    listExperiences_maxResults,
+    listExperiences_nextToken,
+    listExperiences_indexId,
+
+    -- * Destructuring the Response
+    ListExperiencesResponse (..),
+    newListExperiencesResponse,
+
+    -- * Response Lenses
+    listExperiencesResponse_nextToken,
+    listExperiencesResponse_summaryItems,
+    listExperiencesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListExperiences' smart constructor.
+data ListExperiences = ListExperiences'
+  { -- | The maximum number of returned Amazon Kendra experiences.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the previous response was incomplete (because there is more data to
+    -- retrieve), Amazon Kendra returns a pagination token in the response. You
+    -- can use this pagination token to retrieve the next set of Amazon Kendra
+    -- experiences.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the index for your Amazon Kendra experience.
+    indexId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListExperiences' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listExperiences_maxResults' - The maximum number of returned Amazon Kendra experiences.
+--
+-- 'nextToken', 'listExperiences_nextToken' - If the previous response was incomplete (because there is more data to
+-- retrieve), Amazon Kendra returns a pagination token in the response. You
+-- can use this pagination token to retrieve the next set of Amazon Kendra
+-- experiences.
+--
+-- 'indexId', 'listExperiences_indexId' - The identifier of the index for your Amazon Kendra experience.
+newListExperiences ::
+  -- | 'indexId'
+  Prelude.Text ->
+  ListExperiences
+newListExperiences pIndexId_ =
+  ListExperiences'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      indexId = pIndexId_
+    }
+
+-- | The maximum number of returned Amazon Kendra experiences.
+listExperiences_maxResults :: Lens.Lens' ListExperiences (Prelude.Maybe Prelude.Natural)
+listExperiences_maxResults = Lens.lens (\ListExperiences' {maxResults} -> maxResults) (\s@ListExperiences' {} a -> s {maxResults = a} :: ListExperiences)
+
+-- | If the previous response was incomplete (because there is more data to
+-- retrieve), Amazon Kendra returns a pagination token in the response. You
+-- can use this pagination token to retrieve the next set of Amazon Kendra
+-- experiences.
+listExperiences_nextToken :: Lens.Lens' ListExperiences (Prelude.Maybe Prelude.Text)
+listExperiences_nextToken = Lens.lens (\ListExperiences' {nextToken} -> nextToken) (\s@ListExperiences' {} a -> s {nextToken = a} :: ListExperiences)
+
+-- | The identifier of the index for your Amazon Kendra experience.
+listExperiences_indexId :: Lens.Lens' ListExperiences Prelude.Text
+listExperiences_indexId = Lens.lens (\ListExperiences' {indexId} -> indexId) (\s@ListExperiences' {} a -> s {indexId = a} :: ListExperiences)
+
+instance Core.AWSRequest ListExperiences where
+  type
+    AWSResponse ListExperiences =
+      ListExperiencesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListExperiencesResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "SummaryItems" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListExperiences where
+  hashWithSalt _salt ListExperiences' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` indexId
+
+instance Prelude.NFData ListExperiences where
+  rnf ListExperiences' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf indexId
+
+instance Data.ToHeaders ListExperiences where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.ListExperiences" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListExperiences where
+  toJSON ListExperiences' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("IndexId" Data..= indexId)
+          ]
+      )
+
+instance Data.ToPath ListExperiences where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListExperiences where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListExperiencesResponse' smart constructor.
+data ListExperiencesResponse = ListExperiencesResponse'
+  { -- | If the response is truncated, Amazon Kendra returns this token, which
+    -- you can use in a later request to retrieve the next set of Amazon Kendra
+    -- experiences.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An array of summary information for one or more Amazon Kendra
+    -- experiences.
+    summaryItems :: Prelude.Maybe [ExperiencesSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListExperiencesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listExperiencesResponse_nextToken' - If the response is truncated, Amazon Kendra returns this token, which
+-- you can use in a later request to retrieve the next set of Amazon Kendra
+-- experiences.
+--
+-- 'summaryItems', 'listExperiencesResponse_summaryItems' - An array of summary information for one or more Amazon Kendra
+-- experiences.
+--
+-- 'httpStatus', 'listExperiencesResponse_httpStatus' - The response's http status code.
+newListExperiencesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListExperiencesResponse
+newListExperiencesResponse pHttpStatus_ =
+  ListExperiencesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      summaryItems = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | If the response is truncated, Amazon Kendra returns this token, which
+-- you can use in a later request to retrieve the next set of Amazon Kendra
+-- experiences.
+listExperiencesResponse_nextToken :: Lens.Lens' ListExperiencesResponse (Prelude.Maybe Prelude.Text)
+listExperiencesResponse_nextToken = Lens.lens (\ListExperiencesResponse' {nextToken} -> nextToken) (\s@ListExperiencesResponse' {} a -> s {nextToken = a} :: ListExperiencesResponse)
+
+-- | An array of summary information for one or more Amazon Kendra
+-- experiences.
+listExperiencesResponse_summaryItems :: Lens.Lens' ListExperiencesResponse (Prelude.Maybe [ExperiencesSummary])
+listExperiencesResponse_summaryItems = Lens.lens (\ListExperiencesResponse' {summaryItems} -> summaryItems) (\s@ListExperiencesResponse' {} a -> s {summaryItems = a} :: ListExperiencesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listExperiencesResponse_httpStatus :: Lens.Lens' ListExperiencesResponse Prelude.Int
+listExperiencesResponse_httpStatus = Lens.lens (\ListExperiencesResponse' {httpStatus} -> httpStatus) (\s@ListExperiencesResponse' {} a -> s {httpStatus = a} :: ListExperiencesResponse)
+
+instance Prelude.NFData ListExperiencesResponse where
+  rnf ListExperiencesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf summaryItems
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/ListFaqs.hs b/gen/Amazonka/Kendra/ListFaqs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/ListFaqs.hs
@@ -0,0 +1,224 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.ListFaqs
+-- 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 FAQ lists associated with an index.
+module Amazonka.Kendra.ListFaqs
+  ( -- * Creating a Request
+    ListFaqs (..),
+    newListFaqs,
+
+    -- * Request Lenses
+    listFaqs_maxResults,
+    listFaqs_nextToken,
+    listFaqs_indexId,
+
+    -- * Destructuring the Response
+    ListFaqsResponse (..),
+    newListFaqsResponse,
+
+    -- * Response Lenses
+    listFaqsResponse_faqSummaryItems,
+    listFaqsResponse_nextToken,
+    listFaqsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListFaqs' smart constructor.
+data ListFaqs = ListFaqs'
+  { -- | The maximum number of FAQs to return in the response. If there are fewer
+    -- results in the list, this response contains only the actual results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the previous response was incomplete (because there is more data to
+    -- retrieve), Amazon Kendra returns a pagination token in the response. You
+    -- can use this pagination token to retrieve the next set of FAQs.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The index that contains the FAQ lists.
+    indexId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListFaqs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listFaqs_maxResults' - The maximum number of FAQs to return in the response. If there are fewer
+-- results in the list, this response contains only the actual results.
+--
+-- 'nextToken', 'listFaqs_nextToken' - If the previous response was incomplete (because there is more data to
+-- retrieve), Amazon Kendra returns a pagination token in the response. You
+-- can use this pagination token to retrieve the next set of FAQs.
+--
+-- 'indexId', 'listFaqs_indexId' - The index that contains the FAQ lists.
+newListFaqs ::
+  -- | 'indexId'
+  Prelude.Text ->
+  ListFaqs
+newListFaqs pIndexId_ =
+  ListFaqs'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      indexId = pIndexId_
+    }
+
+-- | The maximum number of FAQs to return in the response. If there are fewer
+-- results in the list, this response contains only the actual results.
+listFaqs_maxResults :: Lens.Lens' ListFaqs (Prelude.Maybe Prelude.Natural)
+listFaqs_maxResults = Lens.lens (\ListFaqs' {maxResults} -> maxResults) (\s@ListFaqs' {} a -> s {maxResults = a} :: ListFaqs)
+
+-- | If the previous response was incomplete (because there is more data to
+-- retrieve), Amazon Kendra returns a pagination token in the response. You
+-- can use this pagination token to retrieve the next set of FAQs.
+listFaqs_nextToken :: Lens.Lens' ListFaqs (Prelude.Maybe Prelude.Text)
+listFaqs_nextToken = Lens.lens (\ListFaqs' {nextToken} -> nextToken) (\s@ListFaqs' {} a -> s {nextToken = a} :: ListFaqs)
+
+-- | The index that contains the FAQ lists.
+listFaqs_indexId :: Lens.Lens' ListFaqs Prelude.Text
+listFaqs_indexId = Lens.lens (\ListFaqs' {indexId} -> indexId) (\s@ListFaqs' {} a -> s {indexId = a} :: ListFaqs)
+
+instance Core.AWSRequest ListFaqs where
+  type AWSResponse ListFaqs = ListFaqsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListFaqsResponse'
+            Prelude.<$> ( x
+                            Data..?> "FaqSummaryItems"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListFaqs where
+  hashWithSalt _salt ListFaqs' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` indexId
+
+instance Prelude.NFData ListFaqs where
+  rnf ListFaqs' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf indexId
+
+instance Data.ToHeaders ListFaqs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.ListFaqs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListFaqs where
+  toJSON ListFaqs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("IndexId" Data..= indexId)
+          ]
+      )
+
+instance Data.ToPath ListFaqs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListFaqs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListFaqsResponse' smart constructor.
+data ListFaqsResponse = ListFaqsResponse'
+  { -- | information about the FAQs associated with the specified index.
+    faqSummaryItems :: Prelude.Maybe [FaqSummary],
+    -- | If the response is truncated, Amazon Kendra returns this token that you
+    -- can use in the subsequent request to retrieve the next set of FAQs.
+    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 'ListFaqsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'faqSummaryItems', 'listFaqsResponse_faqSummaryItems' - information about the FAQs associated with the specified index.
+--
+-- 'nextToken', 'listFaqsResponse_nextToken' - If the response is truncated, Amazon Kendra returns this token that you
+-- can use in the subsequent request to retrieve the next set of FAQs.
+--
+-- 'httpStatus', 'listFaqsResponse_httpStatus' - The response's http status code.
+newListFaqsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListFaqsResponse
+newListFaqsResponse pHttpStatus_ =
+  ListFaqsResponse'
+    { faqSummaryItems =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | information about the FAQs associated with the specified index.
+listFaqsResponse_faqSummaryItems :: Lens.Lens' ListFaqsResponse (Prelude.Maybe [FaqSummary])
+listFaqsResponse_faqSummaryItems = Lens.lens (\ListFaqsResponse' {faqSummaryItems} -> faqSummaryItems) (\s@ListFaqsResponse' {} a -> s {faqSummaryItems = a} :: ListFaqsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If the response is truncated, Amazon Kendra returns this token that you
+-- can use in the subsequent request to retrieve the next set of FAQs.
+listFaqsResponse_nextToken :: Lens.Lens' ListFaqsResponse (Prelude.Maybe Prelude.Text)
+listFaqsResponse_nextToken = Lens.lens (\ListFaqsResponse' {nextToken} -> nextToken) (\s@ListFaqsResponse' {} a -> s {nextToken = a} :: ListFaqsResponse)
+
+-- | The response's http status code.
+listFaqsResponse_httpStatus :: Lens.Lens' ListFaqsResponse Prelude.Int
+listFaqsResponse_httpStatus = Lens.lens (\ListFaqsResponse' {httpStatus} -> httpStatus) (\s@ListFaqsResponse' {} a -> s {httpStatus = a} :: ListFaqsResponse)
+
+instance Prelude.NFData ListFaqsResponse where
+  rnf ListFaqsResponse' {..} =
+    Prelude.rnf faqSummaryItems
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/ListGroupsOlderThanOrderingId.hs b/gen/Amazonka/Kendra/ListGroupsOlderThanOrderingId.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/ListGroupsOlderThanOrderingId.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.Kendra.ListGroupsOlderThanOrderingId
+-- 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 groups that are mapped to users before a given
+-- ordering or timestamp identifier.
+--
+-- @ListGroupsOlderThanOrderingId@ is currently not supported in the Amazon
+-- Web Services GovCloud (US-West) region.
+module Amazonka.Kendra.ListGroupsOlderThanOrderingId
+  ( -- * Creating a Request
+    ListGroupsOlderThanOrderingId (..),
+    newListGroupsOlderThanOrderingId,
+
+    -- * Request Lenses
+    listGroupsOlderThanOrderingId_dataSourceId,
+    listGroupsOlderThanOrderingId_maxResults,
+    listGroupsOlderThanOrderingId_nextToken,
+    listGroupsOlderThanOrderingId_indexId,
+    listGroupsOlderThanOrderingId_orderingId,
+
+    -- * Destructuring the Response
+    ListGroupsOlderThanOrderingIdResponse (..),
+    newListGroupsOlderThanOrderingIdResponse,
+
+    -- * Response Lenses
+    listGroupsOlderThanOrderingIdResponse_groupsSummaries,
+    listGroupsOlderThanOrderingIdResponse_nextToken,
+    listGroupsOlderThanOrderingIdResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListGroupsOlderThanOrderingId' smart constructor.
+data ListGroupsOlderThanOrderingId = ListGroupsOlderThanOrderingId'
+  { -- | The identifier of the data source for getting a list of groups mapped to
+    -- users before a given ordering timestamp identifier.
+    dataSourceId :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of returned groups that are mapped to users before a
+    -- given ordering or timestamp identifier.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the previous response was incomplete (because there is more data to
+    -- retrieve), Amazon Kendra returns a pagination token in the response. You
+    -- can use this pagination token to retrieve the next set of groups that
+    -- are mapped to users before a given ordering or timestamp identifier.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the index for getting a list of groups mapped to users
+    -- before a given ordering or timestamp identifier.
+    indexId :: Prelude.Text,
+    -- | The timestamp identifier used for the latest @PUT@ or @DELETE@ action
+    -- for mapping users to their groups.
+    orderingId :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListGroupsOlderThanOrderingId' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSourceId', 'listGroupsOlderThanOrderingId_dataSourceId' - The identifier of the data source for getting a list of groups mapped to
+-- users before a given ordering timestamp identifier.
+--
+-- 'maxResults', 'listGroupsOlderThanOrderingId_maxResults' - The maximum number of returned groups that are mapped to users before a
+-- given ordering or timestamp identifier.
+--
+-- 'nextToken', 'listGroupsOlderThanOrderingId_nextToken' - If the previous response was incomplete (because there is more data to
+-- retrieve), Amazon Kendra returns a pagination token in the response. You
+-- can use this pagination token to retrieve the next set of groups that
+-- are mapped to users before a given ordering or timestamp identifier.
+--
+-- 'indexId', 'listGroupsOlderThanOrderingId_indexId' - The identifier of the index for getting a list of groups mapped to users
+-- before a given ordering or timestamp identifier.
+--
+-- 'orderingId', 'listGroupsOlderThanOrderingId_orderingId' - The timestamp identifier used for the latest @PUT@ or @DELETE@ action
+-- for mapping users to their groups.
+newListGroupsOlderThanOrderingId ::
+  -- | 'indexId'
+  Prelude.Text ->
+  -- | 'orderingId'
+  Prelude.Natural ->
+  ListGroupsOlderThanOrderingId
+newListGroupsOlderThanOrderingId
+  pIndexId_
+  pOrderingId_ =
+    ListGroupsOlderThanOrderingId'
+      { dataSourceId =
+          Prelude.Nothing,
+        maxResults = Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        indexId = pIndexId_,
+        orderingId = pOrderingId_
+      }
+
+-- | The identifier of the data source for getting a list of groups mapped to
+-- users before a given ordering timestamp identifier.
+listGroupsOlderThanOrderingId_dataSourceId :: Lens.Lens' ListGroupsOlderThanOrderingId (Prelude.Maybe Prelude.Text)
+listGroupsOlderThanOrderingId_dataSourceId = Lens.lens (\ListGroupsOlderThanOrderingId' {dataSourceId} -> dataSourceId) (\s@ListGroupsOlderThanOrderingId' {} a -> s {dataSourceId = a} :: ListGroupsOlderThanOrderingId)
+
+-- | The maximum number of returned groups that are mapped to users before a
+-- given ordering or timestamp identifier.
+listGroupsOlderThanOrderingId_maxResults :: Lens.Lens' ListGroupsOlderThanOrderingId (Prelude.Maybe Prelude.Natural)
+listGroupsOlderThanOrderingId_maxResults = Lens.lens (\ListGroupsOlderThanOrderingId' {maxResults} -> maxResults) (\s@ListGroupsOlderThanOrderingId' {} a -> s {maxResults = a} :: ListGroupsOlderThanOrderingId)
+
+-- | If the previous response was incomplete (because there is more data to
+-- retrieve), Amazon Kendra returns a pagination token in the response. You
+-- can use this pagination token to retrieve the next set of groups that
+-- are mapped to users before a given ordering or timestamp identifier.
+listGroupsOlderThanOrderingId_nextToken :: Lens.Lens' ListGroupsOlderThanOrderingId (Prelude.Maybe Prelude.Text)
+listGroupsOlderThanOrderingId_nextToken = Lens.lens (\ListGroupsOlderThanOrderingId' {nextToken} -> nextToken) (\s@ListGroupsOlderThanOrderingId' {} a -> s {nextToken = a} :: ListGroupsOlderThanOrderingId)
+
+-- | The identifier of the index for getting a list of groups mapped to users
+-- before a given ordering or timestamp identifier.
+listGroupsOlderThanOrderingId_indexId :: Lens.Lens' ListGroupsOlderThanOrderingId Prelude.Text
+listGroupsOlderThanOrderingId_indexId = Lens.lens (\ListGroupsOlderThanOrderingId' {indexId} -> indexId) (\s@ListGroupsOlderThanOrderingId' {} a -> s {indexId = a} :: ListGroupsOlderThanOrderingId)
+
+-- | The timestamp identifier used for the latest @PUT@ or @DELETE@ action
+-- for mapping users to their groups.
+listGroupsOlderThanOrderingId_orderingId :: Lens.Lens' ListGroupsOlderThanOrderingId Prelude.Natural
+listGroupsOlderThanOrderingId_orderingId = Lens.lens (\ListGroupsOlderThanOrderingId' {orderingId} -> orderingId) (\s@ListGroupsOlderThanOrderingId' {} a -> s {orderingId = a} :: ListGroupsOlderThanOrderingId)
+
+instance
+  Core.AWSRequest
+    ListGroupsOlderThanOrderingId
+  where
+  type
+    AWSResponse ListGroupsOlderThanOrderingId =
+      ListGroupsOlderThanOrderingIdResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListGroupsOlderThanOrderingIdResponse'
+            Prelude.<$> ( x
+                            Data..?> "GroupsSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListGroupsOlderThanOrderingId
+  where
+  hashWithSalt _salt ListGroupsOlderThanOrderingId' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataSourceId
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` indexId
+      `Prelude.hashWithSalt` orderingId
+
+instance Prelude.NFData ListGroupsOlderThanOrderingId where
+  rnf ListGroupsOlderThanOrderingId' {..} =
+    Prelude.rnf dataSourceId
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf indexId
+      `Prelude.seq` Prelude.rnf orderingId
+
+instance Data.ToHeaders ListGroupsOlderThanOrderingId where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.ListGroupsOlderThanOrderingId" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListGroupsOlderThanOrderingId where
+  toJSON ListGroupsOlderThanOrderingId' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DataSourceId" Data..=) Prelude.<$> dataSourceId,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("IndexId" Data..= indexId),
+            Prelude.Just ("OrderingId" Data..= orderingId)
+          ]
+      )
+
+instance Data.ToPath ListGroupsOlderThanOrderingId where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListGroupsOlderThanOrderingId where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListGroupsOlderThanOrderingIdResponse' smart constructor.
+data ListGroupsOlderThanOrderingIdResponse = ListGroupsOlderThanOrderingIdResponse'
+  { -- | Summary information for list of groups that are mapped to users before a
+    -- given ordering or timestamp identifier.
+    groupsSummaries :: Prelude.Maybe [GroupSummary],
+    -- | If the response is truncated, Amazon Kendra returns this token that you
+    -- can use in the subsequent request to retrieve the next set of groups
+    -- that are mapped to users before a given ordering or timestamp
+    -- identifier.
+    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 'ListGroupsOlderThanOrderingIdResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groupsSummaries', 'listGroupsOlderThanOrderingIdResponse_groupsSummaries' - Summary information for list of groups that are mapped to users before a
+-- given ordering or timestamp identifier.
+--
+-- 'nextToken', 'listGroupsOlderThanOrderingIdResponse_nextToken' - If the response is truncated, Amazon Kendra returns this token that you
+-- can use in the subsequent request to retrieve the next set of groups
+-- that are mapped to users before a given ordering or timestamp
+-- identifier.
+--
+-- 'httpStatus', 'listGroupsOlderThanOrderingIdResponse_httpStatus' - The response's http status code.
+newListGroupsOlderThanOrderingIdResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListGroupsOlderThanOrderingIdResponse
+newListGroupsOlderThanOrderingIdResponse pHttpStatus_ =
+  ListGroupsOlderThanOrderingIdResponse'
+    { groupsSummaries =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Summary information for list of groups that are mapped to users before a
+-- given ordering or timestamp identifier.
+listGroupsOlderThanOrderingIdResponse_groupsSummaries :: Lens.Lens' ListGroupsOlderThanOrderingIdResponse (Prelude.Maybe [GroupSummary])
+listGroupsOlderThanOrderingIdResponse_groupsSummaries = Lens.lens (\ListGroupsOlderThanOrderingIdResponse' {groupsSummaries} -> groupsSummaries) (\s@ListGroupsOlderThanOrderingIdResponse' {} a -> s {groupsSummaries = a} :: ListGroupsOlderThanOrderingIdResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If the response is truncated, Amazon Kendra returns this token that you
+-- can use in the subsequent request to retrieve the next set of groups
+-- that are mapped to users before a given ordering or timestamp
+-- identifier.
+listGroupsOlderThanOrderingIdResponse_nextToken :: Lens.Lens' ListGroupsOlderThanOrderingIdResponse (Prelude.Maybe Prelude.Text)
+listGroupsOlderThanOrderingIdResponse_nextToken = Lens.lens (\ListGroupsOlderThanOrderingIdResponse' {nextToken} -> nextToken) (\s@ListGroupsOlderThanOrderingIdResponse' {} a -> s {nextToken = a} :: ListGroupsOlderThanOrderingIdResponse)
+
+-- | The response's http status code.
+listGroupsOlderThanOrderingIdResponse_httpStatus :: Lens.Lens' ListGroupsOlderThanOrderingIdResponse Prelude.Int
+listGroupsOlderThanOrderingIdResponse_httpStatus = Lens.lens (\ListGroupsOlderThanOrderingIdResponse' {httpStatus} -> httpStatus) (\s@ListGroupsOlderThanOrderingIdResponse' {} a -> s {httpStatus = a} :: ListGroupsOlderThanOrderingIdResponse)
+
+instance
+  Prelude.NFData
+    ListGroupsOlderThanOrderingIdResponse
+  where
+  rnf ListGroupsOlderThanOrderingIdResponse' {..} =
+    Prelude.rnf groupsSummaries
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/ListIndices.hs b/gen/Amazonka/Kendra/ListIndices.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/ListIndices.hs
@@ -0,0 +1,209 @@
+{-# 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.Kendra.ListIndices
+-- 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 Amazon Kendra indexes that you created.
+module Amazonka.Kendra.ListIndices
+  ( -- * Creating a Request
+    ListIndices (..),
+    newListIndices,
+
+    -- * Request Lenses
+    listIndices_maxResults,
+    listIndices_nextToken,
+
+    -- * Destructuring the Response
+    ListIndicesResponse (..),
+    newListIndicesResponse,
+
+    -- * Response Lenses
+    listIndicesResponse_indexConfigurationSummaryItems,
+    listIndicesResponse_nextToken,
+    listIndicesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListIndices' smart constructor.
+data ListIndices = ListIndices'
+  { -- | The maximum number of indices to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the previous response was incomplete (because there is more data to
+    -- retrieve), Amazon Kendra returns a pagination token in the response. You
+    -- can use this pagination token to retrieve the next set of indexes.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListIndices' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listIndices_maxResults' - The maximum number of indices to return.
+--
+-- 'nextToken', 'listIndices_nextToken' - If the previous response was incomplete (because there is more data to
+-- retrieve), Amazon Kendra returns a pagination token in the response. You
+-- can use this pagination token to retrieve the next set of indexes.
+newListIndices ::
+  ListIndices
+newListIndices =
+  ListIndices'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of indices to return.
+listIndices_maxResults :: Lens.Lens' ListIndices (Prelude.Maybe Prelude.Natural)
+listIndices_maxResults = Lens.lens (\ListIndices' {maxResults} -> maxResults) (\s@ListIndices' {} a -> s {maxResults = a} :: ListIndices)
+
+-- | If the previous response was incomplete (because there is more data to
+-- retrieve), Amazon Kendra returns a pagination token in the response. You
+-- can use this pagination token to retrieve the next set of indexes.
+listIndices_nextToken :: Lens.Lens' ListIndices (Prelude.Maybe Prelude.Text)
+listIndices_nextToken = Lens.lens (\ListIndices' {nextToken} -> nextToken) (\s@ListIndices' {} a -> s {nextToken = a} :: ListIndices)
+
+instance Core.AWSRequest ListIndices where
+  type AWSResponse ListIndices = ListIndicesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListIndicesResponse'
+            Prelude.<$> ( x
+                            Data..?> "IndexConfigurationSummaryItems"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListIndices where
+  hashWithSalt _salt ListIndices' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListIndices where
+  rnf ListIndices' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListIndices where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.ListIndices" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListIndices where
+  toJSON ListIndices' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListIndices where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListIndices where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListIndicesResponse' smart constructor.
+data ListIndicesResponse = ListIndicesResponse'
+  { -- | An array of summary information on the configuration of one or more
+    -- indexes.
+    indexConfigurationSummaryItems :: Prelude.Maybe [IndexConfigurationSummary],
+    -- | If the response is truncated, Amazon Kendra returns this token that you
+    -- can use in the subsequent request to retrieve the next set of indexes.
+    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 'ListIndicesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'indexConfigurationSummaryItems', 'listIndicesResponse_indexConfigurationSummaryItems' - An array of summary information on the configuration of one or more
+-- indexes.
+--
+-- 'nextToken', 'listIndicesResponse_nextToken' - If the response is truncated, Amazon Kendra returns this token that you
+-- can use in the subsequent request to retrieve the next set of indexes.
+--
+-- 'httpStatus', 'listIndicesResponse_httpStatus' - The response's http status code.
+newListIndicesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListIndicesResponse
+newListIndicesResponse pHttpStatus_ =
+  ListIndicesResponse'
+    { indexConfigurationSummaryItems =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of summary information on the configuration of one or more
+-- indexes.
+listIndicesResponse_indexConfigurationSummaryItems :: Lens.Lens' ListIndicesResponse (Prelude.Maybe [IndexConfigurationSummary])
+listIndicesResponse_indexConfigurationSummaryItems = Lens.lens (\ListIndicesResponse' {indexConfigurationSummaryItems} -> indexConfigurationSummaryItems) (\s@ListIndicesResponse' {} a -> s {indexConfigurationSummaryItems = a} :: ListIndicesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If the response is truncated, Amazon Kendra returns this token that you
+-- can use in the subsequent request to retrieve the next set of indexes.
+listIndicesResponse_nextToken :: Lens.Lens' ListIndicesResponse (Prelude.Maybe Prelude.Text)
+listIndicesResponse_nextToken = Lens.lens (\ListIndicesResponse' {nextToken} -> nextToken) (\s@ListIndicesResponse' {} a -> s {nextToken = a} :: ListIndicesResponse)
+
+-- | The response's http status code.
+listIndicesResponse_httpStatus :: Lens.Lens' ListIndicesResponse Prelude.Int
+listIndicesResponse_httpStatus = Lens.lens (\ListIndicesResponse' {httpStatus} -> httpStatus) (\s@ListIndicesResponse' {} a -> s {httpStatus = a} :: ListIndicesResponse)
+
+instance Prelude.NFData ListIndicesResponse where
+  rnf ListIndicesResponse' {..} =
+    Prelude.rnf indexConfigurationSummaryItems
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/ListQuerySuggestionsBlockLists.hs b/gen/Amazonka/Kendra/ListQuerySuggestionsBlockLists.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/ListQuerySuggestionsBlockLists.hs
@@ -0,0 +1,287 @@
+{-# 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.Kendra.ListQuerySuggestionsBlockLists
+-- 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 block lists used for query suggestions for an index.
+--
+-- For information on the current quota limits for block lists, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/quotas.html Quotas for Amazon Kendra>.
+--
+-- @ListQuerySuggestionsBlockLists@ is currently not supported in the
+-- Amazon Web Services GovCloud (US-West) region.
+module Amazonka.Kendra.ListQuerySuggestionsBlockLists
+  ( -- * Creating a Request
+    ListQuerySuggestionsBlockLists (..),
+    newListQuerySuggestionsBlockLists,
+
+    -- * Request Lenses
+    listQuerySuggestionsBlockLists_maxResults,
+    listQuerySuggestionsBlockLists_nextToken,
+    listQuerySuggestionsBlockLists_indexId,
+
+    -- * Destructuring the Response
+    ListQuerySuggestionsBlockListsResponse (..),
+    newListQuerySuggestionsBlockListsResponse,
+
+    -- * Response Lenses
+    listQuerySuggestionsBlockListsResponse_blockListSummaryItems,
+    listQuerySuggestionsBlockListsResponse_nextToken,
+    listQuerySuggestionsBlockListsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListQuerySuggestionsBlockLists' smart constructor.
+data ListQuerySuggestionsBlockLists = ListQuerySuggestionsBlockLists'
+  { -- | The maximum number of block lists to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the previous response was incomplete (because there is more data to
+    -- retrieve), Amazon Kendra returns a pagination token in the response. You
+    -- can use this pagination token to retrieve the next set of block lists
+    -- (@BlockListSummaryItems@).
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the index for a list of all block lists that exist for
+    -- that index.
+    --
+    -- For information on the current quota limits for block lists, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/quotas.html Quotas for Amazon Kendra>.
+    indexId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListQuerySuggestionsBlockLists' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listQuerySuggestionsBlockLists_maxResults' - The maximum number of block lists to return.
+--
+-- 'nextToken', 'listQuerySuggestionsBlockLists_nextToken' - If the previous response was incomplete (because there is more data to
+-- retrieve), Amazon Kendra returns a pagination token in the response. You
+-- can use this pagination token to retrieve the next set of block lists
+-- (@BlockListSummaryItems@).
+--
+-- 'indexId', 'listQuerySuggestionsBlockLists_indexId' - The identifier of the index for a list of all block lists that exist for
+-- that index.
+--
+-- For information on the current quota limits for block lists, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/quotas.html Quotas for Amazon Kendra>.
+newListQuerySuggestionsBlockLists ::
+  -- | 'indexId'
+  Prelude.Text ->
+  ListQuerySuggestionsBlockLists
+newListQuerySuggestionsBlockLists pIndexId_ =
+  ListQuerySuggestionsBlockLists'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      indexId = pIndexId_
+    }
+
+-- | The maximum number of block lists to return.
+listQuerySuggestionsBlockLists_maxResults :: Lens.Lens' ListQuerySuggestionsBlockLists (Prelude.Maybe Prelude.Natural)
+listQuerySuggestionsBlockLists_maxResults = Lens.lens (\ListQuerySuggestionsBlockLists' {maxResults} -> maxResults) (\s@ListQuerySuggestionsBlockLists' {} a -> s {maxResults = a} :: ListQuerySuggestionsBlockLists)
+
+-- | If the previous response was incomplete (because there is more data to
+-- retrieve), Amazon Kendra returns a pagination token in the response. You
+-- can use this pagination token to retrieve the next set of block lists
+-- (@BlockListSummaryItems@).
+listQuerySuggestionsBlockLists_nextToken :: Lens.Lens' ListQuerySuggestionsBlockLists (Prelude.Maybe Prelude.Text)
+listQuerySuggestionsBlockLists_nextToken = Lens.lens (\ListQuerySuggestionsBlockLists' {nextToken} -> nextToken) (\s@ListQuerySuggestionsBlockLists' {} a -> s {nextToken = a} :: ListQuerySuggestionsBlockLists)
+
+-- | The identifier of the index for a list of all block lists that exist for
+-- that index.
+--
+-- For information on the current quota limits for block lists, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/quotas.html Quotas for Amazon Kendra>.
+listQuerySuggestionsBlockLists_indexId :: Lens.Lens' ListQuerySuggestionsBlockLists Prelude.Text
+listQuerySuggestionsBlockLists_indexId = Lens.lens (\ListQuerySuggestionsBlockLists' {indexId} -> indexId) (\s@ListQuerySuggestionsBlockLists' {} a -> s {indexId = a} :: ListQuerySuggestionsBlockLists)
+
+instance
+  Core.AWSRequest
+    ListQuerySuggestionsBlockLists
+  where
+  type
+    AWSResponse ListQuerySuggestionsBlockLists =
+      ListQuerySuggestionsBlockListsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListQuerySuggestionsBlockListsResponse'
+            Prelude.<$> ( x
+                            Data..?> "BlockListSummaryItems"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListQuerySuggestionsBlockLists
+  where
+  hashWithSalt
+    _salt
+    ListQuerySuggestionsBlockLists' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` indexId
+
+instance
+  Prelude.NFData
+    ListQuerySuggestionsBlockLists
+  where
+  rnf ListQuerySuggestionsBlockLists' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf indexId
+
+instance
+  Data.ToHeaders
+    ListQuerySuggestionsBlockLists
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.ListQuerySuggestionsBlockLists" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListQuerySuggestionsBlockLists where
+  toJSON ListQuerySuggestionsBlockLists' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("IndexId" Data..= indexId)
+          ]
+      )
+
+instance Data.ToPath ListQuerySuggestionsBlockLists where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListQuerySuggestionsBlockLists where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListQuerySuggestionsBlockListsResponse' smart constructor.
+data ListQuerySuggestionsBlockListsResponse = ListQuerySuggestionsBlockListsResponse'
+  { -- | Summary items for a block list.
+    --
+    -- This includes summary items on the block list ID, block list name, when
+    -- the block list was created, when the block list was last updated, and
+    -- the count of block words\/phrases in the block list.
+    --
+    -- For information on the current quota limits for block lists, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/quotas.html Quotas for Amazon Kendra>.
+    blockListSummaryItems :: Prelude.Maybe [QuerySuggestionsBlockListSummary],
+    -- | If the response is truncated, Amazon Kendra returns this token that you
+    -- can use in the subsequent request to retrieve the next set of block
+    -- lists.
+    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 'ListQuerySuggestionsBlockListsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'blockListSummaryItems', 'listQuerySuggestionsBlockListsResponse_blockListSummaryItems' - Summary items for a block list.
+--
+-- This includes summary items on the block list ID, block list name, when
+-- the block list was created, when the block list was last updated, and
+-- the count of block words\/phrases in the block list.
+--
+-- For information on the current quota limits for block lists, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/quotas.html Quotas for Amazon Kendra>.
+--
+-- 'nextToken', 'listQuerySuggestionsBlockListsResponse_nextToken' - If the response is truncated, Amazon Kendra returns this token that you
+-- can use in the subsequent request to retrieve the next set of block
+-- lists.
+--
+-- 'httpStatus', 'listQuerySuggestionsBlockListsResponse_httpStatus' - The response's http status code.
+newListQuerySuggestionsBlockListsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListQuerySuggestionsBlockListsResponse
+newListQuerySuggestionsBlockListsResponse
+  pHttpStatus_ =
+    ListQuerySuggestionsBlockListsResponse'
+      { blockListSummaryItems =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Summary items for a block list.
+--
+-- This includes summary items on the block list ID, block list name, when
+-- the block list was created, when the block list was last updated, and
+-- the count of block words\/phrases in the block list.
+--
+-- For information on the current quota limits for block lists, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/quotas.html Quotas for Amazon Kendra>.
+listQuerySuggestionsBlockListsResponse_blockListSummaryItems :: Lens.Lens' ListQuerySuggestionsBlockListsResponse (Prelude.Maybe [QuerySuggestionsBlockListSummary])
+listQuerySuggestionsBlockListsResponse_blockListSummaryItems = Lens.lens (\ListQuerySuggestionsBlockListsResponse' {blockListSummaryItems} -> blockListSummaryItems) (\s@ListQuerySuggestionsBlockListsResponse' {} a -> s {blockListSummaryItems = a} :: ListQuerySuggestionsBlockListsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If the response is truncated, Amazon Kendra returns this token that you
+-- can use in the subsequent request to retrieve the next set of block
+-- lists.
+listQuerySuggestionsBlockListsResponse_nextToken :: Lens.Lens' ListQuerySuggestionsBlockListsResponse (Prelude.Maybe Prelude.Text)
+listQuerySuggestionsBlockListsResponse_nextToken = Lens.lens (\ListQuerySuggestionsBlockListsResponse' {nextToken} -> nextToken) (\s@ListQuerySuggestionsBlockListsResponse' {} a -> s {nextToken = a} :: ListQuerySuggestionsBlockListsResponse)
+
+-- | The response's http status code.
+listQuerySuggestionsBlockListsResponse_httpStatus :: Lens.Lens' ListQuerySuggestionsBlockListsResponse Prelude.Int
+listQuerySuggestionsBlockListsResponse_httpStatus = Lens.lens (\ListQuerySuggestionsBlockListsResponse' {httpStatus} -> httpStatus) (\s@ListQuerySuggestionsBlockListsResponse' {} a -> s {httpStatus = a} :: ListQuerySuggestionsBlockListsResponse)
+
+instance
+  Prelude.NFData
+    ListQuerySuggestionsBlockListsResponse
+  where
+  rnf ListQuerySuggestionsBlockListsResponse' {..} =
+    Prelude.rnf blockListSummaryItems
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/ListTagsForResource.hs b/gen/Amazonka/Kendra/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/ListTagsForResource.hs
@@ -0,0 +1,173 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.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 specified resource. Indexes, FAQs,
+-- and data sources can have tags associated with them.
+module Amazonka.Kendra.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.Kendra.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 index, FAQ, or data source 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 index, FAQ, or data source to get
+-- a list of tags for.
+newListTagsForResource ::
+  -- | 'resourceARN'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceARN_ =
+  ListTagsForResource' {resourceARN = pResourceARN_}
+
+-- | The Amazon Resource Name (ARN) of the index, FAQ, or data source 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.postJSON (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
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.ListTagsForResource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListTagsForResource where
+  toJSON ListTagsForResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ResourceARN" Data..= resourceARN)]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | A list of tags associated with the index, FAQ, or data source.
+    tags :: Prelude.Maybe [Tag],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - A list of tags associated with the index, FAQ, or data source.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of tags associated with the index, FAQ, or data source.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe [Tag])
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/ListThesauri.hs b/gen/Amazonka/Kendra/ListThesauri.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/ListThesauri.hs
@@ -0,0 +1,223 @@
+{-# 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.Kendra.ListThesauri
+-- 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 thesauri for an index.
+module Amazonka.Kendra.ListThesauri
+  ( -- * Creating a Request
+    ListThesauri (..),
+    newListThesauri,
+
+    -- * Request Lenses
+    listThesauri_maxResults,
+    listThesauri_nextToken,
+    listThesauri_indexId,
+
+    -- * Destructuring the Response
+    ListThesauriResponse (..),
+    newListThesauriResponse,
+
+    -- * Response Lenses
+    listThesauriResponse_nextToken,
+    listThesauriResponse_thesaurusSummaryItems,
+    listThesauriResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListThesauri' smart constructor.
+data ListThesauri = ListThesauri'
+  { -- | The maximum number of thesauri to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the previous response was incomplete (because there is more data to
+    -- retrieve), Amazon Kendra returns a pagination token in the response. You
+    -- can use this pagination token to retrieve the next set of thesauri
+    -- (@ThesaurusSummaryItems@).
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the index with one or more thesauri.
+    indexId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListThesauri' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listThesauri_maxResults' - The maximum number of thesauri to return.
+--
+-- 'nextToken', 'listThesauri_nextToken' - If the previous response was incomplete (because there is more data to
+-- retrieve), Amazon Kendra returns a pagination token in the response. You
+-- can use this pagination token to retrieve the next set of thesauri
+-- (@ThesaurusSummaryItems@).
+--
+-- 'indexId', 'listThesauri_indexId' - The identifier of the index with one or more thesauri.
+newListThesauri ::
+  -- | 'indexId'
+  Prelude.Text ->
+  ListThesauri
+newListThesauri pIndexId_ =
+  ListThesauri'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      indexId = pIndexId_
+    }
+
+-- | The maximum number of thesauri to return.
+listThesauri_maxResults :: Lens.Lens' ListThesauri (Prelude.Maybe Prelude.Natural)
+listThesauri_maxResults = Lens.lens (\ListThesauri' {maxResults} -> maxResults) (\s@ListThesauri' {} a -> s {maxResults = a} :: ListThesauri)
+
+-- | If the previous response was incomplete (because there is more data to
+-- retrieve), Amazon Kendra returns a pagination token in the response. You
+-- can use this pagination token to retrieve the next set of thesauri
+-- (@ThesaurusSummaryItems@).
+listThesauri_nextToken :: Lens.Lens' ListThesauri (Prelude.Maybe Prelude.Text)
+listThesauri_nextToken = Lens.lens (\ListThesauri' {nextToken} -> nextToken) (\s@ListThesauri' {} a -> s {nextToken = a} :: ListThesauri)
+
+-- | The identifier of the index with one or more thesauri.
+listThesauri_indexId :: Lens.Lens' ListThesauri Prelude.Text
+listThesauri_indexId = Lens.lens (\ListThesauri' {indexId} -> indexId) (\s@ListThesauri' {} a -> s {indexId = a} :: ListThesauri)
+
+instance Core.AWSRequest ListThesauri where
+  type AWSResponse ListThesauri = ListThesauriResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListThesauriResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> ( x
+                            Data..?> "ThesaurusSummaryItems"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListThesauri where
+  hashWithSalt _salt ListThesauri' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` indexId
+
+instance Prelude.NFData ListThesauri where
+  rnf ListThesauri' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf indexId
+
+instance Data.ToHeaders ListThesauri where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.ListThesauri" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListThesauri where
+  toJSON ListThesauri' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("IndexId" Data..= indexId)
+          ]
+      )
+
+instance Data.ToPath ListThesauri where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListThesauri where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListThesauriResponse' smart constructor.
+data ListThesauriResponse = ListThesauriResponse'
+  { -- | If the response is truncated, Amazon Kendra returns this token that you
+    -- can use in the subsequent request to retrieve the next set of thesauri.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An array of summary information for a thesaurus or multiple thesauri.
+    thesaurusSummaryItems :: Prelude.Maybe [ThesaurusSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListThesauriResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listThesauriResponse_nextToken' - If the response is truncated, Amazon Kendra returns this token that you
+-- can use in the subsequent request to retrieve the next set of thesauri.
+--
+-- 'thesaurusSummaryItems', 'listThesauriResponse_thesaurusSummaryItems' - An array of summary information for a thesaurus or multiple thesauri.
+--
+-- 'httpStatus', 'listThesauriResponse_httpStatus' - The response's http status code.
+newListThesauriResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListThesauriResponse
+newListThesauriResponse pHttpStatus_ =
+  ListThesauriResponse'
+    { nextToken = Prelude.Nothing,
+      thesaurusSummaryItems = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | If the response is truncated, Amazon Kendra returns this token that you
+-- can use in the subsequent request to retrieve the next set of thesauri.
+listThesauriResponse_nextToken :: Lens.Lens' ListThesauriResponse (Prelude.Maybe Prelude.Text)
+listThesauriResponse_nextToken = Lens.lens (\ListThesauriResponse' {nextToken} -> nextToken) (\s@ListThesauriResponse' {} a -> s {nextToken = a} :: ListThesauriResponse)
+
+-- | An array of summary information for a thesaurus or multiple thesauri.
+listThesauriResponse_thesaurusSummaryItems :: Lens.Lens' ListThesauriResponse (Prelude.Maybe [ThesaurusSummary])
+listThesauriResponse_thesaurusSummaryItems = Lens.lens (\ListThesauriResponse' {thesaurusSummaryItems} -> thesaurusSummaryItems) (\s@ListThesauriResponse' {} a -> s {thesaurusSummaryItems = a} :: ListThesauriResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listThesauriResponse_httpStatus :: Lens.Lens' ListThesauriResponse Prelude.Int
+listThesauriResponse_httpStatus = Lens.lens (\ListThesauriResponse' {httpStatus} -> httpStatus) (\s@ListThesauriResponse' {} a -> s {httpStatus = a} :: ListThesauriResponse)
+
+instance Prelude.NFData ListThesauriResponse where
+  rnf ListThesauriResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf thesaurusSummaryItems
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/PutPrincipalMapping.hs b/gen/Amazonka/Kendra/PutPrincipalMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/PutPrincipalMapping.hs
@@ -0,0 +1,335 @@
+{-# 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.Kendra.PutPrincipalMapping
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Maps users to their groups so that you only need to provide the user ID
+-- when you issue the query.
+--
+-- You can also map sub groups to groups. For example, the group \"Company
+-- Intellectual Property Teams\" includes sub groups \"Research\" and
+-- \"Engineering\". These sub groups include their own list of users or
+-- people who work in these teams. Only users who work in research and
+-- engineering, and therefore belong in the intellectual property group,
+-- can see top-secret company documents in their search results.
+--
+-- This is useful for user context filtering, where search results are
+-- filtered based on the user or their group access to documents. For more
+-- information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/user-context-filter.html Filtering on user context>.
+--
+-- If more than five @PUT@ actions for a group are currently processing, a
+-- validation exception is thrown.
+--
+-- @PutPrincipalMapping@ is currently not supported in the Amazon Web
+-- Services GovCloud (US-West) region.
+module Amazonka.Kendra.PutPrincipalMapping
+  ( -- * Creating a Request
+    PutPrincipalMapping (..),
+    newPutPrincipalMapping,
+
+    -- * Request Lenses
+    putPrincipalMapping_dataSourceId,
+    putPrincipalMapping_orderingId,
+    putPrincipalMapping_roleArn,
+    putPrincipalMapping_indexId,
+    putPrincipalMapping_groupId,
+    putPrincipalMapping_groupMembers,
+
+    -- * Destructuring the Response
+    PutPrincipalMappingResponse (..),
+    newPutPrincipalMappingResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutPrincipalMapping' smart constructor.
+data PutPrincipalMapping = PutPrincipalMapping'
+  { -- | The identifier of the data source you want to map users to their groups.
+    --
+    -- This is useful if a group is tied to multiple data sources, but you only
+    -- want the group to access documents of a certain data source. For
+    -- example, the groups \"Research\", \"Engineering\", and \"Sales and
+    -- Marketing\" are all tied to the company\'s documents stored in the data
+    -- sources Confluence and Salesforce. However, \"Sales and Marketing\" team
+    -- only needs access to customer-related documents stored in Salesforce.
+    dataSourceId :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp identifier you specify to ensure Amazon Kendra does not
+    -- override the latest @PUT@ action with previous actions. The highest
+    -- number ID, which is the ordering ID, is the latest action you want to
+    -- process and apply on top of other actions with lower number IDs. This
+    -- prevents previous actions with lower number IDs from possibly overriding
+    -- the latest action.
+    --
+    -- The ordering ID can be the UNIX time of the last update you made to a
+    -- group members list. You would then provide this list when calling
+    -- @PutPrincipalMapping@. This ensures your @PUT@ action for that updated
+    -- group with the latest members list doesn\'t get overwritten by earlier
+    -- @PUT@ actions for the same group which are yet to be processed.
+    --
+    -- The default ordering ID is the current UNIX time in milliseconds that
+    -- the action was received by Amazon Kendra.
+    orderingId :: Prelude.Maybe Prelude.Natural,
+    -- | The Amazon Resource Name (ARN) of a role that has access to the S3 file
+    -- that contains your list of users or sub groups that belong to a group.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html#iam-roles-ds IAM roles for Amazon Kendra>.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the index you want to map users to their groups.
+    indexId :: Prelude.Text,
+    -- | The identifier of the group you want to map its users to.
+    groupId :: Prelude.Text,
+    -- | The list that contains your users or sub groups that belong the same
+    -- group.
+    --
+    -- For example, the group \"Company\" includes the user \"CEO\" and the sub
+    -- groups \"Research\", \"Engineering\", and \"Sales and Marketing\".
+    --
+    -- If you have more than 1000 users and\/or sub groups for a single group,
+    -- you need to provide the path to the S3 file that lists your users and
+    -- sub groups for a group. Your sub groups can contain more than 1000
+    -- users, but the list of sub groups that belong to a group (and\/or users)
+    -- must be no more than 1000.
+    groupMembers :: GroupMembers
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutPrincipalMapping' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSourceId', 'putPrincipalMapping_dataSourceId' - The identifier of the data source you want to map users to their groups.
+--
+-- This is useful if a group is tied to multiple data sources, but you only
+-- want the group to access documents of a certain data source. For
+-- example, the groups \"Research\", \"Engineering\", and \"Sales and
+-- Marketing\" are all tied to the company\'s documents stored in the data
+-- sources Confluence and Salesforce. However, \"Sales and Marketing\" team
+-- only needs access to customer-related documents stored in Salesforce.
+--
+-- 'orderingId', 'putPrincipalMapping_orderingId' - The timestamp identifier you specify to ensure Amazon Kendra does not
+-- override the latest @PUT@ action with previous actions. The highest
+-- number ID, which is the ordering ID, is the latest action you want to
+-- process and apply on top of other actions with lower number IDs. This
+-- prevents previous actions with lower number IDs from possibly overriding
+-- the latest action.
+--
+-- The ordering ID can be the UNIX time of the last update you made to a
+-- group members list. You would then provide this list when calling
+-- @PutPrincipalMapping@. This ensures your @PUT@ action for that updated
+-- group with the latest members list doesn\'t get overwritten by earlier
+-- @PUT@ actions for the same group which are yet to be processed.
+--
+-- The default ordering ID is the current UNIX time in milliseconds that
+-- the action was received by Amazon Kendra.
+--
+-- 'roleArn', 'putPrincipalMapping_roleArn' - The Amazon Resource Name (ARN) of a role that has access to the S3 file
+-- that contains your list of users or sub groups that belong to a group.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html#iam-roles-ds IAM roles for Amazon Kendra>.
+--
+-- 'indexId', 'putPrincipalMapping_indexId' - The identifier of the index you want to map users to their groups.
+--
+-- 'groupId', 'putPrincipalMapping_groupId' - The identifier of the group you want to map its users to.
+--
+-- 'groupMembers', 'putPrincipalMapping_groupMembers' - The list that contains your users or sub groups that belong the same
+-- group.
+--
+-- For example, the group \"Company\" includes the user \"CEO\" and the sub
+-- groups \"Research\", \"Engineering\", and \"Sales and Marketing\".
+--
+-- If you have more than 1000 users and\/or sub groups for a single group,
+-- you need to provide the path to the S3 file that lists your users and
+-- sub groups for a group. Your sub groups can contain more than 1000
+-- users, but the list of sub groups that belong to a group (and\/or users)
+-- must be no more than 1000.
+newPutPrincipalMapping ::
+  -- | 'indexId'
+  Prelude.Text ->
+  -- | 'groupId'
+  Prelude.Text ->
+  -- | 'groupMembers'
+  GroupMembers ->
+  PutPrincipalMapping
+newPutPrincipalMapping
+  pIndexId_
+  pGroupId_
+  pGroupMembers_ =
+    PutPrincipalMapping'
+      { dataSourceId =
+          Prelude.Nothing,
+        orderingId = Prelude.Nothing,
+        roleArn = Prelude.Nothing,
+        indexId = pIndexId_,
+        groupId = pGroupId_,
+        groupMembers = pGroupMembers_
+      }
+
+-- | The identifier of the data source you want to map users to their groups.
+--
+-- This is useful if a group is tied to multiple data sources, but you only
+-- want the group to access documents of a certain data source. For
+-- example, the groups \"Research\", \"Engineering\", and \"Sales and
+-- Marketing\" are all tied to the company\'s documents stored in the data
+-- sources Confluence and Salesforce. However, \"Sales and Marketing\" team
+-- only needs access to customer-related documents stored in Salesforce.
+putPrincipalMapping_dataSourceId :: Lens.Lens' PutPrincipalMapping (Prelude.Maybe Prelude.Text)
+putPrincipalMapping_dataSourceId = Lens.lens (\PutPrincipalMapping' {dataSourceId} -> dataSourceId) (\s@PutPrincipalMapping' {} a -> s {dataSourceId = a} :: PutPrincipalMapping)
+
+-- | The timestamp identifier you specify to ensure Amazon Kendra does not
+-- override the latest @PUT@ action with previous actions. The highest
+-- number ID, which is the ordering ID, is the latest action you want to
+-- process and apply on top of other actions with lower number IDs. This
+-- prevents previous actions with lower number IDs from possibly overriding
+-- the latest action.
+--
+-- The ordering ID can be the UNIX time of the last update you made to a
+-- group members list. You would then provide this list when calling
+-- @PutPrincipalMapping@. This ensures your @PUT@ action for that updated
+-- group with the latest members list doesn\'t get overwritten by earlier
+-- @PUT@ actions for the same group which are yet to be processed.
+--
+-- The default ordering ID is the current UNIX time in milliseconds that
+-- the action was received by Amazon Kendra.
+putPrincipalMapping_orderingId :: Lens.Lens' PutPrincipalMapping (Prelude.Maybe Prelude.Natural)
+putPrincipalMapping_orderingId = Lens.lens (\PutPrincipalMapping' {orderingId} -> orderingId) (\s@PutPrincipalMapping' {} a -> s {orderingId = a} :: PutPrincipalMapping)
+
+-- | The Amazon Resource Name (ARN) of a role that has access to the S3 file
+-- that contains your list of users or sub groups that belong to a group.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html#iam-roles-ds IAM roles for Amazon Kendra>.
+putPrincipalMapping_roleArn :: Lens.Lens' PutPrincipalMapping (Prelude.Maybe Prelude.Text)
+putPrincipalMapping_roleArn = Lens.lens (\PutPrincipalMapping' {roleArn} -> roleArn) (\s@PutPrincipalMapping' {} a -> s {roleArn = a} :: PutPrincipalMapping)
+
+-- | The identifier of the index you want to map users to their groups.
+putPrincipalMapping_indexId :: Lens.Lens' PutPrincipalMapping Prelude.Text
+putPrincipalMapping_indexId = Lens.lens (\PutPrincipalMapping' {indexId} -> indexId) (\s@PutPrincipalMapping' {} a -> s {indexId = a} :: PutPrincipalMapping)
+
+-- | The identifier of the group you want to map its users to.
+putPrincipalMapping_groupId :: Lens.Lens' PutPrincipalMapping Prelude.Text
+putPrincipalMapping_groupId = Lens.lens (\PutPrincipalMapping' {groupId} -> groupId) (\s@PutPrincipalMapping' {} a -> s {groupId = a} :: PutPrincipalMapping)
+
+-- | The list that contains your users or sub groups that belong the same
+-- group.
+--
+-- For example, the group \"Company\" includes the user \"CEO\" and the sub
+-- groups \"Research\", \"Engineering\", and \"Sales and Marketing\".
+--
+-- If you have more than 1000 users and\/or sub groups for a single group,
+-- you need to provide the path to the S3 file that lists your users and
+-- sub groups for a group. Your sub groups can contain more than 1000
+-- users, but the list of sub groups that belong to a group (and\/or users)
+-- must be no more than 1000.
+putPrincipalMapping_groupMembers :: Lens.Lens' PutPrincipalMapping GroupMembers
+putPrincipalMapping_groupMembers = Lens.lens (\PutPrincipalMapping' {groupMembers} -> groupMembers) (\s@PutPrincipalMapping' {} a -> s {groupMembers = a} :: PutPrincipalMapping)
+
+instance Core.AWSRequest PutPrincipalMapping where
+  type
+    AWSResponse PutPrincipalMapping =
+      PutPrincipalMappingResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull PutPrincipalMappingResponse'
+
+instance Prelude.Hashable PutPrincipalMapping where
+  hashWithSalt _salt PutPrincipalMapping' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataSourceId
+      `Prelude.hashWithSalt` orderingId
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` indexId
+      `Prelude.hashWithSalt` groupId
+      `Prelude.hashWithSalt` groupMembers
+
+instance Prelude.NFData PutPrincipalMapping where
+  rnf PutPrincipalMapping' {..} =
+    Prelude.rnf dataSourceId
+      `Prelude.seq` Prelude.rnf orderingId
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf indexId
+      `Prelude.seq` Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf groupMembers
+
+instance Data.ToHeaders PutPrincipalMapping where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.PutPrincipalMapping" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutPrincipalMapping where
+  toJSON PutPrincipalMapping' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DataSourceId" Data..=) Prelude.<$> dataSourceId,
+            ("OrderingId" Data..=) Prelude.<$> orderingId,
+            ("RoleArn" Data..=) Prelude.<$> roleArn,
+            Prelude.Just ("IndexId" Data..= indexId),
+            Prelude.Just ("GroupId" Data..= groupId),
+            Prelude.Just ("GroupMembers" Data..= groupMembers)
+          ]
+      )
+
+instance Data.ToPath PutPrincipalMapping where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PutPrincipalMapping where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutPrincipalMappingResponse' smart constructor.
+data PutPrincipalMappingResponse = PutPrincipalMappingResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutPrincipalMappingResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newPutPrincipalMappingResponse ::
+  PutPrincipalMappingResponse
+newPutPrincipalMappingResponse =
+  PutPrincipalMappingResponse'
+
+instance Prelude.NFData PutPrincipalMappingResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Kendra/Query.hs b/gen/Amazonka/Kendra/Query.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Query.hs
@@ -0,0 +1,563 @@
+{-# 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.Kendra.Query
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Searches an active index. Use this API to search your documents using
+-- query. The @Query@ API enables to do faceted search and to filter
+-- results based on document attributes.
+--
+-- It also enables you to provide user context that Amazon Kendra uses to
+-- enforce document access control in the search results.
+--
+-- Amazon Kendra searches your index for text content and question and
+-- answer (FAQ) content. By default the response contains three types of
+-- results.
+--
+-- -   Relevant passages
+--
+-- -   Matching FAQs
+--
+-- -   Relevant documents
+--
+-- You can specify that the query return only one type of result using the
+-- @QueryResultTypeConfig@ parameter.
+--
+-- Each query returns the 100 most relevant results.
+module Amazonka.Kendra.Query
+  ( -- * Creating a Request
+    Query (..),
+    newQuery,
+
+    -- * Request Lenses
+    query_attributeFilter,
+    query_documentRelevanceOverrideConfigurations,
+    query_facets,
+    query_pageNumber,
+    query_pageSize,
+    query_queryResultTypeFilter,
+    query_queryText,
+    query_requestedDocumentAttributes,
+    query_sortingConfiguration,
+    query_spellCorrectionConfiguration,
+    query_userContext,
+    query_visitorId,
+    query_indexId,
+
+    -- * Destructuring the Response
+    QueryResponse (..),
+    newQueryResponse,
+
+    -- * Response Lenses
+    queryResponse_facetResults,
+    queryResponse_queryId,
+    queryResponse_resultItems,
+    queryResponse_spellCorrectedQueries,
+    queryResponse_totalNumberOfResults,
+    queryResponse_warnings,
+    queryResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newQuery' smart constructor.
+data Query = Query'
+  { -- | Enables filtered searches based on document attributes. You can only
+    -- provide one attribute filter; however, the @AndAllFilters@, @NotFilter@,
+    -- and @OrAllFilters@ parameters contain a list of other filters.
+    --
+    -- The @AttributeFilter@ parameter enables you to create a set of filtering
+    -- rules that a document must satisfy to be included in the query results.
+    attributeFilter :: Prelude.Maybe AttributeFilter,
+    -- | Overrides relevance tuning configurations of fields or attributes set at
+    -- the index level.
+    --
+    -- If you use this API to override the relevance tuning configured at the
+    -- index level, but there is no relevance tuning configured at the index
+    -- level, then Amazon Kendra does not apply any relevance tuning.
+    --
+    -- If there is relevance tuning configured at the index level, but you do
+    -- not use this API to override any relevance tuning in the index, then
+    -- Amazon Kendra uses the relevance tuning that is configured at the index
+    -- level.
+    --
+    -- If there is relevance tuning configured for fields at the index level,
+    -- but you use this API to override only some of these fields, then for the
+    -- fields you did not override, the importance is set to 1.
+    documentRelevanceOverrideConfigurations :: Prelude.Maybe [DocumentRelevanceConfiguration],
+    -- | An array of documents attributes. Amazon Kendra returns a count for each
+    -- attribute key specified. This helps your users narrow their search.
+    facets :: Prelude.Maybe [Facet],
+    -- | Query results are returned in pages the size of the @PageSize@
+    -- parameter. By default, Amazon Kendra returns the first page of results.
+    -- Use this parameter to get result pages after the first one.
+    pageNumber :: Prelude.Maybe Prelude.Int,
+    -- | Sets the number of results that are returned in each page of results.
+    -- The default page size is 10. The maximum number of results returned is
+    -- 100. If you ask for more than 100 results, only 100 are returned.
+    pageSize :: Prelude.Maybe Prelude.Int,
+    -- | Sets the type of query. Only results for the specified query type are
+    -- returned.
+    queryResultTypeFilter :: Prelude.Maybe QueryResultType,
+    -- | The input query text for the search. Amazon Kendra truncates queries at
+    -- 30 token words, which excludes punctuation and stop words. Truncation
+    -- still applies if you use Boolean or more advanced, complex queries.
+    queryText :: Prelude.Maybe Prelude.Text,
+    -- | An array of document attributes to include in the response. You can
+    -- limit the response to include certain document attributes. By default
+    -- all document attributes are included in the response.
+    requestedDocumentAttributes :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | Provides information that determines how the results of the query are
+    -- sorted. You can set the field that Amazon Kendra should sort the results
+    -- on, and specify whether the results should be sorted in ascending or
+    -- descending order. In the case of ties in sorting the results, the
+    -- results are sorted by relevance.
+    --
+    -- If you don\'t provide sorting configuration, the results are sorted by
+    -- the relevance that Amazon Kendra determines for the result.
+    sortingConfiguration :: Prelude.Maybe SortingConfiguration,
+    -- | Enables suggested spell corrections for queries.
+    spellCorrectionConfiguration :: Prelude.Maybe SpellCorrectionConfiguration,
+    -- | The user context token or user and group information.
+    userContext :: Prelude.Maybe UserContext,
+    -- | Provides an identifier for a specific user. The @VisitorId@ should be a
+    -- unique identifier, such as a GUID. Don\'t use personally identifiable
+    -- information, such as the user\'s email address, as the @VisitorId@.
+    visitorId :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the index to search. The identifier is returned in the
+    -- response from the @CreateIndex@ API.
+    indexId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Query' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributeFilter', 'query_attributeFilter' - Enables filtered searches based on document attributes. You can only
+-- provide one attribute filter; however, the @AndAllFilters@, @NotFilter@,
+-- and @OrAllFilters@ parameters contain a list of other filters.
+--
+-- The @AttributeFilter@ parameter enables you to create a set of filtering
+-- rules that a document must satisfy to be included in the query results.
+--
+-- 'documentRelevanceOverrideConfigurations', 'query_documentRelevanceOverrideConfigurations' - Overrides relevance tuning configurations of fields or attributes set at
+-- the index level.
+--
+-- If you use this API to override the relevance tuning configured at the
+-- index level, but there is no relevance tuning configured at the index
+-- level, then Amazon Kendra does not apply any relevance tuning.
+--
+-- If there is relevance tuning configured at the index level, but you do
+-- not use this API to override any relevance tuning in the index, then
+-- Amazon Kendra uses the relevance tuning that is configured at the index
+-- level.
+--
+-- If there is relevance tuning configured for fields at the index level,
+-- but you use this API to override only some of these fields, then for the
+-- fields you did not override, the importance is set to 1.
+--
+-- 'facets', 'query_facets' - An array of documents attributes. Amazon Kendra returns a count for each
+-- attribute key specified. This helps your users narrow their search.
+--
+-- 'pageNumber', 'query_pageNumber' - Query results are returned in pages the size of the @PageSize@
+-- parameter. By default, Amazon Kendra returns the first page of results.
+-- Use this parameter to get result pages after the first one.
+--
+-- 'pageSize', 'query_pageSize' - Sets the number of results that are returned in each page of results.
+-- The default page size is 10. The maximum number of results returned is
+-- 100. If you ask for more than 100 results, only 100 are returned.
+--
+-- 'queryResultTypeFilter', 'query_queryResultTypeFilter' - Sets the type of query. Only results for the specified query type are
+-- returned.
+--
+-- 'queryText', 'query_queryText' - The input query text for the search. Amazon Kendra truncates queries at
+-- 30 token words, which excludes punctuation and stop words. Truncation
+-- still applies if you use Boolean or more advanced, complex queries.
+--
+-- 'requestedDocumentAttributes', 'query_requestedDocumentAttributes' - An array of document attributes to include in the response. You can
+-- limit the response to include certain document attributes. By default
+-- all document attributes are included in the response.
+--
+-- 'sortingConfiguration', 'query_sortingConfiguration' - Provides information that determines how the results of the query are
+-- sorted. You can set the field that Amazon Kendra should sort the results
+-- on, and specify whether the results should be sorted in ascending or
+-- descending order. In the case of ties in sorting the results, the
+-- results are sorted by relevance.
+--
+-- If you don\'t provide sorting configuration, the results are sorted by
+-- the relevance that Amazon Kendra determines for the result.
+--
+-- 'spellCorrectionConfiguration', 'query_spellCorrectionConfiguration' - Enables suggested spell corrections for queries.
+--
+-- 'userContext', 'query_userContext' - The user context token or user and group information.
+--
+-- 'visitorId', 'query_visitorId' - Provides an identifier for a specific user. The @VisitorId@ should be a
+-- unique identifier, such as a GUID. Don\'t use personally identifiable
+-- information, such as the user\'s email address, as the @VisitorId@.
+--
+-- 'indexId', 'query_indexId' - The identifier of the index to search. The identifier is returned in the
+-- response from the @CreateIndex@ API.
+newQuery ::
+  -- | 'indexId'
+  Prelude.Text ->
+  Query
+newQuery pIndexId_ =
+  Query'
+    { attributeFilter = Prelude.Nothing,
+      documentRelevanceOverrideConfigurations =
+        Prelude.Nothing,
+      facets = Prelude.Nothing,
+      pageNumber = Prelude.Nothing,
+      pageSize = Prelude.Nothing,
+      queryResultTypeFilter = Prelude.Nothing,
+      queryText = Prelude.Nothing,
+      requestedDocumentAttributes = Prelude.Nothing,
+      sortingConfiguration = Prelude.Nothing,
+      spellCorrectionConfiguration = Prelude.Nothing,
+      userContext = Prelude.Nothing,
+      visitorId = Prelude.Nothing,
+      indexId = pIndexId_
+    }
+
+-- | Enables filtered searches based on document attributes. You can only
+-- provide one attribute filter; however, the @AndAllFilters@, @NotFilter@,
+-- and @OrAllFilters@ parameters contain a list of other filters.
+--
+-- The @AttributeFilter@ parameter enables you to create a set of filtering
+-- rules that a document must satisfy to be included in the query results.
+query_attributeFilter :: Lens.Lens' Query (Prelude.Maybe AttributeFilter)
+query_attributeFilter = Lens.lens (\Query' {attributeFilter} -> attributeFilter) (\s@Query' {} a -> s {attributeFilter = a} :: Query)
+
+-- | Overrides relevance tuning configurations of fields or attributes set at
+-- the index level.
+--
+-- If you use this API to override the relevance tuning configured at the
+-- index level, but there is no relevance tuning configured at the index
+-- level, then Amazon Kendra does not apply any relevance tuning.
+--
+-- If there is relevance tuning configured at the index level, but you do
+-- not use this API to override any relevance tuning in the index, then
+-- Amazon Kendra uses the relevance tuning that is configured at the index
+-- level.
+--
+-- If there is relevance tuning configured for fields at the index level,
+-- but you use this API to override only some of these fields, then for the
+-- fields you did not override, the importance is set to 1.
+query_documentRelevanceOverrideConfigurations :: Lens.Lens' Query (Prelude.Maybe [DocumentRelevanceConfiguration])
+query_documentRelevanceOverrideConfigurations = Lens.lens (\Query' {documentRelevanceOverrideConfigurations} -> documentRelevanceOverrideConfigurations) (\s@Query' {} a -> s {documentRelevanceOverrideConfigurations = a} :: Query) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array of documents attributes. Amazon Kendra returns a count for each
+-- attribute key specified. This helps your users narrow their search.
+query_facets :: Lens.Lens' Query (Prelude.Maybe [Facet])
+query_facets = Lens.lens (\Query' {facets} -> facets) (\s@Query' {} a -> s {facets = a} :: Query) Prelude.. Lens.mapping Lens.coerced
+
+-- | Query results are returned in pages the size of the @PageSize@
+-- parameter. By default, Amazon Kendra returns the first page of results.
+-- Use this parameter to get result pages after the first one.
+query_pageNumber :: Lens.Lens' Query (Prelude.Maybe Prelude.Int)
+query_pageNumber = Lens.lens (\Query' {pageNumber} -> pageNumber) (\s@Query' {} a -> s {pageNumber = a} :: Query)
+
+-- | Sets the number of results that are returned in each page of results.
+-- The default page size is 10. The maximum number of results returned is
+-- 100. If you ask for more than 100 results, only 100 are returned.
+query_pageSize :: Lens.Lens' Query (Prelude.Maybe Prelude.Int)
+query_pageSize = Lens.lens (\Query' {pageSize} -> pageSize) (\s@Query' {} a -> s {pageSize = a} :: Query)
+
+-- | Sets the type of query. Only results for the specified query type are
+-- returned.
+query_queryResultTypeFilter :: Lens.Lens' Query (Prelude.Maybe QueryResultType)
+query_queryResultTypeFilter = Lens.lens (\Query' {queryResultTypeFilter} -> queryResultTypeFilter) (\s@Query' {} a -> s {queryResultTypeFilter = a} :: Query)
+
+-- | The input query text for the search. Amazon Kendra truncates queries at
+-- 30 token words, which excludes punctuation and stop words. Truncation
+-- still applies if you use Boolean or more advanced, complex queries.
+query_queryText :: Lens.Lens' Query (Prelude.Maybe Prelude.Text)
+query_queryText = Lens.lens (\Query' {queryText} -> queryText) (\s@Query' {} a -> s {queryText = a} :: Query)
+
+-- | An array of document attributes to include in the response. You can
+-- limit the response to include certain document attributes. By default
+-- all document attributes are included in the response.
+query_requestedDocumentAttributes :: Lens.Lens' Query (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+query_requestedDocumentAttributes = Lens.lens (\Query' {requestedDocumentAttributes} -> requestedDocumentAttributes) (\s@Query' {} a -> s {requestedDocumentAttributes = a} :: Query) Prelude.. Lens.mapping Lens.coerced
+
+-- | Provides information that determines how the results of the query are
+-- sorted. You can set the field that Amazon Kendra should sort the results
+-- on, and specify whether the results should be sorted in ascending or
+-- descending order. In the case of ties in sorting the results, the
+-- results are sorted by relevance.
+--
+-- If you don\'t provide sorting configuration, the results are sorted by
+-- the relevance that Amazon Kendra determines for the result.
+query_sortingConfiguration :: Lens.Lens' Query (Prelude.Maybe SortingConfiguration)
+query_sortingConfiguration = Lens.lens (\Query' {sortingConfiguration} -> sortingConfiguration) (\s@Query' {} a -> s {sortingConfiguration = a} :: Query)
+
+-- | Enables suggested spell corrections for queries.
+query_spellCorrectionConfiguration :: Lens.Lens' Query (Prelude.Maybe SpellCorrectionConfiguration)
+query_spellCorrectionConfiguration = Lens.lens (\Query' {spellCorrectionConfiguration} -> spellCorrectionConfiguration) (\s@Query' {} a -> s {spellCorrectionConfiguration = a} :: Query)
+
+-- | The user context token or user and group information.
+query_userContext :: Lens.Lens' Query (Prelude.Maybe UserContext)
+query_userContext = Lens.lens (\Query' {userContext} -> userContext) (\s@Query' {} a -> s {userContext = a} :: Query)
+
+-- | Provides an identifier for a specific user. The @VisitorId@ should be a
+-- unique identifier, such as a GUID. Don\'t use personally identifiable
+-- information, such as the user\'s email address, as the @VisitorId@.
+query_visitorId :: Lens.Lens' Query (Prelude.Maybe Prelude.Text)
+query_visitorId = Lens.lens (\Query' {visitorId} -> visitorId) (\s@Query' {} a -> s {visitorId = a} :: Query)
+
+-- | The identifier of the index to search. The identifier is returned in the
+-- response from the @CreateIndex@ API.
+query_indexId :: Lens.Lens' Query Prelude.Text
+query_indexId = Lens.lens (\Query' {indexId} -> indexId) (\s@Query' {} a -> s {indexId = a} :: Query)
+
+instance Core.AWSRequest Query where
+  type AWSResponse Query = QueryResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          QueryResponse'
+            Prelude.<$> (x Data..?> "FacetResults" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "QueryId")
+            Prelude.<*> (x Data..?> "ResultItems" Core..!@ Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..?> "SpellCorrectedQueries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "TotalNumberOfResults")
+            Prelude.<*> (x Data..?> "Warnings")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable Query where
+  hashWithSalt _salt Query' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributeFilter
+      `Prelude.hashWithSalt` documentRelevanceOverrideConfigurations
+      `Prelude.hashWithSalt` facets
+      `Prelude.hashWithSalt` pageNumber
+      `Prelude.hashWithSalt` pageSize
+      `Prelude.hashWithSalt` queryResultTypeFilter
+      `Prelude.hashWithSalt` queryText
+      `Prelude.hashWithSalt` requestedDocumentAttributes
+      `Prelude.hashWithSalt` sortingConfiguration
+      `Prelude.hashWithSalt` spellCorrectionConfiguration
+      `Prelude.hashWithSalt` userContext
+      `Prelude.hashWithSalt` visitorId
+      `Prelude.hashWithSalt` indexId
+
+instance Prelude.NFData Query where
+  rnf Query' {..} =
+    Prelude.rnf attributeFilter
+      `Prelude.seq` Prelude.rnf documentRelevanceOverrideConfigurations
+      `Prelude.seq` Prelude.rnf facets
+      `Prelude.seq` Prelude.rnf pageNumber
+      `Prelude.seq` Prelude.rnf pageSize
+      `Prelude.seq` Prelude.rnf queryResultTypeFilter
+      `Prelude.seq` Prelude.rnf queryText
+      `Prelude.seq` Prelude.rnf requestedDocumentAttributes
+      `Prelude.seq` Prelude.rnf sortingConfiguration
+      `Prelude.seq` Prelude.rnf spellCorrectionConfiguration
+      `Prelude.seq` Prelude.rnf userContext
+      `Prelude.seq` Prelude.rnf visitorId
+      `Prelude.seq` Prelude.rnf indexId
+
+instance Data.ToHeaders Query where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.Query" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON Query where
+  toJSON Query' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AttributeFilter" Data..=)
+              Prelude.<$> attributeFilter,
+            ("DocumentRelevanceOverrideConfigurations" Data..=)
+              Prelude.<$> documentRelevanceOverrideConfigurations,
+            ("Facets" Data..=) Prelude.<$> facets,
+            ("PageNumber" Data..=) Prelude.<$> pageNumber,
+            ("PageSize" Data..=) Prelude.<$> pageSize,
+            ("QueryResultTypeFilter" Data..=)
+              Prelude.<$> queryResultTypeFilter,
+            ("QueryText" Data..=) Prelude.<$> queryText,
+            ("RequestedDocumentAttributes" Data..=)
+              Prelude.<$> requestedDocumentAttributes,
+            ("SortingConfiguration" Data..=)
+              Prelude.<$> sortingConfiguration,
+            ("SpellCorrectionConfiguration" Data..=)
+              Prelude.<$> spellCorrectionConfiguration,
+            ("UserContext" Data..=) Prelude.<$> userContext,
+            ("VisitorId" Data..=) Prelude.<$> visitorId,
+            Prelude.Just ("IndexId" Data..= indexId)
+          ]
+      )
+
+instance Data.ToPath Query where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery Query where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newQueryResponse' smart constructor.
+data QueryResponse = QueryResponse'
+  { -- | Contains the facet results. A @FacetResult@ contains the counts for each
+    -- attribute key that was specified in the @Facets@ input parameter.
+    facetResults :: Prelude.Maybe [FacetResult],
+    -- | The identifier for the search. You use @QueryId@ to identify the search
+    -- when using the feedback API.
+    queryId :: Prelude.Maybe Prelude.Text,
+    -- | The results of the search.
+    resultItems :: Prelude.Maybe [QueryResultItem],
+    -- | A list of information related to suggested spell corrections for a
+    -- query.
+    spellCorrectedQueries :: Prelude.Maybe [SpellCorrectedQuery],
+    -- | The total number of items found by the search; however, you can only
+    -- retrieve up to 100 items. For example, if the search found 192 items,
+    -- you can only retrieve the first 100 of the items.
+    totalNumberOfResults :: Prelude.Maybe Prelude.Int,
+    -- | A list of warning codes and their messages on problems with your query.
+    --
+    -- Amazon Kendra currently only supports one type of warning, which is a
+    -- warning on invalid syntax used in the query. For examples of invalid
+    -- query syntax, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/searching-example.html#searching-index-query-syntax Searching with advanced query syntax>.
+    warnings :: Prelude.Maybe (Prelude.NonEmpty Warning),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'QueryResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'facetResults', 'queryResponse_facetResults' - Contains the facet results. A @FacetResult@ contains the counts for each
+-- attribute key that was specified in the @Facets@ input parameter.
+--
+-- 'queryId', 'queryResponse_queryId' - The identifier for the search. You use @QueryId@ to identify the search
+-- when using the feedback API.
+--
+-- 'resultItems', 'queryResponse_resultItems' - The results of the search.
+--
+-- 'spellCorrectedQueries', 'queryResponse_spellCorrectedQueries' - A list of information related to suggested spell corrections for a
+-- query.
+--
+-- 'totalNumberOfResults', 'queryResponse_totalNumberOfResults' - The total number of items found by the search; however, you can only
+-- retrieve up to 100 items. For example, if the search found 192 items,
+-- you can only retrieve the first 100 of the items.
+--
+-- 'warnings', 'queryResponse_warnings' - A list of warning codes and their messages on problems with your query.
+--
+-- Amazon Kendra currently only supports one type of warning, which is a
+-- warning on invalid syntax used in the query. For examples of invalid
+-- query syntax, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/searching-example.html#searching-index-query-syntax Searching with advanced query syntax>.
+--
+-- 'httpStatus', 'queryResponse_httpStatus' - The response's http status code.
+newQueryResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  QueryResponse
+newQueryResponse pHttpStatus_ =
+  QueryResponse'
+    { facetResults = Prelude.Nothing,
+      queryId = Prelude.Nothing,
+      resultItems = Prelude.Nothing,
+      spellCorrectedQueries = Prelude.Nothing,
+      totalNumberOfResults = Prelude.Nothing,
+      warnings = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Contains the facet results. A @FacetResult@ contains the counts for each
+-- attribute key that was specified in the @Facets@ input parameter.
+queryResponse_facetResults :: Lens.Lens' QueryResponse (Prelude.Maybe [FacetResult])
+queryResponse_facetResults = Lens.lens (\QueryResponse' {facetResults} -> facetResults) (\s@QueryResponse' {} a -> s {facetResults = a} :: QueryResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The identifier for the search. You use @QueryId@ to identify the search
+-- when using the feedback API.
+queryResponse_queryId :: Lens.Lens' QueryResponse (Prelude.Maybe Prelude.Text)
+queryResponse_queryId = Lens.lens (\QueryResponse' {queryId} -> queryId) (\s@QueryResponse' {} a -> s {queryId = a} :: QueryResponse)
+
+-- | The results of the search.
+queryResponse_resultItems :: Lens.Lens' QueryResponse (Prelude.Maybe [QueryResultItem])
+queryResponse_resultItems = Lens.lens (\QueryResponse' {resultItems} -> resultItems) (\s@QueryResponse' {} a -> s {resultItems = a} :: QueryResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of information related to suggested spell corrections for a
+-- query.
+queryResponse_spellCorrectedQueries :: Lens.Lens' QueryResponse (Prelude.Maybe [SpellCorrectedQuery])
+queryResponse_spellCorrectedQueries = Lens.lens (\QueryResponse' {spellCorrectedQueries} -> spellCorrectedQueries) (\s@QueryResponse' {} a -> s {spellCorrectedQueries = a} :: QueryResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The total number of items found by the search; however, you can only
+-- retrieve up to 100 items. For example, if the search found 192 items,
+-- you can only retrieve the first 100 of the items.
+queryResponse_totalNumberOfResults :: Lens.Lens' QueryResponse (Prelude.Maybe Prelude.Int)
+queryResponse_totalNumberOfResults = Lens.lens (\QueryResponse' {totalNumberOfResults} -> totalNumberOfResults) (\s@QueryResponse' {} a -> s {totalNumberOfResults = a} :: QueryResponse)
+
+-- | A list of warning codes and their messages on problems with your query.
+--
+-- Amazon Kendra currently only supports one type of warning, which is a
+-- warning on invalid syntax used in the query. For examples of invalid
+-- query syntax, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/searching-example.html#searching-index-query-syntax Searching with advanced query syntax>.
+queryResponse_warnings :: Lens.Lens' QueryResponse (Prelude.Maybe (Prelude.NonEmpty Warning))
+queryResponse_warnings = Lens.lens (\QueryResponse' {warnings} -> warnings) (\s@QueryResponse' {} a -> s {warnings = a} :: QueryResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+queryResponse_httpStatus :: Lens.Lens' QueryResponse Prelude.Int
+queryResponse_httpStatus = Lens.lens (\QueryResponse' {httpStatus} -> httpStatus) (\s@QueryResponse' {} a -> s {httpStatus = a} :: QueryResponse)
+
+instance Prelude.NFData QueryResponse where
+  rnf QueryResponse' {..} =
+    Prelude.rnf facetResults
+      `Prelude.seq` Prelude.rnf queryId
+      `Prelude.seq` Prelude.rnf resultItems
+      `Prelude.seq` Prelude.rnf spellCorrectedQueries
+      `Prelude.seq` Prelude.rnf totalNumberOfResults
+      `Prelude.seq` Prelude.rnf warnings
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/StartDataSourceSyncJob.hs b/gen/Amazonka/Kendra/StartDataSourceSyncJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/StartDataSourceSyncJob.hs
@@ -0,0 +1,192 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.StartDataSourceSyncJob
+-- 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 a synchronization job for a data source connector. If a
+-- synchronization job is already in progress, Amazon Kendra returns a
+-- @ResourceInUseException@ exception.
+module Amazonka.Kendra.StartDataSourceSyncJob
+  ( -- * Creating a Request
+    StartDataSourceSyncJob (..),
+    newStartDataSourceSyncJob,
+
+    -- * Request Lenses
+    startDataSourceSyncJob_id,
+    startDataSourceSyncJob_indexId,
+
+    -- * Destructuring the Response
+    StartDataSourceSyncJobResponse (..),
+    newStartDataSourceSyncJobResponse,
+
+    -- * Response Lenses
+    startDataSourceSyncJobResponse_executionId,
+    startDataSourceSyncJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartDataSourceSyncJob' smart constructor.
+data StartDataSourceSyncJob = StartDataSourceSyncJob'
+  { -- | The identifier of the data source connector to synchronize.
+    id :: Prelude.Text,
+    -- | The identifier of the index used with the data source connector.
+    indexId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartDataSourceSyncJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'startDataSourceSyncJob_id' - The identifier of the data source connector to synchronize.
+--
+-- 'indexId', 'startDataSourceSyncJob_indexId' - The identifier of the index used with the data source connector.
+newStartDataSourceSyncJob ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'indexId'
+  Prelude.Text ->
+  StartDataSourceSyncJob
+newStartDataSourceSyncJob pId_ pIndexId_ =
+  StartDataSourceSyncJob'
+    { id = pId_,
+      indexId = pIndexId_
+    }
+
+-- | The identifier of the data source connector to synchronize.
+startDataSourceSyncJob_id :: Lens.Lens' StartDataSourceSyncJob Prelude.Text
+startDataSourceSyncJob_id = Lens.lens (\StartDataSourceSyncJob' {id} -> id) (\s@StartDataSourceSyncJob' {} a -> s {id = a} :: StartDataSourceSyncJob)
+
+-- | The identifier of the index used with the data source connector.
+startDataSourceSyncJob_indexId :: Lens.Lens' StartDataSourceSyncJob Prelude.Text
+startDataSourceSyncJob_indexId = Lens.lens (\StartDataSourceSyncJob' {indexId} -> indexId) (\s@StartDataSourceSyncJob' {} a -> s {indexId = a} :: StartDataSourceSyncJob)
+
+instance Core.AWSRequest StartDataSourceSyncJob where
+  type
+    AWSResponse StartDataSourceSyncJob =
+      StartDataSourceSyncJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartDataSourceSyncJobResponse'
+            Prelude.<$> (x Data..?> "ExecutionId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartDataSourceSyncJob where
+  hashWithSalt _salt StartDataSourceSyncJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` indexId
+
+instance Prelude.NFData StartDataSourceSyncJob where
+  rnf StartDataSourceSyncJob' {..} =
+    Prelude.rnf id `Prelude.seq` Prelude.rnf indexId
+
+instance Data.ToHeaders StartDataSourceSyncJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.StartDataSourceSyncJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartDataSourceSyncJob where
+  toJSON StartDataSourceSyncJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Id" Data..= id),
+            Prelude.Just ("IndexId" Data..= indexId)
+          ]
+      )
+
+instance Data.ToPath StartDataSourceSyncJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StartDataSourceSyncJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartDataSourceSyncJobResponse' smart constructor.
+data StartDataSourceSyncJobResponse = StartDataSourceSyncJobResponse'
+  { -- | Identifies a particular synchronization job.
+    executionId :: 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 'StartDataSourceSyncJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'executionId', 'startDataSourceSyncJobResponse_executionId' - Identifies a particular synchronization job.
+--
+-- 'httpStatus', 'startDataSourceSyncJobResponse_httpStatus' - The response's http status code.
+newStartDataSourceSyncJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartDataSourceSyncJobResponse
+newStartDataSourceSyncJobResponse pHttpStatus_ =
+  StartDataSourceSyncJobResponse'
+    { executionId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Identifies a particular synchronization job.
+startDataSourceSyncJobResponse_executionId :: Lens.Lens' StartDataSourceSyncJobResponse (Prelude.Maybe Prelude.Text)
+startDataSourceSyncJobResponse_executionId = Lens.lens (\StartDataSourceSyncJobResponse' {executionId} -> executionId) (\s@StartDataSourceSyncJobResponse' {} a -> s {executionId = a} :: StartDataSourceSyncJobResponse)
+
+-- | The response's http status code.
+startDataSourceSyncJobResponse_httpStatus :: Lens.Lens' StartDataSourceSyncJobResponse Prelude.Int
+startDataSourceSyncJobResponse_httpStatus = Lens.lens (\StartDataSourceSyncJobResponse' {httpStatus} -> httpStatus) (\s@StartDataSourceSyncJobResponse' {} a -> s {httpStatus = a} :: StartDataSourceSyncJobResponse)
+
+instance
+  Prelude.NFData
+    StartDataSourceSyncJobResponse
+  where
+  rnf StartDataSourceSyncJobResponse' {..} =
+    Prelude.rnf executionId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/StopDataSourceSyncJob.hs b/gen/Amazonka/Kendra/StopDataSourceSyncJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/StopDataSourceSyncJob.hs
@@ -0,0 +1,156 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.StopDataSourceSyncJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops a synchronization job that is currently running. You can\'t stop a
+-- scheduled synchronization job.
+module Amazonka.Kendra.StopDataSourceSyncJob
+  ( -- * Creating a Request
+    StopDataSourceSyncJob (..),
+    newStopDataSourceSyncJob,
+
+    -- * Request Lenses
+    stopDataSourceSyncJob_id,
+    stopDataSourceSyncJob_indexId,
+
+    -- * Destructuring the Response
+    StopDataSourceSyncJobResponse (..),
+    newStopDataSourceSyncJobResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStopDataSourceSyncJob' smart constructor.
+data StopDataSourceSyncJob = StopDataSourceSyncJob'
+  { -- | The identifier of the data source connector for which to stop the
+    -- synchronization jobs.
+    id :: Prelude.Text,
+    -- | The identifier of the index used with the data source connector.
+    indexId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopDataSourceSyncJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'stopDataSourceSyncJob_id' - The identifier of the data source connector for which to stop the
+-- synchronization jobs.
+--
+-- 'indexId', 'stopDataSourceSyncJob_indexId' - The identifier of the index used with the data source connector.
+newStopDataSourceSyncJob ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'indexId'
+  Prelude.Text ->
+  StopDataSourceSyncJob
+newStopDataSourceSyncJob pId_ pIndexId_ =
+  StopDataSourceSyncJob'
+    { id = pId_,
+      indexId = pIndexId_
+    }
+
+-- | The identifier of the data source connector for which to stop the
+-- synchronization jobs.
+stopDataSourceSyncJob_id :: Lens.Lens' StopDataSourceSyncJob Prelude.Text
+stopDataSourceSyncJob_id = Lens.lens (\StopDataSourceSyncJob' {id} -> id) (\s@StopDataSourceSyncJob' {} a -> s {id = a} :: StopDataSourceSyncJob)
+
+-- | The identifier of the index used with the data source connector.
+stopDataSourceSyncJob_indexId :: Lens.Lens' StopDataSourceSyncJob Prelude.Text
+stopDataSourceSyncJob_indexId = Lens.lens (\StopDataSourceSyncJob' {indexId} -> indexId) (\s@StopDataSourceSyncJob' {} a -> s {indexId = a} :: StopDataSourceSyncJob)
+
+instance Core.AWSRequest StopDataSourceSyncJob where
+  type
+    AWSResponse StopDataSourceSyncJob =
+      StopDataSourceSyncJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull StopDataSourceSyncJobResponse'
+
+instance Prelude.Hashable StopDataSourceSyncJob where
+  hashWithSalt _salt StopDataSourceSyncJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` indexId
+
+instance Prelude.NFData StopDataSourceSyncJob where
+  rnf StopDataSourceSyncJob' {..} =
+    Prelude.rnf id `Prelude.seq` Prelude.rnf indexId
+
+instance Data.ToHeaders StopDataSourceSyncJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.StopDataSourceSyncJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StopDataSourceSyncJob where
+  toJSON StopDataSourceSyncJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Id" Data..= id),
+            Prelude.Just ("IndexId" Data..= indexId)
+          ]
+      )
+
+instance Data.ToPath StopDataSourceSyncJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StopDataSourceSyncJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStopDataSourceSyncJobResponse' smart constructor.
+data StopDataSourceSyncJobResponse = StopDataSourceSyncJobResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopDataSourceSyncJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newStopDataSourceSyncJobResponse ::
+  StopDataSourceSyncJobResponse
+newStopDataSourceSyncJobResponse =
+  StopDataSourceSyncJobResponse'
+
+instance Prelude.NFData StopDataSourceSyncJobResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Kendra/SubmitFeedback.hs b/gen/Amazonka/Kendra/SubmitFeedback.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/SubmitFeedback.hs
@@ -0,0 +1,194 @@
+{-# 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.Kendra.SubmitFeedback
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Enables you to provide feedback to Amazon Kendra to improve the
+-- performance of your index.
+--
+-- @SubmitFeedback@ is currently not supported in the Amazon Web Services
+-- GovCloud (US-West) region.
+module Amazonka.Kendra.SubmitFeedback
+  ( -- * Creating a Request
+    SubmitFeedback (..),
+    newSubmitFeedback,
+
+    -- * Request Lenses
+    submitFeedback_clickFeedbackItems,
+    submitFeedback_relevanceFeedbackItems,
+    submitFeedback_indexId,
+    submitFeedback_queryId,
+
+    -- * Destructuring the Response
+    SubmitFeedbackResponse (..),
+    newSubmitFeedbackResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSubmitFeedback' smart constructor.
+data SubmitFeedback = SubmitFeedback'
+  { -- | Tells Amazon Kendra that a particular search result link was chosen by
+    -- the user.
+    clickFeedbackItems :: Prelude.Maybe [ClickFeedback],
+    -- | Provides Amazon Kendra with relevant or not relevant feedback for
+    -- whether a particular item was relevant to the search.
+    relevanceFeedbackItems :: Prelude.Maybe [RelevanceFeedback],
+    -- | The identifier of the index that was queried.
+    indexId :: Prelude.Text,
+    -- | The identifier of the specific query for which you are submitting
+    -- feedback. The query ID is returned in the response to the @Query@ API.
+    queryId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SubmitFeedback' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clickFeedbackItems', 'submitFeedback_clickFeedbackItems' - Tells Amazon Kendra that a particular search result link was chosen by
+-- the user.
+--
+-- 'relevanceFeedbackItems', 'submitFeedback_relevanceFeedbackItems' - Provides Amazon Kendra with relevant or not relevant feedback for
+-- whether a particular item was relevant to the search.
+--
+-- 'indexId', 'submitFeedback_indexId' - The identifier of the index that was queried.
+--
+-- 'queryId', 'submitFeedback_queryId' - The identifier of the specific query for which you are submitting
+-- feedback. The query ID is returned in the response to the @Query@ API.
+newSubmitFeedback ::
+  -- | 'indexId'
+  Prelude.Text ->
+  -- | 'queryId'
+  Prelude.Text ->
+  SubmitFeedback
+newSubmitFeedback pIndexId_ pQueryId_ =
+  SubmitFeedback'
+    { clickFeedbackItems =
+        Prelude.Nothing,
+      relevanceFeedbackItems = Prelude.Nothing,
+      indexId = pIndexId_,
+      queryId = pQueryId_
+    }
+
+-- | Tells Amazon Kendra that a particular search result link was chosen by
+-- the user.
+submitFeedback_clickFeedbackItems :: Lens.Lens' SubmitFeedback (Prelude.Maybe [ClickFeedback])
+submitFeedback_clickFeedbackItems = Lens.lens (\SubmitFeedback' {clickFeedbackItems} -> clickFeedbackItems) (\s@SubmitFeedback' {} a -> s {clickFeedbackItems = a} :: SubmitFeedback) Prelude.. Lens.mapping Lens.coerced
+
+-- | Provides Amazon Kendra with relevant or not relevant feedback for
+-- whether a particular item was relevant to the search.
+submitFeedback_relevanceFeedbackItems :: Lens.Lens' SubmitFeedback (Prelude.Maybe [RelevanceFeedback])
+submitFeedback_relevanceFeedbackItems = Lens.lens (\SubmitFeedback' {relevanceFeedbackItems} -> relevanceFeedbackItems) (\s@SubmitFeedback' {} a -> s {relevanceFeedbackItems = a} :: SubmitFeedback) Prelude.. Lens.mapping Lens.coerced
+
+-- | The identifier of the index that was queried.
+submitFeedback_indexId :: Lens.Lens' SubmitFeedback Prelude.Text
+submitFeedback_indexId = Lens.lens (\SubmitFeedback' {indexId} -> indexId) (\s@SubmitFeedback' {} a -> s {indexId = a} :: SubmitFeedback)
+
+-- | The identifier of the specific query for which you are submitting
+-- feedback. The query ID is returned in the response to the @Query@ API.
+submitFeedback_queryId :: Lens.Lens' SubmitFeedback Prelude.Text
+submitFeedback_queryId = Lens.lens (\SubmitFeedback' {queryId} -> queryId) (\s@SubmitFeedback' {} a -> s {queryId = a} :: SubmitFeedback)
+
+instance Core.AWSRequest SubmitFeedback where
+  type
+    AWSResponse SubmitFeedback =
+      SubmitFeedbackResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull SubmitFeedbackResponse'
+
+instance Prelude.Hashable SubmitFeedback where
+  hashWithSalt _salt SubmitFeedback' {..} =
+    _salt
+      `Prelude.hashWithSalt` clickFeedbackItems
+      `Prelude.hashWithSalt` relevanceFeedbackItems
+      `Prelude.hashWithSalt` indexId
+      `Prelude.hashWithSalt` queryId
+
+instance Prelude.NFData SubmitFeedback where
+  rnf SubmitFeedback' {..} =
+    Prelude.rnf clickFeedbackItems
+      `Prelude.seq` Prelude.rnf relevanceFeedbackItems
+      `Prelude.seq` Prelude.rnf indexId
+      `Prelude.seq` Prelude.rnf queryId
+
+instance Data.ToHeaders SubmitFeedback where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.SubmitFeedback" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SubmitFeedback where
+  toJSON SubmitFeedback' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClickFeedbackItems" Data..=)
+              Prelude.<$> clickFeedbackItems,
+            ("RelevanceFeedbackItems" Data..=)
+              Prelude.<$> relevanceFeedbackItems,
+            Prelude.Just ("IndexId" Data..= indexId),
+            Prelude.Just ("QueryId" Data..= queryId)
+          ]
+      )
+
+instance Data.ToPath SubmitFeedback where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery SubmitFeedback where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newSubmitFeedbackResponse' smart constructor.
+data SubmitFeedbackResponse = SubmitFeedbackResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SubmitFeedbackResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newSubmitFeedbackResponse ::
+  SubmitFeedbackResponse
+newSubmitFeedbackResponse = SubmitFeedbackResponse'
+
+instance Prelude.NFData SubmitFeedbackResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Kendra/TagResource.hs b/gen/Amazonka/Kendra/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/TagResource.hs
@@ -0,0 +1,173 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.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 tag to the specified index, FAQ, or data source
+-- resource. If the tag already exists, the existing value is replaced with
+-- the new value.
+module Amazonka.Kendra.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.Kendra.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 index, FAQ, or data source to tag.
+    resourceARN :: Prelude.Text,
+    -- | A list of tag keys to add to the index, FAQ, or data source. If a tag
+    -- already exists, the existing value is replaced with the new value.
+    tags :: [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceARN', 'tagResource_resourceARN' - The Amazon Resource Name (ARN) of the index, FAQ, or data source to tag.
+--
+-- 'tags', 'tagResource_tags' - A list of tag keys to add to the index, FAQ, or data source. If a tag
+-- 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 index, FAQ, or data source 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 index, FAQ, or data source. If a tag
+-- already exists, the existing value is replaced with the new value.
+tagResource_tags :: Lens.Lens' TagResource [Tag]
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceARN
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceARN
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.TagResource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResourceARN" Data..= resourceARN),
+            Prelude.Just ("Tags" Data..= tags)
+          ]
+      )
+
+instance Data.ToPath TagResource where
+  toPath = Prelude.const "/"
+
+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/Kendra/Types.hs b/gen/Amazonka/Kendra/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types.hs
@@ -0,0 +1,1668 @@
+{-# 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.Kendra.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.Kendra.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _ConflictException,
+    _InternalServerException,
+    _InvalidRequestException,
+    _ResourceAlreadyExistException,
+    _ResourceInUseException,
+    _ResourceNotFoundException,
+    _ResourceUnavailableException,
+    _ServiceQuotaExceededException,
+    _ThrottlingException,
+    _ValidationException,
+
+    -- * AdditionalResultAttributeValueType
+    AdditionalResultAttributeValueType (..),
+
+    -- * AlfrescoEntity
+    AlfrescoEntity (..),
+
+    -- * ConditionOperator
+    ConditionOperator (..),
+
+    -- * ConfluenceAttachmentFieldName
+    ConfluenceAttachmentFieldName (..),
+
+    -- * ConfluenceAuthenticationType
+    ConfluenceAuthenticationType (..),
+
+    -- * ConfluenceBlogFieldName
+    ConfluenceBlogFieldName (..),
+
+    -- * ConfluencePageFieldName
+    ConfluencePageFieldName (..),
+
+    -- * ConfluenceSpaceFieldName
+    ConfluenceSpaceFieldName (..),
+
+    -- * ConfluenceVersion
+    ConfluenceVersion (..),
+
+    -- * ContentType
+    ContentType (..),
+
+    -- * DataSourceStatus
+    DataSourceStatus (..),
+
+    -- * DataSourceSyncJobStatus
+    DataSourceSyncJobStatus (..),
+
+    -- * DataSourceType
+    DataSourceType (..),
+
+    -- * DatabaseEngineType
+    DatabaseEngineType (..),
+
+    -- * DocumentAttributeValueType
+    DocumentAttributeValueType (..),
+
+    -- * DocumentStatus
+    DocumentStatus (..),
+
+    -- * EndpointType
+    EndpointType (..),
+
+    -- * EntityType
+    EntityType (..),
+
+    -- * ErrorCode
+    ErrorCode (..),
+
+    -- * ExperienceStatus
+    ExperienceStatus (..),
+
+    -- * FaqFileFormat
+    FaqFileFormat (..),
+
+    -- * FaqStatus
+    FaqStatus (..),
+
+    -- * FsxFileSystemType
+    FsxFileSystemType (..),
+
+    -- * HighlightType
+    HighlightType (..),
+
+    -- * IndexEdition
+    IndexEdition (..),
+
+    -- * IndexStatus
+    IndexStatus (..),
+
+    -- * Interval
+    Interval (..),
+
+    -- * IssueSubEntity
+    IssueSubEntity (..),
+
+    -- * KeyLocation
+    KeyLocation (..),
+
+    -- * MetricType
+    MetricType (..),
+
+    -- * Mode
+    Mode (..),
+
+    -- * Order
+    Order (..),
+
+    -- * Persona
+    Persona (..),
+
+    -- * PrincipalMappingStatus
+    PrincipalMappingStatus (..),
+
+    -- * PrincipalType
+    PrincipalType (..),
+
+    -- * QueryIdentifiersEnclosingOption
+    QueryIdentifiersEnclosingOption (..),
+
+    -- * QueryResultFormat
+    QueryResultFormat (..),
+
+    -- * QueryResultType
+    QueryResultType (..),
+
+    -- * QuerySuggestionsBlockListStatus
+    QuerySuggestionsBlockListStatus (..),
+
+    -- * QuerySuggestionsStatus
+    QuerySuggestionsStatus (..),
+
+    -- * ReadAccessType
+    ReadAccessType (..),
+
+    -- * RelevanceType
+    RelevanceType (..),
+
+    -- * SalesforceChatterFeedIncludeFilterType
+    SalesforceChatterFeedIncludeFilterType (..),
+
+    -- * SalesforceKnowledgeArticleState
+    SalesforceKnowledgeArticleState (..),
+
+    -- * SalesforceStandardObjectName
+    SalesforceStandardObjectName (..),
+
+    -- * ScoreConfidence
+    ScoreConfidence (..),
+
+    -- * ServiceNowAuthenticationType
+    ServiceNowAuthenticationType (..),
+
+    -- * ServiceNowBuildVersionType
+    ServiceNowBuildVersionType (..),
+
+    -- * SharePointOnlineAuthenticationType
+    SharePointOnlineAuthenticationType (..),
+
+    -- * SharePointVersion
+    SharePointVersion (..),
+
+    -- * SlackEntity
+    SlackEntity (..),
+
+    -- * SortOrder
+    SortOrder (..),
+
+    -- * ThesaurusStatus
+    ThesaurusStatus (..),
+
+    -- * Type
+    Type (..),
+
+    -- * UserContextPolicy
+    UserContextPolicy (..),
+
+    -- * UserGroupResolutionMode
+    UserGroupResolutionMode (..),
+
+    -- * WarningCode
+    WarningCode (..),
+
+    -- * WebCrawlerMode
+    WebCrawlerMode (..),
+
+    -- * AccessControlConfigurationSummary
+    AccessControlConfigurationSummary (..),
+    newAccessControlConfigurationSummary,
+    accessControlConfigurationSummary_id,
+
+    -- * AccessControlListConfiguration
+    AccessControlListConfiguration (..),
+    newAccessControlListConfiguration,
+    accessControlListConfiguration_keyPath,
+
+    -- * AclConfiguration
+    AclConfiguration (..),
+    newAclConfiguration,
+    aclConfiguration_allowedGroupsColumnName,
+
+    -- * AdditionalResultAttribute
+    AdditionalResultAttribute (..),
+    newAdditionalResultAttribute,
+    additionalResultAttribute_key,
+    additionalResultAttribute_valueType,
+    additionalResultAttribute_value,
+
+    -- * AdditionalResultAttributeValue
+    AdditionalResultAttributeValue (..),
+    newAdditionalResultAttributeValue,
+    additionalResultAttributeValue_textWithHighlightsValue,
+
+    -- * AlfrescoConfiguration
+    AlfrescoConfiguration (..),
+    newAlfrescoConfiguration,
+    alfrescoConfiguration_blogFieldMappings,
+    alfrescoConfiguration_crawlComments,
+    alfrescoConfiguration_crawlSystemFolders,
+    alfrescoConfiguration_documentLibraryFieldMappings,
+    alfrescoConfiguration_entityFilter,
+    alfrescoConfiguration_exclusionPatterns,
+    alfrescoConfiguration_inclusionPatterns,
+    alfrescoConfiguration_vpcConfiguration,
+    alfrescoConfiguration_wikiFieldMappings,
+    alfrescoConfiguration_siteUrl,
+    alfrescoConfiguration_siteId,
+    alfrescoConfiguration_secretArn,
+    alfrescoConfiguration_sslCertificateS3Path,
+
+    -- * AttributeFilter
+    AttributeFilter (..),
+    newAttributeFilter,
+    attributeFilter_andAllFilters,
+    attributeFilter_containsAll,
+    attributeFilter_containsAny,
+    attributeFilter_equalsTo,
+    attributeFilter_greaterThan,
+    attributeFilter_greaterThanOrEquals,
+    attributeFilter_lessThan,
+    attributeFilter_lessThanOrEquals,
+    attributeFilter_notFilter,
+    attributeFilter_orAllFilters,
+
+    -- * AuthenticationConfiguration
+    AuthenticationConfiguration (..),
+    newAuthenticationConfiguration,
+    authenticationConfiguration_basicAuthentication,
+
+    -- * BasicAuthenticationConfiguration
+    BasicAuthenticationConfiguration (..),
+    newBasicAuthenticationConfiguration,
+    basicAuthenticationConfiguration_host,
+    basicAuthenticationConfiguration_port,
+    basicAuthenticationConfiguration_credentials,
+
+    -- * BatchDeleteDocumentResponseFailedDocument
+    BatchDeleteDocumentResponseFailedDocument (..),
+    newBatchDeleteDocumentResponseFailedDocument,
+    batchDeleteDocumentResponseFailedDocument_errorCode,
+    batchDeleteDocumentResponseFailedDocument_errorMessage,
+    batchDeleteDocumentResponseFailedDocument_id,
+
+    -- * BatchGetDocumentStatusResponseError
+    BatchGetDocumentStatusResponseError (..),
+    newBatchGetDocumentStatusResponseError,
+    batchGetDocumentStatusResponseError_documentId,
+    batchGetDocumentStatusResponseError_errorCode,
+    batchGetDocumentStatusResponseError_errorMessage,
+
+    -- * BatchPutDocumentResponseFailedDocument
+    BatchPutDocumentResponseFailedDocument (..),
+    newBatchPutDocumentResponseFailedDocument,
+    batchPutDocumentResponseFailedDocument_errorCode,
+    batchPutDocumentResponseFailedDocument_errorMessage,
+    batchPutDocumentResponseFailedDocument_id,
+
+    -- * BoxConfiguration
+    BoxConfiguration (..),
+    newBoxConfiguration,
+    boxConfiguration_commentFieldMappings,
+    boxConfiguration_crawlComments,
+    boxConfiguration_crawlTasks,
+    boxConfiguration_crawlWebLinks,
+    boxConfiguration_exclusionPatterns,
+    boxConfiguration_fileFieldMappings,
+    boxConfiguration_inclusionPatterns,
+    boxConfiguration_taskFieldMappings,
+    boxConfiguration_useChangeLog,
+    boxConfiguration_vpcConfiguration,
+    boxConfiguration_webLinkFieldMappings,
+    boxConfiguration_enterpriseId,
+    boxConfiguration_secretArn,
+
+    -- * CapacityUnitsConfiguration
+    CapacityUnitsConfiguration (..),
+    newCapacityUnitsConfiguration,
+    capacityUnitsConfiguration_storageCapacityUnits,
+    capacityUnitsConfiguration_queryCapacityUnits,
+
+    -- * ClickFeedback
+    ClickFeedback (..),
+    newClickFeedback,
+    clickFeedback_resultId,
+    clickFeedback_clickTime,
+
+    -- * ColumnConfiguration
+    ColumnConfiguration (..),
+    newColumnConfiguration,
+    columnConfiguration_documentTitleColumnName,
+    columnConfiguration_fieldMappings,
+    columnConfiguration_documentIdColumnName,
+    columnConfiguration_documentDataColumnName,
+    columnConfiguration_changeDetectingColumns,
+
+    -- * ConfluenceAttachmentConfiguration
+    ConfluenceAttachmentConfiguration (..),
+    newConfluenceAttachmentConfiguration,
+    confluenceAttachmentConfiguration_attachmentFieldMappings,
+    confluenceAttachmentConfiguration_crawlAttachments,
+
+    -- * ConfluenceAttachmentToIndexFieldMapping
+    ConfluenceAttachmentToIndexFieldMapping (..),
+    newConfluenceAttachmentToIndexFieldMapping,
+    confluenceAttachmentToIndexFieldMapping_dataSourceFieldName,
+    confluenceAttachmentToIndexFieldMapping_dateFieldFormat,
+    confluenceAttachmentToIndexFieldMapping_indexFieldName,
+
+    -- * ConfluenceBlogConfiguration
+    ConfluenceBlogConfiguration (..),
+    newConfluenceBlogConfiguration,
+    confluenceBlogConfiguration_blogFieldMappings,
+
+    -- * ConfluenceBlogToIndexFieldMapping
+    ConfluenceBlogToIndexFieldMapping (..),
+    newConfluenceBlogToIndexFieldMapping,
+    confluenceBlogToIndexFieldMapping_dataSourceFieldName,
+    confluenceBlogToIndexFieldMapping_dateFieldFormat,
+    confluenceBlogToIndexFieldMapping_indexFieldName,
+
+    -- * ConfluenceConfiguration
+    ConfluenceConfiguration (..),
+    newConfluenceConfiguration,
+    confluenceConfiguration_attachmentConfiguration,
+    confluenceConfiguration_authenticationType,
+    confluenceConfiguration_blogConfiguration,
+    confluenceConfiguration_exclusionPatterns,
+    confluenceConfiguration_inclusionPatterns,
+    confluenceConfiguration_pageConfiguration,
+    confluenceConfiguration_proxyConfiguration,
+    confluenceConfiguration_spaceConfiguration,
+    confluenceConfiguration_vpcConfiguration,
+    confluenceConfiguration_serverUrl,
+    confluenceConfiguration_secretArn,
+    confluenceConfiguration_version,
+
+    -- * ConfluencePageConfiguration
+    ConfluencePageConfiguration (..),
+    newConfluencePageConfiguration,
+    confluencePageConfiguration_pageFieldMappings,
+
+    -- * ConfluencePageToIndexFieldMapping
+    ConfluencePageToIndexFieldMapping (..),
+    newConfluencePageToIndexFieldMapping,
+    confluencePageToIndexFieldMapping_dataSourceFieldName,
+    confluencePageToIndexFieldMapping_dateFieldFormat,
+    confluencePageToIndexFieldMapping_indexFieldName,
+
+    -- * ConfluenceSpaceConfiguration
+    ConfluenceSpaceConfiguration (..),
+    newConfluenceSpaceConfiguration,
+    confluenceSpaceConfiguration_crawlArchivedSpaces,
+    confluenceSpaceConfiguration_crawlPersonalSpaces,
+    confluenceSpaceConfiguration_excludeSpaces,
+    confluenceSpaceConfiguration_includeSpaces,
+    confluenceSpaceConfiguration_spaceFieldMappings,
+
+    -- * ConfluenceSpaceToIndexFieldMapping
+    ConfluenceSpaceToIndexFieldMapping (..),
+    newConfluenceSpaceToIndexFieldMapping,
+    confluenceSpaceToIndexFieldMapping_dataSourceFieldName,
+    confluenceSpaceToIndexFieldMapping_dateFieldFormat,
+    confluenceSpaceToIndexFieldMapping_indexFieldName,
+
+    -- * ConnectionConfiguration
+    ConnectionConfiguration (..),
+    newConnectionConfiguration,
+    connectionConfiguration_databaseHost,
+    connectionConfiguration_databasePort,
+    connectionConfiguration_databaseName,
+    connectionConfiguration_tableName,
+    connectionConfiguration_secretArn,
+
+    -- * ContentSourceConfiguration
+    ContentSourceConfiguration (..),
+    newContentSourceConfiguration,
+    contentSourceConfiguration_dataSourceIds,
+    contentSourceConfiguration_directPutContent,
+    contentSourceConfiguration_faqIds,
+
+    -- * Correction
+    Correction (..),
+    newCorrection,
+    correction_beginOffset,
+    correction_correctedTerm,
+    correction_endOffset,
+    correction_term,
+
+    -- * CustomDocumentEnrichmentConfiguration
+    CustomDocumentEnrichmentConfiguration (..),
+    newCustomDocumentEnrichmentConfiguration,
+    customDocumentEnrichmentConfiguration_inlineConfigurations,
+    customDocumentEnrichmentConfiguration_postExtractionHookConfiguration,
+    customDocumentEnrichmentConfiguration_preExtractionHookConfiguration,
+    customDocumentEnrichmentConfiguration_roleArn,
+
+    -- * DataSourceConfiguration
+    DataSourceConfiguration (..),
+    newDataSourceConfiguration,
+    dataSourceConfiguration_alfrescoConfiguration,
+    dataSourceConfiguration_boxConfiguration,
+    dataSourceConfiguration_confluenceConfiguration,
+    dataSourceConfiguration_databaseConfiguration,
+    dataSourceConfiguration_fsxConfiguration,
+    dataSourceConfiguration_gitHubConfiguration,
+    dataSourceConfiguration_googleDriveConfiguration,
+    dataSourceConfiguration_jiraConfiguration,
+    dataSourceConfiguration_oneDriveConfiguration,
+    dataSourceConfiguration_quipConfiguration,
+    dataSourceConfiguration_s3Configuration,
+    dataSourceConfiguration_salesforceConfiguration,
+    dataSourceConfiguration_serviceNowConfiguration,
+    dataSourceConfiguration_sharePointConfiguration,
+    dataSourceConfiguration_slackConfiguration,
+    dataSourceConfiguration_templateConfiguration,
+    dataSourceConfiguration_webCrawlerConfiguration,
+    dataSourceConfiguration_workDocsConfiguration,
+
+    -- * DataSourceGroup
+    DataSourceGroup (..),
+    newDataSourceGroup,
+    dataSourceGroup_groupId,
+    dataSourceGroup_dataSourceId,
+
+    -- * DataSourceSummary
+    DataSourceSummary (..),
+    newDataSourceSummary,
+    dataSourceSummary_createdAt,
+    dataSourceSummary_id,
+    dataSourceSummary_languageCode,
+    dataSourceSummary_name,
+    dataSourceSummary_status,
+    dataSourceSummary_type,
+    dataSourceSummary_updatedAt,
+
+    -- * DataSourceSyncJob
+    DataSourceSyncJob (..),
+    newDataSourceSyncJob,
+    dataSourceSyncJob_dataSourceErrorCode,
+    dataSourceSyncJob_endTime,
+    dataSourceSyncJob_errorCode,
+    dataSourceSyncJob_errorMessage,
+    dataSourceSyncJob_executionId,
+    dataSourceSyncJob_metrics,
+    dataSourceSyncJob_startTime,
+    dataSourceSyncJob_status,
+
+    -- * DataSourceSyncJobMetricTarget
+    DataSourceSyncJobMetricTarget (..),
+    newDataSourceSyncJobMetricTarget,
+    dataSourceSyncJobMetricTarget_dataSourceSyncJobId,
+    dataSourceSyncJobMetricTarget_dataSourceId,
+
+    -- * DataSourceSyncJobMetrics
+    DataSourceSyncJobMetrics (..),
+    newDataSourceSyncJobMetrics,
+    dataSourceSyncJobMetrics_documentsAdded,
+    dataSourceSyncJobMetrics_documentsDeleted,
+    dataSourceSyncJobMetrics_documentsFailed,
+    dataSourceSyncJobMetrics_documentsModified,
+    dataSourceSyncJobMetrics_documentsScanned,
+
+    -- * DataSourceToIndexFieldMapping
+    DataSourceToIndexFieldMapping (..),
+    newDataSourceToIndexFieldMapping,
+    dataSourceToIndexFieldMapping_dateFieldFormat,
+    dataSourceToIndexFieldMapping_dataSourceFieldName,
+    dataSourceToIndexFieldMapping_indexFieldName,
+
+    -- * DataSourceVpcConfiguration
+    DataSourceVpcConfiguration (..),
+    newDataSourceVpcConfiguration,
+    dataSourceVpcConfiguration_subnetIds,
+    dataSourceVpcConfiguration_securityGroupIds,
+
+    -- * DatabaseConfiguration
+    DatabaseConfiguration (..),
+    newDatabaseConfiguration,
+    databaseConfiguration_aclConfiguration,
+    databaseConfiguration_sqlConfiguration,
+    databaseConfiguration_vpcConfiguration,
+    databaseConfiguration_databaseEngineType,
+    databaseConfiguration_connectionConfiguration,
+    databaseConfiguration_columnConfiguration,
+
+    -- * Document
+    Document (..),
+    newDocument,
+    document_accessControlConfigurationId,
+    document_accessControlList,
+    document_attributes,
+    document_blob,
+    document_contentType,
+    document_hierarchicalAccessControlList,
+    document_s3Path,
+    document_title,
+    document_id,
+
+    -- * DocumentAttribute
+    DocumentAttribute (..),
+    newDocumentAttribute,
+    documentAttribute_key,
+    documentAttribute_value,
+
+    -- * DocumentAttributeCondition
+    DocumentAttributeCondition (..),
+    newDocumentAttributeCondition,
+    documentAttributeCondition_conditionOnValue,
+    documentAttributeCondition_conditionDocumentAttributeKey,
+    documentAttributeCondition_operator,
+
+    -- * DocumentAttributeTarget
+    DocumentAttributeTarget (..),
+    newDocumentAttributeTarget,
+    documentAttributeTarget_targetDocumentAttributeKey,
+    documentAttributeTarget_targetDocumentAttributeValue,
+    documentAttributeTarget_targetDocumentAttributeValueDeletion,
+
+    -- * DocumentAttributeValue
+    DocumentAttributeValue (..),
+    newDocumentAttributeValue,
+    documentAttributeValue_dateValue,
+    documentAttributeValue_longValue,
+    documentAttributeValue_stringListValue,
+    documentAttributeValue_stringValue,
+
+    -- * DocumentAttributeValueCountPair
+    DocumentAttributeValueCountPair (..),
+    newDocumentAttributeValueCountPair,
+    documentAttributeValueCountPair_count,
+    documentAttributeValueCountPair_documentAttributeValue,
+    documentAttributeValueCountPair_facetResults,
+
+    -- * DocumentInfo
+    DocumentInfo (..),
+    newDocumentInfo,
+    documentInfo_attributes,
+    documentInfo_documentId,
+
+    -- * DocumentMetadataConfiguration
+    DocumentMetadataConfiguration (..),
+    newDocumentMetadataConfiguration,
+    documentMetadataConfiguration_relevance,
+    documentMetadataConfiguration_search,
+    documentMetadataConfiguration_name,
+    documentMetadataConfiguration_type,
+
+    -- * DocumentRelevanceConfiguration
+    DocumentRelevanceConfiguration (..),
+    newDocumentRelevanceConfiguration,
+    documentRelevanceConfiguration_name,
+    documentRelevanceConfiguration_relevance,
+
+    -- * DocumentsMetadataConfiguration
+    DocumentsMetadataConfiguration (..),
+    newDocumentsMetadataConfiguration,
+    documentsMetadataConfiguration_s3Prefix,
+
+    -- * EntityConfiguration
+    EntityConfiguration (..),
+    newEntityConfiguration,
+    entityConfiguration_entityId,
+    entityConfiguration_entityType,
+
+    -- * EntityDisplayData
+    EntityDisplayData (..),
+    newEntityDisplayData,
+    entityDisplayData_firstName,
+    entityDisplayData_groupName,
+    entityDisplayData_identifiedUserName,
+    entityDisplayData_lastName,
+    entityDisplayData_userName,
+
+    -- * EntityPersonaConfiguration
+    EntityPersonaConfiguration (..),
+    newEntityPersonaConfiguration,
+    entityPersonaConfiguration_entityId,
+    entityPersonaConfiguration_persona,
+
+    -- * ExperienceConfiguration
+    ExperienceConfiguration (..),
+    newExperienceConfiguration,
+    experienceConfiguration_contentSourceConfiguration,
+    experienceConfiguration_userIdentityConfiguration,
+
+    -- * ExperienceEndpoint
+    ExperienceEndpoint (..),
+    newExperienceEndpoint,
+    experienceEndpoint_endpoint,
+    experienceEndpoint_endpointType,
+
+    -- * ExperienceEntitiesSummary
+    ExperienceEntitiesSummary (..),
+    newExperienceEntitiesSummary,
+    experienceEntitiesSummary_displayData,
+    experienceEntitiesSummary_entityId,
+    experienceEntitiesSummary_entityType,
+
+    -- * ExperiencesSummary
+    ExperiencesSummary (..),
+    newExperiencesSummary,
+    experiencesSummary_createdAt,
+    experiencesSummary_endpoints,
+    experiencesSummary_id,
+    experiencesSummary_name,
+    experiencesSummary_status,
+
+    -- * Facet
+    Facet (..),
+    newFacet,
+    facet_documentAttributeKey,
+    facet_facets,
+    facet_maxResults,
+
+    -- * FacetResult
+    FacetResult (..),
+    newFacetResult,
+    facetResult_documentAttributeKey,
+    facetResult_documentAttributeValueCountPairs,
+    facetResult_documentAttributeValueType,
+
+    -- * FailedEntity
+    FailedEntity (..),
+    newFailedEntity,
+    failedEntity_entityId,
+    failedEntity_errorMessage,
+
+    -- * FaqStatistics
+    FaqStatistics (..),
+    newFaqStatistics,
+    faqStatistics_indexedQuestionAnswersCount,
+
+    -- * FaqSummary
+    FaqSummary (..),
+    newFaqSummary,
+    faqSummary_createdAt,
+    faqSummary_fileFormat,
+    faqSummary_id,
+    faqSummary_languageCode,
+    faqSummary_name,
+    faqSummary_status,
+    faqSummary_updatedAt,
+
+    -- * FsxConfiguration
+    FsxConfiguration (..),
+    newFsxConfiguration,
+    fsxConfiguration_exclusionPatterns,
+    fsxConfiguration_fieldMappings,
+    fsxConfiguration_inclusionPatterns,
+    fsxConfiguration_secretArn,
+    fsxConfiguration_fileSystemId,
+    fsxConfiguration_fileSystemType,
+    fsxConfiguration_vpcConfiguration,
+
+    -- * GitHubConfiguration
+    GitHubConfiguration (..),
+    newGitHubConfiguration,
+    gitHubConfiguration_exclusionFileNamePatterns,
+    gitHubConfiguration_exclusionFileTypePatterns,
+    gitHubConfiguration_exclusionFolderNamePatterns,
+    gitHubConfiguration_gitHubCommitConfigurationFieldMappings,
+    gitHubConfiguration_gitHubDocumentCrawlProperties,
+    gitHubConfiguration_gitHubIssueAttachmentConfigurationFieldMappings,
+    gitHubConfiguration_gitHubIssueCommentConfigurationFieldMappings,
+    gitHubConfiguration_gitHubIssueDocumentConfigurationFieldMappings,
+    gitHubConfiguration_gitHubPullRequestCommentConfigurationFieldMappings,
+    gitHubConfiguration_gitHubPullRequestDocumentAttachmentConfigurationFieldMappings,
+    gitHubConfiguration_gitHubPullRequestDocumentConfigurationFieldMappings,
+    gitHubConfiguration_gitHubRepositoryConfigurationFieldMappings,
+    gitHubConfiguration_inclusionFileNamePatterns,
+    gitHubConfiguration_inclusionFileTypePatterns,
+    gitHubConfiguration_inclusionFolderNamePatterns,
+    gitHubConfiguration_onPremiseConfiguration,
+    gitHubConfiguration_repositoryFilter,
+    gitHubConfiguration_saaSConfiguration,
+    gitHubConfiguration_type,
+    gitHubConfiguration_useChangeLog,
+    gitHubConfiguration_vpcConfiguration,
+    gitHubConfiguration_secretArn,
+
+    -- * GitHubDocumentCrawlProperties
+    GitHubDocumentCrawlProperties (..),
+    newGitHubDocumentCrawlProperties,
+    gitHubDocumentCrawlProperties_crawlIssue,
+    gitHubDocumentCrawlProperties_crawlIssueComment,
+    gitHubDocumentCrawlProperties_crawlIssueCommentAttachment,
+    gitHubDocumentCrawlProperties_crawlPullRequest,
+    gitHubDocumentCrawlProperties_crawlPullRequestComment,
+    gitHubDocumentCrawlProperties_crawlPullRequestCommentAttachment,
+    gitHubDocumentCrawlProperties_crawlRepositoryDocuments,
+
+    -- * GoogleDriveConfiguration
+    GoogleDriveConfiguration (..),
+    newGoogleDriveConfiguration,
+    googleDriveConfiguration_excludeMimeTypes,
+    googleDriveConfiguration_excludeSharedDrives,
+    googleDriveConfiguration_excludeUserAccounts,
+    googleDriveConfiguration_exclusionPatterns,
+    googleDriveConfiguration_fieldMappings,
+    googleDriveConfiguration_inclusionPatterns,
+    googleDriveConfiguration_secretArn,
+
+    -- * GroupMembers
+    GroupMembers (..),
+    newGroupMembers,
+    groupMembers_memberGroups,
+    groupMembers_memberUsers,
+    groupMembers_s3PathforGroupMembers,
+
+    -- * GroupOrderingIdSummary
+    GroupOrderingIdSummary (..),
+    newGroupOrderingIdSummary,
+    groupOrderingIdSummary_failureReason,
+    groupOrderingIdSummary_lastUpdatedAt,
+    groupOrderingIdSummary_orderingId,
+    groupOrderingIdSummary_receivedAt,
+    groupOrderingIdSummary_status,
+
+    -- * GroupSummary
+    GroupSummary (..),
+    newGroupSummary,
+    groupSummary_groupId,
+    groupSummary_orderingId,
+
+    -- * HierarchicalPrincipal
+    HierarchicalPrincipal (..),
+    newHierarchicalPrincipal,
+    hierarchicalPrincipal_principalList,
+
+    -- * Highlight
+    Highlight (..),
+    newHighlight,
+    highlight_topAnswer,
+    highlight_type,
+    highlight_beginOffset,
+    highlight_endOffset,
+
+    -- * HookConfiguration
+    HookConfiguration (..),
+    newHookConfiguration,
+    hookConfiguration_invocationCondition,
+    hookConfiguration_lambdaArn,
+    hookConfiguration_s3Bucket,
+
+    -- * IndexConfigurationSummary
+    IndexConfigurationSummary (..),
+    newIndexConfigurationSummary,
+    indexConfigurationSummary_edition,
+    indexConfigurationSummary_id,
+    indexConfigurationSummary_name,
+    indexConfigurationSummary_createdAt,
+    indexConfigurationSummary_updatedAt,
+    indexConfigurationSummary_status,
+
+    -- * IndexStatistics
+    IndexStatistics (..),
+    newIndexStatistics,
+    indexStatistics_faqStatistics,
+    indexStatistics_textDocumentStatistics,
+
+    -- * InlineCustomDocumentEnrichmentConfiguration
+    InlineCustomDocumentEnrichmentConfiguration (..),
+    newInlineCustomDocumentEnrichmentConfiguration,
+    inlineCustomDocumentEnrichmentConfiguration_condition,
+    inlineCustomDocumentEnrichmentConfiguration_documentContentDeletion,
+    inlineCustomDocumentEnrichmentConfiguration_target,
+
+    -- * JiraConfiguration
+    JiraConfiguration (..),
+    newJiraConfiguration,
+    jiraConfiguration_attachmentFieldMappings,
+    jiraConfiguration_commentFieldMappings,
+    jiraConfiguration_exclusionPatterns,
+    jiraConfiguration_inclusionPatterns,
+    jiraConfiguration_issueFieldMappings,
+    jiraConfiguration_issueSubEntityFilter,
+    jiraConfiguration_issueType,
+    jiraConfiguration_project,
+    jiraConfiguration_projectFieldMappings,
+    jiraConfiguration_status,
+    jiraConfiguration_useChangeLog,
+    jiraConfiguration_vpcConfiguration,
+    jiraConfiguration_workLogFieldMappings,
+    jiraConfiguration_jiraAccountUrl,
+    jiraConfiguration_secretArn,
+
+    -- * JsonTokenTypeConfiguration
+    JsonTokenTypeConfiguration (..),
+    newJsonTokenTypeConfiguration,
+    jsonTokenTypeConfiguration_userNameAttributeField,
+    jsonTokenTypeConfiguration_groupAttributeField,
+
+    -- * JwtTokenTypeConfiguration
+    JwtTokenTypeConfiguration (..),
+    newJwtTokenTypeConfiguration,
+    jwtTokenTypeConfiguration_claimRegex,
+    jwtTokenTypeConfiguration_groupAttributeField,
+    jwtTokenTypeConfiguration_issuer,
+    jwtTokenTypeConfiguration_secretManagerArn,
+    jwtTokenTypeConfiguration_url,
+    jwtTokenTypeConfiguration_userNameAttributeField,
+    jwtTokenTypeConfiguration_keyLocation,
+
+    -- * MemberGroup
+    MemberGroup (..),
+    newMemberGroup,
+    memberGroup_dataSourceId,
+    memberGroup_groupId,
+
+    -- * MemberUser
+    MemberUser (..),
+    newMemberUser,
+    memberUser_userId,
+
+    -- * OnPremiseConfiguration
+    OnPremiseConfiguration (..),
+    newOnPremiseConfiguration,
+    onPremiseConfiguration_hostUrl,
+    onPremiseConfiguration_organizationName,
+    onPremiseConfiguration_sslCertificateS3Path,
+
+    -- * OneDriveConfiguration
+    OneDriveConfiguration (..),
+    newOneDriveConfiguration,
+    oneDriveConfiguration_disableLocalGroups,
+    oneDriveConfiguration_exclusionPatterns,
+    oneDriveConfiguration_fieldMappings,
+    oneDriveConfiguration_inclusionPatterns,
+    oneDriveConfiguration_tenantDomain,
+    oneDriveConfiguration_secretArn,
+    oneDriveConfiguration_oneDriveUsers,
+
+    -- * OneDriveUsers
+    OneDriveUsers (..),
+    newOneDriveUsers,
+    oneDriveUsers_oneDriveUserList,
+    oneDriveUsers_oneDriveUserS3Path,
+
+    -- * PersonasSummary
+    PersonasSummary (..),
+    newPersonasSummary,
+    personasSummary_createdAt,
+    personasSummary_entityId,
+    personasSummary_persona,
+    personasSummary_updatedAt,
+
+    -- * Principal
+    Principal (..),
+    newPrincipal,
+    principal_dataSourceId,
+    principal_name,
+    principal_type,
+    principal_access,
+
+    -- * ProxyConfiguration
+    ProxyConfiguration (..),
+    newProxyConfiguration,
+    proxyConfiguration_credentials,
+    proxyConfiguration_host,
+    proxyConfiguration_port,
+
+    -- * QueryResultItem
+    QueryResultItem (..),
+    newQueryResultItem,
+    queryResultItem_additionalAttributes,
+    queryResultItem_documentAttributes,
+    queryResultItem_documentExcerpt,
+    queryResultItem_documentId,
+    queryResultItem_documentTitle,
+    queryResultItem_documentURI,
+    queryResultItem_feedbackToken,
+    queryResultItem_format,
+    queryResultItem_id,
+    queryResultItem_scoreAttributes,
+    queryResultItem_tableExcerpt,
+    queryResultItem_type,
+
+    -- * QuerySuggestionsBlockListSummary
+    QuerySuggestionsBlockListSummary (..),
+    newQuerySuggestionsBlockListSummary,
+    querySuggestionsBlockListSummary_createdAt,
+    querySuggestionsBlockListSummary_id,
+    querySuggestionsBlockListSummary_itemCount,
+    querySuggestionsBlockListSummary_name,
+    querySuggestionsBlockListSummary_status,
+    querySuggestionsBlockListSummary_updatedAt,
+
+    -- * QuipConfiguration
+    QuipConfiguration (..),
+    newQuipConfiguration,
+    quipConfiguration_attachmentFieldMappings,
+    quipConfiguration_crawlAttachments,
+    quipConfiguration_crawlChatRooms,
+    quipConfiguration_crawlFileComments,
+    quipConfiguration_exclusionPatterns,
+    quipConfiguration_folderIds,
+    quipConfiguration_inclusionPatterns,
+    quipConfiguration_messageFieldMappings,
+    quipConfiguration_threadFieldMappings,
+    quipConfiguration_vpcConfiguration,
+    quipConfiguration_domain,
+    quipConfiguration_secretArn,
+
+    -- * Relevance
+    Relevance (..),
+    newRelevance,
+    relevance_duration,
+    relevance_freshness,
+    relevance_importance,
+    relevance_rankOrder,
+    relevance_valueImportanceMap,
+
+    -- * RelevanceFeedback
+    RelevanceFeedback (..),
+    newRelevanceFeedback,
+    relevanceFeedback_resultId,
+    relevanceFeedback_relevanceValue,
+
+    -- * S3DataSourceConfiguration
+    S3DataSourceConfiguration (..),
+    newS3DataSourceConfiguration,
+    s3DataSourceConfiguration_accessControlListConfiguration,
+    s3DataSourceConfiguration_documentsMetadataConfiguration,
+    s3DataSourceConfiguration_exclusionPatterns,
+    s3DataSourceConfiguration_inclusionPatterns,
+    s3DataSourceConfiguration_inclusionPrefixes,
+    s3DataSourceConfiguration_bucketName,
+
+    -- * S3Path
+    S3Path (..),
+    newS3Path,
+    s3Path_bucket,
+    s3Path_key,
+
+    -- * SaaSConfiguration
+    SaaSConfiguration (..),
+    newSaaSConfiguration,
+    saaSConfiguration_organizationName,
+    saaSConfiguration_hostUrl,
+
+    -- * SalesforceChatterFeedConfiguration
+    SalesforceChatterFeedConfiguration (..),
+    newSalesforceChatterFeedConfiguration,
+    salesforceChatterFeedConfiguration_documentTitleFieldName,
+    salesforceChatterFeedConfiguration_fieldMappings,
+    salesforceChatterFeedConfiguration_includeFilterTypes,
+    salesforceChatterFeedConfiguration_documentDataFieldName,
+
+    -- * SalesforceConfiguration
+    SalesforceConfiguration (..),
+    newSalesforceConfiguration,
+    salesforceConfiguration_chatterFeedConfiguration,
+    salesforceConfiguration_crawlAttachments,
+    salesforceConfiguration_excludeAttachmentFilePatterns,
+    salesforceConfiguration_includeAttachmentFilePatterns,
+    salesforceConfiguration_knowledgeArticleConfiguration,
+    salesforceConfiguration_standardObjectAttachmentConfiguration,
+    salesforceConfiguration_standardObjectConfigurations,
+    salesforceConfiguration_serverUrl,
+    salesforceConfiguration_secretArn,
+
+    -- * SalesforceCustomKnowledgeArticleTypeConfiguration
+    SalesforceCustomKnowledgeArticleTypeConfiguration (..),
+    newSalesforceCustomKnowledgeArticleTypeConfiguration,
+    salesforceCustomKnowledgeArticleTypeConfiguration_documentTitleFieldName,
+    salesforceCustomKnowledgeArticleTypeConfiguration_fieldMappings,
+    salesforceCustomKnowledgeArticleTypeConfiguration_name,
+    salesforceCustomKnowledgeArticleTypeConfiguration_documentDataFieldName,
+
+    -- * SalesforceKnowledgeArticleConfiguration
+    SalesforceKnowledgeArticleConfiguration (..),
+    newSalesforceKnowledgeArticleConfiguration,
+    salesforceKnowledgeArticleConfiguration_customKnowledgeArticleTypeConfigurations,
+    salesforceKnowledgeArticleConfiguration_standardKnowledgeArticleTypeConfiguration,
+    salesforceKnowledgeArticleConfiguration_includedStates,
+
+    -- * SalesforceStandardKnowledgeArticleTypeConfiguration
+    SalesforceStandardKnowledgeArticleTypeConfiguration (..),
+    newSalesforceStandardKnowledgeArticleTypeConfiguration,
+    salesforceStandardKnowledgeArticleTypeConfiguration_documentTitleFieldName,
+    salesforceStandardKnowledgeArticleTypeConfiguration_fieldMappings,
+    salesforceStandardKnowledgeArticleTypeConfiguration_documentDataFieldName,
+
+    -- * SalesforceStandardObjectAttachmentConfiguration
+    SalesforceStandardObjectAttachmentConfiguration (..),
+    newSalesforceStandardObjectAttachmentConfiguration,
+    salesforceStandardObjectAttachmentConfiguration_documentTitleFieldName,
+    salesforceStandardObjectAttachmentConfiguration_fieldMappings,
+
+    -- * SalesforceStandardObjectConfiguration
+    SalesforceStandardObjectConfiguration (..),
+    newSalesforceStandardObjectConfiguration,
+    salesforceStandardObjectConfiguration_documentTitleFieldName,
+    salesforceStandardObjectConfiguration_fieldMappings,
+    salesforceStandardObjectConfiguration_name,
+    salesforceStandardObjectConfiguration_documentDataFieldName,
+
+    -- * ScoreAttributes
+    ScoreAttributes (..),
+    newScoreAttributes,
+    scoreAttributes_scoreConfidence,
+
+    -- * Search
+    Search (..),
+    newSearch,
+    search_displayable,
+    search_facetable,
+    search_searchable,
+    search_sortable,
+
+    -- * SeedUrlConfiguration
+    SeedUrlConfiguration (..),
+    newSeedUrlConfiguration,
+    seedUrlConfiguration_webCrawlerMode,
+    seedUrlConfiguration_seedUrls,
+
+    -- * ServerSideEncryptionConfiguration
+    ServerSideEncryptionConfiguration (..),
+    newServerSideEncryptionConfiguration,
+    serverSideEncryptionConfiguration_kmsKeyId,
+
+    -- * ServiceNowConfiguration
+    ServiceNowConfiguration (..),
+    newServiceNowConfiguration,
+    serviceNowConfiguration_authenticationType,
+    serviceNowConfiguration_knowledgeArticleConfiguration,
+    serviceNowConfiguration_serviceCatalogConfiguration,
+    serviceNowConfiguration_hostUrl,
+    serviceNowConfiguration_secretArn,
+    serviceNowConfiguration_serviceNowBuildVersion,
+
+    -- * ServiceNowKnowledgeArticleConfiguration
+    ServiceNowKnowledgeArticleConfiguration (..),
+    newServiceNowKnowledgeArticleConfiguration,
+    serviceNowKnowledgeArticleConfiguration_crawlAttachments,
+    serviceNowKnowledgeArticleConfiguration_documentTitleFieldName,
+    serviceNowKnowledgeArticleConfiguration_excludeAttachmentFilePatterns,
+    serviceNowKnowledgeArticleConfiguration_fieldMappings,
+    serviceNowKnowledgeArticleConfiguration_filterQuery,
+    serviceNowKnowledgeArticleConfiguration_includeAttachmentFilePatterns,
+    serviceNowKnowledgeArticleConfiguration_documentDataFieldName,
+
+    -- * ServiceNowServiceCatalogConfiguration
+    ServiceNowServiceCatalogConfiguration (..),
+    newServiceNowServiceCatalogConfiguration,
+    serviceNowServiceCatalogConfiguration_crawlAttachments,
+    serviceNowServiceCatalogConfiguration_documentTitleFieldName,
+    serviceNowServiceCatalogConfiguration_excludeAttachmentFilePatterns,
+    serviceNowServiceCatalogConfiguration_fieldMappings,
+    serviceNowServiceCatalogConfiguration_includeAttachmentFilePatterns,
+    serviceNowServiceCatalogConfiguration_documentDataFieldName,
+
+    -- * SharePointConfiguration
+    SharePointConfiguration (..),
+    newSharePointConfiguration,
+    sharePointConfiguration_authenticationType,
+    sharePointConfiguration_crawlAttachments,
+    sharePointConfiguration_disableLocalGroups,
+    sharePointConfiguration_documentTitleFieldName,
+    sharePointConfiguration_exclusionPatterns,
+    sharePointConfiguration_fieldMappings,
+    sharePointConfiguration_inclusionPatterns,
+    sharePointConfiguration_proxyConfiguration,
+    sharePointConfiguration_sslCertificateS3Path,
+    sharePointConfiguration_useChangeLog,
+    sharePointConfiguration_vpcConfiguration,
+    sharePointConfiguration_sharePointVersion,
+    sharePointConfiguration_urls,
+    sharePointConfiguration_secretArn,
+
+    -- * SiteMapsConfiguration
+    SiteMapsConfiguration (..),
+    newSiteMapsConfiguration,
+    siteMapsConfiguration_siteMaps,
+
+    -- * SlackConfiguration
+    SlackConfiguration (..),
+    newSlackConfiguration,
+    slackConfiguration_crawlBotMessage,
+    slackConfiguration_excludeArchived,
+    slackConfiguration_exclusionPatterns,
+    slackConfiguration_fieldMappings,
+    slackConfiguration_inclusionPatterns,
+    slackConfiguration_lookBackPeriod,
+    slackConfiguration_privateChannelFilter,
+    slackConfiguration_publicChannelFilter,
+    slackConfiguration_useChangeLog,
+    slackConfiguration_vpcConfiguration,
+    slackConfiguration_teamId,
+    slackConfiguration_secretArn,
+    slackConfiguration_slackEntityList,
+    slackConfiguration_sinceCrawlDate,
+
+    -- * SortingConfiguration
+    SortingConfiguration (..),
+    newSortingConfiguration,
+    sortingConfiguration_documentAttributeKey,
+    sortingConfiguration_sortOrder,
+
+    -- * SpellCorrectedQuery
+    SpellCorrectedQuery (..),
+    newSpellCorrectedQuery,
+    spellCorrectedQuery_corrections,
+    spellCorrectedQuery_suggestedQueryText,
+
+    -- * SpellCorrectionConfiguration
+    SpellCorrectionConfiguration (..),
+    newSpellCorrectionConfiguration,
+    spellCorrectionConfiguration_includeQuerySpellCheckSuggestions,
+
+    -- * SqlConfiguration
+    SqlConfiguration (..),
+    newSqlConfiguration,
+    sqlConfiguration_queryIdentifiersEnclosingOption,
+
+    -- * Status
+    Status (..),
+    newStatus,
+    status_documentId,
+    status_documentStatus,
+    status_failureCode,
+    status_failureReason,
+
+    -- * Suggestion
+    Suggestion (..),
+    newSuggestion,
+    suggestion_id,
+    suggestion_value,
+
+    -- * SuggestionHighlight
+    SuggestionHighlight (..),
+    newSuggestionHighlight,
+    suggestionHighlight_beginOffset,
+    suggestionHighlight_endOffset,
+
+    -- * SuggestionTextWithHighlights
+    SuggestionTextWithHighlights (..),
+    newSuggestionTextWithHighlights,
+    suggestionTextWithHighlights_highlights,
+    suggestionTextWithHighlights_text,
+
+    -- * SuggestionValue
+    SuggestionValue (..),
+    newSuggestionValue,
+    suggestionValue_text,
+
+    -- * TableCell
+    TableCell (..),
+    newTableCell,
+    tableCell_header,
+    tableCell_highlighted,
+    tableCell_topAnswer,
+    tableCell_value,
+
+    -- * TableExcerpt
+    TableExcerpt (..),
+    newTableExcerpt,
+    tableExcerpt_rows,
+    tableExcerpt_totalNumberOfRows,
+
+    -- * TableRow
+    TableRow (..),
+    newTableRow,
+    tableRow_cells,
+
+    -- * Tag
+    Tag (..),
+    newTag,
+    tag_key,
+    tag_value,
+
+    -- * Template
+    Template (..),
+    newTemplate,
+
+    -- * TemplateConfiguration
+    TemplateConfiguration (..),
+    newTemplateConfiguration,
+    templateConfiguration_template,
+
+    -- * TextDocumentStatistics
+    TextDocumentStatistics (..),
+    newTextDocumentStatistics,
+    textDocumentStatistics_indexedTextDocumentsCount,
+    textDocumentStatistics_indexedTextBytes,
+
+    -- * TextWithHighlights
+    TextWithHighlights (..),
+    newTextWithHighlights,
+    textWithHighlights_highlights,
+    textWithHighlights_text,
+
+    -- * ThesaurusSummary
+    ThesaurusSummary (..),
+    newThesaurusSummary,
+    thesaurusSummary_createdAt,
+    thesaurusSummary_id,
+    thesaurusSummary_name,
+    thesaurusSummary_status,
+    thesaurusSummary_updatedAt,
+
+    -- * TimeRange
+    TimeRange (..),
+    newTimeRange,
+    timeRange_endTime,
+    timeRange_startTime,
+
+    -- * Urls
+    Urls (..),
+    newUrls,
+    urls_seedUrlConfiguration,
+    urls_siteMapsConfiguration,
+
+    -- * UserContext
+    UserContext (..),
+    newUserContext,
+    userContext_dataSourceGroups,
+    userContext_groups,
+    userContext_token,
+    userContext_userId,
+
+    -- * UserGroupResolutionConfiguration
+    UserGroupResolutionConfiguration (..),
+    newUserGroupResolutionConfiguration,
+    userGroupResolutionConfiguration_userGroupResolutionMode,
+
+    -- * UserIdentityConfiguration
+    UserIdentityConfiguration (..),
+    newUserIdentityConfiguration,
+    userIdentityConfiguration_identityAttributeName,
+
+    -- * UserTokenConfiguration
+    UserTokenConfiguration (..),
+    newUserTokenConfiguration,
+    userTokenConfiguration_jsonTokenTypeConfiguration,
+    userTokenConfiguration_jwtTokenTypeConfiguration,
+
+    -- * Warning
+    Warning (..),
+    newWarning,
+    warning_code,
+    warning_message,
+
+    -- * WebCrawlerConfiguration
+    WebCrawlerConfiguration (..),
+    newWebCrawlerConfiguration,
+    webCrawlerConfiguration_authenticationConfiguration,
+    webCrawlerConfiguration_crawlDepth,
+    webCrawlerConfiguration_maxContentSizePerPageInMegaBytes,
+    webCrawlerConfiguration_maxLinksPerPage,
+    webCrawlerConfiguration_maxUrlsPerMinuteCrawlRate,
+    webCrawlerConfiguration_proxyConfiguration,
+    webCrawlerConfiguration_urlExclusionPatterns,
+    webCrawlerConfiguration_urlInclusionPatterns,
+    webCrawlerConfiguration_urls,
+
+    -- * WorkDocsConfiguration
+    WorkDocsConfiguration (..),
+    newWorkDocsConfiguration,
+    workDocsConfiguration_crawlComments,
+    workDocsConfiguration_exclusionPatterns,
+    workDocsConfiguration_fieldMappings,
+    workDocsConfiguration_inclusionPatterns,
+    workDocsConfiguration_useChangeLog,
+    workDocsConfiguration_organizationId,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.Kendra.Types.AccessControlConfigurationSummary
+import Amazonka.Kendra.Types.AccessControlListConfiguration
+import Amazonka.Kendra.Types.AclConfiguration
+import Amazonka.Kendra.Types.AdditionalResultAttribute
+import Amazonka.Kendra.Types.AdditionalResultAttributeValue
+import Amazonka.Kendra.Types.AdditionalResultAttributeValueType
+import Amazonka.Kendra.Types.AlfrescoConfiguration
+import Amazonka.Kendra.Types.AlfrescoEntity
+import Amazonka.Kendra.Types.AttributeFilter
+import Amazonka.Kendra.Types.AuthenticationConfiguration
+import Amazonka.Kendra.Types.BasicAuthenticationConfiguration
+import Amazonka.Kendra.Types.BatchDeleteDocumentResponseFailedDocument
+import Amazonka.Kendra.Types.BatchGetDocumentStatusResponseError
+import Amazonka.Kendra.Types.BatchPutDocumentResponseFailedDocument
+import Amazonka.Kendra.Types.BoxConfiguration
+import Amazonka.Kendra.Types.CapacityUnitsConfiguration
+import Amazonka.Kendra.Types.ClickFeedback
+import Amazonka.Kendra.Types.ColumnConfiguration
+import Amazonka.Kendra.Types.ConditionOperator
+import Amazonka.Kendra.Types.ConfluenceAttachmentConfiguration
+import Amazonka.Kendra.Types.ConfluenceAttachmentFieldName
+import Amazonka.Kendra.Types.ConfluenceAttachmentToIndexFieldMapping
+import Amazonka.Kendra.Types.ConfluenceAuthenticationType
+import Amazonka.Kendra.Types.ConfluenceBlogConfiguration
+import Amazonka.Kendra.Types.ConfluenceBlogFieldName
+import Amazonka.Kendra.Types.ConfluenceBlogToIndexFieldMapping
+import Amazonka.Kendra.Types.ConfluenceConfiguration
+import Amazonka.Kendra.Types.ConfluencePageConfiguration
+import Amazonka.Kendra.Types.ConfluencePageFieldName
+import Amazonka.Kendra.Types.ConfluencePageToIndexFieldMapping
+import Amazonka.Kendra.Types.ConfluenceSpaceConfiguration
+import Amazonka.Kendra.Types.ConfluenceSpaceFieldName
+import Amazonka.Kendra.Types.ConfluenceSpaceToIndexFieldMapping
+import Amazonka.Kendra.Types.ConfluenceVersion
+import Amazonka.Kendra.Types.ConnectionConfiguration
+import Amazonka.Kendra.Types.ContentSourceConfiguration
+import Amazonka.Kendra.Types.ContentType
+import Amazonka.Kendra.Types.Correction
+import Amazonka.Kendra.Types.CustomDocumentEnrichmentConfiguration
+import Amazonka.Kendra.Types.DataSourceConfiguration
+import Amazonka.Kendra.Types.DataSourceGroup
+import Amazonka.Kendra.Types.DataSourceStatus
+import Amazonka.Kendra.Types.DataSourceSummary
+import Amazonka.Kendra.Types.DataSourceSyncJob
+import Amazonka.Kendra.Types.DataSourceSyncJobMetricTarget
+import Amazonka.Kendra.Types.DataSourceSyncJobMetrics
+import Amazonka.Kendra.Types.DataSourceSyncJobStatus
+import Amazonka.Kendra.Types.DataSourceToIndexFieldMapping
+import Amazonka.Kendra.Types.DataSourceType
+import Amazonka.Kendra.Types.DataSourceVpcConfiguration
+import Amazonka.Kendra.Types.DatabaseConfiguration
+import Amazonka.Kendra.Types.DatabaseEngineType
+import Amazonka.Kendra.Types.Document
+import Amazonka.Kendra.Types.DocumentAttribute
+import Amazonka.Kendra.Types.DocumentAttributeCondition
+import Amazonka.Kendra.Types.DocumentAttributeTarget
+import Amazonka.Kendra.Types.DocumentAttributeValue
+import Amazonka.Kendra.Types.DocumentAttributeValueCountPair
+import Amazonka.Kendra.Types.DocumentAttributeValueType
+import Amazonka.Kendra.Types.DocumentInfo
+import Amazonka.Kendra.Types.DocumentMetadataConfiguration
+import Amazonka.Kendra.Types.DocumentRelevanceConfiguration
+import Amazonka.Kendra.Types.DocumentStatus
+import Amazonka.Kendra.Types.DocumentsMetadataConfiguration
+import Amazonka.Kendra.Types.EndpointType
+import Amazonka.Kendra.Types.EntityConfiguration
+import Amazonka.Kendra.Types.EntityDisplayData
+import Amazonka.Kendra.Types.EntityPersonaConfiguration
+import Amazonka.Kendra.Types.EntityType
+import Amazonka.Kendra.Types.ErrorCode
+import Amazonka.Kendra.Types.ExperienceConfiguration
+import Amazonka.Kendra.Types.ExperienceEndpoint
+import Amazonka.Kendra.Types.ExperienceEntitiesSummary
+import Amazonka.Kendra.Types.ExperienceStatus
+import Amazonka.Kendra.Types.ExperiencesSummary
+import Amazonka.Kendra.Types.Facet
+import Amazonka.Kendra.Types.FacetResult
+import Amazonka.Kendra.Types.FailedEntity
+import Amazonka.Kendra.Types.FaqFileFormat
+import Amazonka.Kendra.Types.FaqStatistics
+import Amazonka.Kendra.Types.FaqStatus
+import Amazonka.Kendra.Types.FaqSummary
+import Amazonka.Kendra.Types.FsxConfiguration
+import Amazonka.Kendra.Types.FsxFileSystemType
+import Amazonka.Kendra.Types.GitHubConfiguration
+import Amazonka.Kendra.Types.GitHubDocumentCrawlProperties
+import Amazonka.Kendra.Types.GoogleDriveConfiguration
+import Amazonka.Kendra.Types.GroupMembers
+import Amazonka.Kendra.Types.GroupOrderingIdSummary
+import Amazonka.Kendra.Types.GroupSummary
+import Amazonka.Kendra.Types.HierarchicalPrincipal
+import Amazonka.Kendra.Types.Highlight
+import Amazonka.Kendra.Types.HighlightType
+import Amazonka.Kendra.Types.HookConfiguration
+import Amazonka.Kendra.Types.IndexConfigurationSummary
+import Amazonka.Kendra.Types.IndexEdition
+import Amazonka.Kendra.Types.IndexStatistics
+import Amazonka.Kendra.Types.IndexStatus
+import Amazonka.Kendra.Types.InlineCustomDocumentEnrichmentConfiguration
+import Amazonka.Kendra.Types.Interval
+import Amazonka.Kendra.Types.IssueSubEntity
+import Amazonka.Kendra.Types.JiraConfiguration
+import Amazonka.Kendra.Types.JsonTokenTypeConfiguration
+import Amazonka.Kendra.Types.JwtTokenTypeConfiguration
+import Amazonka.Kendra.Types.KeyLocation
+import Amazonka.Kendra.Types.MemberGroup
+import Amazonka.Kendra.Types.MemberUser
+import Amazonka.Kendra.Types.MetricType
+import Amazonka.Kendra.Types.Mode
+import Amazonka.Kendra.Types.OnPremiseConfiguration
+import Amazonka.Kendra.Types.OneDriveConfiguration
+import Amazonka.Kendra.Types.OneDriveUsers
+import Amazonka.Kendra.Types.Order
+import Amazonka.Kendra.Types.Persona
+import Amazonka.Kendra.Types.PersonasSummary
+import Amazonka.Kendra.Types.Principal
+import Amazonka.Kendra.Types.PrincipalMappingStatus
+import Amazonka.Kendra.Types.PrincipalType
+import Amazonka.Kendra.Types.ProxyConfiguration
+import Amazonka.Kendra.Types.QueryIdentifiersEnclosingOption
+import Amazonka.Kendra.Types.QueryResultFormat
+import Amazonka.Kendra.Types.QueryResultItem
+import Amazonka.Kendra.Types.QueryResultType
+import Amazonka.Kendra.Types.QuerySuggestionsBlockListStatus
+import Amazonka.Kendra.Types.QuerySuggestionsBlockListSummary
+import Amazonka.Kendra.Types.QuerySuggestionsStatus
+import Amazonka.Kendra.Types.QuipConfiguration
+import Amazonka.Kendra.Types.ReadAccessType
+import Amazonka.Kendra.Types.Relevance
+import Amazonka.Kendra.Types.RelevanceFeedback
+import Amazonka.Kendra.Types.RelevanceType
+import Amazonka.Kendra.Types.S3DataSourceConfiguration
+import Amazonka.Kendra.Types.S3Path
+import Amazonka.Kendra.Types.SaaSConfiguration
+import Amazonka.Kendra.Types.SalesforceChatterFeedConfiguration
+import Amazonka.Kendra.Types.SalesforceChatterFeedIncludeFilterType
+import Amazonka.Kendra.Types.SalesforceConfiguration
+import Amazonka.Kendra.Types.SalesforceCustomKnowledgeArticleTypeConfiguration
+import Amazonka.Kendra.Types.SalesforceKnowledgeArticleConfiguration
+import Amazonka.Kendra.Types.SalesforceKnowledgeArticleState
+import Amazonka.Kendra.Types.SalesforceStandardKnowledgeArticleTypeConfiguration
+import Amazonka.Kendra.Types.SalesforceStandardObjectAttachmentConfiguration
+import Amazonka.Kendra.Types.SalesforceStandardObjectConfiguration
+import Amazonka.Kendra.Types.SalesforceStandardObjectName
+import Amazonka.Kendra.Types.ScoreAttributes
+import Amazonka.Kendra.Types.ScoreConfidence
+import Amazonka.Kendra.Types.Search
+import Amazonka.Kendra.Types.SeedUrlConfiguration
+import Amazonka.Kendra.Types.ServerSideEncryptionConfiguration
+import Amazonka.Kendra.Types.ServiceNowAuthenticationType
+import Amazonka.Kendra.Types.ServiceNowBuildVersionType
+import Amazonka.Kendra.Types.ServiceNowConfiguration
+import Amazonka.Kendra.Types.ServiceNowKnowledgeArticleConfiguration
+import Amazonka.Kendra.Types.ServiceNowServiceCatalogConfiguration
+import Amazonka.Kendra.Types.SharePointConfiguration
+import Amazonka.Kendra.Types.SharePointOnlineAuthenticationType
+import Amazonka.Kendra.Types.SharePointVersion
+import Amazonka.Kendra.Types.SiteMapsConfiguration
+import Amazonka.Kendra.Types.SlackConfiguration
+import Amazonka.Kendra.Types.SlackEntity
+import Amazonka.Kendra.Types.SortOrder
+import Amazonka.Kendra.Types.SortingConfiguration
+import Amazonka.Kendra.Types.SpellCorrectedQuery
+import Amazonka.Kendra.Types.SpellCorrectionConfiguration
+import Amazonka.Kendra.Types.SqlConfiguration
+import Amazonka.Kendra.Types.Status
+import Amazonka.Kendra.Types.Suggestion
+import Amazonka.Kendra.Types.SuggestionHighlight
+import Amazonka.Kendra.Types.SuggestionTextWithHighlights
+import Amazonka.Kendra.Types.SuggestionValue
+import Amazonka.Kendra.Types.TableCell
+import Amazonka.Kendra.Types.TableExcerpt
+import Amazonka.Kendra.Types.TableRow
+import Amazonka.Kendra.Types.Tag
+import Amazonka.Kendra.Types.Template
+import Amazonka.Kendra.Types.TemplateConfiguration
+import Amazonka.Kendra.Types.TextDocumentStatistics
+import Amazonka.Kendra.Types.TextWithHighlights
+import Amazonka.Kendra.Types.ThesaurusStatus
+import Amazonka.Kendra.Types.ThesaurusSummary
+import Amazonka.Kendra.Types.TimeRange
+import Amazonka.Kendra.Types.Type
+import Amazonka.Kendra.Types.Urls
+import Amazonka.Kendra.Types.UserContext
+import Amazonka.Kendra.Types.UserContextPolicy
+import Amazonka.Kendra.Types.UserGroupResolutionConfiguration
+import Amazonka.Kendra.Types.UserGroupResolutionMode
+import Amazonka.Kendra.Types.UserIdentityConfiguration
+import Amazonka.Kendra.Types.UserTokenConfiguration
+import Amazonka.Kendra.Types.Warning
+import Amazonka.Kendra.Types.WarningCode
+import Amazonka.Kendra.Types.WebCrawlerConfiguration
+import Amazonka.Kendra.Types.WebCrawlerMode
+import Amazonka.Kendra.Types.WorkDocsConfiguration
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2019-02-03@ of the Amazon KendraFrontendService SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "Kendra",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "kendra",
+      Core.signingName = "kendra",
+      Core.version = "2019-02-03",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "Kendra",
+      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
+
+-- | You don\'t have sufficient access to perform this action. Please ensure
+-- you have the required permission policies and user accounts and try
+-- again.
+_AccessDeniedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccessDeniedException =
+  Core._MatchServiceError
+    defaultService
+    "AccessDeniedException"
+
+-- | A conflict occurred with the request. Please fix any inconsistences with
+-- your resources and try again.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+
+-- | An issue occurred with the internal server used for your Amazon Kendra
+-- service. Please wait a few minutes and try again, or contact
+-- <http://aws.amazon.com/aws.amazon.com/contact-us Support> for help.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+
+-- | The input to the request is not valid. Please provide the correct input
+-- and try again.
+_InvalidRequestException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidRequestException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidRequestException"
+
+-- | The resource you want to use already exists. Please check you have
+-- provided the correct resource and try again.
+_ResourceAlreadyExistException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceAlreadyExistException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceAlreadyExistException"
+
+-- | The resource you want to use is currently in use. Please check you have
+-- provided the correct resource and try again.
+_ResourceInUseException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceInUseException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceInUseException"
+
+-- | The resource you want to use doesn’t exist. Please check you have
+-- provided the correct resource and try again.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+
+-- | The resource you want to use isn\'t available. Please check you have
+-- provided the correct resource and try again.
+_ResourceUnavailableException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceUnavailableException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceUnavailableException"
+
+-- | You have exceeded the set limits for your Amazon Kendra service. Please
+-- see Quotas[hyperlink Kendra Quotas pg] for more information, or contact
+-- <http://aws.amazon.com/aws.amazon.com/contact-us Support> to inquire
+-- about an increase of limits.
+_ServiceQuotaExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceQuotaExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceQuotaExceededException"
+
+-- | The request was denied due to request throttling. Please reduce the
+-- number of requests and try again.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+
+-- | The input fails to satisfy the constraints set by the Amazon Kendra
+-- service. Please provide the correct input and try again.
+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ValidationException =
+  Core._MatchServiceError
+    defaultService
+    "ValidationException"
diff --git a/gen/Amazonka/Kendra/Types/AccessControlConfigurationSummary.hs b/gen/Amazonka/Kendra/Types/AccessControlConfigurationSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/AccessControlConfigurationSummary.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.Kendra.Types.AccessControlConfigurationSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.AccessControlConfigurationSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Summary information on an access control configuration that you created
+-- for your documents in an index.
+--
+-- /See:/ 'newAccessControlConfigurationSummary' smart constructor.
+data AccessControlConfigurationSummary = AccessControlConfigurationSummary'
+  { -- | The identifier of the access control configuration.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AccessControlConfigurationSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'accessControlConfigurationSummary_id' - The identifier of the access control configuration.
+newAccessControlConfigurationSummary ::
+  -- | 'id'
+  Prelude.Text ->
+  AccessControlConfigurationSummary
+newAccessControlConfigurationSummary pId_ =
+  AccessControlConfigurationSummary' {id = pId_}
+
+-- | The identifier of the access control configuration.
+accessControlConfigurationSummary_id :: Lens.Lens' AccessControlConfigurationSummary Prelude.Text
+accessControlConfigurationSummary_id = Lens.lens (\AccessControlConfigurationSummary' {id} -> id) (\s@AccessControlConfigurationSummary' {} a -> s {id = a} :: AccessControlConfigurationSummary)
+
+instance
+  Data.FromJSON
+    AccessControlConfigurationSummary
+  where
+  parseJSON =
+    Data.withObject
+      "AccessControlConfigurationSummary"
+      ( \x ->
+          AccessControlConfigurationSummary'
+            Prelude.<$> (x Data..: "Id")
+      )
+
+instance
+  Prelude.Hashable
+    AccessControlConfigurationSummary
+  where
+  hashWithSalt
+    _salt
+    AccessControlConfigurationSummary' {..} =
+      _salt `Prelude.hashWithSalt` id
+
+instance
+  Prelude.NFData
+    AccessControlConfigurationSummary
+  where
+  rnf AccessControlConfigurationSummary' {..} =
+    Prelude.rnf id
diff --git a/gen/Amazonka/Kendra/Types/AccessControlListConfiguration.hs b/gen/Amazonka/Kendra/Types/AccessControlListConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/AccessControlListConfiguration.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.Kendra.Types.AccessControlListConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.AccessControlListConfiguration 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
+
+-- | Access Control List files for the documents in a data source. For the
+-- format of the file, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/s3-acl.html Access control for S3 data sources>.
+--
+-- /See:/ 'newAccessControlListConfiguration' smart constructor.
+data AccessControlListConfiguration = AccessControlListConfiguration'
+  { -- | Path to the Amazon S3 bucket that contains the ACL files.
+    keyPath :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AccessControlListConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'keyPath', 'accessControlListConfiguration_keyPath' - Path to the Amazon S3 bucket that contains the ACL files.
+newAccessControlListConfiguration ::
+  AccessControlListConfiguration
+newAccessControlListConfiguration =
+  AccessControlListConfiguration'
+    { keyPath =
+        Prelude.Nothing
+    }
+
+-- | Path to the Amazon S3 bucket that contains the ACL files.
+accessControlListConfiguration_keyPath :: Lens.Lens' AccessControlListConfiguration (Prelude.Maybe Prelude.Text)
+accessControlListConfiguration_keyPath = Lens.lens (\AccessControlListConfiguration' {keyPath} -> keyPath) (\s@AccessControlListConfiguration' {} a -> s {keyPath = a} :: AccessControlListConfiguration)
+
+instance Data.FromJSON AccessControlListConfiguration where
+  parseJSON =
+    Data.withObject
+      "AccessControlListConfiguration"
+      ( \x ->
+          AccessControlListConfiguration'
+            Prelude.<$> (x Data..:? "KeyPath")
+      )
+
+instance
+  Prelude.Hashable
+    AccessControlListConfiguration
+  where
+  hashWithSalt
+    _salt
+    AccessControlListConfiguration' {..} =
+      _salt `Prelude.hashWithSalt` keyPath
+
+instance
+  Prelude.NFData
+    AccessControlListConfiguration
+  where
+  rnf AccessControlListConfiguration' {..} =
+    Prelude.rnf keyPath
+
+instance Data.ToJSON AccessControlListConfiguration where
+  toJSON AccessControlListConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("KeyPath" Data..=) Prelude.<$> keyPath]
+      )
diff --git a/gen/Amazonka/Kendra/Types/AclConfiguration.hs b/gen/Amazonka/Kendra/Types/AclConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/AclConfiguration.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.Kendra.Types.AclConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.AclConfiguration 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 the column that should be used for filtering
+-- the query response by groups.
+--
+-- /See:/ 'newAclConfiguration' smart constructor.
+data AclConfiguration = AclConfiguration'
+  { -- | A list of groups, separated by semi-colons, that filters a query
+    -- response based on user context. The document is only returned to users
+    -- that are in one of the groups specified in the @UserContext@ field of
+    -- the @Query@ API.
+    allowedGroupsColumnName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AclConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allowedGroupsColumnName', 'aclConfiguration_allowedGroupsColumnName' - A list of groups, separated by semi-colons, that filters a query
+-- response based on user context. The document is only returned to users
+-- that are in one of the groups specified in the @UserContext@ field of
+-- the @Query@ API.
+newAclConfiguration ::
+  -- | 'allowedGroupsColumnName'
+  Prelude.Text ->
+  AclConfiguration
+newAclConfiguration pAllowedGroupsColumnName_ =
+  AclConfiguration'
+    { allowedGroupsColumnName =
+        pAllowedGroupsColumnName_
+    }
+
+-- | A list of groups, separated by semi-colons, that filters a query
+-- response based on user context. The document is only returned to users
+-- that are in one of the groups specified in the @UserContext@ field of
+-- the @Query@ API.
+aclConfiguration_allowedGroupsColumnName :: Lens.Lens' AclConfiguration Prelude.Text
+aclConfiguration_allowedGroupsColumnName = Lens.lens (\AclConfiguration' {allowedGroupsColumnName} -> allowedGroupsColumnName) (\s@AclConfiguration' {} a -> s {allowedGroupsColumnName = a} :: AclConfiguration)
+
+instance Data.FromJSON AclConfiguration where
+  parseJSON =
+    Data.withObject
+      "AclConfiguration"
+      ( \x ->
+          AclConfiguration'
+            Prelude.<$> (x Data..: "AllowedGroupsColumnName")
+      )
+
+instance Prelude.Hashable AclConfiguration where
+  hashWithSalt _salt AclConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` allowedGroupsColumnName
+
+instance Prelude.NFData AclConfiguration where
+  rnf AclConfiguration' {..} =
+    Prelude.rnf allowedGroupsColumnName
+
+instance Data.ToJSON AclConfiguration where
+  toJSON AclConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "AllowedGroupsColumnName"
+                  Data..= allowedGroupsColumnName
+              )
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/AdditionalResultAttribute.hs b/gen/Amazonka/Kendra/Types/AdditionalResultAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/AdditionalResultAttribute.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.Kendra.Types.AdditionalResultAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.AdditionalResultAttribute where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.AdditionalResultAttributeValue
+import Amazonka.Kendra.Types.AdditionalResultAttributeValueType
+import qualified Amazonka.Prelude as Prelude
+
+-- | An attribute returned from an index query.
+--
+-- /See:/ 'newAdditionalResultAttribute' smart constructor.
+data AdditionalResultAttribute = AdditionalResultAttribute'
+  { -- | The key that identifies the attribute.
+    key :: Prelude.Text,
+    -- | The data type of the @Value@ property.
+    valueType :: AdditionalResultAttributeValueType,
+    -- | An object that contains the attribute value.
+    value :: AdditionalResultAttributeValue
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AdditionalResultAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'key', 'additionalResultAttribute_key' - The key that identifies the attribute.
+--
+-- 'valueType', 'additionalResultAttribute_valueType' - The data type of the @Value@ property.
+--
+-- 'value', 'additionalResultAttribute_value' - An object that contains the attribute value.
+newAdditionalResultAttribute ::
+  -- | 'key'
+  Prelude.Text ->
+  -- | 'valueType'
+  AdditionalResultAttributeValueType ->
+  -- | 'value'
+  AdditionalResultAttributeValue ->
+  AdditionalResultAttribute
+newAdditionalResultAttribute
+  pKey_
+  pValueType_
+  pValue_ =
+    AdditionalResultAttribute'
+      { key = pKey_,
+        valueType = pValueType_,
+        value = pValue_
+      }
+
+-- | The key that identifies the attribute.
+additionalResultAttribute_key :: Lens.Lens' AdditionalResultAttribute Prelude.Text
+additionalResultAttribute_key = Lens.lens (\AdditionalResultAttribute' {key} -> key) (\s@AdditionalResultAttribute' {} a -> s {key = a} :: AdditionalResultAttribute)
+
+-- | The data type of the @Value@ property.
+additionalResultAttribute_valueType :: Lens.Lens' AdditionalResultAttribute AdditionalResultAttributeValueType
+additionalResultAttribute_valueType = Lens.lens (\AdditionalResultAttribute' {valueType} -> valueType) (\s@AdditionalResultAttribute' {} a -> s {valueType = a} :: AdditionalResultAttribute)
+
+-- | An object that contains the attribute value.
+additionalResultAttribute_value :: Lens.Lens' AdditionalResultAttribute AdditionalResultAttributeValue
+additionalResultAttribute_value = Lens.lens (\AdditionalResultAttribute' {value} -> value) (\s@AdditionalResultAttribute' {} a -> s {value = a} :: AdditionalResultAttribute)
+
+instance Data.FromJSON AdditionalResultAttribute where
+  parseJSON =
+    Data.withObject
+      "AdditionalResultAttribute"
+      ( \x ->
+          AdditionalResultAttribute'
+            Prelude.<$> (x Data..: "Key")
+            Prelude.<*> (x Data..: "ValueType")
+            Prelude.<*> (x Data..: "Value")
+      )
+
+instance Prelude.Hashable AdditionalResultAttribute where
+  hashWithSalt _salt AdditionalResultAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` valueType
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData AdditionalResultAttribute where
+  rnf AdditionalResultAttribute' {..} =
+    Prelude.rnf key
+      `Prelude.seq` Prelude.rnf valueType
+      `Prelude.seq` Prelude.rnf value
diff --git a/gen/Amazonka/Kendra/Types/AdditionalResultAttributeValue.hs b/gen/Amazonka/Kendra/Types/AdditionalResultAttributeValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/AdditionalResultAttributeValue.hs
@@ -0,0 +1,85 @@
+{-# 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.Kendra.Types.AdditionalResultAttributeValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.AdditionalResultAttributeValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.TextWithHighlights
+import qualified Amazonka.Prelude as Prelude
+
+-- | An attribute returned with a document from a search.
+--
+-- /See:/ 'newAdditionalResultAttributeValue' smart constructor.
+data AdditionalResultAttributeValue = AdditionalResultAttributeValue'
+  { -- | The text associated with the attribute and information about the
+    -- highlight to apply to the text.
+    textWithHighlightsValue :: Prelude.Maybe TextWithHighlights
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AdditionalResultAttributeValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'textWithHighlightsValue', 'additionalResultAttributeValue_textWithHighlightsValue' - The text associated with the attribute and information about the
+-- highlight to apply to the text.
+newAdditionalResultAttributeValue ::
+  AdditionalResultAttributeValue
+newAdditionalResultAttributeValue =
+  AdditionalResultAttributeValue'
+    { textWithHighlightsValue =
+        Prelude.Nothing
+    }
+
+-- | The text associated with the attribute and information about the
+-- highlight to apply to the text.
+additionalResultAttributeValue_textWithHighlightsValue :: Lens.Lens' AdditionalResultAttributeValue (Prelude.Maybe TextWithHighlights)
+additionalResultAttributeValue_textWithHighlightsValue = Lens.lens (\AdditionalResultAttributeValue' {textWithHighlightsValue} -> textWithHighlightsValue) (\s@AdditionalResultAttributeValue' {} a -> s {textWithHighlightsValue = a} :: AdditionalResultAttributeValue)
+
+instance Data.FromJSON AdditionalResultAttributeValue where
+  parseJSON =
+    Data.withObject
+      "AdditionalResultAttributeValue"
+      ( \x ->
+          AdditionalResultAttributeValue'
+            Prelude.<$> (x Data..:? "TextWithHighlightsValue")
+      )
+
+instance
+  Prelude.Hashable
+    AdditionalResultAttributeValue
+  where
+  hashWithSalt
+    _salt
+    AdditionalResultAttributeValue' {..} =
+      _salt
+        `Prelude.hashWithSalt` textWithHighlightsValue
+
+instance
+  Prelude.NFData
+    AdditionalResultAttributeValue
+  where
+  rnf AdditionalResultAttributeValue' {..} =
+    Prelude.rnf textWithHighlightsValue
diff --git a/gen/Amazonka/Kendra/Types/AdditionalResultAttributeValueType.hs b/gen/Amazonka/Kendra/Types/AdditionalResultAttributeValueType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/AdditionalResultAttributeValueType.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.Kendra.Types.AdditionalResultAttributeValueType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.AdditionalResultAttributeValueType
+  ( AdditionalResultAttributeValueType
+      ( ..,
+        AdditionalResultAttributeValueType_TEXT_WITH_HIGHLIGHTS_VALUE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AdditionalResultAttributeValueType = AdditionalResultAttributeValueType'
+  { fromAdditionalResultAttributeValueType ::
+      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 AdditionalResultAttributeValueType_TEXT_WITH_HIGHLIGHTS_VALUE :: AdditionalResultAttributeValueType
+pattern AdditionalResultAttributeValueType_TEXT_WITH_HIGHLIGHTS_VALUE = AdditionalResultAttributeValueType' "TEXT_WITH_HIGHLIGHTS_VALUE"
+
+{-# COMPLETE
+  AdditionalResultAttributeValueType_TEXT_WITH_HIGHLIGHTS_VALUE,
+  AdditionalResultAttributeValueType'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/AlfrescoConfiguration.hs b/gen/Amazonka/Kendra/Types/AlfrescoConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/AlfrescoConfiguration.hs
@@ -0,0 +1,407 @@
+{-# 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.Kendra.Types.AlfrescoConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.AlfrescoConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.AlfrescoEntity
+import Amazonka.Kendra.Types.DataSourceToIndexFieldMapping
+import Amazonka.Kendra.Types.DataSourceVpcConfiguration
+import Amazonka.Kendra.Types.S3Path
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information to connect to Alfresco as your
+-- data source.
+--
+-- Alfresco data source connector is currently in preview mode. Basic
+-- authentication is currently supported. If you would like to use Alfresco
+-- connector in production, contact
+-- <http://aws.amazon.com/contact-us/ Support>.
+--
+-- /See:/ 'newAlfrescoConfiguration' smart constructor.
+data AlfrescoConfiguration = AlfrescoConfiguration'
+  { -- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+    -- field names of Alfresco blogs to Amazon Kendra index field names. To
+    -- create custom fields, use the @UpdateIndex@ API before you map to
+    -- Alfresco fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The Alfresco data source field names must exist in your Alfresco custom
+    -- metadata.
+    blogFieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | @TRUE@ to index comments of blogs and other content.
+    crawlComments :: Prelude.Maybe Prelude.Bool,
+    -- | @TRUE@ to index shared files.
+    crawlSystemFolders :: Prelude.Maybe Prelude.Bool,
+    -- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+    -- field names of Alfresco document libraries to Amazon Kendra index field
+    -- names. To create custom fields, use the @UpdateIndex@ API before you map
+    -- to Alfresco fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The Alfresco data source field names must exist in your Alfresco custom
+    -- metadata.
+    documentLibraryFieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | Specify whether to index document libraries, wikis, or blogs. You can
+    -- specify one or more of these options.
+    entityFilter :: Prelude.Maybe (Prelude.NonEmpty AlfrescoEntity),
+    -- | A list of regular expression patterns to exclude certain files in your
+    -- Alfresco data source. Files that match the patterns are excluded from
+    -- the index. Files that don\'t match the patterns are included in the
+    -- index. If a file matches both an inclusion pattern and an exclusion
+    -- pattern, the exclusion pattern takes precedence and the file isn\'t
+    -- included in the index.
+    exclusionPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | A list of regular expression patterns to include certain files in your
+    -- Alfresco data source. Files that match the patterns are included in the
+    -- index. Files that don\'t match the patterns are excluded from the index.
+    -- If a file matches both an inclusion pattern and an exclusion pattern,
+    -- the exclusion pattern takes precedence and the file isn\'t included in
+    -- the index.
+    inclusionPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | Configuration information for an Amazon Virtual Private Cloud to connect
+    -- to your Alfresco. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+    vpcConfiguration :: Prelude.Maybe DataSourceVpcConfiguration,
+    -- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+    -- field names of Alfresco wikis to Amazon Kendra index field names. To
+    -- create custom fields, use the @UpdateIndex@ API before you map to
+    -- Alfresco fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The Alfresco data source field names must exist in your Alfresco custom
+    -- metadata.
+    wikiFieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | The URL of the Alfresco site. For example, /https:\/\/hostname:8080/.
+    siteUrl :: Prelude.Text,
+    -- | The identifier of the Alfresco site. For example, /my-site/.
+    siteId :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of an Secrets Manager secret that
+    -- contains the key-value pairs required to connect to your Alfresco data
+    -- source. The secret must contain a JSON structure with the following
+    -- keys:
+    --
+    -- -   username—The user name of the Alfresco account.
+    --
+    -- -   password—The password of the Alfresco account.
+    secretArn :: Prelude.Text,
+    -- | The path to the SSL certificate stored in an Amazon S3 bucket. You use
+    -- this to connect to Alfresco if you require a secure SSL connection.
+    --
+    -- You can simply generate a self-signed X509 certificate on any computer
+    -- using OpenSSL. For an example of using OpenSSL to create an X509
+    -- certificate, see
+    -- <https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/configuring-https-ssl.html Create and sign an X509 certificate>.
+    sslCertificateS3Path :: S3Path
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AlfrescoConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'blogFieldMappings', 'alfrescoConfiguration_blogFieldMappings' - A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of Alfresco blogs to Amazon Kendra index field names. To
+-- create custom fields, use the @UpdateIndex@ API before you map to
+-- Alfresco fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Alfresco data source field names must exist in your Alfresco custom
+-- metadata.
+--
+-- 'crawlComments', 'alfrescoConfiguration_crawlComments' - @TRUE@ to index comments of blogs and other content.
+--
+-- 'crawlSystemFolders', 'alfrescoConfiguration_crawlSystemFolders' - @TRUE@ to index shared files.
+--
+-- 'documentLibraryFieldMappings', 'alfrescoConfiguration_documentLibraryFieldMappings' - A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of Alfresco document libraries to Amazon Kendra index field
+-- names. To create custom fields, use the @UpdateIndex@ API before you map
+-- to Alfresco fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Alfresco data source field names must exist in your Alfresco custom
+-- metadata.
+--
+-- 'entityFilter', 'alfrescoConfiguration_entityFilter' - Specify whether to index document libraries, wikis, or blogs. You can
+-- specify one or more of these options.
+--
+-- 'exclusionPatterns', 'alfrescoConfiguration_exclusionPatterns' - A list of regular expression patterns to exclude certain files in your
+-- Alfresco data source. Files that match the patterns are excluded from
+-- the index. Files that don\'t match the patterns are included in the
+-- index. If a file matches both an inclusion pattern and an exclusion
+-- pattern, the exclusion pattern takes precedence and the file isn\'t
+-- included in the index.
+--
+-- 'inclusionPatterns', 'alfrescoConfiguration_inclusionPatterns' - A list of regular expression patterns to include certain files in your
+-- Alfresco data source. Files that match the patterns are included in the
+-- index. Files that don\'t match the patterns are excluded from the index.
+-- If a file matches both an inclusion pattern and an exclusion pattern,
+-- the exclusion pattern takes precedence and the file isn\'t included in
+-- the index.
+--
+-- 'vpcConfiguration', 'alfrescoConfiguration_vpcConfiguration' - Configuration information for an Amazon Virtual Private Cloud to connect
+-- to your Alfresco. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+--
+-- 'wikiFieldMappings', 'alfrescoConfiguration_wikiFieldMappings' - A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of Alfresco wikis to Amazon Kendra index field names. To
+-- create custom fields, use the @UpdateIndex@ API before you map to
+-- Alfresco fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Alfresco data source field names must exist in your Alfresco custom
+-- metadata.
+--
+-- 'siteUrl', 'alfrescoConfiguration_siteUrl' - The URL of the Alfresco site. For example, /https:\/\/hostname:8080/.
+--
+-- 'siteId', 'alfrescoConfiguration_siteId' - The identifier of the Alfresco site. For example, /my-site/.
+--
+-- 'secretArn', 'alfrescoConfiguration_secretArn' - The Amazon Resource Name (ARN) of an Secrets Manager secret that
+-- contains the key-value pairs required to connect to your Alfresco data
+-- source. The secret must contain a JSON structure with the following
+-- keys:
+--
+-- -   username—The user name of the Alfresco account.
+--
+-- -   password—The password of the Alfresco account.
+--
+-- 'sslCertificateS3Path', 'alfrescoConfiguration_sslCertificateS3Path' - The path to the SSL certificate stored in an Amazon S3 bucket. You use
+-- this to connect to Alfresco if you require a secure SSL connection.
+--
+-- You can simply generate a self-signed X509 certificate on any computer
+-- using OpenSSL. For an example of using OpenSSL to create an X509
+-- certificate, see
+-- <https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/configuring-https-ssl.html Create and sign an X509 certificate>.
+newAlfrescoConfiguration ::
+  -- | 'siteUrl'
+  Prelude.Text ->
+  -- | 'siteId'
+  Prelude.Text ->
+  -- | 'secretArn'
+  Prelude.Text ->
+  -- | 'sslCertificateS3Path'
+  S3Path ->
+  AlfrescoConfiguration
+newAlfrescoConfiguration
+  pSiteUrl_
+  pSiteId_
+  pSecretArn_
+  pSslCertificateS3Path_ =
+    AlfrescoConfiguration'
+      { blogFieldMappings =
+          Prelude.Nothing,
+        crawlComments = Prelude.Nothing,
+        crawlSystemFolders = Prelude.Nothing,
+        documentLibraryFieldMappings = Prelude.Nothing,
+        entityFilter = Prelude.Nothing,
+        exclusionPatterns = Prelude.Nothing,
+        inclusionPatterns = Prelude.Nothing,
+        vpcConfiguration = Prelude.Nothing,
+        wikiFieldMappings = Prelude.Nothing,
+        siteUrl = pSiteUrl_,
+        siteId = pSiteId_,
+        secretArn = pSecretArn_,
+        sslCertificateS3Path = pSslCertificateS3Path_
+      }
+
+-- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of Alfresco blogs to Amazon Kendra index field names. To
+-- create custom fields, use the @UpdateIndex@ API before you map to
+-- Alfresco fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Alfresco data source field names must exist in your Alfresco custom
+-- metadata.
+alfrescoConfiguration_blogFieldMappings :: Lens.Lens' AlfrescoConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+alfrescoConfiguration_blogFieldMappings = Lens.lens (\AlfrescoConfiguration' {blogFieldMappings} -> blogFieldMappings) (\s@AlfrescoConfiguration' {} a -> s {blogFieldMappings = a} :: AlfrescoConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | @TRUE@ to index comments of blogs and other content.
+alfrescoConfiguration_crawlComments :: Lens.Lens' AlfrescoConfiguration (Prelude.Maybe Prelude.Bool)
+alfrescoConfiguration_crawlComments = Lens.lens (\AlfrescoConfiguration' {crawlComments} -> crawlComments) (\s@AlfrescoConfiguration' {} a -> s {crawlComments = a} :: AlfrescoConfiguration)
+
+-- | @TRUE@ to index shared files.
+alfrescoConfiguration_crawlSystemFolders :: Lens.Lens' AlfrescoConfiguration (Prelude.Maybe Prelude.Bool)
+alfrescoConfiguration_crawlSystemFolders = Lens.lens (\AlfrescoConfiguration' {crawlSystemFolders} -> crawlSystemFolders) (\s@AlfrescoConfiguration' {} a -> s {crawlSystemFolders = a} :: AlfrescoConfiguration)
+
+-- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of Alfresco document libraries to Amazon Kendra index field
+-- names. To create custom fields, use the @UpdateIndex@ API before you map
+-- to Alfresco fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Alfresco data source field names must exist in your Alfresco custom
+-- metadata.
+alfrescoConfiguration_documentLibraryFieldMappings :: Lens.Lens' AlfrescoConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+alfrescoConfiguration_documentLibraryFieldMappings = Lens.lens (\AlfrescoConfiguration' {documentLibraryFieldMappings} -> documentLibraryFieldMappings) (\s@AlfrescoConfiguration' {} a -> s {documentLibraryFieldMappings = a} :: AlfrescoConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specify whether to index document libraries, wikis, or blogs. You can
+-- specify one or more of these options.
+alfrescoConfiguration_entityFilter :: Lens.Lens' AlfrescoConfiguration (Prelude.Maybe (Prelude.NonEmpty AlfrescoEntity))
+alfrescoConfiguration_entityFilter = Lens.lens (\AlfrescoConfiguration' {entityFilter} -> entityFilter) (\s@AlfrescoConfiguration' {} a -> s {entityFilter = a} :: AlfrescoConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of regular expression patterns to exclude certain files in your
+-- Alfresco data source. Files that match the patterns are excluded from
+-- the index. Files that don\'t match the patterns are included in the
+-- index. If a file matches both an inclusion pattern and an exclusion
+-- pattern, the exclusion pattern takes precedence and the file isn\'t
+-- included in the index.
+alfrescoConfiguration_exclusionPatterns :: Lens.Lens' AlfrescoConfiguration (Prelude.Maybe [Prelude.Text])
+alfrescoConfiguration_exclusionPatterns = Lens.lens (\AlfrescoConfiguration' {exclusionPatterns} -> exclusionPatterns) (\s@AlfrescoConfiguration' {} a -> s {exclusionPatterns = a} :: AlfrescoConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of regular expression patterns to include certain files in your
+-- Alfresco data source. Files that match the patterns are included in the
+-- index. Files that don\'t match the patterns are excluded from the index.
+-- If a file matches both an inclusion pattern and an exclusion pattern,
+-- the exclusion pattern takes precedence and the file isn\'t included in
+-- the index.
+alfrescoConfiguration_inclusionPatterns :: Lens.Lens' AlfrescoConfiguration (Prelude.Maybe [Prelude.Text])
+alfrescoConfiguration_inclusionPatterns = Lens.lens (\AlfrescoConfiguration' {inclusionPatterns} -> inclusionPatterns) (\s@AlfrescoConfiguration' {} a -> s {inclusionPatterns = a} :: AlfrescoConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Configuration information for an Amazon Virtual Private Cloud to connect
+-- to your Alfresco. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+alfrescoConfiguration_vpcConfiguration :: Lens.Lens' AlfrescoConfiguration (Prelude.Maybe DataSourceVpcConfiguration)
+alfrescoConfiguration_vpcConfiguration = Lens.lens (\AlfrescoConfiguration' {vpcConfiguration} -> vpcConfiguration) (\s@AlfrescoConfiguration' {} a -> s {vpcConfiguration = a} :: AlfrescoConfiguration)
+
+-- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of Alfresco wikis to Amazon Kendra index field names. To
+-- create custom fields, use the @UpdateIndex@ API before you map to
+-- Alfresco fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Alfresco data source field names must exist in your Alfresco custom
+-- metadata.
+alfrescoConfiguration_wikiFieldMappings :: Lens.Lens' AlfrescoConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+alfrescoConfiguration_wikiFieldMappings = Lens.lens (\AlfrescoConfiguration' {wikiFieldMappings} -> wikiFieldMappings) (\s@AlfrescoConfiguration' {} a -> s {wikiFieldMappings = a} :: AlfrescoConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The URL of the Alfresco site. For example, /https:\/\/hostname:8080/.
+alfrescoConfiguration_siteUrl :: Lens.Lens' AlfrescoConfiguration Prelude.Text
+alfrescoConfiguration_siteUrl = Lens.lens (\AlfrescoConfiguration' {siteUrl} -> siteUrl) (\s@AlfrescoConfiguration' {} a -> s {siteUrl = a} :: AlfrescoConfiguration)
+
+-- | The identifier of the Alfresco site. For example, /my-site/.
+alfrescoConfiguration_siteId :: Lens.Lens' AlfrescoConfiguration Prelude.Text
+alfrescoConfiguration_siteId = Lens.lens (\AlfrescoConfiguration' {siteId} -> siteId) (\s@AlfrescoConfiguration' {} a -> s {siteId = a} :: AlfrescoConfiguration)
+
+-- | The Amazon Resource Name (ARN) of an Secrets Manager secret that
+-- contains the key-value pairs required to connect to your Alfresco data
+-- source. The secret must contain a JSON structure with the following
+-- keys:
+--
+-- -   username—The user name of the Alfresco account.
+--
+-- -   password—The password of the Alfresco account.
+alfrescoConfiguration_secretArn :: Lens.Lens' AlfrescoConfiguration Prelude.Text
+alfrescoConfiguration_secretArn = Lens.lens (\AlfrescoConfiguration' {secretArn} -> secretArn) (\s@AlfrescoConfiguration' {} a -> s {secretArn = a} :: AlfrescoConfiguration)
+
+-- | The path to the SSL certificate stored in an Amazon S3 bucket. You use
+-- this to connect to Alfresco if you require a secure SSL connection.
+--
+-- You can simply generate a self-signed X509 certificate on any computer
+-- using OpenSSL. For an example of using OpenSSL to create an X509
+-- certificate, see
+-- <https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/configuring-https-ssl.html Create and sign an X509 certificate>.
+alfrescoConfiguration_sslCertificateS3Path :: Lens.Lens' AlfrescoConfiguration S3Path
+alfrescoConfiguration_sslCertificateS3Path = Lens.lens (\AlfrescoConfiguration' {sslCertificateS3Path} -> sslCertificateS3Path) (\s@AlfrescoConfiguration' {} a -> s {sslCertificateS3Path = a} :: AlfrescoConfiguration)
+
+instance Data.FromJSON AlfrescoConfiguration where
+  parseJSON =
+    Data.withObject
+      "AlfrescoConfiguration"
+      ( \x ->
+          AlfrescoConfiguration'
+            Prelude.<$> (x Data..:? "BlogFieldMappings")
+            Prelude.<*> (x Data..:? "CrawlComments")
+            Prelude.<*> (x Data..:? "CrawlSystemFolders")
+            Prelude.<*> (x Data..:? "DocumentLibraryFieldMappings")
+            Prelude.<*> (x Data..:? "EntityFilter")
+            Prelude.<*> ( x
+                            Data..:? "ExclusionPatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "InclusionPatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "VpcConfiguration")
+            Prelude.<*> (x Data..:? "WikiFieldMappings")
+            Prelude.<*> (x Data..: "SiteUrl")
+            Prelude.<*> (x Data..: "SiteId")
+            Prelude.<*> (x Data..: "SecretArn")
+            Prelude.<*> (x Data..: "SslCertificateS3Path")
+      )
+
+instance Prelude.Hashable AlfrescoConfiguration where
+  hashWithSalt _salt AlfrescoConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` blogFieldMappings
+      `Prelude.hashWithSalt` crawlComments
+      `Prelude.hashWithSalt` crawlSystemFolders
+      `Prelude.hashWithSalt` documentLibraryFieldMappings
+      `Prelude.hashWithSalt` entityFilter
+      `Prelude.hashWithSalt` exclusionPatterns
+      `Prelude.hashWithSalt` inclusionPatterns
+      `Prelude.hashWithSalt` vpcConfiguration
+      `Prelude.hashWithSalt` wikiFieldMappings
+      `Prelude.hashWithSalt` siteUrl
+      `Prelude.hashWithSalt` siteId
+      `Prelude.hashWithSalt` secretArn
+      `Prelude.hashWithSalt` sslCertificateS3Path
+
+instance Prelude.NFData AlfrescoConfiguration where
+  rnf AlfrescoConfiguration' {..} =
+    Prelude.rnf blogFieldMappings
+      `Prelude.seq` Prelude.rnf crawlComments
+      `Prelude.seq` Prelude.rnf crawlSystemFolders
+      `Prelude.seq` Prelude.rnf documentLibraryFieldMappings
+      `Prelude.seq` Prelude.rnf entityFilter
+      `Prelude.seq` Prelude.rnf exclusionPatterns
+      `Prelude.seq` Prelude.rnf inclusionPatterns
+      `Prelude.seq` Prelude.rnf vpcConfiguration
+      `Prelude.seq` Prelude.rnf wikiFieldMappings
+      `Prelude.seq` Prelude.rnf siteUrl
+      `Prelude.seq` Prelude.rnf siteId
+      `Prelude.seq` Prelude.rnf secretArn
+      `Prelude.seq` Prelude.rnf sslCertificateS3Path
+
+instance Data.ToJSON AlfrescoConfiguration where
+  toJSON AlfrescoConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("BlogFieldMappings" Data..=)
+              Prelude.<$> blogFieldMappings,
+            ("CrawlComments" Data..=) Prelude.<$> crawlComments,
+            ("CrawlSystemFolders" Data..=)
+              Prelude.<$> crawlSystemFolders,
+            ("DocumentLibraryFieldMappings" Data..=)
+              Prelude.<$> documentLibraryFieldMappings,
+            ("EntityFilter" Data..=) Prelude.<$> entityFilter,
+            ("ExclusionPatterns" Data..=)
+              Prelude.<$> exclusionPatterns,
+            ("InclusionPatterns" Data..=)
+              Prelude.<$> inclusionPatterns,
+            ("VpcConfiguration" Data..=)
+              Prelude.<$> vpcConfiguration,
+            ("WikiFieldMappings" Data..=)
+              Prelude.<$> wikiFieldMappings,
+            Prelude.Just ("SiteUrl" Data..= siteUrl),
+            Prelude.Just ("SiteId" Data..= siteId),
+            Prelude.Just ("SecretArn" Data..= secretArn),
+            Prelude.Just
+              ( "SslCertificateS3Path"
+                  Data..= sslCertificateS3Path
+              )
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/AlfrescoEntity.hs b/gen/Amazonka/Kendra/Types/AlfrescoEntity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/AlfrescoEntity.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.Kendra.Types.AlfrescoEntity
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.AlfrescoEntity
+  ( AlfrescoEntity
+      ( ..,
+        AlfrescoEntity_Blog,
+        AlfrescoEntity_DocumentLibrary,
+        AlfrescoEntity_Wiki
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AlfrescoEntity = AlfrescoEntity'
+  { fromAlfrescoEntity ::
+      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 AlfrescoEntity_Blog :: AlfrescoEntity
+pattern AlfrescoEntity_Blog = AlfrescoEntity' "blog"
+
+pattern AlfrescoEntity_DocumentLibrary :: AlfrescoEntity
+pattern AlfrescoEntity_DocumentLibrary = AlfrescoEntity' "documentLibrary"
+
+pattern AlfrescoEntity_Wiki :: AlfrescoEntity
+pattern AlfrescoEntity_Wiki = AlfrescoEntity' "wiki"
+
+{-# COMPLETE
+  AlfrescoEntity_Blog,
+  AlfrescoEntity_DocumentLibrary,
+  AlfrescoEntity_Wiki,
+  AlfrescoEntity'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/AttributeFilter.hs b/gen/Amazonka/Kendra/Types/AttributeFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/AttributeFilter.hs
@@ -0,0 +1,231 @@
+{-# 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.Kendra.Types.AttributeFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.AttributeFilter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DocumentAttribute
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides filtering the query results based on document attributes or
+-- metadata fields.
+--
+-- When you use the @AndAllFilters@ or @OrAllFilters@, filters you can use
+-- 2 layers under the first attribute filter. For example, you can use:
+--
+-- @\<AndAllFilters>@
+--
+-- 1.  @ \<OrAllFilters>@
+--
+-- 2.  @ \<EqualsTo>@
+--
+-- If you use more than 2 layers, you receive a @ValidationException@
+-- exception with the message \"@AttributeFilter@ cannot have a depth of
+-- more than 2.\"
+--
+-- If you use more than 10 attribute filters in a given list for
+-- @AndAllFilters@ or @OrAllFilters@, you receive a @ValidationException@
+-- with the message \"@AttributeFilter@ cannot have a length of more than
+-- 10\".
+--
+-- /See:/ 'newAttributeFilter' smart constructor.
+data AttributeFilter = AttributeFilter'
+  { -- | Performs a logical @AND@ operation on all supplied filters.
+    andAllFilters :: Prelude.Maybe [AttributeFilter],
+    -- | Returns true when a document contains all of the specified document
+    -- attributes or metadata fields. This filter is only applicable to
+    -- @StringListValue@ metadata.
+    containsAll :: Prelude.Maybe DocumentAttribute,
+    -- | Returns true when a document contains any of the specified document
+    -- attributes or metadata fields. This filter is only applicable to
+    -- @StringListValue@ metadata.
+    containsAny :: Prelude.Maybe DocumentAttribute,
+    -- | Performs an equals operation on two document attributes or metadata
+    -- fields.
+    equalsTo :: Prelude.Maybe DocumentAttribute,
+    -- | Performs a greater than operation on two document attributes or metadata
+    -- fields. Use with a document attribute of type @Date@ or @Long@.
+    greaterThan :: Prelude.Maybe DocumentAttribute,
+    -- | Performs a greater or equals than operation on two document attributes
+    -- or metadata fields. Use with a document attribute of type @Date@ or
+    -- @Long@.
+    greaterThanOrEquals :: Prelude.Maybe DocumentAttribute,
+    -- | Performs a less than operation on two document attributes or metadata
+    -- fields. Use with a document attribute of type @Date@ or @Long@.
+    lessThan :: Prelude.Maybe DocumentAttribute,
+    -- | Performs a less than or equals operation on two document attributes or
+    -- metadata fields. Use with a document attribute of type @Date@ or @Long@.
+    lessThanOrEquals :: Prelude.Maybe DocumentAttribute,
+    -- | Performs a logical @NOT@ operation on all supplied filters.
+    notFilter :: Prelude.Maybe AttributeFilter,
+    -- | Performs a logical @OR@ operation on all supplied filters.
+    orAllFilters :: Prelude.Maybe [AttributeFilter]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AttributeFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'andAllFilters', 'attributeFilter_andAllFilters' - Performs a logical @AND@ operation on all supplied filters.
+--
+-- 'containsAll', 'attributeFilter_containsAll' - Returns true when a document contains all of the specified document
+-- attributes or metadata fields. This filter is only applicable to
+-- @StringListValue@ metadata.
+--
+-- 'containsAny', 'attributeFilter_containsAny' - Returns true when a document contains any of the specified document
+-- attributes or metadata fields. This filter is only applicable to
+-- @StringListValue@ metadata.
+--
+-- 'equalsTo', 'attributeFilter_equalsTo' - Performs an equals operation on two document attributes or metadata
+-- fields.
+--
+-- 'greaterThan', 'attributeFilter_greaterThan' - Performs a greater than operation on two document attributes or metadata
+-- fields. Use with a document attribute of type @Date@ or @Long@.
+--
+-- 'greaterThanOrEquals', 'attributeFilter_greaterThanOrEquals' - Performs a greater or equals than operation on two document attributes
+-- or metadata fields. Use with a document attribute of type @Date@ or
+-- @Long@.
+--
+-- 'lessThan', 'attributeFilter_lessThan' - Performs a less than operation on two document attributes or metadata
+-- fields. Use with a document attribute of type @Date@ or @Long@.
+--
+-- 'lessThanOrEquals', 'attributeFilter_lessThanOrEquals' - Performs a less than or equals operation on two document attributes or
+-- metadata fields. Use with a document attribute of type @Date@ or @Long@.
+--
+-- 'notFilter', 'attributeFilter_notFilter' - Performs a logical @NOT@ operation on all supplied filters.
+--
+-- 'orAllFilters', 'attributeFilter_orAllFilters' - Performs a logical @OR@ operation on all supplied filters.
+newAttributeFilter ::
+  AttributeFilter
+newAttributeFilter =
+  AttributeFilter'
+    { andAllFilters = Prelude.Nothing,
+      containsAll = Prelude.Nothing,
+      containsAny = Prelude.Nothing,
+      equalsTo = Prelude.Nothing,
+      greaterThan = Prelude.Nothing,
+      greaterThanOrEquals = Prelude.Nothing,
+      lessThan = Prelude.Nothing,
+      lessThanOrEquals = Prelude.Nothing,
+      notFilter = Prelude.Nothing,
+      orAllFilters = Prelude.Nothing
+    }
+
+-- | Performs a logical @AND@ operation on all supplied filters.
+attributeFilter_andAllFilters :: Lens.Lens' AttributeFilter (Prelude.Maybe [AttributeFilter])
+attributeFilter_andAllFilters = Lens.lens (\AttributeFilter' {andAllFilters} -> andAllFilters) (\s@AttributeFilter' {} a -> s {andAllFilters = a} :: AttributeFilter) Prelude.. Lens.mapping Lens.coerced
+
+-- | Returns true when a document contains all of the specified document
+-- attributes or metadata fields. This filter is only applicable to
+-- @StringListValue@ metadata.
+attributeFilter_containsAll :: Lens.Lens' AttributeFilter (Prelude.Maybe DocumentAttribute)
+attributeFilter_containsAll = Lens.lens (\AttributeFilter' {containsAll} -> containsAll) (\s@AttributeFilter' {} a -> s {containsAll = a} :: AttributeFilter)
+
+-- | Returns true when a document contains any of the specified document
+-- attributes or metadata fields. This filter is only applicable to
+-- @StringListValue@ metadata.
+attributeFilter_containsAny :: Lens.Lens' AttributeFilter (Prelude.Maybe DocumentAttribute)
+attributeFilter_containsAny = Lens.lens (\AttributeFilter' {containsAny} -> containsAny) (\s@AttributeFilter' {} a -> s {containsAny = a} :: AttributeFilter)
+
+-- | Performs an equals operation on two document attributes or metadata
+-- fields.
+attributeFilter_equalsTo :: Lens.Lens' AttributeFilter (Prelude.Maybe DocumentAttribute)
+attributeFilter_equalsTo = Lens.lens (\AttributeFilter' {equalsTo} -> equalsTo) (\s@AttributeFilter' {} a -> s {equalsTo = a} :: AttributeFilter)
+
+-- | Performs a greater than operation on two document attributes or metadata
+-- fields. Use with a document attribute of type @Date@ or @Long@.
+attributeFilter_greaterThan :: Lens.Lens' AttributeFilter (Prelude.Maybe DocumentAttribute)
+attributeFilter_greaterThan = Lens.lens (\AttributeFilter' {greaterThan} -> greaterThan) (\s@AttributeFilter' {} a -> s {greaterThan = a} :: AttributeFilter)
+
+-- | Performs a greater or equals than operation on two document attributes
+-- or metadata fields. Use with a document attribute of type @Date@ or
+-- @Long@.
+attributeFilter_greaterThanOrEquals :: Lens.Lens' AttributeFilter (Prelude.Maybe DocumentAttribute)
+attributeFilter_greaterThanOrEquals = Lens.lens (\AttributeFilter' {greaterThanOrEquals} -> greaterThanOrEquals) (\s@AttributeFilter' {} a -> s {greaterThanOrEquals = a} :: AttributeFilter)
+
+-- | Performs a less than operation on two document attributes or metadata
+-- fields. Use with a document attribute of type @Date@ or @Long@.
+attributeFilter_lessThan :: Lens.Lens' AttributeFilter (Prelude.Maybe DocumentAttribute)
+attributeFilter_lessThan = Lens.lens (\AttributeFilter' {lessThan} -> lessThan) (\s@AttributeFilter' {} a -> s {lessThan = a} :: AttributeFilter)
+
+-- | Performs a less than or equals operation on two document attributes or
+-- metadata fields. Use with a document attribute of type @Date@ or @Long@.
+attributeFilter_lessThanOrEquals :: Lens.Lens' AttributeFilter (Prelude.Maybe DocumentAttribute)
+attributeFilter_lessThanOrEquals = Lens.lens (\AttributeFilter' {lessThanOrEquals} -> lessThanOrEquals) (\s@AttributeFilter' {} a -> s {lessThanOrEquals = a} :: AttributeFilter)
+
+-- | Performs a logical @NOT@ operation on all supplied filters.
+attributeFilter_notFilter :: Lens.Lens' AttributeFilter (Prelude.Maybe AttributeFilter)
+attributeFilter_notFilter = Lens.lens (\AttributeFilter' {notFilter} -> notFilter) (\s@AttributeFilter' {} a -> s {notFilter = a} :: AttributeFilter)
+
+-- | Performs a logical @OR@ operation on all supplied filters.
+attributeFilter_orAllFilters :: Lens.Lens' AttributeFilter (Prelude.Maybe [AttributeFilter])
+attributeFilter_orAllFilters = Lens.lens (\AttributeFilter' {orAllFilters} -> orAllFilters) (\s@AttributeFilter' {} a -> s {orAllFilters = a} :: AttributeFilter) Prelude.. Lens.mapping Lens.coerced
+
+instance Prelude.Hashable AttributeFilter where
+  hashWithSalt _salt AttributeFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` andAllFilters
+      `Prelude.hashWithSalt` containsAll
+      `Prelude.hashWithSalt` containsAny
+      `Prelude.hashWithSalt` equalsTo
+      `Prelude.hashWithSalt` greaterThan
+      `Prelude.hashWithSalt` greaterThanOrEquals
+      `Prelude.hashWithSalt` lessThan
+      `Prelude.hashWithSalt` lessThanOrEquals
+      `Prelude.hashWithSalt` notFilter
+      `Prelude.hashWithSalt` orAllFilters
+
+instance Prelude.NFData AttributeFilter where
+  rnf AttributeFilter' {..} =
+    Prelude.rnf andAllFilters
+      `Prelude.seq` Prelude.rnf containsAll
+      `Prelude.seq` Prelude.rnf containsAny
+      `Prelude.seq` Prelude.rnf equalsTo
+      `Prelude.seq` Prelude.rnf greaterThan
+      `Prelude.seq` Prelude.rnf greaterThanOrEquals
+      `Prelude.seq` Prelude.rnf lessThan
+      `Prelude.seq` Prelude.rnf lessThanOrEquals
+      `Prelude.seq` Prelude.rnf notFilter
+      `Prelude.seq` Prelude.rnf orAllFilters
+
+instance Data.ToJSON AttributeFilter where
+  toJSON AttributeFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AndAllFilters" Data..=) Prelude.<$> andAllFilters,
+            ("ContainsAll" Data..=) Prelude.<$> containsAll,
+            ("ContainsAny" Data..=) Prelude.<$> containsAny,
+            ("EqualsTo" Data..=) Prelude.<$> equalsTo,
+            ("GreaterThan" Data..=) Prelude.<$> greaterThan,
+            ("GreaterThanOrEquals" Data..=)
+              Prelude.<$> greaterThanOrEquals,
+            ("LessThan" Data..=) Prelude.<$> lessThan,
+            ("LessThanOrEquals" Data..=)
+              Prelude.<$> lessThanOrEquals,
+            ("NotFilter" Data..=) Prelude.<$> notFilter,
+            ("OrAllFilters" Data..=) Prelude.<$> orAllFilters
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/AuthenticationConfiguration.hs b/gen/Amazonka/Kendra/Types/AuthenticationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/AuthenticationConfiguration.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.Kendra.Types.AuthenticationConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.AuthenticationConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.BasicAuthenticationConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information to connect to websites that
+-- require user authentication.
+--
+-- /See:/ 'newAuthenticationConfiguration' smart constructor.
+data AuthenticationConfiguration = AuthenticationConfiguration'
+  { -- | The list of configuration information that\'s required to connect to and
+    -- crawl a website host using basic authentication credentials.
+    --
+    -- The list includes the name and port number of the website host.
+    basicAuthentication :: Prelude.Maybe [BasicAuthenticationConfiguration]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AuthenticationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'basicAuthentication', 'authenticationConfiguration_basicAuthentication' - The list of configuration information that\'s required to connect to and
+-- crawl a website host using basic authentication credentials.
+--
+-- The list includes the name and port number of the website host.
+newAuthenticationConfiguration ::
+  AuthenticationConfiguration
+newAuthenticationConfiguration =
+  AuthenticationConfiguration'
+    { basicAuthentication =
+        Prelude.Nothing
+    }
+
+-- | The list of configuration information that\'s required to connect to and
+-- crawl a website host using basic authentication credentials.
+--
+-- The list includes the name and port number of the website host.
+authenticationConfiguration_basicAuthentication :: Lens.Lens' AuthenticationConfiguration (Prelude.Maybe [BasicAuthenticationConfiguration])
+authenticationConfiguration_basicAuthentication = Lens.lens (\AuthenticationConfiguration' {basicAuthentication} -> basicAuthentication) (\s@AuthenticationConfiguration' {} a -> s {basicAuthentication = a} :: AuthenticationConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON AuthenticationConfiguration where
+  parseJSON =
+    Data.withObject
+      "AuthenticationConfiguration"
+      ( \x ->
+          AuthenticationConfiguration'
+            Prelude.<$> ( x
+                            Data..:? "BasicAuthentication"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable AuthenticationConfiguration where
+  hashWithSalt _salt AuthenticationConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` basicAuthentication
+
+instance Prelude.NFData AuthenticationConfiguration where
+  rnf AuthenticationConfiguration' {..} =
+    Prelude.rnf basicAuthentication
+
+instance Data.ToJSON AuthenticationConfiguration where
+  toJSON AuthenticationConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("BasicAuthentication" Data..=)
+              Prelude.<$> basicAuthentication
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/BasicAuthenticationConfiguration.hs b/gen/Amazonka/Kendra/Types/BasicAuthenticationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/BasicAuthenticationConfiguration.hs
@@ -0,0 +1,166 @@
+{-# 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.Kendra.Types.BasicAuthenticationConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.BasicAuthenticationConfiguration 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 configuration information to connect to websites that
+-- require basic user authentication.
+--
+-- /See:/ 'newBasicAuthenticationConfiguration' smart constructor.
+data BasicAuthenticationConfiguration = BasicAuthenticationConfiguration'
+  { -- | The name of the website host you want to connect to using authentication
+    -- credentials.
+    --
+    -- For example, the host name of https:\/\/a.example.com\/page1.html is
+    -- \"a.example.com\".
+    host :: Prelude.Text,
+    -- | The port number of the website host you want to connect to using
+    -- authentication credentials.
+    --
+    -- For example, the port for https:\/\/a.example.com\/page1.html is 443,
+    -- the standard port for HTTPS.
+    port :: Prelude.Natural,
+    -- | Your secret ARN, which you can create in
+    -- <https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html Secrets Manager>
+    --
+    -- You use a secret if basic authentication credentials are required to
+    -- connect to a website. The secret stores your credentials of user name
+    -- and password.
+    credentials :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BasicAuthenticationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'host', 'basicAuthenticationConfiguration_host' - The name of the website host you want to connect to using authentication
+-- credentials.
+--
+-- For example, the host name of https:\/\/a.example.com\/page1.html is
+-- \"a.example.com\".
+--
+-- 'port', 'basicAuthenticationConfiguration_port' - The port number of the website host you want to connect to using
+-- authentication credentials.
+--
+-- For example, the port for https:\/\/a.example.com\/page1.html is 443,
+-- the standard port for HTTPS.
+--
+-- 'credentials', 'basicAuthenticationConfiguration_credentials' - Your secret ARN, which you can create in
+-- <https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html Secrets Manager>
+--
+-- You use a secret if basic authentication credentials are required to
+-- connect to a website. The secret stores your credentials of user name
+-- and password.
+newBasicAuthenticationConfiguration ::
+  -- | 'host'
+  Prelude.Text ->
+  -- | 'port'
+  Prelude.Natural ->
+  -- | 'credentials'
+  Prelude.Text ->
+  BasicAuthenticationConfiguration
+newBasicAuthenticationConfiguration
+  pHost_
+  pPort_
+  pCredentials_ =
+    BasicAuthenticationConfiguration'
+      { host = pHost_,
+        port = pPort_,
+        credentials = pCredentials_
+      }
+
+-- | The name of the website host you want to connect to using authentication
+-- credentials.
+--
+-- For example, the host name of https:\/\/a.example.com\/page1.html is
+-- \"a.example.com\".
+basicAuthenticationConfiguration_host :: Lens.Lens' BasicAuthenticationConfiguration Prelude.Text
+basicAuthenticationConfiguration_host = Lens.lens (\BasicAuthenticationConfiguration' {host} -> host) (\s@BasicAuthenticationConfiguration' {} a -> s {host = a} :: BasicAuthenticationConfiguration)
+
+-- | The port number of the website host you want to connect to using
+-- authentication credentials.
+--
+-- For example, the port for https:\/\/a.example.com\/page1.html is 443,
+-- the standard port for HTTPS.
+basicAuthenticationConfiguration_port :: Lens.Lens' BasicAuthenticationConfiguration Prelude.Natural
+basicAuthenticationConfiguration_port = Lens.lens (\BasicAuthenticationConfiguration' {port} -> port) (\s@BasicAuthenticationConfiguration' {} a -> s {port = a} :: BasicAuthenticationConfiguration)
+
+-- | Your secret ARN, which you can create in
+-- <https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html Secrets Manager>
+--
+-- You use a secret if basic authentication credentials are required to
+-- connect to a website. The secret stores your credentials of user name
+-- and password.
+basicAuthenticationConfiguration_credentials :: Lens.Lens' BasicAuthenticationConfiguration Prelude.Text
+basicAuthenticationConfiguration_credentials = Lens.lens (\BasicAuthenticationConfiguration' {credentials} -> credentials) (\s@BasicAuthenticationConfiguration' {} a -> s {credentials = a} :: BasicAuthenticationConfiguration)
+
+instance
+  Data.FromJSON
+    BasicAuthenticationConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "BasicAuthenticationConfiguration"
+      ( \x ->
+          BasicAuthenticationConfiguration'
+            Prelude.<$> (x Data..: "Host")
+            Prelude.<*> (x Data..: "Port")
+            Prelude.<*> (x Data..: "Credentials")
+      )
+
+instance
+  Prelude.Hashable
+    BasicAuthenticationConfiguration
+  where
+  hashWithSalt
+    _salt
+    BasicAuthenticationConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` host
+        `Prelude.hashWithSalt` port
+        `Prelude.hashWithSalt` credentials
+
+instance
+  Prelude.NFData
+    BasicAuthenticationConfiguration
+  where
+  rnf BasicAuthenticationConfiguration' {..} =
+    Prelude.rnf host
+      `Prelude.seq` Prelude.rnf port
+      `Prelude.seq` Prelude.rnf credentials
+
+instance Data.ToJSON BasicAuthenticationConfiguration where
+  toJSON BasicAuthenticationConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Host" Data..= host),
+            Prelude.Just ("Port" Data..= port),
+            Prelude.Just ("Credentials" Data..= credentials)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/BatchDeleteDocumentResponseFailedDocument.hs b/gen/Amazonka/Kendra/Types/BatchDeleteDocumentResponseFailedDocument.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/BatchDeleteDocumentResponseFailedDocument.hs
@@ -0,0 +1,110 @@
+{-# 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.Kendra.Types.BatchDeleteDocumentResponseFailedDocument
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.BatchDeleteDocumentResponseFailedDocument where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.ErrorCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about documents that could not be removed from an
+-- index by the @BatchDeleteDocument@ API.
+--
+-- /See:/ 'newBatchDeleteDocumentResponseFailedDocument' smart constructor.
+data BatchDeleteDocumentResponseFailedDocument = BatchDeleteDocumentResponseFailedDocument'
+  { -- | The error code for why the document couldn\'t be removed from the index.
+    errorCode :: Prelude.Maybe ErrorCode,
+    -- | An explanation for why the document couldn\'t be removed from the index.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the document that couldn\'t be removed from the index.
+    id :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchDeleteDocumentResponseFailedDocument' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'batchDeleteDocumentResponseFailedDocument_errorCode' - The error code for why the document couldn\'t be removed from the index.
+--
+-- 'errorMessage', 'batchDeleteDocumentResponseFailedDocument_errorMessage' - An explanation for why the document couldn\'t be removed from the index.
+--
+-- 'id', 'batchDeleteDocumentResponseFailedDocument_id' - The identifier of the document that couldn\'t be removed from the index.
+newBatchDeleteDocumentResponseFailedDocument ::
+  BatchDeleteDocumentResponseFailedDocument
+newBatchDeleteDocumentResponseFailedDocument =
+  BatchDeleteDocumentResponseFailedDocument'
+    { errorCode =
+        Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      id = Prelude.Nothing
+    }
+
+-- | The error code for why the document couldn\'t be removed from the index.
+batchDeleteDocumentResponseFailedDocument_errorCode :: Lens.Lens' BatchDeleteDocumentResponseFailedDocument (Prelude.Maybe ErrorCode)
+batchDeleteDocumentResponseFailedDocument_errorCode = Lens.lens (\BatchDeleteDocumentResponseFailedDocument' {errorCode} -> errorCode) (\s@BatchDeleteDocumentResponseFailedDocument' {} a -> s {errorCode = a} :: BatchDeleteDocumentResponseFailedDocument)
+
+-- | An explanation for why the document couldn\'t be removed from the index.
+batchDeleteDocumentResponseFailedDocument_errorMessage :: Lens.Lens' BatchDeleteDocumentResponseFailedDocument (Prelude.Maybe Prelude.Text)
+batchDeleteDocumentResponseFailedDocument_errorMessage = Lens.lens (\BatchDeleteDocumentResponseFailedDocument' {errorMessage} -> errorMessage) (\s@BatchDeleteDocumentResponseFailedDocument' {} a -> s {errorMessage = a} :: BatchDeleteDocumentResponseFailedDocument)
+
+-- | The identifier of the document that couldn\'t be removed from the index.
+batchDeleteDocumentResponseFailedDocument_id :: Lens.Lens' BatchDeleteDocumentResponseFailedDocument (Prelude.Maybe Prelude.Text)
+batchDeleteDocumentResponseFailedDocument_id = Lens.lens (\BatchDeleteDocumentResponseFailedDocument' {id} -> id) (\s@BatchDeleteDocumentResponseFailedDocument' {} a -> s {id = a} :: BatchDeleteDocumentResponseFailedDocument)
+
+instance
+  Data.FromJSON
+    BatchDeleteDocumentResponseFailedDocument
+  where
+  parseJSON =
+    Data.withObject
+      "BatchDeleteDocumentResponseFailedDocument"
+      ( \x ->
+          BatchDeleteDocumentResponseFailedDocument'
+            Prelude.<$> (x Data..:? "ErrorCode")
+            Prelude.<*> (x Data..:? "ErrorMessage")
+            Prelude.<*> (x Data..:? "Id")
+      )
+
+instance
+  Prelude.Hashable
+    BatchDeleteDocumentResponseFailedDocument
+  where
+  hashWithSalt
+    _salt
+    BatchDeleteDocumentResponseFailedDocument' {..} =
+      _salt
+        `Prelude.hashWithSalt` errorCode
+        `Prelude.hashWithSalt` errorMessage
+        `Prelude.hashWithSalt` id
+
+instance
+  Prelude.NFData
+    BatchDeleteDocumentResponseFailedDocument
+  where
+  rnf BatchDeleteDocumentResponseFailedDocument' {..} =
+    Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf id
diff --git a/gen/Amazonka/Kendra/Types/BatchGetDocumentStatusResponseError.hs b/gen/Amazonka/Kendra/Types/BatchGetDocumentStatusResponseError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/BatchGetDocumentStatusResponseError.hs
@@ -0,0 +1,113 @@
+{-# 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.Kendra.Types.BatchGetDocumentStatusResponseError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.BatchGetDocumentStatusResponseError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.ErrorCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides a response when the status of a document could not be
+-- retrieved.
+--
+-- /See:/ 'newBatchGetDocumentStatusResponseError' smart constructor.
+data BatchGetDocumentStatusResponseError = BatchGetDocumentStatusResponseError'
+  { -- | The identifier of the document whose status could not be retrieved.
+    documentId :: Prelude.Maybe Prelude.Text,
+    -- | Indicates the source of the error.
+    errorCode :: Prelude.Maybe ErrorCode,
+    -- | States that the API could not get the status of a document. This could
+    -- be because the request is not valid or there is a system error.
+    errorMessage :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchGetDocumentStatusResponseError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'documentId', 'batchGetDocumentStatusResponseError_documentId' - The identifier of the document whose status could not be retrieved.
+--
+-- 'errorCode', 'batchGetDocumentStatusResponseError_errorCode' - Indicates the source of the error.
+--
+-- 'errorMessage', 'batchGetDocumentStatusResponseError_errorMessage' - States that the API could not get the status of a document. This could
+-- be because the request is not valid or there is a system error.
+newBatchGetDocumentStatusResponseError ::
+  BatchGetDocumentStatusResponseError
+newBatchGetDocumentStatusResponseError =
+  BatchGetDocumentStatusResponseError'
+    { documentId =
+        Prelude.Nothing,
+      errorCode = Prelude.Nothing,
+      errorMessage = Prelude.Nothing
+    }
+
+-- | The identifier of the document whose status could not be retrieved.
+batchGetDocumentStatusResponseError_documentId :: Lens.Lens' BatchGetDocumentStatusResponseError (Prelude.Maybe Prelude.Text)
+batchGetDocumentStatusResponseError_documentId = Lens.lens (\BatchGetDocumentStatusResponseError' {documentId} -> documentId) (\s@BatchGetDocumentStatusResponseError' {} a -> s {documentId = a} :: BatchGetDocumentStatusResponseError)
+
+-- | Indicates the source of the error.
+batchGetDocumentStatusResponseError_errorCode :: Lens.Lens' BatchGetDocumentStatusResponseError (Prelude.Maybe ErrorCode)
+batchGetDocumentStatusResponseError_errorCode = Lens.lens (\BatchGetDocumentStatusResponseError' {errorCode} -> errorCode) (\s@BatchGetDocumentStatusResponseError' {} a -> s {errorCode = a} :: BatchGetDocumentStatusResponseError)
+
+-- | States that the API could not get the status of a document. This could
+-- be because the request is not valid or there is a system error.
+batchGetDocumentStatusResponseError_errorMessage :: Lens.Lens' BatchGetDocumentStatusResponseError (Prelude.Maybe Prelude.Text)
+batchGetDocumentStatusResponseError_errorMessage = Lens.lens (\BatchGetDocumentStatusResponseError' {errorMessage} -> errorMessage) (\s@BatchGetDocumentStatusResponseError' {} a -> s {errorMessage = a} :: BatchGetDocumentStatusResponseError)
+
+instance
+  Data.FromJSON
+    BatchGetDocumentStatusResponseError
+  where
+  parseJSON =
+    Data.withObject
+      "BatchGetDocumentStatusResponseError"
+      ( \x ->
+          BatchGetDocumentStatusResponseError'
+            Prelude.<$> (x Data..:? "DocumentId")
+            Prelude.<*> (x Data..:? "ErrorCode")
+            Prelude.<*> (x Data..:? "ErrorMessage")
+      )
+
+instance
+  Prelude.Hashable
+    BatchGetDocumentStatusResponseError
+  where
+  hashWithSalt
+    _salt
+    BatchGetDocumentStatusResponseError' {..} =
+      _salt
+        `Prelude.hashWithSalt` documentId
+        `Prelude.hashWithSalt` errorCode
+        `Prelude.hashWithSalt` errorMessage
+
+instance
+  Prelude.NFData
+    BatchGetDocumentStatusResponseError
+  where
+  rnf BatchGetDocumentStatusResponseError' {..} =
+    Prelude.rnf documentId
+      `Prelude.seq` Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
diff --git a/gen/Amazonka/Kendra/Types/BatchPutDocumentResponseFailedDocument.hs b/gen/Amazonka/Kendra/Types/BatchPutDocumentResponseFailedDocument.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/BatchPutDocumentResponseFailedDocument.hs
@@ -0,0 +1,109 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.Types.BatchPutDocumentResponseFailedDocument
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.BatchPutDocumentResponseFailedDocument where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.ErrorCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about a document that could not be indexed.
+--
+-- /See:/ 'newBatchPutDocumentResponseFailedDocument' smart constructor.
+data BatchPutDocumentResponseFailedDocument = BatchPutDocumentResponseFailedDocument'
+  { -- | The type of error that caused the document to fail to be indexed.
+    errorCode :: Prelude.Maybe ErrorCode,
+    -- | A description of the reason why the document could not be indexed.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the document.
+    id :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchPutDocumentResponseFailedDocument' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'batchPutDocumentResponseFailedDocument_errorCode' - The type of error that caused the document to fail to be indexed.
+--
+-- 'errorMessage', 'batchPutDocumentResponseFailedDocument_errorMessage' - A description of the reason why the document could not be indexed.
+--
+-- 'id', 'batchPutDocumentResponseFailedDocument_id' - The identifier of the document.
+newBatchPutDocumentResponseFailedDocument ::
+  BatchPutDocumentResponseFailedDocument
+newBatchPutDocumentResponseFailedDocument =
+  BatchPutDocumentResponseFailedDocument'
+    { errorCode =
+        Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      id = Prelude.Nothing
+    }
+
+-- | The type of error that caused the document to fail to be indexed.
+batchPutDocumentResponseFailedDocument_errorCode :: Lens.Lens' BatchPutDocumentResponseFailedDocument (Prelude.Maybe ErrorCode)
+batchPutDocumentResponseFailedDocument_errorCode = Lens.lens (\BatchPutDocumentResponseFailedDocument' {errorCode} -> errorCode) (\s@BatchPutDocumentResponseFailedDocument' {} a -> s {errorCode = a} :: BatchPutDocumentResponseFailedDocument)
+
+-- | A description of the reason why the document could not be indexed.
+batchPutDocumentResponseFailedDocument_errorMessage :: Lens.Lens' BatchPutDocumentResponseFailedDocument (Prelude.Maybe Prelude.Text)
+batchPutDocumentResponseFailedDocument_errorMessage = Lens.lens (\BatchPutDocumentResponseFailedDocument' {errorMessage} -> errorMessage) (\s@BatchPutDocumentResponseFailedDocument' {} a -> s {errorMessage = a} :: BatchPutDocumentResponseFailedDocument)
+
+-- | The identifier of the document.
+batchPutDocumentResponseFailedDocument_id :: Lens.Lens' BatchPutDocumentResponseFailedDocument (Prelude.Maybe Prelude.Text)
+batchPutDocumentResponseFailedDocument_id = Lens.lens (\BatchPutDocumentResponseFailedDocument' {id} -> id) (\s@BatchPutDocumentResponseFailedDocument' {} a -> s {id = a} :: BatchPutDocumentResponseFailedDocument)
+
+instance
+  Data.FromJSON
+    BatchPutDocumentResponseFailedDocument
+  where
+  parseJSON =
+    Data.withObject
+      "BatchPutDocumentResponseFailedDocument"
+      ( \x ->
+          BatchPutDocumentResponseFailedDocument'
+            Prelude.<$> (x Data..:? "ErrorCode")
+            Prelude.<*> (x Data..:? "ErrorMessage")
+            Prelude.<*> (x Data..:? "Id")
+      )
+
+instance
+  Prelude.Hashable
+    BatchPutDocumentResponseFailedDocument
+  where
+  hashWithSalt
+    _salt
+    BatchPutDocumentResponseFailedDocument' {..} =
+      _salt
+        `Prelude.hashWithSalt` errorCode
+        `Prelude.hashWithSalt` errorMessage
+        `Prelude.hashWithSalt` id
+
+instance
+  Prelude.NFData
+    BatchPutDocumentResponseFailedDocument
+  where
+  rnf BatchPutDocumentResponseFailedDocument' {..} =
+    Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf id
diff --git a/gen/Amazonka/Kendra/Types/BoxConfiguration.hs b/gen/Amazonka/Kendra/Types/BoxConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/BoxConfiguration.hs
@@ -0,0 +1,428 @@
+{-# 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.Kendra.Types.BoxConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.BoxConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DataSourceToIndexFieldMapping
+import Amazonka.Kendra.Types.DataSourceVpcConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information to connect to Box as your data
+-- source.
+--
+-- /See:/ 'newBoxConfiguration' smart constructor.
+data BoxConfiguration = BoxConfiguration'
+  { -- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+    -- field names of Box comments to Amazon Kendra index field names. To
+    -- create custom fields, use the @UpdateIndex@ API before you map to Box
+    -- fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The Box field names must exist in your Box custom metadata.
+    commentFieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | @TRUE@ to index comments.
+    crawlComments :: Prelude.Maybe Prelude.Bool,
+    -- | @TRUE@ to index the contents of tasks.
+    crawlTasks :: Prelude.Maybe Prelude.Bool,
+    -- | @TRUE@ to index web links.
+    crawlWebLinks :: Prelude.Maybe Prelude.Bool,
+    -- | A list of regular expression patterns to exclude certain files and
+    -- folders from your Box platform. Files and folders that match the
+    -- patterns are excluded from the index.Files and folders that don\'t match
+    -- the patterns are included in the index. If a file or folder matches both
+    -- an inclusion and exclusion pattern, the exclusion pattern takes
+    -- precedence and the file or folder isn\'t included in the index.
+    exclusionPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+    -- field names of Box files to Amazon Kendra index field names. To create
+    -- custom fields, use the @UpdateIndex@ API before you map to Box fields.
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The Box field names must exist in your Box custom metadata.
+    fileFieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | A list of regular expression patterns to include certain files and
+    -- folders in your Box platform. Files and folders that match the patterns
+    -- are included in the index. Files and folders that don\'t match the
+    -- patterns are excluded from the index. If a file or folder matches both
+    -- an inclusion and exclusion pattern, the exclusion pattern takes
+    -- precedence and the file or folder isn\'t included in the index.
+    inclusionPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+    -- field names of Box tasks to Amazon Kendra index field names. To create
+    -- custom fields, use the @UpdateIndex@ API before you map to Box fields.
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The Box field names must exist in your Box custom metadata.
+    taskFieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | @TRUE@ to use the Slack change log to determine which documents require
+    -- updating in the index. Depending on the data source change log\'s size,
+    -- it may take longer for Amazon Kendra to use the change log than to scan
+    -- all of your documents.
+    useChangeLog :: Prelude.Maybe Prelude.Bool,
+    -- | Configuration information for an Amazon VPC to connect to your Box. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+    vpcConfiguration :: Prelude.Maybe DataSourceVpcConfiguration,
+    -- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+    -- field names of Box web links to Amazon Kendra index field names. To
+    -- create custom fields, use the @UpdateIndex@ API before you map to Box
+    -- fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The Box field names must exist in your Box custom metadata.
+    webLinkFieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | The identifier of the Box Enterprise platform. You can find the
+    -- enterprise ID in the Box Developer Console settings or when you create
+    -- an app in Box and download your authentication credentials. For example,
+    -- /801234567/.
+    enterpriseId :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of an Secrets Manager secret that
+    -- contains the key-value pairs required to connect to your Box platform.
+    -- The secret must contain a JSON structure with the following keys:
+    --
+    -- -   clientID—The identifier of the client OAuth 2.0 authentication
+    --     application created in Box.
+    --
+    -- -   clientSecret—A set of characters known only to the OAuth 2.0
+    --     authentication application created in Box.
+    --
+    -- -   publicKeyId—The identifier of the public key contained within an
+    --     identity certificate.
+    --
+    -- -   privateKey—A set of characters that make up an encryption key.
+    --
+    -- -   passphrase—A set of characters that act like a password.
+    --
+    -- You create an application in Box to generate the keys or credentials
+    -- required for the secret. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/data-source-box.html Using a Box data source>.
+    secretArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BoxConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'commentFieldMappings', 'boxConfiguration_commentFieldMappings' - A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of Box comments to Amazon Kendra index field names. To
+-- create custom fields, use the @UpdateIndex@ API before you map to Box
+-- fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Box field names must exist in your Box custom metadata.
+--
+-- 'crawlComments', 'boxConfiguration_crawlComments' - @TRUE@ to index comments.
+--
+-- 'crawlTasks', 'boxConfiguration_crawlTasks' - @TRUE@ to index the contents of tasks.
+--
+-- 'crawlWebLinks', 'boxConfiguration_crawlWebLinks' - @TRUE@ to index web links.
+--
+-- 'exclusionPatterns', 'boxConfiguration_exclusionPatterns' - A list of regular expression patterns to exclude certain files and
+-- folders from your Box platform. Files and folders that match the
+-- patterns are excluded from the index.Files and folders that don\'t match
+-- the patterns are included in the index. If a file or folder matches both
+-- an inclusion and exclusion pattern, the exclusion pattern takes
+-- precedence and the file or folder isn\'t included in the index.
+--
+-- 'fileFieldMappings', 'boxConfiguration_fileFieldMappings' - A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of Box files to Amazon Kendra index field names. To create
+-- custom fields, use the @UpdateIndex@ API before you map to Box fields.
+-- For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Box field names must exist in your Box custom metadata.
+--
+-- 'inclusionPatterns', 'boxConfiguration_inclusionPatterns' - A list of regular expression patterns to include certain files and
+-- folders in your Box platform. Files and folders that match the patterns
+-- are included in the index. Files and folders that don\'t match the
+-- patterns are excluded from the index. If a file or folder matches both
+-- an inclusion and exclusion pattern, the exclusion pattern takes
+-- precedence and the file or folder isn\'t included in the index.
+--
+-- 'taskFieldMappings', 'boxConfiguration_taskFieldMappings' - A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of Box tasks to Amazon Kendra index field names. To create
+-- custom fields, use the @UpdateIndex@ API before you map to Box fields.
+-- For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Box field names must exist in your Box custom metadata.
+--
+-- 'useChangeLog', 'boxConfiguration_useChangeLog' - @TRUE@ to use the Slack change log to determine which documents require
+-- updating in the index. Depending on the data source change log\'s size,
+-- it may take longer for Amazon Kendra to use the change log than to scan
+-- all of your documents.
+--
+-- 'vpcConfiguration', 'boxConfiguration_vpcConfiguration' - Configuration information for an Amazon VPC to connect to your Box. For
+-- more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+--
+-- 'webLinkFieldMappings', 'boxConfiguration_webLinkFieldMappings' - A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of Box web links to Amazon Kendra index field names. To
+-- create custom fields, use the @UpdateIndex@ API before you map to Box
+-- fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Box field names must exist in your Box custom metadata.
+--
+-- 'enterpriseId', 'boxConfiguration_enterpriseId' - The identifier of the Box Enterprise platform. You can find the
+-- enterprise ID in the Box Developer Console settings or when you create
+-- an app in Box and download your authentication credentials. For example,
+-- /801234567/.
+--
+-- 'secretArn', 'boxConfiguration_secretArn' - The Amazon Resource Name (ARN) of an Secrets Manager secret that
+-- contains the key-value pairs required to connect to your Box platform.
+-- The secret must contain a JSON structure with the following keys:
+--
+-- -   clientID—The identifier of the client OAuth 2.0 authentication
+--     application created in Box.
+--
+-- -   clientSecret—A set of characters known only to the OAuth 2.0
+--     authentication application created in Box.
+--
+-- -   publicKeyId—The identifier of the public key contained within an
+--     identity certificate.
+--
+-- -   privateKey—A set of characters that make up an encryption key.
+--
+-- -   passphrase—A set of characters that act like a password.
+--
+-- You create an application in Box to generate the keys or credentials
+-- required for the secret. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/data-source-box.html Using a Box data source>.
+newBoxConfiguration ::
+  -- | 'enterpriseId'
+  Prelude.Text ->
+  -- | 'secretArn'
+  Prelude.Text ->
+  BoxConfiguration
+newBoxConfiguration pEnterpriseId_ pSecretArn_ =
+  BoxConfiguration'
+    { commentFieldMappings =
+        Prelude.Nothing,
+      crawlComments = Prelude.Nothing,
+      crawlTasks = Prelude.Nothing,
+      crawlWebLinks = Prelude.Nothing,
+      exclusionPatterns = Prelude.Nothing,
+      fileFieldMappings = Prelude.Nothing,
+      inclusionPatterns = Prelude.Nothing,
+      taskFieldMappings = Prelude.Nothing,
+      useChangeLog = Prelude.Nothing,
+      vpcConfiguration = Prelude.Nothing,
+      webLinkFieldMappings = Prelude.Nothing,
+      enterpriseId = pEnterpriseId_,
+      secretArn = pSecretArn_
+    }
+
+-- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of Box comments to Amazon Kendra index field names. To
+-- create custom fields, use the @UpdateIndex@ API before you map to Box
+-- fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Box field names must exist in your Box custom metadata.
+boxConfiguration_commentFieldMappings :: Lens.Lens' BoxConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+boxConfiguration_commentFieldMappings = Lens.lens (\BoxConfiguration' {commentFieldMappings} -> commentFieldMappings) (\s@BoxConfiguration' {} a -> s {commentFieldMappings = a} :: BoxConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | @TRUE@ to index comments.
+boxConfiguration_crawlComments :: Lens.Lens' BoxConfiguration (Prelude.Maybe Prelude.Bool)
+boxConfiguration_crawlComments = Lens.lens (\BoxConfiguration' {crawlComments} -> crawlComments) (\s@BoxConfiguration' {} a -> s {crawlComments = a} :: BoxConfiguration)
+
+-- | @TRUE@ to index the contents of tasks.
+boxConfiguration_crawlTasks :: Lens.Lens' BoxConfiguration (Prelude.Maybe Prelude.Bool)
+boxConfiguration_crawlTasks = Lens.lens (\BoxConfiguration' {crawlTasks} -> crawlTasks) (\s@BoxConfiguration' {} a -> s {crawlTasks = a} :: BoxConfiguration)
+
+-- | @TRUE@ to index web links.
+boxConfiguration_crawlWebLinks :: Lens.Lens' BoxConfiguration (Prelude.Maybe Prelude.Bool)
+boxConfiguration_crawlWebLinks = Lens.lens (\BoxConfiguration' {crawlWebLinks} -> crawlWebLinks) (\s@BoxConfiguration' {} a -> s {crawlWebLinks = a} :: BoxConfiguration)
+
+-- | A list of regular expression patterns to exclude certain files and
+-- folders from your Box platform. Files and folders that match the
+-- patterns are excluded from the index.Files and folders that don\'t match
+-- the patterns are included in the index. If a file or folder matches both
+-- an inclusion and exclusion pattern, the exclusion pattern takes
+-- precedence and the file or folder isn\'t included in the index.
+boxConfiguration_exclusionPatterns :: Lens.Lens' BoxConfiguration (Prelude.Maybe [Prelude.Text])
+boxConfiguration_exclusionPatterns = Lens.lens (\BoxConfiguration' {exclusionPatterns} -> exclusionPatterns) (\s@BoxConfiguration' {} a -> s {exclusionPatterns = a} :: BoxConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of Box files to Amazon Kendra index field names. To create
+-- custom fields, use the @UpdateIndex@ API before you map to Box fields.
+-- For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Box field names must exist in your Box custom metadata.
+boxConfiguration_fileFieldMappings :: Lens.Lens' BoxConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+boxConfiguration_fileFieldMappings = Lens.lens (\BoxConfiguration' {fileFieldMappings} -> fileFieldMappings) (\s@BoxConfiguration' {} a -> s {fileFieldMappings = a} :: BoxConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of regular expression patterns to include certain files and
+-- folders in your Box platform. Files and folders that match the patterns
+-- are included in the index. Files and folders that don\'t match the
+-- patterns are excluded from the index. If a file or folder matches both
+-- an inclusion and exclusion pattern, the exclusion pattern takes
+-- precedence and the file or folder isn\'t included in the index.
+boxConfiguration_inclusionPatterns :: Lens.Lens' BoxConfiguration (Prelude.Maybe [Prelude.Text])
+boxConfiguration_inclusionPatterns = Lens.lens (\BoxConfiguration' {inclusionPatterns} -> inclusionPatterns) (\s@BoxConfiguration' {} a -> s {inclusionPatterns = a} :: BoxConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of Box tasks to Amazon Kendra index field names. To create
+-- custom fields, use the @UpdateIndex@ API before you map to Box fields.
+-- For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Box field names must exist in your Box custom metadata.
+boxConfiguration_taskFieldMappings :: Lens.Lens' BoxConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+boxConfiguration_taskFieldMappings = Lens.lens (\BoxConfiguration' {taskFieldMappings} -> taskFieldMappings) (\s@BoxConfiguration' {} a -> s {taskFieldMappings = a} :: BoxConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | @TRUE@ to use the Slack change log to determine which documents require
+-- updating in the index. Depending on the data source change log\'s size,
+-- it may take longer for Amazon Kendra to use the change log than to scan
+-- all of your documents.
+boxConfiguration_useChangeLog :: Lens.Lens' BoxConfiguration (Prelude.Maybe Prelude.Bool)
+boxConfiguration_useChangeLog = Lens.lens (\BoxConfiguration' {useChangeLog} -> useChangeLog) (\s@BoxConfiguration' {} a -> s {useChangeLog = a} :: BoxConfiguration)
+
+-- | Configuration information for an Amazon VPC to connect to your Box. For
+-- more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+boxConfiguration_vpcConfiguration :: Lens.Lens' BoxConfiguration (Prelude.Maybe DataSourceVpcConfiguration)
+boxConfiguration_vpcConfiguration = Lens.lens (\BoxConfiguration' {vpcConfiguration} -> vpcConfiguration) (\s@BoxConfiguration' {} a -> s {vpcConfiguration = a} :: BoxConfiguration)
+
+-- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of Box web links to Amazon Kendra index field names. To
+-- create custom fields, use the @UpdateIndex@ API before you map to Box
+-- fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Box field names must exist in your Box custom metadata.
+boxConfiguration_webLinkFieldMappings :: Lens.Lens' BoxConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+boxConfiguration_webLinkFieldMappings = Lens.lens (\BoxConfiguration' {webLinkFieldMappings} -> webLinkFieldMappings) (\s@BoxConfiguration' {} a -> s {webLinkFieldMappings = a} :: BoxConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The identifier of the Box Enterprise platform. You can find the
+-- enterprise ID in the Box Developer Console settings or when you create
+-- an app in Box and download your authentication credentials. For example,
+-- /801234567/.
+boxConfiguration_enterpriseId :: Lens.Lens' BoxConfiguration Prelude.Text
+boxConfiguration_enterpriseId = Lens.lens (\BoxConfiguration' {enterpriseId} -> enterpriseId) (\s@BoxConfiguration' {} a -> s {enterpriseId = a} :: BoxConfiguration)
+
+-- | The Amazon Resource Name (ARN) of an Secrets Manager secret that
+-- contains the key-value pairs required to connect to your Box platform.
+-- The secret must contain a JSON structure with the following keys:
+--
+-- -   clientID—The identifier of the client OAuth 2.0 authentication
+--     application created in Box.
+--
+-- -   clientSecret—A set of characters known only to the OAuth 2.0
+--     authentication application created in Box.
+--
+-- -   publicKeyId—The identifier of the public key contained within an
+--     identity certificate.
+--
+-- -   privateKey—A set of characters that make up an encryption key.
+--
+-- -   passphrase—A set of characters that act like a password.
+--
+-- You create an application in Box to generate the keys or credentials
+-- required for the secret. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/data-source-box.html Using a Box data source>.
+boxConfiguration_secretArn :: Lens.Lens' BoxConfiguration Prelude.Text
+boxConfiguration_secretArn = Lens.lens (\BoxConfiguration' {secretArn} -> secretArn) (\s@BoxConfiguration' {} a -> s {secretArn = a} :: BoxConfiguration)
+
+instance Data.FromJSON BoxConfiguration where
+  parseJSON =
+    Data.withObject
+      "BoxConfiguration"
+      ( \x ->
+          BoxConfiguration'
+            Prelude.<$> (x Data..:? "CommentFieldMappings")
+            Prelude.<*> (x Data..:? "CrawlComments")
+            Prelude.<*> (x Data..:? "CrawlTasks")
+            Prelude.<*> (x Data..:? "CrawlWebLinks")
+            Prelude.<*> ( x
+                            Data..:? "ExclusionPatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "FileFieldMappings")
+            Prelude.<*> ( x
+                            Data..:? "InclusionPatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "TaskFieldMappings")
+            Prelude.<*> (x Data..:? "UseChangeLog")
+            Prelude.<*> (x Data..:? "VpcConfiguration")
+            Prelude.<*> (x Data..:? "WebLinkFieldMappings")
+            Prelude.<*> (x Data..: "EnterpriseId")
+            Prelude.<*> (x Data..: "SecretArn")
+      )
+
+instance Prelude.Hashable BoxConfiguration where
+  hashWithSalt _salt BoxConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` commentFieldMappings
+      `Prelude.hashWithSalt` crawlComments
+      `Prelude.hashWithSalt` crawlTasks
+      `Prelude.hashWithSalt` crawlWebLinks
+      `Prelude.hashWithSalt` exclusionPatterns
+      `Prelude.hashWithSalt` fileFieldMappings
+      `Prelude.hashWithSalt` inclusionPatterns
+      `Prelude.hashWithSalt` taskFieldMappings
+      `Prelude.hashWithSalt` useChangeLog
+      `Prelude.hashWithSalt` vpcConfiguration
+      `Prelude.hashWithSalt` webLinkFieldMappings
+      `Prelude.hashWithSalt` enterpriseId
+      `Prelude.hashWithSalt` secretArn
+
+instance Prelude.NFData BoxConfiguration where
+  rnf BoxConfiguration' {..} =
+    Prelude.rnf commentFieldMappings
+      `Prelude.seq` Prelude.rnf crawlComments
+      `Prelude.seq` Prelude.rnf crawlTasks
+      `Prelude.seq` Prelude.rnf crawlWebLinks
+      `Prelude.seq` Prelude.rnf exclusionPatterns
+      `Prelude.seq` Prelude.rnf fileFieldMappings
+      `Prelude.seq` Prelude.rnf inclusionPatterns
+      `Prelude.seq` Prelude.rnf taskFieldMappings
+      `Prelude.seq` Prelude.rnf useChangeLog
+      `Prelude.seq` Prelude.rnf vpcConfiguration
+      `Prelude.seq` Prelude.rnf webLinkFieldMappings
+      `Prelude.seq` Prelude.rnf enterpriseId
+      `Prelude.seq` Prelude.rnf secretArn
+
+instance Data.ToJSON BoxConfiguration where
+  toJSON BoxConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CommentFieldMappings" Data..=)
+              Prelude.<$> commentFieldMappings,
+            ("CrawlComments" Data..=) Prelude.<$> crawlComments,
+            ("CrawlTasks" Data..=) Prelude.<$> crawlTasks,
+            ("CrawlWebLinks" Data..=) Prelude.<$> crawlWebLinks,
+            ("ExclusionPatterns" Data..=)
+              Prelude.<$> exclusionPatterns,
+            ("FileFieldMappings" Data..=)
+              Prelude.<$> fileFieldMappings,
+            ("InclusionPatterns" Data..=)
+              Prelude.<$> inclusionPatterns,
+            ("TaskFieldMappings" Data..=)
+              Prelude.<$> taskFieldMappings,
+            ("UseChangeLog" Data..=) Prelude.<$> useChangeLog,
+            ("VpcConfiguration" Data..=)
+              Prelude.<$> vpcConfiguration,
+            ("WebLinkFieldMappings" Data..=)
+              Prelude.<$> webLinkFieldMappings,
+            Prelude.Just ("EnterpriseId" Data..= enterpriseId),
+            Prelude.Just ("SecretArn" Data..= secretArn)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/CapacityUnitsConfiguration.hs b/gen/Amazonka/Kendra/Types/CapacityUnitsConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/CapacityUnitsConfiguration.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.Kendra.Types.CapacityUnitsConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.CapacityUnitsConfiguration 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 additional capacity units configured for your Enterprise
+-- Edition index. You can add and remove capacity units to fit your usage
+-- requirements.
+--
+-- /See:/ 'newCapacityUnitsConfiguration' smart constructor.
+data CapacityUnitsConfiguration = CapacityUnitsConfiguration'
+  { -- | The amount of extra storage capacity for an index. A single capacity
+    -- unit provides 30 GB of storage space or 100,000 documents, whichever is
+    -- reached first. You can add up to 100 extra capacity units.
+    storageCapacityUnits :: Prelude.Natural,
+    -- | The amount of extra query capacity for an index and
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/API_GetQuerySuggestions.html GetQuerySuggestions>
+    -- capacity.
+    --
+    -- A single extra capacity unit for an index provides 0.1 queries per
+    -- second or approximately 8,000 queries per day. You can add up to 100
+    -- extra capacity units.
+    --
+    -- @GetQuerySuggestions@ capacity is five times the provisioned query
+    -- capacity for an index, or the base capacity of 2.5 calls per second,
+    -- whichever is higher. For example, the base capacity for an index is 0.1
+    -- queries per second, and @GetQuerySuggestions@ capacity has a base of 2.5
+    -- calls per second. If you add another 0.1 queries per second to total 0.2
+    -- queries per second for an index, the @GetQuerySuggestions@ capacity is
+    -- 2.5 calls per second (higher than five times 0.2 queries per second).
+    queryCapacityUnits :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CapacityUnitsConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'storageCapacityUnits', 'capacityUnitsConfiguration_storageCapacityUnits' - The amount of extra storage capacity for an index. A single capacity
+-- unit provides 30 GB of storage space or 100,000 documents, whichever is
+-- reached first. You can add up to 100 extra capacity units.
+--
+-- 'queryCapacityUnits', 'capacityUnitsConfiguration_queryCapacityUnits' - The amount of extra query capacity for an index and
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_GetQuerySuggestions.html GetQuerySuggestions>
+-- capacity.
+--
+-- A single extra capacity unit for an index provides 0.1 queries per
+-- second or approximately 8,000 queries per day. You can add up to 100
+-- extra capacity units.
+--
+-- @GetQuerySuggestions@ capacity is five times the provisioned query
+-- capacity for an index, or the base capacity of 2.5 calls per second,
+-- whichever is higher. For example, the base capacity for an index is 0.1
+-- queries per second, and @GetQuerySuggestions@ capacity has a base of 2.5
+-- calls per second. If you add another 0.1 queries per second to total 0.2
+-- queries per second for an index, the @GetQuerySuggestions@ capacity is
+-- 2.5 calls per second (higher than five times 0.2 queries per second).
+newCapacityUnitsConfiguration ::
+  -- | 'storageCapacityUnits'
+  Prelude.Natural ->
+  -- | 'queryCapacityUnits'
+  Prelude.Natural ->
+  CapacityUnitsConfiguration
+newCapacityUnitsConfiguration
+  pStorageCapacityUnits_
+  pQueryCapacityUnits_ =
+    CapacityUnitsConfiguration'
+      { storageCapacityUnits =
+          pStorageCapacityUnits_,
+        queryCapacityUnits = pQueryCapacityUnits_
+      }
+
+-- | The amount of extra storage capacity for an index. A single capacity
+-- unit provides 30 GB of storage space or 100,000 documents, whichever is
+-- reached first. You can add up to 100 extra capacity units.
+capacityUnitsConfiguration_storageCapacityUnits :: Lens.Lens' CapacityUnitsConfiguration Prelude.Natural
+capacityUnitsConfiguration_storageCapacityUnits = Lens.lens (\CapacityUnitsConfiguration' {storageCapacityUnits} -> storageCapacityUnits) (\s@CapacityUnitsConfiguration' {} a -> s {storageCapacityUnits = a} :: CapacityUnitsConfiguration)
+
+-- | The amount of extra query capacity for an index and
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_GetQuerySuggestions.html GetQuerySuggestions>
+-- capacity.
+--
+-- A single extra capacity unit for an index provides 0.1 queries per
+-- second or approximately 8,000 queries per day. You can add up to 100
+-- extra capacity units.
+--
+-- @GetQuerySuggestions@ capacity is five times the provisioned query
+-- capacity for an index, or the base capacity of 2.5 calls per second,
+-- whichever is higher. For example, the base capacity for an index is 0.1
+-- queries per second, and @GetQuerySuggestions@ capacity has a base of 2.5
+-- calls per second. If you add another 0.1 queries per second to total 0.2
+-- queries per second for an index, the @GetQuerySuggestions@ capacity is
+-- 2.5 calls per second (higher than five times 0.2 queries per second).
+capacityUnitsConfiguration_queryCapacityUnits :: Lens.Lens' CapacityUnitsConfiguration Prelude.Natural
+capacityUnitsConfiguration_queryCapacityUnits = Lens.lens (\CapacityUnitsConfiguration' {queryCapacityUnits} -> queryCapacityUnits) (\s@CapacityUnitsConfiguration' {} a -> s {queryCapacityUnits = a} :: CapacityUnitsConfiguration)
+
+instance Data.FromJSON CapacityUnitsConfiguration where
+  parseJSON =
+    Data.withObject
+      "CapacityUnitsConfiguration"
+      ( \x ->
+          CapacityUnitsConfiguration'
+            Prelude.<$> (x Data..: "StorageCapacityUnits")
+            Prelude.<*> (x Data..: "QueryCapacityUnits")
+      )
+
+instance Prelude.Hashable CapacityUnitsConfiguration where
+  hashWithSalt _salt CapacityUnitsConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` storageCapacityUnits
+      `Prelude.hashWithSalt` queryCapacityUnits
+
+instance Prelude.NFData CapacityUnitsConfiguration where
+  rnf CapacityUnitsConfiguration' {..} =
+    Prelude.rnf storageCapacityUnits
+      `Prelude.seq` Prelude.rnf queryCapacityUnits
+
+instance Data.ToJSON CapacityUnitsConfiguration where
+  toJSON CapacityUnitsConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "StorageCapacityUnits"
+                  Data..= storageCapacityUnits
+              ),
+            Prelude.Just
+              ("QueryCapacityUnits" Data..= queryCapacityUnits)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/ClickFeedback.hs b/gen/Amazonka/Kendra/Types/ClickFeedback.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ClickFeedback.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.Kendra.Types.ClickFeedback
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ClickFeedback 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
+
+-- | Gathers information about when a particular result was clicked by a
+-- user. Your application uses the @SubmitFeedback@ API to provide click
+-- information.
+--
+-- /See:/ 'newClickFeedback' smart constructor.
+data ClickFeedback = ClickFeedback'
+  { -- | The identifier of the search result that was clicked.
+    resultId :: Prelude.Text,
+    -- | The Unix timestamp of the date and time that the result was clicked.
+    clickTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClickFeedback' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resultId', 'clickFeedback_resultId' - The identifier of the search result that was clicked.
+--
+-- 'clickTime', 'clickFeedback_clickTime' - The Unix timestamp of the date and time that the result was clicked.
+newClickFeedback ::
+  -- | 'resultId'
+  Prelude.Text ->
+  -- | 'clickTime'
+  Prelude.UTCTime ->
+  ClickFeedback
+newClickFeedback pResultId_ pClickTime_ =
+  ClickFeedback'
+    { resultId = pResultId_,
+      clickTime = Data._Time Lens.# pClickTime_
+    }
+
+-- | The identifier of the search result that was clicked.
+clickFeedback_resultId :: Lens.Lens' ClickFeedback Prelude.Text
+clickFeedback_resultId = Lens.lens (\ClickFeedback' {resultId} -> resultId) (\s@ClickFeedback' {} a -> s {resultId = a} :: ClickFeedback)
+
+-- | The Unix timestamp of the date and time that the result was clicked.
+clickFeedback_clickTime :: Lens.Lens' ClickFeedback Prelude.UTCTime
+clickFeedback_clickTime = Lens.lens (\ClickFeedback' {clickTime} -> clickTime) (\s@ClickFeedback' {} a -> s {clickTime = a} :: ClickFeedback) Prelude.. Data._Time
+
+instance Prelude.Hashable ClickFeedback where
+  hashWithSalt _salt ClickFeedback' {..} =
+    _salt
+      `Prelude.hashWithSalt` resultId
+      `Prelude.hashWithSalt` clickTime
+
+instance Prelude.NFData ClickFeedback where
+  rnf ClickFeedback' {..} =
+    Prelude.rnf resultId
+      `Prelude.seq` Prelude.rnf clickTime
+
+instance Data.ToJSON ClickFeedback where
+  toJSON ClickFeedback' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResultId" Data..= resultId),
+            Prelude.Just ("ClickTime" Data..= clickTime)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/ColumnConfiguration.hs b/gen/Amazonka/Kendra/Types/ColumnConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ColumnConfiguration.hs
@@ -0,0 +1,164 @@
+{-# 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.Kendra.Types.ColumnConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ColumnConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DataSourceToIndexFieldMapping
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about how Amazon Kendra should use the columns of a
+-- database in an index.
+--
+-- /See:/ 'newColumnConfiguration' smart constructor.
+data ColumnConfiguration = ColumnConfiguration'
+  { -- | The column that contains the title of the document.
+    documentTitleColumnName :: Prelude.Maybe Prelude.Text,
+    -- | An array of objects that map database column names to the corresponding
+    -- fields in an index. You must first create the fields in the index using
+    -- the @UpdateIndex@ API.
+    fieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | The column that provides the document\'s identifier.
+    documentIdColumnName :: Prelude.Text,
+    -- | The column that contains the contents of the document.
+    documentDataColumnName :: Prelude.Text,
+    -- | One to five columns that indicate when a document in the database has
+    -- changed.
+    changeDetectingColumns :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ColumnConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'documentTitleColumnName', 'columnConfiguration_documentTitleColumnName' - The column that contains the title of the document.
+--
+-- 'fieldMappings', 'columnConfiguration_fieldMappings' - An array of objects that map database column names to the corresponding
+-- fields in an index. You must first create the fields in the index using
+-- the @UpdateIndex@ API.
+--
+-- 'documentIdColumnName', 'columnConfiguration_documentIdColumnName' - The column that provides the document\'s identifier.
+--
+-- 'documentDataColumnName', 'columnConfiguration_documentDataColumnName' - The column that contains the contents of the document.
+--
+-- 'changeDetectingColumns', 'columnConfiguration_changeDetectingColumns' - One to five columns that indicate when a document in the database has
+-- changed.
+newColumnConfiguration ::
+  -- | 'documentIdColumnName'
+  Prelude.Text ->
+  -- | 'documentDataColumnName'
+  Prelude.Text ->
+  -- | 'changeDetectingColumns'
+  Prelude.NonEmpty Prelude.Text ->
+  ColumnConfiguration
+newColumnConfiguration
+  pDocumentIdColumnName_
+  pDocumentDataColumnName_
+  pChangeDetectingColumns_ =
+    ColumnConfiguration'
+      { documentTitleColumnName =
+          Prelude.Nothing,
+        fieldMappings = Prelude.Nothing,
+        documentIdColumnName = pDocumentIdColumnName_,
+        documentDataColumnName = pDocumentDataColumnName_,
+        changeDetectingColumns =
+          Lens.coerced Lens.# pChangeDetectingColumns_
+      }
+
+-- | The column that contains the title of the document.
+columnConfiguration_documentTitleColumnName :: Lens.Lens' ColumnConfiguration (Prelude.Maybe Prelude.Text)
+columnConfiguration_documentTitleColumnName = Lens.lens (\ColumnConfiguration' {documentTitleColumnName} -> documentTitleColumnName) (\s@ColumnConfiguration' {} a -> s {documentTitleColumnName = a} :: ColumnConfiguration)
+
+-- | An array of objects that map database column names to the corresponding
+-- fields in an index. You must first create the fields in the index using
+-- the @UpdateIndex@ API.
+columnConfiguration_fieldMappings :: Lens.Lens' ColumnConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+columnConfiguration_fieldMappings = Lens.lens (\ColumnConfiguration' {fieldMappings} -> fieldMappings) (\s@ColumnConfiguration' {} a -> s {fieldMappings = a} :: ColumnConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The column that provides the document\'s identifier.
+columnConfiguration_documentIdColumnName :: Lens.Lens' ColumnConfiguration Prelude.Text
+columnConfiguration_documentIdColumnName = Lens.lens (\ColumnConfiguration' {documentIdColumnName} -> documentIdColumnName) (\s@ColumnConfiguration' {} a -> s {documentIdColumnName = a} :: ColumnConfiguration)
+
+-- | The column that contains the contents of the document.
+columnConfiguration_documentDataColumnName :: Lens.Lens' ColumnConfiguration Prelude.Text
+columnConfiguration_documentDataColumnName = Lens.lens (\ColumnConfiguration' {documentDataColumnName} -> documentDataColumnName) (\s@ColumnConfiguration' {} a -> s {documentDataColumnName = a} :: ColumnConfiguration)
+
+-- | One to five columns that indicate when a document in the database has
+-- changed.
+columnConfiguration_changeDetectingColumns :: Lens.Lens' ColumnConfiguration (Prelude.NonEmpty Prelude.Text)
+columnConfiguration_changeDetectingColumns = Lens.lens (\ColumnConfiguration' {changeDetectingColumns} -> changeDetectingColumns) (\s@ColumnConfiguration' {} a -> s {changeDetectingColumns = a} :: ColumnConfiguration) Prelude.. Lens.coerced
+
+instance Data.FromJSON ColumnConfiguration where
+  parseJSON =
+    Data.withObject
+      "ColumnConfiguration"
+      ( \x ->
+          ColumnConfiguration'
+            Prelude.<$> (x Data..:? "DocumentTitleColumnName")
+            Prelude.<*> (x Data..:? "FieldMappings")
+            Prelude.<*> (x Data..: "DocumentIdColumnName")
+            Prelude.<*> (x Data..: "DocumentDataColumnName")
+            Prelude.<*> (x Data..: "ChangeDetectingColumns")
+      )
+
+instance Prelude.Hashable ColumnConfiguration where
+  hashWithSalt _salt ColumnConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` documentTitleColumnName
+      `Prelude.hashWithSalt` fieldMappings
+      `Prelude.hashWithSalt` documentIdColumnName
+      `Prelude.hashWithSalt` documentDataColumnName
+      `Prelude.hashWithSalt` changeDetectingColumns
+
+instance Prelude.NFData ColumnConfiguration where
+  rnf ColumnConfiguration' {..} =
+    Prelude.rnf documentTitleColumnName
+      `Prelude.seq` Prelude.rnf fieldMappings
+      `Prelude.seq` Prelude.rnf documentIdColumnName
+      `Prelude.seq` Prelude.rnf documentDataColumnName
+      `Prelude.seq` Prelude.rnf changeDetectingColumns
+
+instance Data.ToJSON ColumnConfiguration where
+  toJSON ColumnConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DocumentTitleColumnName" Data..=)
+              Prelude.<$> documentTitleColumnName,
+            ("FieldMappings" Data..=) Prelude.<$> fieldMappings,
+            Prelude.Just
+              ( "DocumentIdColumnName"
+                  Data..= documentIdColumnName
+              ),
+            Prelude.Just
+              ( "DocumentDataColumnName"
+                  Data..= documentDataColumnName
+              ),
+            Prelude.Just
+              ( "ChangeDetectingColumns"
+                  Data..= changeDetectingColumns
+              )
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/ConditionOperator.hs b/gen/Amazonka/Kendra/Types/ConditionOperator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ConditionOperator.hs
@@ -0,0 +1,116 @@
+{-# 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.Kendra.Types.ConditionOperator
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ConditionOperator
+  ( ConditionOperator
+      ( ..,
+        ConditionOperator_BeginsWith,
+        ConditionOperator_Contains,
+        ConditionOperator_Equals,
+        ConditionOperator_Exists,
+        ConditionOperator_GreaterThan,
+        ConditionOperator_GreaterThanOrEquals,
+        ConditionOperator_LessThan,
+        ConditionOperator_LessThanOrEquals,
+        ConditionOperator_NotContains,
+        ConditionOperator_NotEquals,
+        ConditionOperator_NotExists
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ConditionOperator = ConditionOperator'
+  { fromConditionOperator ::
+      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 ConditionOperator_BeginsWith :: ConditionOperator
+pattern ConditionOperator_BeginsWith = ConditionOperator' "BeginsWith"
+
+pattern ConditionOperator_Contains :: ConditionOperator
+pattern ConditionOperator_Contains = ConditionOperator' "Contains"
+
+pattern ConditionOperator_Equals :: ConditionOperator
+pattern ConditionOperator_Equals = ConditionOperator' "Equals"
+
+pattern ConditionOperator_Exists :: ConditionOperator
+pattern ConditionOperator_Exists = ConditionOperator' "Exists"
+
+pattern ConditionOperator_GreaterThan :: ConditionOperator
+pattern ConditionOperator_GreaterThan = ConditionOperator' "GreaterThan"
+
+pattern ConditionOperator_GreaterThanOrEquals :: ConditionOperator
+pattern ConditionOperator_GreaterThanOrEquals = ConditionOperator' "GreaterThanOrEquals"
+
+pattern ConditionOperator_LessThan :: ConditionOperator
+pattern ConditionOperator_LessThan = ConditionOperator' "LessThan"
+
+pattern ConditionOperator_LessThanOrEquals :: ConditionOperator
+pattern ConditionOperator_LessThanOrEquals = ConditionOperator' "LessThanOrEquals"
+
+pattern ConditionOperator_NotContains :: ConditionOperator
+pattern ConditionOperator_NotContains = ConditionOperator' "NotContains"
+
+pattern ConditionOperator_NotEquals :: ConditionOperator
+pattern ConditionOperator_NotEquals = ConditionOperator' "NotEquals"
+
+pattern ConditionOperator_NotExists :: ConditionOperator
+pattern ConditionOperator_NotExists = ConditionOperator' "NotExists"
+
+{-# COMPLETE
+  ConditionOperator_BeginsWith,
+  ConditionOperator_Contains,
+  ConditionOperator_Equals,
+  ConditionOperator_Exists,
+  ConditionOperator_GreaterThan,
+  ConditionOperator_GreaterThanOrEquals,
+  ConditionOperator_LessThan,
+  ConditionOperator_LessThanOrEquals,
+  ConditionOperator_NotContains,
+  ConditionOperator_NotEquals,
+  ConditionOperator_NotExists,
+  ConditionOperator'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/ConfluenceAttachmentConfiguration.hs b/gen/Amazonka/Kendra/Types/ConfluenceAttachmentConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ConfluenceAttachmentConfiguration.hs
@@ -0,0 +1,137 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.Types.ConfluenceAttachmentConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ConfluenceAttachmentConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.ConfluenceAttachmentToIndexFieldMapping
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration of attachment settings for the Confluence data source.
+-- Attachment settings are optional, if you don\'t specify settings
+-- attachments, Amazon Kendra won\'t index them.
+--
+-- /See:/ 'newConfluenceAttachmentConfiguration' smart constructor.
+data ConfluenceAttachmentConfiguration = ConfluenceAttachmentConfiguration'
+  { -- | Maps attributes or field names of Confluence attachments to Amazon
+    -- Kendra index field names. To create custom fields, use the @UpdateIndex@
+    -- API before you map to Confluence fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The Confluence data source field names must exist in your Confluence
+    -- custom metadata.
+    --
+    -- If you specify the @AttachentFieldMappings@ parameter, you must specify
+    -- at least one field mapping.
+    attachmentFieldMappings :: Prelude.Maybe (Prelude.NonEmpty ConfluenceAttachmentToIndexFieldMapping),
+    -- | @TRUE@ to index attachments of pages and blogs in Confluence.
+    crawlAttachments :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConfluenceAttachmentConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attachmentFieldMappings', 'confluenceAttachmentConfiguration_attachmentFieldMappings' - Maps attributes or field names of Confluence attachments to Amazon
+-- Kendra index field names. To create custom fields, use the @UpdateIndex@
+-- API before you map to Confluence fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Confluence data source field names must exist in your Confluence
+-- custom metadata.
+--
+-- If you specify the @AttachentFieldMappings@ parameter, you must specify
+-- at least one field mapping.
+--
+-- 'crawlAttachments', 'confluenceAttachmentConfiguration_crawlAttachments' - @TRUE@ to index attachments of pages and blogs in Confluence.
+newConfluenceAttachmentConfiguration ::
+  ConfluenceAttachmentConfiguration
+newConfluenceAttachmentConfiguration =
+  ConfluenceAttachmentConfiguration'
+    { attachmentFieldMappings =
+        Prelude.Nothing,
+      crawlAttachments = Prelude.Nothing
+    }
+
+-- | Maps attributes or field names of Confluence attachments to Amazon
+-- Kendra index field names. To create custom fields, use the @UpdateIndex@
+-- API before you map to Confluence fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Confluence data source field names must exist in your Confluence
+-- custom metadata.
+--
+-- If you specify the @AttachentFieldMappings@ parameter, you must specify
+-- at least one field mapping.
+confluenceAttachmentConfiguration_attachmentFieldMappings :: Lens.Lens' ConfluenceAttachmentConfiguration (Prelude.Maybe (Prelude.NonEmpty ConfluenceAttachmentToIndexFieldMapping))
+confluenceAttachmentConfiguration_attachmentFieldMappings = Lens.lens (\ConfluenceAttachmentConfiguration' {attachmentFieldMappings} -> attachmentFieldMappings) (\s@ConfluenceAttachmentConfiguration' {} a -> s {attachmentFieldMappings = a} :: ConfluenceAttachmentConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | @TRUE@ to index attachments of pages and blogs in Confluence.
+confluenceAttachmentConfiguration_crawlAttachments :: Lens.Lens' ConfluenceAttachmentConfiguration (Prelude.Maybe Prelude.Bool)
+confluenceAttachmentConfiguration_crawlAttachments = Lens.lens (\ConfluenceAttachmentConfiguration' {crawlAttachments} -> crawlAttachments) (\s@ConfluenceAttachmentConfiguration' {} a -> s {crawlAttachments = a} :: ConfluenceAttachmentConfiguration)
+
+instance
+  Data.FromJSON
+    ConfluenceAttachmentConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "ConfluenceAttachmentConfiguration"
+      ( \x ->
+          ConfluenceAttachmentConfiguration'
+            Prelude.<$> (x Data..:? "AttachmentFieldMappings")
+            Prelude.<*> (x Data..:? "CrawlAttachments")
+      )
+
+instance
+  Prelude.Hashable
+    ConfluenceAttachmentConfiguration
+  where
+  hashWithSalt
+    _salt
+    ConfluenceAttachmentConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` attachmentFieldMappings
+        `Prelude.hashWithSalt` crawlAttachments
+
+instance
+  Prelude.NFData
+    ConfluenceAttachmentConfiguration
+  where
+  rnf ConfluenceAttachmentConfiguration' {..} =
+    Prelude.rnf attachmentFieldMappings
+      `Prelude.seq` Prelude.rnf crawlAttachments
+
+instance
+  Data.ToJSON
+    ConfluenceAttachmentConfiguration
+  where
+  toJSON ConfluenceAttachmentConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AttachmentFieldMappings" Data..=)
+              Prelude.<$> attachmentFieldMappings,
+            ("CrawlAttachments" Data..=)
+              Prelude.<$> crawlAttachments
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/ConfluenceAttachmentFieldName.hs b/gen/Amazonka/Kendra/Types/ConfluenceAttachmentFieldName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ConfluenceAttachmentFieldName.hs
@@ -0,0 +1,116 @@
+{-# 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.Kendra.Types.ConfluenceAttachmentFieldName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ConfluenceAttachmentFieldName
+  ( ConfluenceAttachmentFieldName
+      ( ..,
+        ConfluenceAttachmentFieldName_AUTHOR,
+        ConfluenceAttachmentFieldName_CONTENT_TYPE,
+        ConfluenceAttachmentFieldName_CREATED_DATE,
+        ConfluenceAttachmentFieldName_DISPLAY_URL,
+        ConfluenceAttachmentFieldName_FILE_SIZE,
+        ConfluenceAttachmentFieldName_ITEM_TYPE,
+        ConfluenceAttachmentFieldName_PARENT_ID,
+        ConfluenceAttachmentFieldName_SPACE_KEY,
+        ConfluenceAttachmentFieldName_SPACE_NAME,
+        ConfluenceAttachmentFieldName_URL,
+        ConfluenceAttachmentFieldName_VERSION
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ConfluenceAttachmentFieldName = ConfluenceAttachmentFieldName'
+  { fromConfluenceAttachmentFieldName ::
+      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 ConfluenceAttachmentFieldName_AUTHOR :: ConfluenceAttachmentFieldName
+pattern ConfluenceAttachmentFieldName_AUTHOR = ConfluenceAttachmentFieldName' "AUTHOR"
+
+pattern ConfluenceAttachmentFieldName_CONTENT_TYPE :: ConfluenceAttachmentFieldName
+pattern ConfluenceAttachmentFieldName_CONTENT_TYPE = ConfluenceAttachmentFieldName' "CONTENT_TYPE"
+
+pattern ConfluenceAttachmentFieldName_CREATED_DATE :: ConfluenceAttachmentFieldName
+pattern ConfluenceAttachmentFieldName_CREATED_DATE = ConfluenceAttachmentFieldName' "CREATED_DATE"
+
+pattern ConfluenceAttachmentFieldName_DISPLAY_URL :: ConfluenceAttachmentFieldName
+pattern ConfluenceAttachmentFieldName_DISPLAY_URL = ConfluenceAttachmentFieldName' "DISPLAY_URL"
+
+pattern ConfluenceAttachmentFieldName_FILE_SIZE :: ConfluenceAttachmentFieldName
+pattern ConfluenceAttachmentFieldName_FILE_SIZE = ConfluenceAttachmentFieldName' "FILE_SIZE"
+
+pattern ConfluenceAttachmentFieldName_ITEM_TYPE :: ConfluenceAttachmentFieldName
+pattern ConfluenceAttachmentFieldName_ITEM_TYPE = ConfluenceAttachmentFieldName' "ITEM_TYPE"
+
+pattern ConfluenceAttachmentFieldName_PARENT_ID :: ConfluenceAttachmentFieldName
+pattern ConfluenceAttachmentFieldName_PARENT_ID = ConfluenceAttachmentFieldName' "PARENT_ID"
+
+pattern ConfluenceAttachmentFieldName_SPACE_KEY :: ConfluenceAttachmentFieldName
+pattern ConfluenceAttachmentFieldName_SPACE_KEY = ConfluenceAttachmentFieldName' "SPACE_KEY"
+
+pattern ConfluenceAttachmentFieldName_SPACE_NAME :: ConfluenceAttachmentFieldName
+pattern ConfluenceAttachmentFieldName_SPACE_NAME = ConfluenceAttachmentFieldName' "SPACE_NAME"
+
+pattern ConfluenceAttachmentFieldName_URL :: ConfluenceAttachmentFieldName
+pattern ConfluenceAttachmentFieldName_URL = ConfluenceAttachmentFieldName' "URL"
+
+pattern ConfluenceAttachmentFieldName_VERSION :: ConfluenceAttachmentFieldName
+pattern ConfluenceAttachmentFieldName_VERSION = ConfluenceAttachmentFieldName' "VERSION"
+
+{-# COMPLETE
+  ConfluenceAttachmentFieldName_AUTHOR,
+  ConfluenceAttachmentFieldName_CONTENT_TYPE,
+  ConfluenceAttachmentFieldName_CREATED_DATE,
+  ConfluenceAttachmentFieldName_DISPLAY_URL,
+  ConfluenceAttachmentFieldName_FILE_SIZE,
+  ConfluenceAttachmentFieldName_ITEM_TYPE,
+  ConfluenceAttachmentFieldName_PARENT_ID,
+  ConfluenceAttachmentFieldName_SPACE_KEY,
+  ConfluenceAttachmentFieldName_SPACE_NAME,
+  ConfluenceAttachmentFieldName_URL,
+  ConfluenceAttachmentFieldName_VERSION,
+  ConfluenceAttachmentFieldName'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/ConfluenceAttachmentToIndexFieldMapping.hs b/gen/Amazonka/Kendra/Types/ConfluenceAttachmentToIndexFieldMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ConfluenceAttachmentToIndexFieldMapping.hs
@@ -0,0 +1,145 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.Types.ConfluenceAttachmentToIndexFieldMapping
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ConfluenceAttachmentToIndexFieldMapping where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.ConfluenceAttachmentFieldName
+import qualified Amazonka.Prelude as Prelude
+
+-- | Maps attributes or field names of Confluence attachments to Amazon
+-- Kendra index field names. To create custom fields, use the @UpdateIndex@
+-- API before you map to Confluence fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Confuence data source field names must exist in your Confluence
+-- custom metadata.
+--
+-- /See:/ 'newConfluenceAttachmentToIndexFieldMapping' smart constructor.
+data ConfluenceAttachmentToIndexFieldMapping = ConfluenceAttachmentToIndexFieldMapping'
+  { -- | The name of the field in the data source.
+    --
+    -- You must first create the index field using the @UpdateIndex@ API.
+    dataSourceFieldName :: Prelude.Maybe ConfluenceAttachmentFieldName,
+    -- | The format for date fields in the data source. If the field specified in
+    -- @DataSourceFieldName@ is a date field you must specify the date format.
+    -- If the field is not a date field, an exception is thrown.
+    dateFieldFormat :: Prelude.Maybe Prelude.Text,
+    -- | The name of the index field to map to the Confluence data source field.
+    -- The index field type must match the Confluence field type.
+    indexFieldName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConfluenceAttachmentToIndexFieldMapping' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSourceFieldName', 'confluenceAttachmentToIndexFieldMapping_dataSourceFieldName' - The name of the field in the data source.
+--
+-- You must first create the index field using the @UpdateIndex@ API.
+--
+-- 'dateFieldFormat', 'confluenceAttachmentToIndexFieldMapping_dateFieldFormat' - The format for date fields in the data source. If the field specified in
+-- @DataSourceFieldName@ is a date field you must specify the date format.
+-- If the field is not a date field, an exception is thrown.
+--
+-- 'indexFieldName', 'confluenceAttachmentToIndexFieldMapping_indexFieldName' - The name of the index field to map to the Confluence data source field.
+-- The index field type must match the Confluence field type.
+newConfluenceAttachmentToIndexFieldMapping ::
+  ConfluenceAttachmentToIndexFieldMapping
+newConfluenceAttachmentToIndexFieldMapping =
+  ConfluenceAttachmentToIndexFieldMapping'
+    { dataSourceFieldName =
+        Prelude.Nothing,
+      dateFieldFormat = Prelude.Nothing,
+      indexFieldName = Prelude.Nothing
+    }
+
+-- | The name of the field in the data source.
+--
+-- You must first create the index field using the @UpdateIndex@ API.
+confluenceAttachmentToIndexFieldMapping_dataSourceFieldName :: Lens.Lens' ConfluenceAttachmentToIndexFieldMapping (Prelude.Maybe ConfluenceAttachmentFieldName)
+confluenceAttachmentToIndexFieldMapping_dataSourceFieldName = Lens.lens (\ConfluenceAttachmentToIndexFieldMapping' {dataSourceFieldName} -> dataSourceFieldName) (\s@ConfluenceAttachmentToIndexFieldMapping' {} a -> s {dataSourceFieldName = a} :: ConfluenceAttachmentToIndexFieldMapping)
+
+-- | The format for date fields in the data source. If the field specified in
+-- @DataSourceFieldName@ is a date field you must specify the date format.
+-- If the field is not a date field, an exception is thrown.
+confluenceAttachmentToIndexFieldMapping_dateFieldFormat :: Lens.Lens' ConfluenceAttachmentToIndexFieldMapping (Prelude.Maybe Prelude.Text)
+confluenceAttachmentToIndexFieldMapping_dateFieldFormat = Lens.lens (\ConfluenceAttachmentToIndexFieldMapping' {dateFieldFormat} -> dateFieldFormat) (\s@ConfluenceAttachmentToIndexFieldMapping' {} a -> s {dateFieldFormat = a} :: ConfluenceAttachmentToIndexFieldMapping)
+
+-- | The name of the index field to map to the Confluence data source field.
+-- The index field type must match the Confluence field type.
+confluenceAttachmentToIndexFieldMapping_indexFieldName :: Lens.Lens' ConfluenceAttachmentToIndexFieldMapping (Prelude.Maybe Prelude.Text)
+confluenceAttachmentToIndexFieldMapping_indexFieldName = Lens.lens (\ConfluenceAttachmentToIndexFieldMapping' {indexFieldName} -> indexFieldName) (\s@ConfluenceAttachmentToIndexFieldMapping' {} a -> s {indexFieldName = a} :: ConfluenceAttachmentToIndexFieldMapping)
+
+instance
+  Data.FromJSON
+    ConfluenceAttachmentToIndexFieldMapping
+  where
+  parseJSON =
+    Data.withObject
+      "ConfluenceAttachmentToIndexFieldMapping"
+      ( \x ->
+          ConfluenceAttachmentToIndexFieldMapping'
+            Prelude.<$> (x Data..:? "DataSourceFieldName")
+            Prelude.<*> (x Data..:? "DateFieldFormat")
+            Prelude.<*> (x Data..:? "IndexFieldName")
+      )
+
+instance
+  Prelude.Hashable
+    ConfluenceAttachmentToIndexFieldMapping
+  where
+  hashWithSalt
+    _salt
+    ConfluenceAttachmentToIndexFieldMapping' {..} =
+      _salt
+        `Prelude.hashWithSalt` dataSourceFieldName
+        `Prelude.hashWithSalt` dateFieldFormat
+        `Prelude.hashWithSalt` indexFieldName
+
+instance
+  Prelude.NFData
+    ConfluenceAttachmentToIndexFieldMapping
+  where
+  rnf ConfluenceAttachmentToIndexFieldMapping' {..} =
+    Prelude.rnf dataSourceFieldName
+      `Prelude.seq` Prelude.rnf dateFieldFormat
+      `Prelude.seq` Prelude.rnf indexFieldName
+
+instance
+  Data.ToJSON
+    ConfluenceAttachmentToIndexFieldMapping
+  where
+  toJSON ConfluenceAttachmentToIndexFieldMapping' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DataSourceFieldName" Data..=)
+              Prelude.<$> dataSourceFieldName,
+            ("DateFieldFormat" Data..=)
+              Prelude.<$> dateFieldFormat,
+            ("IndexFieldName" Data..=)
+              Prelude.<$> indexFieldName
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/ConfluenceAuthenticationType.hs b/gen/Amazonka/Kendra/Types/ConfluenceAuthenticationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ConfluenceAuthenticationType.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.Kendra.Types.ConfluenceAuthenticationType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ConfluenceAuthenticationType
+  ( ConfluenceAuthenticationType
+      ( ..,
+        ConfluenceAuthenticationType_HTTP_BASIC,
+        ConfluenceAuthenticationType_PAT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ConfluenceAuthenticationType = ConfluenceAuthenticationType'
+  { fromConfluenceAuthenticationType ::
+      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 ConfluenceAuthenticationType_HTTP_BASIC :: ConfluenceAuthenticationType
+pattern ConfluenceAuthenticationType_HTTP_BASIC = ConfluenceAuthenticationType' "HTTP_BASIC"
+
+pattern ConfluenceAuthenticationType_PAT :: ConfluenceAuthenticationType
+pattern ConfluenceAuthenticationType_PAT = ConfluenceAuthenticationType' "PAT"
+
+{-# COMPLETE
+  ConfluenceAuthenticationType_HTTP_BASIC,
+  ConfluenceAuthenticationType_PAT,
+  ConfluenceAuthenticationType'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/ConfluenceBlogConfiguration.hs b/gen/Amazonka/Kendra/Types/ConfluenceBlogConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ConfluenceBlogConfiguration.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.Kendra.Types.ConfluenceBlogConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ConfluenceBlogConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.ConfluenceBlogToIndexFieldMapping
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration of blog settings for the Confluence data source. Blogs are
+-- always indexed unless filtered from the index by the @ExclusionPatterns@
+-- or @InclusionPatterns@ fields in the @ConfluenceConfiguration@ object.
+--
+-- /See:/ 'newConfluenceBlogConfiguration' smart constructor.
+data ConfluenceBlogConfiguration = ConfluenceBlogConfiguration'
+  { -- | Maps attributes or field names of Confluence blogs to Amazon Kendra
+    -- index field names. To create custom fields, use the @UpdateIndex@ API
+    -- before you map to Confluence fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The Confluence data source field names must exist in your Confluence
+    -- custom metadata.
+    --
+    -- If you specify the @BlogFieldMappings@ parameter, you must specify at
+    -- least one field mapping.
+    blogFieldMappings :: Prelude.Maybe (Prelude.NonEmpty ConfluenceBlogToIndexFieldMapping)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConfluenceBlogConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'blogFieldMappings', 'confluenceBlogConfiguration_blogFieldMappings' - Maps attributes or field names of Confluence blogs to Amazon Kendra
+-- index field names. To create custom fields, use the @UpdateIndex@ API
+-- before you map to Confluence fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Confluence data source field names must exist in your Confluence
+-- custom metadata.
+--
+-- If you specify the @BlogFieldMappings@ parameter, you must specify at
+-- least one field mapping.
+newConfluenceBlogConfiguration ::
+  ConfluenceBlogConfiguration
+newConfluenceBlogConfiguration =
+  ConfluenceBlogConfiguration'
+    { blogFieldMappings =
+        Prelude.Nothing
+    }
+
+-- | Maps attributes or field names of Confluence blogs to Amazon Kendra
+-- index field names. To create custom fields, use the @UpdateIndex@ API
+-- before you map to Confluence fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Confluence data source field names must exist in your Confluence
+-- custom metadata.
+--
+-- If you specify the @BlogFieldMappings@ parameter, you must specify at
+-- least one field mapping.
+confluenceBlogConfiguration_blogFieldMappings :: Lens.Lens' ConfluenceBlogConfiguration (Prelude.Maybe (Prelude.NonEmpty ConfluenceBlogToIndexFieldMapping))
+confluenceBlogConfiguration_blogFieldMappings = Lens.lens (\ConfluenceBlogConfiguration' {blogFieldMappings} -> blogFieldMappings) (\s@ConfluenceBlogConfiguration' {} a -> s {blogFieldMappings = a} :: ConfluenceBlogConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ConfluenceBlogConfiguration where
+  parseJSON =
+    Data.withObject
+      "ConfluenceBlogConfiguration"
+      ( \x ->
+          ConfluenceBlogConfiguration'
+            Prelude.<$> (x Data..:? "BlogFieldMappings")
+      )
+
+instance Prelude.Hashable ConfluenceBlogConfiguration where
+  hashWithSalt _salt ConfluenceBlogConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` blogFieldMappings
+
+instance Prelude.NFData ConfluenceBlogConfiguration where
+  rnf ConfluenceBlogConfiguration' {..} =
+    Prelude.rnf blogFieldMappings
+
+instance Data.ToJSON ConfluenceBlogConfiguration where
+  toJSON ConfluenceBlogConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("BlogFieldMappings" Data..=)
+              Prelude.<$> blogFieldMappings
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/ConfluenceBlogFieldName.hs b/gen/Amazonka/Kendra/Types/ConfluenceBlogFieldName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ConfluenceBlogFieldName.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.Kendra.Types.ConfluenceBlogFieldName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ConfluenceBlogFieldName
+  ( ConfluenceBlogFieldName
+      ( ..,
+        ConfluenceBlogFieldName_AUTHOR,
+        ConfluenceBlogFieldName_DISPLAY_URL,
+        ConfluenceBlogFieldName_ITEM_TYPE,
+        ConfluenceBlogFieldName_LABELS,
+        ConfluenceBlogFieldName_PUBLISH_DATE,
+        ConfluenceBlogFieldName_SPACE_KEY,
+        ConfluenceBlogFieldName_SPACE_NAME,
+        ConfluenceBlogFieldName_URL,
+        ConfluenceBlogFieldName_VERSION
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ConfluenceBlogFieldName = ConfluenceBlogFieldName'
+  { fromConfluenceBlogFieldName ::
+      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 ConfluenceBlogFieldName_AUTHOR :: ConfluenceBlogFieldName
+pattern ConfluenceBlogFieldName_AUTHOR = ConfluenceBlogFieldName' "AUTHOR"
+
+pattern ConfluenceBlogFieldName_DISPLAY_URL :: ConfluenceBlogFieldName
+pattern ConfluenceBlogFieldName_DISPLAY_URL = ConfluenceBlogFieldName' "DISPLAY_URL"
+
+pattern ConfluenceBlogFieldName_ITEM_TYPE :: ConfluenceBlogFieldName
+pattern ConfluenceBlogFieldName_ITEM_TYPE = ConfluenceBlogFieldName' "ITEM_TYPE"
+
+pattern ConfluenceBlogFieldName_LABELS :: ConfluenceBlogFieldName
+pattern ConfluenceBlogFieldName_LABELS = ConfluenceBlogFieldName' "LABELS"
+
+pattern ConfluenceBlogFieldName_PUBLISH_DATE :: ConfluenceBlogFieldName
+pattern ConfluenceBlogFieldName_PUBLISH_DATE = ConfluenceBlogFieldName' "PUBLISH_DATE"
+
+pattern ConfluenceBlogFieldName_SPACE_KEY :: ConfluenceBlogFieldName
+pattern ConfluenceBlogFieldName_SPACE_KEY = ConfluenceBlogFieldName' "SPACE_KEY"
+
+pattern ConfluenceBlogFieldName_SPACE_NAME :: ConfluenceBlogFieldName
+pattern ConfluenceBlogFieldName_SPACE_NAME = ConfluenceBlogFieldName' "SPACE_NAME"
+
+pattern ConfluenceBlogFieldName_URL :: ConfluenceBlogFieldName
+pattern ConfluenceBlogFieldName_URL = ConfluenceBlogFieldName' "URL"
+
+pattern ConfluenceBlogFieldName_VERSION :: ConfluenceBlogFieldName
+pattern ConfluenceBlogFieldName_VERSION = ConfluenceBlogFieldName' "VERSION"
+
+{-# COMPLETE
+  ConfluenceBlogFieldName_AUTHOR,
+  ConfluenceBlogFieldName_DISPLAY_URL,
+  ConfluenceBlogFieldName_ITEM_TYPE,
+  ConfluenceBlogFieldName_LABELS,
+  ConfluenceBlogFieldName_PUBLISH_DATE,
+  ConfluenceBlogFieldName_SPACE_KEY,
+  ConfluenceBlogFieldName_SPACE_NAME,
+  ConfluenceBlogFieldName_URL,
+  ConfluenceBlogFieldName_VERSION,
+  ConfluenceBlogFieldName'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/ConfluenceBlogToIndexFieldMapping.hs b/gen/Amazonka/Kendra/Types/ConfluenceBlogToIndexFieldMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ConfluenceBlogToIndexFieldMapping.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.Kendra.Types.ConfluenceBlogToIndexFieldMapping
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ConfluenceBlogToIndexFieldMapping where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.ConfluenceBlogFieldName
+import qualified Amazonka.Prelude as Prelude
+
+-- | Maps attributes or field names of Confluence blog to Amazon Kendra index
+-- field names. To create custom fields, use the @UpdateIndex@ API before
+-- you map to Confluence fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Confluence data source field names must exist in your Confluence
+-- custom metadata.
+--
+-- /See:/ 'newConfluenceBlogToIndexFieldMapping' smart constructor.
+data ConfluenceBlogToIndexFieldMapping = ConfluenceBlogToIndexFieldMapping'
+  { -- | The name of the field in the data source.
+    dataSourceFieldName :: Prelude.Maybe ConfluenceBlogFieldName,
+    -- | The format for date fields in the data source. If the field specified in
+    -- @DataSourceFieldName@ is a date field you must specify the date format.
+    -- If the field is not a date field, an exception is thrown.
+    dateFieldFormat :: Prelude.Maybe Prelude.Text,
+    -- | The name of the index field to map to the Confluence data source field.
+    -- The index field type must match the Confluence field type.
+    indexFieldName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConfluenceBlogToIndexFieldMapping' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSourceFieldName', 'confluenceBlogToIndexFieldMapping_dataSourceFieldName' - The name of the field in the data source.
+--
+-- 'dateFieldFormat', 'confluenceBlogToIndexFieldMapping_dateFieldFormat' - The format for date fields in the data source. If the field specified in
+-- @DataSourceFieldName@ is a date field you must specify the date format.
+-- If the field is not a date field, an exception is thrown.
+--
+-- 'indexFieldName', 'confluenceBlogToIndexFieldMapping_indexFieldName' - The name of the index field to map to the Confluence data source field.
+-- The index field type must match the Confluence field type.
+newConfluenceBlogToIndexFieldMapping ::
+  ConfluenceBlogToIndexFieldMapping
+newConfluenceBlogToIndexFieldMapping =
+  ConfluenceBlogToIndexFieldMapping'
+    { dataSourceFieldName =
+        Prelude.Nothing,
+      dateFieldFormat = Prelude.Nothing,
+      indexFieldName = Prelude.Nothing
+    }
+
+-- | The name of the field in the data source.
+confluenceBlogToIndexFieldMapping_dataSourceFieldName :: Lens.Lens' ConfluenceBlogToIndexFieldMapping (Prelude.Maybe ConfluenceBlogFieldName)
+confluenceBlogToIndexFieldMapping_dataSourceFieldName = Lens.lens (\ConfluenceBlogToIndexFieldMapping' {dataSourceFieldName} -> dataSourceFieldName) (\s@ConfluenceBlogToIndexFieldMapping' {} a -> s {dataSourceFieldName = a} :: ConfluenceBlogToIndexFieldMapping)
+
+-- | The format for date fields in the data source. If the field specified in
+-- @DataSourceFieldName@ is a date field you must specify the date format.
+-- If the field is not a date field, an exception is thrown.
+confluenceBlogToIndexFieldMapping_dateFieldFormat :: Lens.Lens' ConfluenceBlogToIndexFieldMapping (Prelude.Maybe Prelude.Text)
+confluenceBlogToIndexFieldMapping_dateFieldFormat = Lens.lens (\ConfluenceBlogToIndexFieldMapping' {dateFieldFormat} -> dateFieldFormat) (\s@ConfluenceBlogToIndexFieldMapping' {} a -> s {dateFieldFormat = a} :: ConfluenceBlogToIndexFieldMapping)
+
+-- | The name of the index field to map to the Confluence data source field.
+-- The index field type must match the Confluence field type.
+confluenceBlogToIndexFieldMapping_indexFieldName :: Lens.Lens' ConfluenceBlogToIndexFieldMapping (Prelude.Maybe Prelude.Text)
+confluenceBlogToIndexFieldMapping_indexFieldName = Lens.lens (\ConfluenceBlogToIndexFieldMapping' {indexFieldName} -> indexFieldName) (\s@ConfluenceBlogToIndexFieldMapping' {} a -> s {indexFieldName = a} :: ConfluenceBlogToIndexFieldMapping)
+
+instance
+  Data.FromJSON
+    ConfluenceBlogToIndexFieldMapping
+  where
+  parseJSON =
+    Data.withObject
+      "ConfluenceBlogToIndexFieldMapping"
+      ( \x ->
+          ConfluenceBlogToIndexFieldMapping'
+            Prelude.<$> (x Data..:? "DataSourceFieldName")
+            Prelude.<*> (x Data..:? "DateFieldFormat")
+            Prelude.<*> (x Data..:? "IndexFieldName")
+      )
+
+instance
+  Prelude.Hashable
+    ConfluenceBlogToIndexFieldMapping
+  where
+  hashWithSalt
+    _salt
+    ConfluenceBlogToIndexFieldMapping' {..} =
+      _salt
+        `Prelude.hashWithSalt` dataSourceFieldName
+        `Prelude.hashWithSalt` dateFieldFormat
+        `Prelude.hashWithSalt` indexFieldName
+
+instance
+  Prelude.NFData
+    ConfluenceBlogToIndexFieldMapping
+  where
+  rnf ConfluenceBlogToIndexFieldMapping' {..} =
+    Prelude.rnf dataSourceFieldName
+      `Prelude.seq` Prelude.rnf dateFieldFormat
+      `Prelude.seq` Prelude.rnf indexFieldName
+
+instance
+  Data.ToJSON
+    ConfluenceBlogToIndexFieldMapping
+  where
+  toJSON ConfluenceBlogToIndexFieldMapping' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DataSourceFieldName" Data..=)
+              Prelude.<$> dataSourceFieldName,
+            ("DateFieldFormat" Data..=)
+              Prelude.<$> dateFieldFormat,
+            ("IndexFieldName" Data..=)
+              Prelude.<$> indexFieldName
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/ConfluenceConfiguration.hs b/gen/Amazonka/Kendra/Types/ConfluenceConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ConfluenceConfiguration.hs
@@ -0,0 +1,383 @@
+{-# 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.Kendra.Types.ConfluenceConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ConfluenceConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.ConfluenceAttachmentConfiguration
+import Amazonka.Kendra.Types.ConfluenceAuthenticationType
+import Amazonka.Kendra.Types.ConfluenceBlogConfiguration
+import Amazonka.Kendra.Types.ConfluencePageConfiguration
+import Amazonka.Kendra.Types.ConfluenceSpaceConfiguration
+import Amazonka.Kendra.Types.ConfluenceVersion
+import Amazonka.Kendra.Types.DataSourceVpcConfiguration
+import Amazonka.Kendra.Types.ProxyConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information to connect to Confluence as your
+-- data source.
+--
+-- /See:/ 'newConfluenceConfiguration' smart constructor.
+data ConfluenceConfiguration = ConfluenceConfiguration'
+  { -- | Configuration information for indexing attachments to Confluence blogs
+    -- and pages.
+    attachmentConfiguration :: Prelude.Maybe ConfluenceAttachmentConfiguration,
+    -- | Whether you want to connect to Confluence using basic authentication of
+    -- user name and password, or a personal access token. You can use a
+    -- personal access token for Confluence Server.
+    authenticationType :: Prelude.Maybe ConfluenceAuthenticationType,
+    -- | Configuration information for indexing Confluence blogs.
+    blogConfiguration :: Prelude.Maybe ConfluenceBlogConfiguration,
+    -- | A list of regular expression patterns to exclude certain blog posts,
+    -- pages, spaces, or attachments in your Confluence. Content that matches
+    -- the patterns are excluded from the index. Content that doesn\'t match
+    -- the patterns is included in the index. If content matches both an
+    -- inclusion and exclusion pattern, the exclusion pattern takes precedence
+    -- and the content isn\'t included in the index.
+    exclusionPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | A list of regular expression patterns to include certain blog posts,
+    -- pages, spaces, or attachments in your Confluence. Content that matches
+    -- the patterns are included in the index. Content that doesn\'t match the
+    -- patterns is excluded from the index. If content matches both an
+    -- inclusion and exclusion pattern, the exclusion pattern takes precedence
+    -- and the content isn\'t included in the index.
+    inclusionPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | Configuration information for indexing Confluence pages.
+    pageConfiguration :: Prelude.Maybe ConfluencePageConfiguration,
+    -- | Configuration information to connect to your Confluence URL instance via
+    -- a web proxy. You can use this option for Confluence Server.
+    --
+    -- You must provide the website host name and port number. For example, the
+    -- host name of /https:\/\/a.example.com\/page1.html/ is \"a.example.com\"
+    -- and the port is 443, the standard port for HTTPS.
+    --
+    -- Web proxy credentials are optional and you can use them to connect to a
+    -- web proxy server that requires basic authentication of user name and
+    -- password. To store web proxy credentials, you use a secret in Secrets
+    -- Manager.
+    --
+    -- It is recommended that you follow best security practices when
+    -- configuring your web proxy. This includes setting up throttling, setting
+    -- up logging and monitoring, and applying security patches on a regular
+    -- basis. If you use your web proxy with multiple data sources, sync jobs
+    -- that occur at the same time could strain the load on your proxy. It is
+    -- recommended you prepare your proxy beforehand for any security and load
+    -- requirements.
+    proxyConfiguration :: Prelude.Maybe ProxyConfiguration,
+    -- | Configuration information for indexing Confluence spaces.
+    spaceConfiguration :: Prelude.Maybe ConfluenceSpaceConfiguration,
+    -- | Configuration information for an Amazon Virtual Private Cloud to connect
+    -- to your Confluence. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+    vpcConfiguration :: Prelude.Maybe DataSourceVpcConfiguration,
+    -- | The URL of your Confluence instance. Use the full URL of the server. For
+    -- example, /https:\/\/server.example.com:port\//. You can also use an IP
+    -- address, for example, /https:\/\/192.168.1.113\//.
+    serverUrl :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of an Secrets Manager secret that
+    -- contains the user name and password required to connect to the
+    -- Confluence instance. If you use Confluence Cloud, you use a generated
+    -- API token as the password.
+    --
+    -- You can also provide authentication credentials in the form of a
+    -- personal access token. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/data-source-confluence.html Using a Confluence data source>.
+    secretArn :: Prelude.Text,
+    -- | The version or the type of Confluence installation to connect to.
+    version :: ConfluenceVersion
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConfluenceConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attachmentConfiguration', 'confluenceConfiguration_attachmentConfiguration' - Configuration information for indexing attachments to Confluence blogs
+-- and pages.
+--
+-- 'authenticationType', 'confluenceConfiguration_authenticationType' - Whether you want to connect to Confluence using basic authentication of
+-- user name and password, or a personal access token. You can use a
+-- personal access token for Confluence Server.
+--
+-- 'blogConfiguration', 'confluenceConfiguration_blogConfiguration' - Configuration information for indexing Confluence blogs.
+--
+-- 'exclusionPatterns', 'confluenceConfiguration_exclusionPatterns' - A list of regular expression patterns to exclude certain blog posts,
+-- pages, spaces, or attachments in your Confluence. Content that matches
+-- the patterns are excluded from the index. Content that doesn\'t match
+-- the patterns is included in the index. If content matches both an
+-- inclusion and exclusion pattern, the exclusion pattern takes precedence
+-- and the content isn\'t included in the index.
+--
+-- 'inclusionPatterns', 'confluenceConfiguration_inclusionPatterns' - A list of regular expression patterns to include certain blog posts,
+-- pages, spaces, or attachments in your Confluence. Content that matches
+-- the patterns are included in the index. Content that doesn\'t match the
+-- patterns is excluded from the index. If content matches both an
+-- inclusion and exclusion pattern, the exclusion pattern takes precedence
+-- and the content isn\'t included in the index.
+--
+-- 'pageConfiguration', 'confluenceConfiguration_pageConfiguration' - Configuration information for indexing Confluence pages.
+--
+-- 'proxyConfiguration', 'confluenceConfiguration_proxyConfiguration' - Configuration information to connect to your Confluence URL instance via
+-- a web proxy. You can use this option for Confluence Server.
+--
+-- You must provide the website host name and port number. For example, the
+-- host name of /https:\/\/a.example.com\/page1.html/ is \"a.example.com\"
+-- and the port is 443, the standard port for HTTPS.
+--
+-- Web proxy credentials are optional and you can use them to connect to a
+-- web proxy server that requires basic authentication of user name and
+-- password. To store web proxy credentials, you use a secret in Secrets
+-- Manager.
+--
+-- It is recommended that you follow best security practices when
+-- configuring your web proxy. This includes setting up throttling, setting
+-- up logging and monitoring, and applying security patches on a regular
+-- basis. If you use your web proxy with multiple data sources, sync jobs
+-- that occur at the same time could strain the load on your proxy. It is
+-- recommended you prepare your proxy beforehand for any security and load
+-- requirements.
+--
+-- 'spaceConfiguration', 'confluenceConfiguration_spaceConfiguration' - Configuration information for indexing Confluence spaces.
+--
+-- 'vpcConfiguration', 'confluenceConfiguration_vpcConfiguration' - Configuration information for an Amazon Virtual Private Cloud to connect
+-- to your Confluence. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+--
+-- 'serverUrl', 'confluenceConfiguration_serverUrl' - The URL of your Confluence instance. Use the full URL of the server. For
+-- example, /https:\/\/server.example.com:port\//. You can also use an IP
+-- address, for example, /https:\/\/192.168.1.113\//.
+--
+-- 'secretArn', 'confluenceConfiguration_secretArn' - The Amazon Resource Name (ARN) of an Secrets Manager secret that
+-- contains the user name and password required to connect to the
+-- Confluence instance. If you use Confluence Cloud, you use a generated
+-- API token as the password.
+--
+-- You can also provide authentication credentials in the form of a
+-- personal access token. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/data-source-confluence.html Using a Confluence data source>.
+--
+-- 'version', 'confluenceConfiguration_version' - The version or the type of Confluence installation to connect to.
+newConfluenceConfiguration ::
+  -- | 'serverUrl'
+  Prelude.Text ->
+  -- | 'secretArn'
+  Prelude.Text ->
+  -- | 'version'
+  ConfluenceVersion ->
+  ConfluenceConfiguration
+newConfluenceConfiguration
+  pServerUrl_
+  pSecretArn_
+  pVersion_ =
+    ConfluenceConfiguration'
+      { attachmentConfiguration =
+          Prelude.Nothing,
+        authenticationType = Prelude.Nothing,
+        blogConfiguration = Prelude.Nothing,
+        exclusionPatterns = Prelude.Nothing,
+        inclusionPatterns = Prelude.Nothing,
+        pageConfiguration = Prelude.Nothing,
+        proxyConfiguration = Prelude.Nothing,
+        spaceConfiguration = Prelude.Nothing,
+        vpcConfiguration = Prelude.Nothing,
+        serverUrl = pServerUrl_,
+        secretArn = pSecretArn_,
+        version = pVersion_
+      }
+
+-- | Configuration information for indexing attachments to Confluence blogs
+-- and pages.
+confluenceConfiguration_attachmentConfiguration :: Lens.Lens' ConfluenceConfiguration (Prelude.Maybe ConfluenceAttachmentConfiguration)
+confluenceConfiguration_attachmentConfiguration = Lens.lens (\ConfluenceConfiguration' {attachmentConfiguration} -> attachmentConfiguration) (\s@ConfluenceConfiguration' {} a -> s {attachmentConfiguration = a} :: ConfluenceConfiguration)
+
+-- | Whether you want to connect to Confluence using basic authentication of
+-- user name and password, or a personal access token. You can use a
+-- personal access token for Confluence Server.
+confluenceConfiguration_authenticationType :: Lens.Lens' ConfluenceConfiguration (Prelude.Maybe ConfluenceAuthenticationType)
+confluenceConfiguration_authenticationType = Lens.lens (\ConfluenceConfiguration' {authenticationType} -> authenticationType) (\s@ConfluenceConfiguration' {} a -> s {authenticationType = a} :: ConfluenceConfiguration)
+
+-- | Configuration information for indexing Confluence blogs.
+confluenceConfiguration_blogConfiguration :: Lens.Lens' ConfluenceConfiguration (Prelude.Maybe ConfluenceBlogConfiguration)
+confluenceConfiguration_blogConfiguration = Lens.lens (\ConfluenceConfiguration' {blogConfiguration} -> blogConfiguration) (\s@ConfluenceConfiguration' {} a -> s {blogConfiguration = a} :: ConfluenceConfiguration)
+
+-- | A list of regular expression patterns to exclude certain blog posts,
+-- pages, spaces, or attachments in your Confluence. Content that matches
+-- the patterns are excluded from the index. Content that doesn\'t match
+-- the patterns is included in the index. If content matches both an
+-- inclusion and exclusion pattern, the exclusion pattern takes precedence
+-- and the content isn\'t included in the index.
+confluenceConfiguration_exclusionPatterns :: Lens.Lens' ConfluenceConfiguration (Prelude.Maybe [Prelude.Text])
+confluenceConfiguration_exclusionPatterns = Lens.lens (\ConfluenceConfiguration' {exclusionPatterns} -> exclusionPatterns) (\s@ConfluenceConfiguration' {} a -> s {exclusionPatterns = a} :: ConfluenceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of regular expression patterns to include certain blog posts,
+-- pages, spaces, or attachments in your Confluence. Content that matches
+-- the patterns are included in the index. Content that doesn\'t match the
+-- patterns is excluded from the index. If content matches both an
+-- inclusion and exclusion pattern, the exclusion pattern takes precedence
+-- and the content isn\'t included in the index.
+confluenceConfiguration_inclusionPatterns :: Lens.Lens' ConfluenceConfiguration (Prelude.Maybe [Prelude.Text])
+confluenceConfiguration_inclusionPatterns = Lens.lens (\ConfluenceConfiguration' {inclusionPatterns} -> inclusionPatterns) (\s@ConfluenceConfiguration' {} a -> s {inclusionPatterns = a} :: ConfluenceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Configuration information for indexing Confluence pages.
+confluenceConfiguration_pageConfiguration :: Lens.Lens' ConfluenceConfiguration (Prelude.Maybe ConfluencePageConfiguration)
+confluenceConfiguration_pageConfiguration = Lens.lens (\ConfluenceConfiguration' {pageConfiguration} -> pageConfiguration) (\s@ConfluenceConfiguration' {} a -> s {pageConfiguration = a} :: ConfluenceConfiguration)
+
+-- | Configuration information to connect to your Confluence URL instance via
+-- a web proxy. You can use this option for Confluence Server.
+--
+-- You must provide the website host name and port number. For example, the
+-- host name of /https:\/\/a.example.com\/page1.html/ is \"a.example.com\"
+-- and the port is 443, the standard port for HTTPS.
+--
+-- Web proxy credentials are optional and you can use them to connect to a
+-- web proxy server that requires basic authentication of user name and
+-- password. To store web proxy credentials, you use a secret in Secrets
+-- Manager.
+--
+-- It is recommended that you follow best security practices when
+-- configuring your web proxy. This includes setting up throttling, setting
+-- up logging and monitoring, and applying security patches on a regular
+-- basis. If you use your web proxy with multiple data sources, sync jobs
+-- that occur at the same time could strain the load on your proxy. It is
+-- recommended you prepare your proxy beforehand for any security and load
+-- requirements.
+confluenceConfiguration_proxyConfiguration :: Lens.Lens' ConfluenceConfiguration (Prelude.Maybe ProxyConfiguration)
+confluenceConfiguration_proxyConfiguration = Lens.lens (\ConfluenceConfiguration' {proxyConfiguration} -> proxyConfiguration) (\s@ConfluenceConfiguration' {} a -> s {proxyConfiguration = a} :: ConfluenceConfiguration)
+
+-- | Configuration information for indexing Confluence spaces.
+confluenceConfiguration_spaceConfiguration :: Lens.Lens' ConfluenceConfiguration (Prelude.Maybe ConfluenceSpaceConfiguration)
+confluenceConfiguration_spaceConfiguration = Lens.lens (\ConfluenceConfiguration' {spaceConfiguration} -> spaceConfiguration) (\s@ConfluenceConfiguration' {} a -> s {spaceConfiguration = a} :: ConfluenceConfiguration)
+
+-- | Configuration information for an Amazon Virtual Private Cloud to connect
+-- to your Confluence. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+confluenceConfiguration_vpcConfiguration :: Lens.Lens' ConfluenceConfiguration (Prelude.Maybe DataSourceVpcConfiguration)
+confluenceConfiguration_vpcConfiguration = Lens.lens (\ConfluenceConfiguration' {vpcConfiguration} -> vpcConfiguration) (\s@ConfluenceConfiguration' {} a -> s {vpcConfiguration = a} :: ConfluenceConfiguration)
+
+-- | The URL of your Confluence instance. Use the full URL of the server. For
+-- example, /https:\/\/server.example.com:port\//. You can also use an IP
+-- address, for example, /https:\/\/192.168.1.113\//.
+confluenceConfiguration_serverUrl :: Lens.Lens' ConfluenceConfiguration Prelude.Text
+confluenceConfiguration_serverUrl = Lens.lens (\ConfluenceConfiguration' {serverUrl} -> serverUrl) (\s@ConfluenceConfiguration' {} a -> s {serverUrl = a} :: ConfluenceConfiguration)
+
+-- | The Amazon Resource Name (ARN) of an Secrets Manager secret that
+-- contains the user name and password required to connect to the
+-- Confluence instance. If you use Confluence Cloud, you use a generated
+-- API token as the password.
+--
+-- You can also provide authentication credentials in the form of a
+-- personal access token. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/data-source-confluence.html Using a Confluence data source>.
+confluenceConfiguration_secretArn :: Lens.Lens' ConfluenceConfiguration Prelude.Text
+confluenceConfiguration_secretArn = Lens.lens (\ConfluenceConfiguration' {secretArn} -> secretArn) (\s@ConfluenceConfiguration' {} a -> s {secretArn = a} :: ConfluenceConfiguration)
+
+-- | The version or the type of Confluence installation to connect to.
+confluenceConfiguration_version :: Lens.Lens' ConfluenceConfiguration ConfluenceVersion
+confluenceConfiguration_version = Lens.lens (\ConfluenceConfiguration' {version} -> version) (\s@ConfluenceConfiguration' {} a -> s {version = a} :: ConfluenceConfiguration)
+
+instance Data.FromJSON ConfluenceConfiguration where
+  parseJSON =
+    Data.withObject
+      "ConfluenceConfiguration"
+      ( \x ->
+          ConfluenceConfiguration'
+            Prelude.<$> (x Data..:? "AttachmentConfiguration")
+            Prelude.<*> (x Data..:? "AuthenticationType")
+            Prelude.<*> (x Data..:? "BlogConfiguration")
+            Prelude.<*> ( x
+                            Data..:? "ExclusionPatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "InclusionPatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "PageConfiguration")
+            Prelude.<*> (x Data..:? "ProxyConfiguration")
+            Prelude.<*> (x Data..:? "SpaceConfiguration")
+            Prelude.<*> (x Data..:? "VpcConfiguration")
+            Prelude.<*> (x Data..: "ServerUrl")
+            Prelude.<*> (x Data..: "SecretArn")
+            Prelude.<*> (x Data..: "Version")
+      )
+
+instance Prelude.Hashable ConfluenceConfiguration where
+  hashWithSalt _salt ConfluenceConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` attachmentConfiguration
+      `Prelude.hashWithSalt` authenticationType
+      `Prelude.hashWithSalt` blogConfiguration
+      `Prelude.hashWithSalt` exclusionPatterns
+      `Prelude.hashWithSalt` inclusionPatterns
+      `Prelude.hashWithSalt` pageConfiguration
+      `Prelude.hashWithSalt` proxyConfiguration
+      `Prelude.hashWithSalt` spaceConfiguration
+      `Prelude.hashWithSalt` vpcConfiguration
+      `Prelude.hashWithSalt` serverUrl
+      `Prelude.hashWithSalt` secretArn
+      `Prelude.hashWithSalt` version
+
+instance Prelude.NFData ConfluenceConfiguration where
+  rnf ConfluenceConfiguration' {..} =
+    Prelude.rnf attachmentConfiguration
+      `Prelude.seq` Prelude.rnf authenticationType
+      `Prelude.seq` Prelude.rnf blogConfiguration
+      `Prelude.seq` Prelude.rnf exclusionPatterns
+      `Prelude.seq` Prelude.rnf inclusionPatterns
+      `Prelude.seq` Prelude.rnf pageConfiguration
+      `Prelude.seq` Prelude.rnf proxyConfiguration
+      `Prelude.seq` Prelude.rnf spaceConfiguration
+      `Prelude.seq` Prelude.rnf vpcConfiguration
+      `Prelude.seq` Prelude.rnf serverUrl
+      `Prelude.seq` Prelude.rnf secretArn
+      `Prelude.seq` Prelude.rnf version
+
+instance Data.ToJSON ConfluenceConfiguration where
+  toJSON ConfluenceConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AttachmentConfiguration" Data..=)
+              Prelude.<$> attachmentConfiguration,
+            ("AuthenticationType" Data..=)
+              Prelude.<$> authenticationType,
+            ("BlogConfiguration" Data..=)
+              Prelude.<$> blogConfiguration,
+            ("ExclusionPatterns" Data..=)
+              Prelude.<$> exclusionPatterns,
+            ("InclusionPatterns" Data..=)
+              Prelude.<$> inclusionPatterns,
+            ("PageConfiguration" Data..=)
+              Prelude.<$> pageConfiguration,
+            ("ProxyConfiguration" Data..=)
+              Prelude.<$> proxyConfiguration,
+            ("SpaceConfiguration" Data..=)
+              Prelude.<$> spaceConfiguration,
+            ("VpcConfiguration" Data..=)
+              Prelude.<$> vpcConfiguration,
+            Prelude.Just ("ServerUrl" Data..= serverUrl),
+            Prelude.Just ("SecretArn" Data..= secretArn),
+            Prelude.Just ("Version" Data..= version)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/ConfluencePageConfiguration.hs b/gen/Amazonka/Kendra/Types/ConfluencePageConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ConfluencePageConfiguration.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.Kendra.Types.ConfluencePageConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ConfluencePageConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.ConfluencePageToIndexFieldMapping
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration of the page settings for the Confluence data source.
+--
+-- /See:/ 'newConfluencePageConfiguration' smart constructor.
+data ConfluencePageConfiguration = ConfluencePageConfiguration'
+  { -- | Maps attributes or field names of Confluence pages to Amazon Kendra
+    -- index field names. To create custom fields, use the @UpdateIndex@ API
+    -- before you map to Confluence fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The Confluence data source field names must exist in your Confluence
+    -- custom metadata.
+    --
+    -- If you specify the @PageFieldMappings@ parameter, you must specify at
+    -- least one field mapping.
+    pageFieldMappings :: Prelude.Maybe (Prelude.NonEmpty ConfluencePageToIndexFieldMapping)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConfluencePageConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'pageFieldMappings', 'confluencePageConfiguration_pageFieldMappings' - Maps attributes or field names of Confluence pages to Amazon Kendra
+-- index field names. To create custom fields, use the @UpdateIndex@ API
+-- before you map to Confluence fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Confluence data source field names must exist in your Confluence
+-- custom metadata.
+--
+-- If you specify the @PageFieldMappings@ parameter, you must specify at
+-- least one field mapping.
+newConfluencePageConfiguration ::
+  ConfluencePageConfiguration
+newConfluencePageConfiguration =
+  ConfluencePageConfiguration'
+    { pageFieldMappings =
+        Prelude.Nothing
+    }
+
+-- | Maps attributes or field names of Confluence pages to Amazon Kendra
+-- index field names. To create custom fields, use the @UpdateIndex@ API
+-- before you map to Confluence fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Confluence data source field names must exist in your Confluence
+-- custom metadata.
+--
+-- If you specify the @PageFieldMappings@ parameter, you must specify at
+-- least one field mapping.
+confluencePageConfiguration_pageFieldMappings :: Lens.Lens' ConfluencePageConfiguration (Prelude.Maybe (Prelude.NonEmpty ConfluencePageToIndexFieldMapping))
+confluencePageConfiguration_pageFieldMappings = Lens.lens (\ConfluencePageConfiguration' {pageFieldMappings} -> pageFieldMappings) (\s@ConfluencePageConfiguration' {} a -> s {pageFieldMappings = a} :: ConfluencePageConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ConfluencePageConfiguration where
+  parseJSON =
+    Data.withObject
+      "ConfluencePageConfiguration"
+      ( \x ->
+          ConfluencePageConfiguration'
+            Prelude.<$> (x Data..:? "PageFieldMappings")
+      )
+
+instance Prelude.Hashable ConfluencePageConfiguration where
+  hashWithSalt _salt ConfluencePageConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` pageFieldMappings
+
+instance Prelude.NFData ConfluencePageConfiguration where
+  rnf ConfluencePageConfiguration' {..} =
+    Prelude.rnf pageFieldMappings
+
+instance Data.ToJSON ConfluencePageConfiguration where
+  toJSON ConfluencePageConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("PageFieldMappings" Data..=)
+              Prelude.<$> pageFieldMappings
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/ConfluencePageFieldName.hs b/gen/Amazonka/Kendra/Types/ConfluencePageFieldName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ConfluencePageFieldName.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.Types.ConfluencePageFieldName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ConfluencePageFieldName
+  ( ConfluencePageFieldName
+      ( ..,
+        ConfluencePageFieldName_AUTHOR,
+        ConfluencePageFieldName_CONTENT_STATUS,
+        ConfluencePageFieldName_CREATED_DATE,
+        ConfluencePageFieldName_DISPLAY_URL,
+        ConfluencePageFieldName_ITEM_TYPE,
+        ConfluencePageFieldName_LABELS,
+        ConfluencePageFieldName_MODIFIED_DATE,
+        ConfluencePageFieldName_PARENT_ID,
+        ConfluencePageFieldName_SPACE_KEY,
+        ConfluencePageFieldName_SPACE_NAME,
+        ConfluencePageFieldName_URL,
+        ConfluencePageFieldName_VERSION
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ConfluencePageFieldName = ConfluencePageFieldName'
+  { fromConfluencePageFieldName ::
+      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 ConfluencePageFieldName_AUTHOR :: ConfluencePageFieldName
+pattern ConfluencePageFieldName_AUTHOR = ConfluencePageFieldName' "AUTHOR"
+
+pattern ConfluencePageFieldName_CONTENT_STATUS :: ConfluencePageFieldName
+pattern ConfluencePageFieldName_CONTENT_STATUS = ConfluencePageFieldName' "CONTENT_STATUS"
+
+pattern ConfluencePageFieldName_CREATED_DATE :: ConfluencePageFieldName
+pattern ConfluencePageFieldName_CREATED_DATE = ConfluencePageFieldName' "CREATED_DATE"
+
+pattern ConfluencePageFieldName_DISPLAY_URL :: ConfluencePageFieldName
+pattern ConfluencePageFieldName_DISPLAY_URL = ConfluencePageFieldName' "DISPLAY_URL"
+
+pattern ConfluencePageFieldName_ITEM_TYPE :: ConfluencePageFieldName
+pattern ConfluencePageFieldName_ITEM_TYPE = ConfluencePageFieldName' "ITEM_TYPE"
+
+pattern ConfluencePageFieldName_LABELS :: ConfluencePageFieldName
+pattern ConfluencePageFieldName_LABELS = ConfluencePageFieldName' "LABELS"
+
+pattern ConfluencePageFieldName_MODIFIED_DATE :: ConfluencePageFieldName
+pattern ConfluencePageFieldName_MODIFIED_DATE = ConfluencePageFieldName' "MODIFIED_DATE"
+
+pattern ConfluencePageFieldName_PARENT_ID :: ConfluencePageFieldName
+pattern ConfluencePageFieldName_PARENT_ID = ConfluencePageFieldName' "PARENT_ID"
+
+pattern ConfluencePageFieldName_SPACE_KEY :: ConfluencePageFieldName
+pattern ConfluencePageFieldName_SPACE_KEY = ConfluencePageFieldName' "SPACE_KEY"
+
+pattern ConfluencePageFieldName_SPACE_NAME :: ConfluencePageFieldName
+pattern ConfluencePageFieldName_SPACE_NAME = ConfluencePageFieldName' "SPACE_NAME"
+
+pattern ConfluencePageFieldName_URL :: ConfluencePageFieldName
+pattern ConfluencePageFieldName_URL = ConfluencePageFieldName' "URL"
+
+pattern ConfluencePageFieldName_VERSION :: ConfluencePageFieldName
+pattern ConfluencePageFieldName_VERSION = ConfluencePageFieldName' "VERSION"
+
+{-# COMPLETE
+  ConfluencePageFieldName_AUTHOR,
+  ConfluencePageFieldName_CONTENT_STATUS,
+  ConfluencePageFieldName_CREATED_DATE,
+  ConfluencePageFieldName_DISPLAY_URL,
+  ConfluencePageFieldName_ITEM_TYPE,
+  ConfluencePageFieldName_LABELS,
+  ConfluencePageFieldName_MODIFIED_DATE,
+  ConfluencePageFieldName_PARENT_ID,
+  ConfluencePageFieldName_SPACE_KEY,
+  ConfluencePageFieldName_SPACE_NAME,
+  ConfluencePageFieldName_URL,
+  ConfluencePageFieldName_VERSION,
+  ConfluencePageFieldName'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/ConfluencePageToIndexFieldMapping.hs b/gen/Amazonka/Kendra/Types/ConfluencePageToIndexFieldMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ConfluencePageToIndexFieldMapping.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.Kendra.Types.ConfluencePageToIndexFieldMapping
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ConfluencePageToIndexFieldMapping where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.ConfluencePageFieldName
+import qualified Amazonka.Prelude as Prelude
+
+-- | >Maps attributes or field names of Confluence pages to Amazon Kendra
+-- index field names. To create custom fields, use the @UpdateIndex@ API
+-- before you map to Confluence fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Confluence data source field names must exist in your Confluence
+-- custom metadata.
+--
+-- /See:/ 'newConfluencePageToIndexFieldMapping' smart constructor.
+data ConfluencePageToIndexFieldMapping = ConfluencePageToIndexFieldMapping'
+  { -- | The name of the field in the data source.
+    dataSourceFieldName :: Prelude.Maybe ConfluencePageFieldName,
+    -- | The format for date fields in the data source. If the field specified in
+    -- @DataSourceFieldName@ is a date field you must specify the date format.
+    -- If the field is not a date field, an exception is thrown.
+    dateFieldFormat :: Prelude.Maybe Prelude.Text,
+    -- | The name of the index field to map to the Confluence data source field.
+    -- The index field type must match the Confluence field type.
+    indexFieldName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConfluencePageToIndexFieldMapping' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSourceFieldName', 'confluencePageToIndexFieldMapping_dataSourceFieldName' - The name of the field in the data source.
+--
+-- 'dateFieldFormat', 'confluencePageToIndexFieldMapping_dateFieldFormat' - The format for date fields in the data source. If the field specified in
+-- @DataSourceFieldName@ is a date field you must specify the date format.
+-- If the field is not a date field, an exception is thrown.
+--
+-- 'indexFieldName', 'confluencePageToIndexFieldMapping_indexFieldName' - The name of the index field to map to the Confluence data source field.
+-- The index field type must match the Confluence field type.
+newConfluencePageToIndexFieldMapping ::
+  ConfluencePageToIndexFieldMapping
+newConfluencePageToIndexFieldMapping =
+  ConfluencePageToIndexFieldMapping'
+    { dataSourceFieldName =
+        Prelude.Nothing,
+      dateFieldFormat = Prelude.Nothing,
+      indexFieldName = Prelude.Nothing
+    }
+
+-- | The name of the field in the data source.
+confluencePageToIndexFieldMapping_dataSourceFieldName :: Lens.Lens' ConfluencePageToIndexFieldMapping (Prelude.Maybe ConfluencePageFieldName)
+confluencePageToIndexFieldMapping_dataSourceFieldName = Lens.lens (\ConfluencePageToIndexFieldMapping' {dataSourceFieldName} -> dataSourceFieldName) (\s@ConfluencePageToIndexFieldMapping' {} a -> s {dataSourceFieldName = a} :: ConfluencePageToIndexFieldMapping)
+
+-- | The format for date fields in the data source. If the field specified in
+-- @DataSourceFieldName@ is a date field you must specify the date format.
+-- If the field is not a date field, an exception is thrown.
+confluencePageToIndexFieldMapping_dateFieldFormat :: Lens.Lens' ConfluencePageToIndexFieldMapping (Prelude.Maybe Prelude.Text)
+confluencePageToIndexFieldMapping_dateFieldFormat = Lens.lens (\ConfluencePageToIndexFieldMapping' {dateFieldFormat} -> dateFieldFormat) (\s@ConfluencePageToIndexFieldMapping' {} a -> s {dateFieldFormat = a} :: ConfluencePageToIndexFieldMapping)
+
+-- | The name of the index field to map to the Confluence data source field.
+-- The index field type must match the Confluence field type.
+confluencePageToIndexFieldMapping_indexFieldName :: Lens.Lens' ConfluencePageToIndexFieldMapping (Prelude.Maybe Prelude.Text)
+confluencePageToIndexFieldMapping_indexFieldName = Lens.lens (\ConfluencePageToIndexFieldMapping' {indexFieldName} -> indexFieldName) (\s@ConfluencePageToIndexFieldMapping' {} a -> s {indexFieldName = a} :: ConfluencePageToIndexFieldMapping)
+
+instance
+  Data.FromJSON
+    ConfluencePageToIndexFieldMapping
+  where
+  parseJSON =
+    Data.withObject
+      "ConfluencePageToIndexFieldMapping"
+      ( \x ->
+          ConfluencePageToIndexFieldMapping'
+            Prelude.<$> (x Data..:? "DataSourceFieldName")
+            Prelude.<*> (x Data..:? "DateFieldFormat")
+            Prelude.<*> (x Data..:? "IndexFieldName")
+      )
+
+instance
+  Prelude.Hashable
+    ConfluencePageToIndexFieldMapping
+  where
+  hashWithSalt
+    _salt
+    ConfluencePageToIndexFieldMapping' {..} =
+      _salt
+        `Prelude.hashWithSalt` dataSourceFieldName
+        `Prelude.hashWithSalt` dateFieldFormat
+        `Prelude.hashWithSalt` indexFieldName
+
+instance
+  Prelude.NFData
+    ConfluencePageToIndexFieldMapping
+  where
+  rnf ConfluencePageToIndexFieldMapping' {..} =
+    Prelude.rnf dataSourceFieldName
+      `Prelude.seq` Prelude.rnf dateFieldFormat
+      `Prelude.seq` Prelude.rnf indexFieldName
+
+instance
+  Data.ToJSON
+    ConfluencePageToIndexFieldMapping
+  where
+  toJSON ConfluencePageToIndexFieldMapping' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DataSourceFieldName" Data..=)
+              Prelude.<$> dataSourceFieldName,
+            ("DateFieldFormat" Data..=)
+              Prelude.<$> dateFieldFormat,
+            ("IndexFieldName" Data..=)
+              Prelude.<$> indexFieldName
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/ConfluenceSpaceConfiguration.hs b/gen/Amazonka/Kendra/Types/ConfluenceSpaceConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ConfluenceSpaceConfiguration.hs
@@ -0,0 +1,200 @@
+{-# 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.Kendra.Types.ConfluenceSpaceConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ConfluenceSpaceConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.ConfluenceSpaceToIndexFieldMapping
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration information for indexing Confluence spaces.
+--
+-- /See:/ 'newConfluenceSpaceConfiguration' smart constructor.
+data ConfluenceSpaceConfiguration = ConfluenceSpaceConfiguration'
+  { -- | @TRUE@ to index archived spaces.
+    crawlArchivedSpaces :: Prelude.Maybe Prelude.Bool,
+    -- | @TRUE@ to index personal spaces. You can add restrictions to items in
+    -- personal spaces. If personal spaces are indexed, queries without user
+    -- context information may return restricted items from a personal space in
+    -- their results. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/user-context-filter.html Filtering on user context>.
+    crawlPersonalSpaces :: Prelude.Maybe Prelude.Bool,
+    -- | A list of space keys of Confluence spaces. If you include a key, the
+    -- blogs, documents, and attachments in the space are not indexed. If a
+    -- space is in both the @ExcludeSpaces@ and the @IncludeSpaces@ list, the
+    -- space is excluded.
+    excludeSpaces :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | A list of space keys for Confluence spaces. If you include a key, the
+    -- blogs, documents, and attachments in the space are indexed. Spaces that
+    -- aren\'t in the list aren\'t indexed. A space in the list must exist.
+    -- Otherwise, Amazon Kendra logs an error when the data source is
+    -- synchronized. If a space is in both the @IncludeSpaces@ and the
+    -- @ExcludeSpaces@ list, the space is excluded.
+    includeSpaces :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | Maps attributes or field names of Confluence spaces to Amazon Kendra
+    -- index field names. To create custom fields, use the @UpdateIndex@ API
+    -- before you map to Confluence fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The Confluence data source field names must exist in your Confluence
+    -- custom metadata.
+    --
+    -- If you specify the @SpaceFieldMappings@ parameter, you must specify at
+    -- least one field mapping.
+    spaceFieldMappings :: Prelude.Maybe (Prelude.NonEmpty ConfluenceSpaceToIndexFieldMapping)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConfluenceSpaceConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'crawlArchivedSpaces', 'confluenceSpaceConfiguration_crawlArchivedSpaces' - @TRUE@ to index archived spaces.
+--
+-- 'crawlPersonalSpaces', 'confluenceSpaceConfiguration_crawlPersonalSpaces' - @TRUE@ to index personal spaces. You can add restrictions to items in
+-- personal spaces. If personal spaces are indexed, queries without user
+-- context information may return restricted items from a personal space in
+-- their results. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/user-context-filter.html Filtering on user context>.
+--
+-- 'excludeSpaces', 'confluenceSpaceConfiguration_excludeSpaces' - A list of space keys of Confluence spaces. If you include a key, the
+-- blogs, documents, and attachments in the space are not indexed. If a
+-- space is in both the @ExcludeSpaces@ and the @IncludeSpaces@ list, the
+-- space is excluded.
+--
+-- 'includeSpaces', 'confluenceSpaceConfiguration_includeSpaces' - A list of space keys for Confluence spaces. If you include a key, the
+-- blogs, documents, and attachments in the space are indexed. Spaces that
+-- aren\'t in the list aren\'t indexed. A space in the list must exist.
+-- Otherwise, Amazon Kendra logs an error when the data source is
+-- synchronized. If a space is in both the @IncludeSpaces@ and the
+-- @ExcludeSpaces@ list, the space is excluded.
+--
+-- 'spaceFieldMappings', 'confluenceSpaceConfiguration_spaceFieldMappings' - Maps attributes or field names of Confluence spaces to Amazon Kendra
+-- index field names. To create custom fields, use the @UpdateIndex@ API
+-- before you map to Confluence fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Confluence data source field names must exist in your Confluence
+-- custom metadata.
+--
+-- If you specify the @SpaceFieldMappings@ parameter, you must specify at
+-- least one field mapping.
+newConfluenceSpaceConfiguration ::
+  ConfluenceSpaceConfiguration
+newConfluenceSpaceConfiguration =
+  ConfluenceSpaceConfiguration'
+    { crawlArchivedSpaces =
+        Prelude.Nothing,
+      crawlPersonalSpaces = Prelude.Nothing,
+      excludeSpaces = Prelude.Nothing,
+      includeSpaces = Prelude.Nothing,
+      spaceFieldMappings = Prelude.Nothing
+    }
+
+-- | @TRUE@ to index archived spaces.
+confluenceSpaceConfiguration_crawlArchivedSpaces :: Lens.Lens' ConfluenceSpaceConfiguration (Prelude.Maybe Prelude.Bool)
+confluenceSpaceConfiguration_crawlArchivedSpaces = Lens.lens (\ConfluenceSpaceConfiguration' {crawlArchivedSpaces} -> crawlArchivedSpaces) (\s@ConfluenceSpaceConfiguration' {} a -> s {crawlArchivedSpaces = a} :: ConfluenceSpaceConfiguration)
+
+-- | @TRUE@ to index personal spaces. You can add restrictions to items in
+-- personal spaces. If personal spaces are indexed, queries without user
+-- context information may return restricted items from a personal space in
+-- their results. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/user-context-filter.html Filtering on user context>.
+confluenceSpaceConfiguration_crawlPersonalSpaces :: Lens.Lens' ConfluenceSpaceConfiguration (Prelude.Maybe Prelude.Bool)
+confluenceSpaceConfiguration_crawlPersonalSpaces = Lens.lens (\ConfluenceSpaceConfiguration' {crawlPersonalSpaces} -> crawlPersonalSpaces) (\s@ConfluenceSpaceConfiguration' {} a -> s {crawlPersonalSpaces = a} :: ConfluenceSpaceConfiguration)
+
+-- | A list of space keys of Confluence spaces. If you include a key, the
+-- blogs, documents, and attachments in the space are not indexed. If a
+-- space is in both the @ExcludeSpaces@ and the @IncludeSpaces@ list, the
+-- space is excluded.
+confluenceSpaceConfiguration_excludeSpaces :: Lens.Lens' ConfluenceSpaceConfiguration (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+confluenceSpaceConfiguration_excludeSpaces = Lens.lens (\ConfluenceSpaceConfiguration' {excludeSpaces} -> excludeSpaces) (\s@ConfluenceSpaceConfiguration' {} a -> s {excludeSpaces = a} :: ConfluenceSpaceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of space keys for Confluence spaces. If you include a key, the
+-- blogs, documents, and attachments in the space are indexed. Spaces that
+-- aren\'t in the list aren\'t indexed. A space in the list must exist.
+-- Otherwise, Amazon Kendra logs an error when the data source is
+-- synchronized. If a space is in both the @IncludeSpaces@ and the
+-- @ExcludeSpaces@ list, the space is excluded.
+confluenceSpaceConfiguration_includeSpaces :: Lens.Lens' ConfluenceSpaceConfiguration (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+confluenceSpaceConfiguration_includeSpaces = Lens.lens (\ConfluenceSpaceConfiguration' {includeSpaces} -> includeSpaces) (\s@ConfluenceSpaceConfiguration' {} a -> s {includeSpaces = a} :: ConfluenceSpaceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Maps attributes or field names of Confluence spaces to Amazon Kendra
+-- index field names. To create custom fields, use the @UpdateIndex@ API
+-- before you map to Confluence fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Confluence data source field names must exist in your Confluence
+-- custom metadata.
+--
+-- If you specify the @SpaceFieldMappings@ parameter, you must specify at
+-- least one field mapping.
+confluenceSpaceConfiguration_spaceFieldMappings :: Lens.Lens' ConfluenceSpaceConfiguration (Prelude.Maybe (Prelude.NonEmpty ConfluenceSpaceToIndexFieldMapping))
+confluenceSpaceConfiguration_spaceFieldMappings = Lens.lens (\ConfluenceSpaceConfiguration' {spaceFieldMappings} -> spaceFieldMappings) (\s@ConfluenceSpaceConfiguration' {} a -> s {spaceFieldMappings = a} :: ConfluenceSpaceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ConfluenceSpaceConfiguration where
+  parseJSON =
+    Data.withObject
+      "ConfluenceSpaceConfiguration"
+      ( \x ->
+          ConfluenceSpaceConfiguration'
+            Prelude.<$> (x Data..:? "CrawlArchivedSpaces")
+            Prelude.<*> (x Data..:? "CrawlPersonalSpaces")
+            Prelude.<*> (x Data..:? "ExcludeSpaces")
+            Prelude.<*> (x Data..:? "IncludeSpaces")
+            Prelude.<*> (x Data..:? "SpaceFieldMappings")
+      )
+
+instance
+  Prelude.Hashable
+    ConfluenceSpaceConfiguration
+  where
+  hashWithSalt _salt ConfluenceSpaceConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` crawlArchivedSpaces
+      `Prelude.hashWithSalt` crawlPersonalSpaces
+      `Prelude.hashWithSalt` excludeSpaces
+      `Prelude.hashWithSalt` includeSpaces
+      `Prelude.hashWithSalt` spaceFieldMappings
+
+instance Prelude.NFData ConfluenceSpaceConfiguration where
+  rnf ConfluenceSpaceConfiguration' {..} =
+    Prelude.rnf crawlArchivedSpaces
+      `Prelude.seq` Prelude.rnf crawlPersonalSpaces
+      `Prelude.seq` Prelude.rnf excludeSpaces
+      `Prelude.seq` Prelude.rnf includeSpaces
+      `Prelude.seq` Prelude.rnf spaceFieldMappings
+
+instance Data.ToJSON ConfluenceSpaceConfiguration where
+  toJSON ConfluenceSpaceConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CrawlArchivedSpaces" Data..=)
+              Prelude.<$> crawlArchivedSpaces,
+            ("CrawlPersonalSpaces" Data..=)
+              Prelude.<$> crawlPersonalSpaces,
+            ("ExcludeSpaces" Data..=) Prelude.<$> excludeSpaces,
+            ("IncludeSpaces" Data..=) Prelude.<$> includeSpaces,
+            ("SpaceFieldMappings" Data..=)
+              Prelude.<$> spaceFieldMappings
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/ConfluenceSpaceFieldName.hs b/gen/Amazonka/Kendra/Types/ConfluenceSpaceFieldName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ConfluenceSpaceFieldName.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.Kendra.Types.ConfluenceSpaceFieldName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ConfluenceSpaceFieldName
+  ( ConfluenceSpaceFieldName
+      ( ..,
+        ConfluenceSpaceFieldName_DISPLAY_URL,
+        ConfluenceSpaceFieldName_ITEM_TYPE,
+        ConfluenceSpaceFieldName_SPACE_KEY,
+        ConfluenceSpaceFieldName_URL
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ConfluenceSpaceFieldName = ConfluenceSpaceFieldName'
+  { fromConfluenceSpaceFieldName ::
+      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 ConfluenceSpaceFieldName_DISPLAY_URL :: ConfluenceSpaceFieldName
+pattern ConfluenceSpaceFieldName_DISPLAY_URL = ConfluenceSpaceFieldName' "DISPLAY_URL"
+
+pattern ConfluenceSpaceFieldName_ITEM_TYPE :: ConfluenceSpaceFieldName
+pattern ConfluenceSpaceFieldName_ITEM_TYPE = ConfluenceSpaceFieldName' "ITEM_TYPE"
+
+pattern ConfluenceSpaceFieldName_SPACE_KEY :: ConfluenceSpaceFieldName
+pattern ConfluenceSpaceFieldName_SPACE_KEY = ConfluenceSpaceFieldName' "SPACE_KEY"
+
+pattern ConfluenceSpaceFieldName_URL :: ConfluenceSpaceFieldName
+pattern ConfluenceSpaceFieldName_URL = ConfluenceSpaceFieldName' "URL"
+
+{-# COMPLETE
+  ConfluenceSpaceFieldName_DISPLAY_URL,
+  ConfluenceSpaceFieldName_ITEM_TYPE,
+  ConfluenceSpaceFieldName_SPACE_KEY,
+  ConfluenceSpaceFieldName_URL,
+  ConfluenceSpaceFieldName'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/ConfluenceSpaceToIndexFieldMapping.hs b/gen/Amazonka/Kendra/Types/ConfluenceSpaceToIndexFieldMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ConfluenceSpaceToIndexFieldMapping.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.Kendra.Types.ConfluenceSpaceToIndexFieldMapping
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ConfluenceSpaceToIndexFieldMapping where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.ConfluenceSpaceFieldName
+import qualified Amazonka.Prelude as Prelude
+
+-- | >Maps attributes or field names of Confluence spaces to Amazon Kendra
+-- index field names. To create custom fields, use the @UpdateIndex@ API
+-- before you map to Confluence fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Confluence data source field names must exist in your Confluence
+-- custom metadata.
+--
+-- /See:/ 'newConfluenceSpaceToIndexFieldMapping' smart constructor.
+data ConfluenceSpaceToIndexFieldMapping = ConfluenceSpaceToIndexFieldMapping'
+  { -- | The name of the field in the data source.
+    dataSourceFieldName :: Prelude.Maybe ConfluenceSpaceFieldName,
+    -- | The format for date fields in the data source. If the field specified in
+    -- @DataSourceFieldName@ is a date field you must specify the date format.
+    -- If the field is not a date field, an exception is thrown.
+    dateFieldFormat :: Prelude.Maybe Prelude.Text,
+    -- | The name of the index field to map to the Confluence data source field.
+    -- The index field type must match the Confluence field type.
+    indexFieldName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConfluenceSpaceToIndexFieldMapping' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSourceFieldName', 'confluenceSpaceToIndexFieldMapping_dataSourceFieldName' - The name of the field in the data source.
+--
+-- 'dateFieldFormat', 'confluenceSpaceToIndexFieldMapping_dateFieldFormat' - The format for date fields in the data source. If the field specified in
+-- @DataSourceFieldName@ is a date field you must specify the date format.
+-- If the field is not a date field, an exception is thrown.
+--
+-- 'indexFieldName', 'confluenceSpaceToIndexFieldMapping_indexFieldName' - The name of the index field to map to the Confluence data source field.
+-- The index field type must match the Confluence field type.
+newConfluenceSpaceToIndexFieldMapping ::
+  ConfluenceSpaceToIndexFieldMapping
+newConfluenceSpaceToIndexFieldMapping =
+  ConfluenceSpaceToIndexFieldMapping'
+    { dataSourceFieldName =
+        Prelude.Nothing,
+      dateFieldFormat = Prelude.Nothing,
+      indexFieldName = Prelude.Nothing
+    }
+
+-- | The name of the field in the data source.
+confluenceSpaceToIndexFieldMapping_dataSourceFieldName :: Lens.Lens' ConfluenceSpaceToIndexFieldMapping (Prelude.Maybe ConfluenceSpaceFieldName)
+confluenceSpaceToIndexFieldMapping_dataSourceFieldName = Lens.lens (\ConfluenceSpaceToIndexFieldMapping' {dataSourceFieldName} -> dataSourceFieldName) (\s@ConfluenceSpaceToIndexFieldMapping' {} a -> s {dataSourceFieldName = a} :: ConfluenceSpaceToIndexFieldMapping)
+
+-- | The format for date fields in the data source. If the field specified in
+-- @DataSourceFieldName@ is a date field you must specify the date format.
+-- If the field is not a date field, an exception is thrown.
+confluenceSpaceToIndexFieldMapping_dateFieldFormat :: Lens.Lens' ConfluenceSpaceToIndexFieldMapping (Prelude.Maybe Prelude.Text)
+confluenceSpaceToIndexFieldMapping_dateFieldFormat = Lens.lens (\ConfluenceSpaceToIndexFieldMapping' {dateFieldFormat} -> dateFieldFormat) (\s@ConfluenceSpaceToIndexFieldMapping' {} a -> s {dateFieldFormat = a} :: ConfluenceSpaceToIndexFieldMapping)
+
+-- | The name of the index field to map to the Confluence data source field.
+-- The index field type must match the Confluence field type.
+confluenceSpaceToIndexFieldMapping_indexFieldName :: Lens.Lens' ConfluenceSpaceToIndexFieldMapping (Prelude.Maybe Prelude.Text)
+confluenceSpaceToIndexFieldMapping_indexFieldName = Lens.lens (\ConfluenceSpaceToIndexFieldMapping' {indexFieldName} -> indexFieldName) (\s@ConfluenceSpaceToIndexFieldMapping' {} a -> s {indexFieldName = a} :: ConfluenceSpaceToIndexFieldMapping)
+
+instance
+  Data.FromJSON
+    ConfluenceSpaceToIndexFieldMapping
+  where
+  parseJSON =
+    Data.withObject
+      "ConfluenceSpaceToIndexFieldMapping"
+      ( \x ->
+          ConfluenceSpaceToIndexFieldMapping'
+            Prelude.<$> (x Data..:? "DataSourceFieldName")
+            Prelude.<*> (x Data..:? "DateFieldFormat")
+            Prelude.<*> (x Data..:? "IndexFieldName")
+      )
+
+instance
+  Prelude.Hashable
+    ConfluenceSpaceToIndexFieldMapping
+  where
+  hashWithSalt
+    _salt
+    ConfluenceSpaceToIndexFieldMapping' {..} =
+      _salt
+        `Prelude.hashWithSalt` dataSourceFieldName
+        `Prelude.hashWithSalt` dateFieldFormat
+        `Prelude.hashWithSalt` indexFieldName
+
+instance
+  Prelude.NFData
+    ConfluenceSpaceToIndexFieldMapping
+  where
+  rnf ConfluenceSpaceToIndexFieldMapping' {..} =
+    Prelude.rnf dataSourceFieldName
+      `Prelude.seq` Prelude.rnf dateFieldFormat
+      `Prelude.seq` Prelude.rnf indexFieldName
+
+instance
+  Data.ToJSON
+    ConfluenceSpaceToIndexFieldMapping
+  where
+  toJSON ConfluenceSpaceToIndexFieldMapping' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DataSourceFieldName" Data..=)
+              Prelude.<$> dataSourceFieldName,
+            ("DateFieldFormat" Data..=)
+              Prelude.<$> dateFieldFormat,
+            ("IndexFieldName" Data..=)
+              Prelude.<$> indexFieldName
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/ConfluenceVersion.hs b/gen/Amazonka/Kendra/Types/ConfluenceVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ConfluenceVersion.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.Kendra.Types.ConfluenceVersion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ConfluenceVersion
+  ( ConfluenceVersion
+      ( ..,
+        ConfluenceVersion_CLOUD,
+        ConfluenceVersion_SERVER
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ConfluenceVersion = ConfluenceVersion'
+  { fromConfluenceVersion ::
+      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 ConfluenceVersion_CLOUD :: ConfluenceVersion
+pattern ConfluenceVersion_CLOUD = ConfluenceVersion' "CLOUD"
+
+pattern ConfluenceVersion_SERVER :: ConfluenceVersion
+pattern ConfluenceVersion_SERVER = ConfluenceVersion' "SERVER"
+
+{-# COMPLETE
+  ConfluenceVersion_CLOUD,
+  ConfluenceVersion_SERVER,
+  ConfluenceVersion'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/ConnectionConfiguration.hs b/gen/Amazonka/Kendra/Types/ConnectionConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ConnectionConfiguration.hs
@@ -0,0 +1,170 @@
+{-# 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.Kendra.Types.ConnectionConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ConnectionConfiguration 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 configuration information that\'s required to connect to a
+-- database.
+--
+-- /See:/ 'newConnectionConfiguration' smart constructor.
+data ConnectionConfiguration = ConnectionConfiguration'
+  { -- | The name of the host for the database. Can be either a string
+    -- (host.subdomain.domain.tld) or an IPv4 or IPv6 address.
+    databaseHost :: Prelude.Text,
+    -- | The port that the database uses for connections.
+    databasePort :: Prelude.Natural,
+    -- | The name of the database containing the document data.
+    databaseName :: Prelude.Text,
+    -- | The name of the table that contains the document data.
+    tableName :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of credentials stored in Secrets Manager.
+    -- The credentials should be a user\/password pair. For more information,
+    -- see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/data-source-database.html Using a Database Data Source>.
+    -- For more information about Secrets Manager, see
+    -- <https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html What Is Secrets Manager>
+    -- in the /Secrets Manager/ user guide.
+    secretArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConnectionConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'databaseHost', 'connectionConfiguration_databaseHost' - The name of the host for the database. Can be either a string
+-- (host.subdomain.domain.tld) or an IPv4 or IPv6 address.
+--
+-- 'databasePort', 'connectionConfiguration_databasePort' - The port that the database uses for connections.
+--
+-- 'databaseName', 'connectionConfiguration_databaseName' - The name of the database containing the document data.
+--
+-- 'tableName', 'connectionConfiguration_tableName' - The name of the table that contains the document data.
+--
+-- 'secretArn', 'connectionConfiguration_secretArn' - The Amazon Resource Name (ARN) of credentials stored in Secrets Manager.
+-- The credentials should be a user\/password pair. For more information,
+-- see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/data-source-database.html Using a Database Data Source>.
+-- For more information about Secrets Manager, see
+-- <https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html What Is Secrets Manager>
+-- in the /Secrets Manager/ user guide.
+newConnectionConfiguration ::
+  -- | 'databaseHost'
+  Prelude.Text ->
+  -- | 'databasePort'
+  Prelude.Natural ->
+  -- | 'databaseName'
+  Prelude.Text ->
+  -- | 'tableName'
+  Prelude.Text ->
+  -- | 'secretArn'
+  Prelude.Text ->
+  ConnectionConfiguration
+newConnectionConfiguration
+  pDatabaseHost_
+  pDatabasePort_
+  pDatabaseName_
+  pTableName_
+  pSecretArn_ =
+    ConnectionConfiguration'
+      { databaseHost =
+          pDatabaseHost_,
+        databasePort = pDatabasePort_,
+        databaseName = pDatabaseName_,
+        tableName = pTableName_,
+        secretArn = pSecretArn_
+      }
+
+-- | The name of the host for the database. Can be either a string
+-- (host.subdomain.domain.tld) or an IPv4 or IPv6 address.
+connectionConfiguration_databaseHost :: Lens.Lens' ConnectionConfiguration Prelude.Text
+connectionConfiguration_databaseHost = Lens.lens (\ConnectionConfiguration' {databaseHost} -> databaseHost) (\s@ConnectionConfiguration' {} a -> s {databaseHost = a} :: ConnectionConfiguration)
+
+-- | The port that the database uses for connections.
+connectionConfiguration_databasePort :: Lens.Lens' ConnectionConfiguration Prelude.Natural
+connectionConfiguration_databasePort = Lens.lens (\ConnectionConfiguration' {databasePort} -> databasePort) (\s@ConnectionConfiguration' {} a -> s {databasePort = a} :: ConnectionConfiguration)
+
+-- | The name of the database containing the document data.
+connectionConfiguration_databaseName :: Lens.Lens' ConnectionConfiguration Prelude.Text
+connectionConfiguration_databaseName = Lens.lens (\ConnectionConfiguration' {databaseName} -> databaseName) (\s@ConnectionConfiguration' {} a -> s {databaseName = a} :: ConnectionConfiguration)
+
+-- | The name of the table that contains the document data.
+connectionConfiguration_tableName :: Lens.Lens' ConnectionConfiguration Prelude.Text
+connectionConfiguration_tableName = Lens.lens (\ConnectionConfiguration' {tableName} -> tableName) (\s@ConnectionConfiguration' {} a -> s {tableName = a} :: ConnectionConfiguration)
+
+-- | The Amazon Resource Name (ARN) of credentials stored in Secrets Manager.
+-- The credentials should be a user\/password pair. For more information,
+-- see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/data-source-database.html Using a Database Data Source>.
+-- For more information about Secrets Manager, see
+-- <https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html What Is Secrets Manager>
+-- in the /Secrets Manager/ user guide.
+connectionConfiguration_secretArn :: Lens.Lens' ConnectionConfiguration Prelude.Text
+connectionConfiguration_secretArn = Lens.lens (\ConnectionConfiguration' {secretArn} -> secretArn) (\s@ConnectionConfiguration' {} a -> s {secretArn = a} :: ConnectionConfiguration)
+
+instance Data.FromJSON ConnectionConfiguration where
+  parseJSON =
+    Data.withObject
+      "ConnectionConfiguration"
+      ( \x ->
+          ConnectionConfiguration'
+            Prelude.<$> (x Data..: "DatabaseHost")
+            Prelude.<*> (x Data..: "DatabasePort")
+            Prelude.<*> (x Data..: "DatabaseName")
+            Prelude.<*> (x Data..: "TableName")
+            Prelude.<*> (x Data..: "SecretArn")
+      )
+
+instance Prelude.Hashable ConnectionConfiguration where
+  hashWithSalt _salt ConnectionConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` databaseHost
+      `Prelude.hashWithSalt` databasePort
+      `Prelude.hashWithSalt` databaseName
+      `Prelude.hashWithSalt` tableName
+      `Prelude.hashWithSalt` secretArn
+
+instance Prelude.NFData ConnectionConfiguration where
+  rnf ConnectionConfiguration' {..} =
+    Prelude.rnf databaseHost
+      `Prelude.seq` Prelude.rnf databasePort
+      `Prelude.seq` Prelude.rnf databaseName
+      `Prelude.seq` Prelude.rnf tableName
+      `Prelude.seq` Prelude.rnf secretArn
+
+instance Data.ToJSON ConnectionConfiguration where
+  toJSON ConnectionConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("DatabaseHost" Data..= databaseHost),
+            Prelude.Just ("DatabasePort" Data..= databasePort),
+            Prelude.Just ("DatabaseName" Data..= databaseName),
+            Prelude.Just ("TableName" Data..= tableName),
+            Prelude.Just ("SecretArn" Data..= secretArn)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/ContentSourceConfiguration.hs b/gen/Amazonka/Kendra/Types/ContentSourceConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ContentSourceConfiguration.hs
@@ -0,0 +1,119 @@
+{-# 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.Kendra.Types.ContentSourceConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ContentSourceConfiguration 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 configuration information for your content sources, such as
+-- data sources, FAQs, and content indexed directly via
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_BatchPutDocument.html BatchPutDocument>.
+--
+-- /See:/ 'newContentSourceConfiguration' smart constructor.
+data ContentSourceConfiguration = ContentSourceConfiguration'
+  { -- | The identifier of the data sources you want to use for your Amazon
+    -- Kendra experience.
+    dataSourceIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | @TRUE@ to use documents you indexed directly using the
+    -- @BatchPutDocument@ API.
+    directPutContent :: Prelude.Maybe Prelude.Bool,
+    -- | The identifier of the FAQs that you want to use for your Amazon Kendra
+    -- experience.
+    faqIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ContentSourceConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSourceIds', 'contentSourceConfiguration_dataSourceIds' - The identifier of the data sources you want to use for your Amazon
+-- Kendra experience.
+--
+-- 'directPutContent', 'contentSourceConfiguration_directPutContent' - @TRUE@ to use documents you indexed directly using the
+-- @BatchPutDocument@ API.
+--
+-- 'faqIds', 'contentSourceConfiguration_faqIds' - The identifier of the FAQs that you want to use for your Amazon Kendra
+-- experience.
+newContentSourceConfiguration ::
+  ContentSourceConfiguration
+newContentSourceConfiguration =
+  ContentSourceConfiguration'
+    { dataSourceIds =
+        Prelude.Nothing,
+      directPutContent = Prelude.Nothing,
+      faqIds = Prelude.Nothing
+    }
+
+-- | The identifier of the data sources you want to use for your Amazon
+-- Kendra experience.
+contentSourceConfiguration_dataSourceIds :: Lens.Lens' ContentSourceConfiguration (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+contentSourceConfiguration_dataSourceIds = Lens.lens (\ContentSourceConfiguration' {dataSourceIds} -> dataSourceIds) (\s@ContentSourceConfiguration' {} a -> s {dataSourceIds = a} :: ContentSourceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | @TRUE@ to use documents you indexed directly using the
+-- @BatchPutDocument@ API.
+contentSourceConfiguration_directPutContent :: Lens.Lens' ContentSourceConfiguration (Prelude.Maybe Prelude.Bool)
+contentSourceConfiguration_directPutContent = Lens.lens (\ContentSourceConfiguration' {directPutContent} -> directPutContent) (\s@ContentSourceConfiguration' {} a -> s {directPutContent = a} :: ContentSourceConfiguration)
+
+-- | The identifier of the FAQs that you want to use for your Amazon Kendra
+-- experience.
+contentSourceConfiguration_faqIds :: Lens.Lens' ContentSourceConfiguration (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+contentSourceConfiguration_faqIds = Lens.lens (\ContentSourceConfiguration' {faqIds} -> faqIds) (\s@ContentSourceConfiguration' {} a -> s {faqIds = a} :: ContentSourceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ContentSourceConfiguration where
+  parseJSON =
+    Data.withObject
+      "ContentSourceConfiguration"
+      ( \x ->
+          ContentSourceConfiguration'
+            Prelude.<$> (x Data..:? "DataSourceIds")
+            Prelude.<*> (x Data..:? "DirectPutContent")
+            Prelude.<*> (x Data..:? "FaqIds")
+      )
+
+instance Prelude.Hashable ContentSourceConfiguration where
+  hashWithSalt _salt ContentSourceConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataSourceIds
+      `Prelude.hashWithSalt` directPutContent
+      `Prelude.hashWithSalt` faqIds
+
+instance Prelude.NFData ContentSourceConfiguration where
+  rnf ContentSourceConfiguration' {..} =
+    Prelude.rnf dataSourceIds
+      `Prelude.seq` Prelude.rnf directPutContent
+      `Prelude.seq` Prelude.rnf faqIds
+
+instance Data.ToJSON ContentSourceConfiguration where
+  toJSON ContentSourceConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DataSourceIds" Data..=) Prelude.<$> dataSourceIds,
+            ("DirectPutContent" Data..=)
+              Prelude.<$> directPutContent,
+            ("FaqIds" Data..=) Prelude.<$> faqIds
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/ContentType.hs b/gen/Amazonka/Kendra/Types/ContentType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ContentType.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.Kendra.Types.ContentType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ContentType
+  ( ContentType
+      ( ..,
+        ContentType_HTML,
+        ContentType_MS_WORD,
+        ContentType_PDF,
+        ContentType_PLAIN_TEXT,
+        ContentType_PPT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ContentType = ContentType'
+  { fromContentType ::
+      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 ContentType_HTML :: ContentType
+pattern ContentType_HTML = ContentType' "HTML"
+
+pattern ContentType_MS_WORD :: ContentType
+pattern ContentType_MS_WORD = ContentType' "MS_WORD"
+
+pattern ContentType_PDF :: ContentType
+pattern ContentType_PDF = ContentType' "PDF"
+
+pattern ContentType_PLAIN_TEXT :: ContentType
+pattern ContentType_PLAIN_TEXT = ContentType' "PLAIN_TEXT"
+
+pattern ContentType_PPT :: ContentType
+pattern ContentType_PPT = ContentType' "PPT"
+
+{-# COMPLETE
+  ContentType_HTML,
+  ContentType_MS_WORD,
+  ContentType_PDF,
+  ContentType_PLAIN_TEXT,
+  ContentType_PPT,
+  ContentType'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/Correction.hs b/gen/Amazonka/Kendra/Types/Correction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/Correction.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.Kendra.Types.Correction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.Correction 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 corrected misspelled word in a query.
+--
+-- /See:/ 'newCorrection' smart constructor.
+data Correction = Correction'
+  { -- | The zero-based location in the response string or text where the
+    -- corrected word starts.
+    beginOffset :: Prelude.Maybe Prelude.Int,
+    -- | The string or text of a corrected misspelled word in a query.
+    correctedTerm :: Prelude.Maybe Prelude.Text,
+    -- | The zero-based location in the response string or text where the
+    -- corrected word ends.
+    endOffset :: Prelude.Maybe Prelude.Int,
+    -- | The string or text of a misspelled word in a query.
+    term :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Correction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'beginOffset', 'correction_beginOffset' - The zero-based location in the response string or text where the
+-- corrected word starts.
+--
+-- 'correctedTerm', 'correction_correctedTerm' - The string or text of a corrected misspelled word in a query.
+--
+-- 'endOffset', 'correction_endOffset' - The zero-based location in the response string or text where the
+-- corrected word ends.
+--
+-- 'term', 'correction_term' - The string or text of a misspelled word in a query.
+newCorrection ::
+  Correction
+newCorrection =
+  Correction'
+    { beginOffset = Prelude.Nothing,
+      correctedTerm = Prelude.Nothing,
+      endOffset = Prelude.Nothing,
+      term = Prelude.Nothing
+    }
+
+-- | The zero-based location in the response string or text where the
+-- corrected word starts.
+correction_beginOffset :: Lens.Lens' Correction (Prelude.Maybe Prelude.Int)
+correction_beginOffset = Lens.lens (\Correction' {beginOffset} -> beginOffset) (\s@Correction' {} a -> s {beginOffset = a} :: Correction)
+
+-- | The string or text of a corrected misspelled word in a query.
+correction_correctedTerm :: Lens.Lens' Correction (Prelude.Maybe Prelude.Text)
+correction_correctedTerm = Lens.lens (\Correction' {correctedTerm} -> correctedTerm) (\s@Correction' {} a -> s {correctedTerm = a} :: Correction)
+
+-- | The zero-based location in the response string or text where the
+-- corrected word ends.
+correction_endOffset :: Lens.Lens' Correction (Prelude.Maybe Prelude.Int)
+correction_endOffset = Lens.lens (\Correction' {endOffset} -> endOffset) (\s@Correction' {} a -> s {endOffset = a} :: Correction)
+
+-- | The string or text of a misspelled word in a query.
+correction_term :: Lens.Lens' Correction (Prelude.Maybe Prelude.Text)
+correction_term = Lens.lens (\Correction' {term} -> term) (\s@Correction' {} a -> s {term = a} :: Correction)
+
+instance Data.FromJSON Correction where
+  parseJSON =
+    Data.withObject
+      "Correction"
+      ( \x ->
+          Correction'
+            Prelude.<$> (x Data..:? "BeginOffset")
+            Prelude.<*> (x Data..:? "CorrectedTerm")
+            Prelude.<*> (x Data..:? "EndOffset")
+            Prelude.<*> (x Data..:? "Term")
+      )
+
+instance Prelude.Hashable Correction where
+  hashWithSalt _salt Correction' {..} =
+    _salt
+      `Prelude.hashWithSalt` beginOffset
+      `Prelude.hashWithSalt` correctedTerm
+      `Prelude.hashWithSalt` endOffset
+      `Prelude.hashWithSalt` term
+
+instance Prelude.NFData Correction where
+  rnf Correction' {..} =
+    Prelude.rnf beginOffset
+      `Prelude.seq` Prelude.rnf correctedTerm
+      `Prelude.seq` Prelude.rnf endOffset
+      `Prelude.seq` Prelude.rnf term
diff --git a/gen/Amazonka/Kendra/Types/CustomDocumentEnrichmentConfiguration.hs b/gen/Amazonka/Kendra/Types/CustomDocumentEnrichmentConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/CustomDocumentEnrichmentConfiguration.hs
@@ -0,0 +1,190 @@
+{-# 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.Kendra.Types.CustomDocumentEnrichmentConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.CustomDocumentEnrichmentConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.HookConfiguration
+import Amazonka.Kendra.Types.InlineCustomDocumentEnrichmentConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information for altering document metadata
+-- and content during the document ingestion process.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/custom-document-enrichment.html Customizing document metadata during the ingestion process>.
+--
+-- /See:/ 'newCustomDocumentEnrichmentConfiguration' smart constructor.
+data CustomDocumentEnrichmentConfiguration = CustomDocumentEnrichmentConfiguration'
+  { -- | Configuration information to alter document attributes or metadata
+    -- fields and content when ingesting documents into Amazon Kendra.
+    inlineConfigurations :: Prelude.Maybe [InlineCustomDocumentEnrichmentConfiguration],
+    -- | Configuration information for invoking a Lambda function in Lambda on
+    -- the structured documents with their metadata and text extracted. You can
+    -- use a Lambda function to apply advanced logic for creating, modifying,
+    -- or deleting document metadata and content. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/custom-document-enrichment.html#advanced-data-manipulation Advanced data manipulation>.
+    postExtractionHookConfiguration :: Prelude.Maybe HookConfiguration,
+    -- | Configuration information for invoking a Lambda function in Lambda on
+    -- the original or raw documents before extracting their metadata and text.
+    -- You can use a Lambda function to apply advanced logic for creating,
+    -- modifying, or deleting document metadata and content. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/custom-document-enrichment.html#advanced-data-manipulation Advanced data manipulation>.
+    preExtractionHookConfiguration :: Prelude.Maybe HookConfiguration,
+    -- | The Amazon Resource Name (ARN) of a role with permission to run
+    -- @PreExtractionHookConfiguration@ and @PostExtractionHookConfiguration@
+    -- for altering document metadata and content during the document ingestion
+    -- process. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html IAM roles for Amazon Kendra>.
+    roleArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CustomDocumentEnrichmentConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'inlineConfigurations', 'customDocumentEnrichmentConfiguration_inlineConfigurations' - Configuration information to alter document attributes or metadata
+-- fields and content when ingesting documents into Amazon Kendra.
+--
+-- 'postExtractionHookConfiguration', 'customDocumentEnrichmentConfiguration_postExtractionHookConfiguration' - Configuration information for invoking a Lambda function in Lambda on
+-- the structured documents with their metadata and text extracted. You can
+-- use a Lambda function to apply advanced logic for creating, modifying,
+-- or deleting document metadata and content. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/custom-document-enrichment.html#advanced-data-manipulation Advanced data manipulation>.
+--
+-- 'preExtractionHookConfiguration', 'customDocumentEnrichmentConfiguration_preExtractionHookConfiguration' - Configuration information for invoking a Lambda function in Lambda on
+-- the original or raw documents before extracting their metadata and text.
+-- You can use a Lambda function to apply advanced logic for creating,
+-- modifying, or deleting document metadata and content. For more
+-- information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/custom-document-enrichment.html#advanced-data-manipulation Advanced data manipulation>.
+--
+-- 'roleArn', 'customDocumentEnrichmentConfiguration_roleArn' - The Amazon Resource Name (ARN) of a role with permission to run
+-- @PreExtractionHookConfiguration@ and @PostExtractionHookConfiguration@
+-- for altering document metadata and content during the document ingestion
+-- process. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html IAM roles for Amazon Kendra>.
+newCustomDocumentEnrichmentConfiguration ::
+  CustomDocumentEnrichmentConfiguration
+newCustomDocumentEnrichmentConfiguration =
+  CustomDocumentEnrichmentConfiguration'
+    { inlineConfigurations =
+        Prelude.Nothing,
+      postExtractionHookConfiguration =
+        Prelude.Nothing,
+      preExtractionHookConfiguration =
+        Prelude.Nothing,
+      roleArn = Prelude.Nothing
+    }
+
+-- | Configuration information to alter document attributes or metadata
+-- fields and content when ingesting documents into Amazon Kendra.
+customDocumentEnrichmentConfiguration_inlineConfigurations :: Lens.Lens' CustomDocumentEnrichmentConfiguration (Prelude.Maybe [InlineCustomDocumentEnrichmentConfiguration])
+customDocumentEnrichmentConfiguration_inlineConfigurations = Lens.lens (\CustomDocumentEnrichmentConfiguration' {inlineConfigurations} -> inlineConfigurations) (\s@CustomDocumentEnrichmentConfiguration' {} a -> s {inlineConfigurations = a} :: CustomDocumentEnrichmentConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Configuration information for invoking a Lambda function in Lambda on
+-- the structured documents with their metadata and text extracted. You can
+-- use a Lambda function to apply advanced logic for creating, modifying,
+-- or deleting document metadata and content. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/custom-document-enrichment.html#advanced-data-manipulation Advanced data manipulation>.
+customDocumentEnrichmentConfiguration_postExtractionHookConfiguration :: Lens.Lens' CustomDocumentEnrichmentConfiguration (Prelude.Maybe HookConfiguration)
+customDocumentEnrichmentConfiguration_postExtractionHookConfiguration = Lens.lens (\CustomDocumentEnrichmentConfiguration' {postExtractionHookConfiguration} -> postExtractionHookConfiguration) (\s@CustomDocumentEnrichmentConfiguration' {} a -> s {postExtractionHookConfiguration = a} :: CustomDocumentEnrichmentConfiguration)
+
+-- | Configuration information for invoking a Lambda function in Lambda on
+-- the original or raw documents before extracting their metadata and text.
+-- You can use a Lambda function to apply advanced logic for creating,
+-- modifying, or deleting document metadata and content. For more
+-- information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/custom-document-enrichment.html#advanced-data-manipulation Advanced data manipulation>.
+customDocumentEnrichmentConfiguration_preExtractionHookConfiguration :: Lens.Lens' CustomDocumentEnrichmentConfiguration (Prelude.Maybe HookConfiguration)
+customDocumentEnrichmentConfiguration_preExtractionHookConfiguration = Lens.lens (\CustomDocumentEnrichmentConfiguration' {preExtractionHookConfiguration} -> preExtractionHookConfiguration) (\s@CustomDocumentEnrichmentConfiguration' {} a -> s {preExtractionHookConfiguration = a} :: CustomDocumentEnrichmentConfiguration)
+
+-- | The Amazon Resource Name (ARN) of a role with permission to run
+-- @PreExtractionHookConfiguration@ and @PostExtractionHookConfiguration@
+-- for altering document metadata and content during the document ingestion
+-- process. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html IAM roles for Amazon Kendra>.
+customDocumentEnrichmentConfiguration_roleArn :: Lens.Lens' CustomDocumentEnrichmentConfiguration (Prelude.Maybe Prelude.Text)
+customDocumentEnrichmentConfiguration_roleArn = Lens.lens (\CustomDocumentEnrichmentConfiguration' {roleArn} -> roleArn) (\s@CustomDocumentEnrichmentConfiguration' {} a -> s {roleArn = a} :: CustomDocumentEnrichmentConfiguration)
+
+instance
+  Data.FromJSON
+    CustomDocumentEnrichmentConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "CustomDocumentEnrichmentConfiguration"
+      ( \x ->
+          CustomDocumentEnrichmentConfiguration'
+            Prelude.<$> ( x
+                            Data..:? "InlineConfigurations"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "PostExtractionHookConfiguration")
+            Prelude.<*> (x Data..:? "PreExtractionHookConfiguration")
+            Prelude.<*> (x Data..:? "RoleArn")
+      )
+
+instance
+  Prelude.Hashable
+    CustomDocumentEnrichmentConfiguration
+  where
+  hashWithSalt
+    _salt
+    CustomDocumentEnrichmentConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` inlineConfigurations
+        `Prelude.hashWithSalt` postExtractionHookConfiguration
+        `Prelude.hashWithSalt` preExtractionHookConfiguration
+        `Prelude.hashWithSalt` roleArn
+
+instance
+  Prelude.NFData
+    CustomDocumentEnrichmentConfiguration
+  where
+  rnf CustomDocumentEnrichmentConfiguration' {..} =
+    Prelude.rnf inlineConfigurations
+      `Prelude.seq` Prelude.rnf postExtractionHookConfiguration
+      `Prelude.seq` Prelude.rnf preExtractionHookConfiguration
+      `Prelude.seq` Prelude.rnf roleArn
+
+instance
+  Data.ToJSON
+    CustomDocumentEnrichmentConfiguration
+  where
+  toJSON CustomDocumentEnrichmentConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("InlineConfigurations" Data..=)
+              Prelude.<$> inlineConfigurations,
+            ("PostExtractionHookConfiguration" Data..=)
+              Prelude.<$> postExtractionHookConfiguration,
+            ("PreExtractionHookConfiguration" Data..=)
+              Prelude.<$> preExtractionHookConfiguration,
+            ("RoleArn" Data..=) Prelude.<$> roleArn
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/DataSourceConfiguration.hs b/gen/Amazonka/Kendra/Types/DataSourceConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/DataSourceConfiguration.hs
@@ -0,0 +1,388 @@
+{-# 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.Kendra.Types.DataSourceConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.DataSourceConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.AlfrescoConfiguration
+import Amazonka.Kendra.Types.BoxConfiguration
+import Amazonka.Kendra.Types.ConfluenceConfiguration
+import Amazonka.Kendra.Types.DatabaseConfiguration
+import Amazonka.Kendra.Types.FsxConfiguration
+import Amazonka.Kendra.Types.GitHubConfiguration
+import Amazonka.Kendra.Types.GoogleDriveConfiguration
+import Amazonka.Kendra.Types.JiraConfiguration
+import Amazonka.Kendra.Types.OneDriveConfiguration
+import Amazonka.Kendra.Types.QuipConfiguration
+import Amazonka.Kendra.Types.S3DataSourceConfiguration
+import Amazonka.Kendra.Types.SalesforceConfiguration
+import Amazonka.Kendra.Types.ServiceNowConfiguration
+import Amazonka.Kendra.Types.SharePointConfiguration
+import Amazonka.Kendra.Types.SlackConfiguration
+import Amazonka.Kendra.Types.TemplateConfiguration
+import Amazonka.Kendra.Types.WebCrawlerConfiguration
+import Amazonka.Kendra.Types.WorkDocsConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information for an Amazon Kendra data source.
+--
+-- /See:/ 'newDataSourceConfiguration' smart constructor.
+data DataSourceConfiguration = DataSourceConfiguration'
+  { -- | Provides the configuration information to connect to Alfresco as your
+    -- data source.
+    alfrescoConfiguration :: Prelude.Maybe AlfrescoConfiguration,
+    -- | Provides the configuration information to connect to Box as your data
+    -- source.
+    boxConfiguration :: Prelude.Maybe BoxConfiguration,
+    -- | Provides the configuration information to connect to Confluence as your
+    -- data source.
+    confluenceConfiguration :: Prelude.Maybe ConfluenceConfiguration,
+    -- | Provides the configuration information to connect to a database as your
+    -- data source.
+    databaseConfiguration :: Prelude.Maybe DatabaseConfiguration,
+    -- | Provides the configuration information to connect to Amazon FSx as your
+    -- data source.
+    fsxConfiguration :: Prelude.Maybe FsxConfiguration,
+    -- | Provides the configuration information to connect to GitHub as your data
+    -- source.
+    gitHubConfiguration :: Prelude.Maybe GitHubConfiguration,
+    -- | Provides the configuration information to connect to Google Drive as
+    -- your data source.
+    googleDriveConfiguration :: Prelude.Maybe GoogleDriveConfiguration,
+    -- | Provides the configuration information to connect to Jira as your data
+    -- source.
+    jiraConfiguration :: Prelude.Maybe JiraConfiguration,
+    -- | Provides the configuration information to connect to Microsoft OneDrive
+    -- as your data source.
+    oneDriveConfiguration :: Prelude.Maybe OneDriveConfiguration,
+    -- | Provides the configuration information to connect to Quip as your data
+    -- source.
+    quipConfiguration :: Prelude.Maybe QuipConfiguration,
+    -- | Provides the configuration information to connect to an Amazon S3 bucket
+    -- as your data source.
+    s3Configuration :: Prelude.Maybe S3DataSourceConfiguration,
+    -- | Provides the configuration information to connect to Salesforce as your
+    -- data source.
+    salesforceConfiguration :: Prelude.Maybe SalesforceConfiguration,
+    -- | Provides the configuration information to connect to ServiceNow as your
+    -- data source.
+    serviceNowConfiguration :: Prelude.Maybe ServiceNowConfiguration,
+    -- | Provides the configuration information to connect to Microsoft
+    -- SharePoint as your data source.
+    sharePointConfiguration :: Prelude.Maybe SharePointConfiguration,
+    -- | Provides the configuration information to connect to Slack as your data
+    -- source.
+    slackConfiguration :: Prelude.Maybe SlackConfiguration,
+    -- | Provides a template for the configuration information to connect to your
+    -- data source.
+    templateConfiguration :: Prelude.Maybe TemplateConfiguration,
+    webCrawlerConfiguration :: Prelude.Maybe WebCrawlerConfiguration,
+    -- | Provides the configuration information to connect to Amazon WorkDocs as
+    -- your data source.
+    workDocsConfiguration :: Prelude.Maybe WorkDocsConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataSourceConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'alfrescoConfiguration', 'dataSourceConfiguration_alfrescoConfiguration' - Provides the configuration information to connect to Alfresco as your
+-- data source.
+--
+-- 'boxConfiguration', 'dataSourceConfiguration_boxConfiguration' - Provides the configuration information to connect to Box as your data
+-- source.
+--
+-- 'confluenceConfiguration', 'dataSourceConfiguration_confluenceConfiguration' - Provides the configuration information to connect to Confluence as your
+-- data source.
+--
+-- 'databaseConfiguration', 'dataSourceConfiguration_databaseConfiguration' - Provides the configuration information to connect to a database as your
+-- data source.
+--
+-- 'fsxConfiguration', 'dataSourceConfiguration_fsxConfiguration' - Provides the configuration information to connect to Amazon FSx as your
+-- data source.
+--
+-- 'gitHubConfiguration', 'dataSourceConfiguration_gitHubConfiguration' - Provides the configuration information to connect to GitHub as your data
+-- source.
+--
+-- 'googleDriveConfiguration', 'dataSourceConfiguration_googleDriveConfiguration' - Provides the configuration information to connect to Google Drive as
+-- your data source.
+--
+-- 'jiraConfiguration', 'dataSourceConfiguration_jiraConfiguration' - Provides the configuration information to connect to Jira as your data
+-- source.
+--
+-- 'oneDriveConfiguration', 'dataSourceConfiguration_oneDriveConfiguration' - Provides the configuration information to connect to Microsoft OneDrive
+-- as your data source.
+--
+-- 'quipConfiguration', 'dataSourceConfiguration_quipConfiguration' - Provides the configuration information to connect to Quip as your data
+-- source.
+--
+-- 's3Configuration', 'dataSourceConfiguration_s3Configuration' - Provides the configuration information to connect to an Amazon S3 bucket
+-- as your data source.
+--
+-- 'salesforceConfiguration', 'dataSourceConfiguration_salesforceConfiguration' - Provides the configuration information to connect to Salesforce as your
+-- data source.
+--
+-- 'serviceNowConfiguration', 'dataSourceConfiguration_serviceNowConfiguration' - Provides the configuration information to connect to ServiceNow as your
+-- data source.
+--
+-- 'sharePointConfiguration', 'dataSourceConfiguration_sharePointConfiguration' - Provides the configuration information to connect to Microsoft
+-- SharePoint as your data source.
+--
+-- 'slackConfiguration', 'dataSourceConfiguration_slackConfiguration' - Provides the configuration information to connect to Slack as your data
+-- source.
+--
+-- 'templateConfiguration', 'dataSourceConfiguration_templateConfiguration' - Provides a template for the configuration information to connect to your
+-- data source.
+--
+-- 'webCrawlerConfiguration', 'dataSourceConfiguration_webCrawlerConfiguration' - Undocumented member.
+--
+-- 'workDocsConfiguration', 'dataSourceConfiguration_workDocsConfiguration' - Provides the configuration information to connect to Amazon WorkDocs as
+-- your data source.
+newDataSourceConfiguration ::
+  DataSourceConfiguration
+newDataSourceConfiguration =
+  DataSourceConfiguration'
+    { alfrescoConfiguration =
+        Prelude.Nothing,
+      boxConfiguration = Prelude.Nothing,
+      confluenceConfiguration = Prelude.Nothing,
+      databaseConfiguration = Prelude.Nothing,
+      fsxConfiguration = Prelude.Nothing,
+      gitHubConfiguration = Prelude.Nothing,
+      googleDriveConfiguration = Prelude.Nothing,
+      jiraConfiguration = Prelude.Nothing,
+      oneDriveConfiguration = Prelude.Nothing,
+      quipConfiguration = Prelude.Nothing,
+      s3Configuration = Prelude.Nothing,
+      salesforceConfiguration = Prelude.Nothing,
+      serviceNowConfiguration = Prelude.Nothing,
+      sharePointConfiguration = Prelude.Nothing,
+      slackConfiguration = Prelude.Nothing,
+      templateConfiguration = Prelude.Nothing,
+      webCrawlerConfiguration = Prelude.Nothing,
+      workDocsConfiguration = Prelude.Nothing
+    }
+
+-- | Provides the configuration information to connect to Alfresco as your
+-- data source.
+dataSourceConfiguration_alfrescoConfiguration :: Lens.Lens' DataSourceConfiguration (Prelude.Maybe AlfrescoConfiguration)
+dataSourceConfiguration_alfrescoConfiguration = Lens.lens (\DataSourceConfiguration' {alfrescoConfiguration} -> alfrescoConfiguration) (\s@DataSourceConfiguration' {} a -> s {alfrescoConfiguration = a} :: DataSourceConfiguration)
+
+-- | Provides the configuration information to connect to Box as your data
+-- source.
+dataSourceConfiguration_boxConfiguration :: Lens.Lens' DataSourceConfiguration (Prelude.Maybe BoxConfiguration)
+dataSourceConfiguration_boxConfiguration = Lens.lens (\DataSourceConfiguration' {boxConfiguration} -> boxConfiguration) (\s@DataSourceConfiguration' {} a -> s {boxConfiguration = a} :: DataSourceConfiguration)
+
+-- | Provides the configuration information to connect to Confluence as your
+-- data source.
+dataSourceConfiguration_confluenceConfiguration :: Lens.Lens' DataSourceConfiguration (Prelude.Maybe ConfluenceConfiguration)
+dataSourceConfiguration_confluenceConfiguration = Lens.lens (\DataSourceConfiguration' {confluenceConfiguration} -> confluenceConfiguration) (\s@DataSourceConfiguration' {} a -> s {confluenceConfiguration = a} :: DataSourceConfiguration)
+
+-- | Provides the configuration information to connect to a database as your
+-- data source.
+dataSourceConfiguration_databaseConfiguration :: Lens.Lens' DataSourceConfiguration (Prelude.Maybe DatabaseConfiguration)
+dataSourceConfiguration_databaseConfiguration = Lens.lens (\DataSourceConfiguration' {databaseConfiguration} -> databaseConfiguration) (\s@DataSourceConfiguration' {} a -> s {databaseConfiguration = a} :: DataSourceConfiguration)
+
+-- | Provides the configuration information to connect to Amazon FSx as your
+-- data source.
+dataSourceConfiguration_fsxConfiguration :: Lens.Lens' DataSourceConfiguration (Prelude.Maybe FsxConfiguration)
+dataSourceConfiguration_fsxConfiguration = Lens.lens (\DataSourceConfiguration' {fsxConfiguration} -> fsxConfiguration) (\s@DataSourceConfiguration' {} a -> s {fsxConfiguration = a} :: DataSourceConfiguration)
+
+-- | Provides the configuration information to connect to GitHub as your data
+-- source.
+dataSourceConfiguration_gitHubConfiguration :: Lens.Lens' DataSourceConfiguration (Prelude.Maybe GitHubConfiguration)
+dataSourceConfiguration_gitHubConfiguration = Lens.lens (\DataSourceConfiguration' {gitHubConfiguration} -> gitHubConfiguration) (\s@DataSourceConfiguration' {} a -> s {gitHubConfiguration = a} :: DataSourceConfiguration)
+
+-- | Provides the configuration information to connect to Google Drive as
+-- your data source.
+dataSourceConfiguration_googleDriveConfiguration :: Lens.Lens' DataSourceConfiguration (Prelude.Maybe GoogleDriveConfiguration)
+dataSourceConfiguration_googleDriveConfiguration = Lens.lens (\DataSourceConfiguration' {googleDriveConfiguration} -> googleDriveConfiguration) (\s@DataSourceConfiguration' {} a -> s {googleDriveConfiguration = a} :: DataSourceConfiguration)
+
+-- | Provides the configuration information to connect to Jira as your data
+-- source.
+dataSourceConfiguration_jiraConfiguration :: Lens.Lens' DataSourceConfiguration (Prelude.Maybe JiraConfiguration)
+dataSourceConfiguration_jiraConfiguration = Lens.lens (\DataSourceConfiguration' {jiraConfiguration} -> jiraConfiguration) (\s@DataSourceConfiguration' {} a -> s {jiraConfiguration = a} :: DataSourceConfiguration)
+
+-- | Provides the configuration information to connect to Microsoft OneDrive
+-- as your data source.
+dataSourceConfiguration_oneDriveConfiguration :: Lens.Lens' DataSourceConfiguration (Prelude.Maybe OneDriveConfiguration)
+dataSourceConfiguration_oneDriveConfiguration = Lens.lens (\DataSourceConfiguration' {oneDriveConfiguration} -> oneDriveConfiguration) (\s@DataSourceConfiguration' {} a -> s {oneDriveConfiguration = a} :: DataSourceConfiguration)
+
+-- | Provides the configuration information to connect to Quip as your data
+-- source.
+dataSourceConfiguration_quipConfiguration :: Lens.Lens' DataSourceConfiguration (Prelude.Maybe QuipConfiguration)
+dataSourceConfiguration_quipConfiguration = Lens.lens (\DataSourceConfiguration' {quipConfiguration} -> quipConfiguration) (\s@DataSourceConfiguration' {} a -> s {quipConfiguration = a} :: DataSourceConfiguration)
+
+-- | Provides the configuration information to connect to an Amazon S3 bucket
+-- as your data source.
+dataSourceConfiguration_s3Configuration :: Lens.Lens' DataSourceConfiguration (Prelude.Maybe S3DataSourceConfiguration)
+dataSourceConfiguration_s3Configuration = Lens.lens (\DataSourceConfiguration' {s3Configuration} -> s3Configuration) (\s@DataSourceConfiguration' {} a -> s {s3Configuration = a} :: DataSourceConfiguration)
+
+-- | Provides the configuration information to connect to Salesforce as your
+-- data source.
+dataSourceConfiguration_salesforceConfiguration :: Lens.Lens' DataSourceConfiguration (Prelude.Maybe SalesforceConfiguration)
+dataSourceConfiguration_salesforceConfiguration = Lens.lens (\DataSourceConfiguration' {salesforceConfiguration} -> salesforceConfiguration) (\s@DataSourceConfiguration' {} a -> s {salesforceConfiguration = a} :: DataSourceConfiguration)
+
+-- | Provides the configuration information to connect to ServiceNow as your
+-- data source.
+dataSourceConfiguration_serviceNowConfiguration :: Lens.Lens' DataSourceConfiguration (Prelude.Maybe ServiceNowConfiguration)
+dataSourceConfiguration_serviceNowConfiguration = Lens.lens (\DataSourceConfiguration' {serviceNowConfiguration} -> serviceNowConfiguration) (\s@DataSourceConfiguration' {} a -> s {serviceNowConfiguration = a} :: DataSourceConfiguration)
+
+-- | Provides the configuration information to connect to Microsoft
+-- SharePoint as your data source.
+dataSourceConfiguration_sharePointConfiguration :: Lens.Lens' DataSourceConfiguration (Prelude.Maybe SharePointConfiguration)
+dataSourceConfiguration_sharePointConfiguration = Lens.lens (\DataSourceConfiguration' {sharePointConfiguration} -> sharePointConfiguration) (\s@DataSourceConfiguration' {} a -> s {sharePointConfiguration = a} :: DataSourceConfiguration)
+
+-- | Provides the configuration information to connect to Slack as your data
+-- source.
+dataSourceConfiguration_slackConfiguration :: Lens.Lens' DataSourceConfiguration (Prelude.Maybe SlackConfiguration)
+dataSourceConfiguration_slackConfiguration = Lens.lens (\DataSourceConfiguration' {slackConfiguration} -> slackConfiguration) (\s@DataSourceConfiguration' {} a -> s {slackConfiguration = a} :: DataSourceConfiguration)
+
+-- | Provides a template for the configuration information to connect to your
+-- data source.
+dataSourceConfiguration_templateConfiguration :: Lens.Lens' DataSourceConfiguration (Prelude.Maybe TemplateConfiguration)
+dataSourceConfiguration_templateConfiguration = Lens.lens (\DataSourceConfiguration' {templateConfiguration} -> templateConfiguration) (\s@DataSourceConfiguration' {} a -> s {templateConfiguration = a} :: DataSourceConfiguration)
+
+-- | Undocumented member.
+dataSourceConfiguration_webCrawlerConfiguration :: Lens.Lens' DataSourceConfiguration (Prelude.Maybe WebCrawlerConfiguration)
+dataSourceConfiguration_webCrawlerConfiguration = Lens.lens (\DataSourceConfiguration' {webCrawlerConfiguration} -> webCrawlerConfiguration) (\s@DataSourceConfiguration' {} a -> s {webCrawlerConfiguration = a} :: DataSourceConfiguration)
+
+-- | Provides the configuration information to connect to Amazon WorkDocs as
+-- your data source.
+dataSourceConfiguration_workDocsConfiguration :: Lens.Lens' DataSourceConfiguration (Prelude.Maybe WorkDocsConfiguration)
+dataSourceConfiguration_workDocsConfiguration = Lens.lens (\DataSourceConfiguration' {workDocsConfiguration} -> workDocsConfiguration) (\s@DataSourceConfiguration' {} a -> s {workDocsConfiguration = a} :: DataSourceConfiguration)
+
+instance Data.FromJSON DataSourceConfiguration where
+  parseJSON =
+    Data.withObject
+      "DataSourceConfiguration"
+      ( \x ->
+          DataSourceConfiguration'
+            Prelude.<$> (x Data..:? "AlfrescoConfiguration")
+            Prelude.<*> (x Data..:? "BoxConfiguration")
+            Prelude.<*> (x Data..:? "ConfluenceConfiguration")
+            Prelude.<*> (x Data..:? "DatabaseConfiguration")
+            Prelude.<*> (x Data..:? "FsxConfiguration")
+            Prelude.<*> (x Data..:? "GitHubConfiguration")
+            Prelude.<*> (x Data..:? "GoogleDriveConfiguration")
+            Prelude.<*> (x Data..:? "JiraConfiguration")
+            Prelude.<*> (x Data..:? "OneDriveConfiguration")
+            Prelude.<*> (x Data..:? "QuipConfiguration")
+            Prelude.<*> (x Data..:? "S3Configuration")
+            Prelude.<*> (x Data..:? "SalesforceConfiguration")
+            Prelude.<*> (x Data..:? "ServiceNowConfiguration")
+            Prelude.<*> (x Data..:? "SharePointConfiguration")
+            Prelude.<*> (x Data..:? "SlackConfiguration")
+            Prelude.<*> (x Data..:? "TemplateConfiguration")
+            Prelude.<*> (x Data..:? "WebCrawlerConfiguration")
+            Prelude.<*> (x Data..:? "WorkDocsConfiguration")
+      )
+
+instance Prelude.Hashable DataSourceConfiguration where
+  hashWithSalt _salt DataSourceConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` alfrescoConfiguration
+      `Prelude.hashWithSalt` boxConfiguration
+      `Prelude.hashWithSalt` confluenceConfiguration
+      `Prelude.hashWithSalt` databaseConfiguration
+      `Prelude.hashWithSalt` fsxConfiguration
+      `Prelude.hashWithSalt` gitHubConfiguration
+      `Prelude.hashWithSalt` googleDriveConfiguration
+      `Prelude.hashWithSalt` jiraConfiguration
+      `Prelude.hashWithSalt` oneDriveConfiguration
+      `Prelude.hashWithSalt` quipConfiguration
+      `Prelude.hashWithSalt` s3Configuration
+      `Prelude.hashWithSalt` salesforceConfiguration
+      `Prelude.hashWithSalt` serviceNowConfiguration
+      `Prelude.hashWithSalt` sharePointConfiguration
+      `Prelude.hashWithSalt` slackConfiguration
+      `Prelude.hashWithSalt` templateConfiguration
+      `Prelude.hashWithSalt` webCrawlerConfiguration
+      `Prelude.hashWithSalt` workDocsConfiguration
+
+instance Prelude.NFData DataSourceConfiguration where
+  rnf DataSourceConfiguration' {..} =
+    Prelude.rnf alfrescoConfiguration
+      `Prelude.seq` Prelude.rnf boxConfiguration
+      `Prelude.seq` Prelude.rnf confluenceConfiguration
+      `Prelude.seq` Prelude.rnf databaseConfiguration
+      `Prelude.seq` Prelude.rnf fsxConfiguration
+      `Prelude.seq` Prelude.rnf gitHubConfiguration
+      `Prelude.seq` Prelude.rnf googleDriveConfiguration
+      `Prelude.seq` Prelude.rnf jiraConfiguration
+      `Prelude.seq` Prelude.rnf oneDriveConfiguration
+      `Prelude.seq` Prelude.rnf quipConfiguration
+      `Prelude.seq` Prelude.rnf s3Configuration
+      `Prelude.seq` Prelude.rnf salesforceConfiguration
+      `Prelude.seq` Prelude.rnf serviceNowConfiguration
+      `Prelude.seq` Prelude.rnf sharePointConfiguration
+      `Prelude.seq` Prelude.rnf slackConfiguration
+      `Prelude.seq` Prelude.rnf templateConfiguration
+      `Prelude.seq` Prelude.rnf webCrawlerConfiguration
+      `Prelude.seq` Prelude.rnf workDocsConfiguration
+
+instance Data.ToJSON DataSourceConfiguration where
+  toJSON DataSourceConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AlfrescoConfiguration" Data..=)
+              Prelude.<$> alfrescoConfiguration,
+            ("BoxConfiguration" Data..=)
+              Prelude.<$> boxConfiguration,
+            ("ConfluenceConfiguration" Data..=)
+              Prelude.<$> confluenceConfiguration,
+            ("DatabaseConfiguration" Data..=)
+              Prelude.<$> databaseConfiguration,
+            ("FsxConfiguration" Data..=)
+              Prelude.<$> fsxConfiguration,
+            ("GitHubConfiguration" Data..=)
+              Prelude.<$> gitHubConfiguration,
+            ("GoogleDriveConfiguration" Data..=)
+              Prelude.<$> googleDriveConfiguration,
+            ("JiraConfiguration" Data..=)
+              Prelude.<$> jiraConfiguration,
+            ("OneDriveConfiguration" Data..=)
+              Prelude.<$> oneDriveConfiguration,
+            ("QuipConfiguration" Data..=)
+              Prelude.<$> quipConfiguration,
+            ("S3Configuration" Data..=)
+              Prelude.<$> s3Configuration,
+            ("SalesforceConfiguration" Data..=)
+              Prelude.<$> salesforceConfiguration,
+            ("ServiceNowConfiguration" Data..=)
+              Prelude.<$> serviceNowConfiguration,
+            ("SharePointConfiguration" Data..=)
+              Prelude.<$> sharePointConfiguration,
+            ("SlackConfiguration" Data..=)
+              Prelude.<$> slackConfiguration,
+            ("TemplateConfiguration" Data..=)
+              Prelude.<$> templateConfiguration,
+            ("WebCrawlerConfiguration" Data..=)
+              Prelude.<$> webCrawlerConfiguration,
+            ("WorkDocsConfiguration" Data..=)
+              Prelude.<$> workDocsConfiguration
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/DataSourceGroup.hs b/gen/Amazonka/Kendra/Types/DataSourceGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/DataSourceGroup.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.Kendra.Types.DataSourceGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.DataSourceGroup 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
+
+-- | Data source information for user context filtering.
+--
+-- /See:/ 'newDataSourceGroup' smart constructor.
+data DataSourceGroup = DataSourceGroup'
+  { -- | The identifier of the group you want to add to your list of groups. This
+    -- is for filtering search results based on the groups\' access to
+    -- documents.
+    groupId :: Prelude.Text,
+    -- | The identifier of the data source group you want to add to your list of
+    -- data source groups. This is for filtering search results based on the
+    -- groups\' access to documents in that data source.
+    dataSourceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataSourceGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groupId', 'dataSourceGroup_groupId' - The identifier of the group you want to add to your list of groups. This
+-- is for filtering search results based on the groups\' access to
+-- documents.
+--
+-- 'dataSourceId', 'dataSourceGroup_dataSourceId' - The identifier of the data source group you want to add to your list of
+-- data source groups. This is for filtering search results based on the
+-- groups\' access to documents in that data source.
+newDataSourceGroup ::
+  -- | 'groupId'
+  Prelude.Text ->
+  -- | 'dataSourceId'
+  Prelude.Text ->
+  DataSourceGroup
+newDataSourceGroup pGroupId_ pDataSourceId_ =
+  DataSourceGroup'
+    { groupId = pGroupId_,
+      dataSourceId = pDataSourceId_
+    }
+
+-- | The identifier of the group you want to add to your list of groups. This
+-- is for filtering search results based on the groups\' access to
+-- documents.
+dataSourceGroup_groupId :: Lens.Lens' DataSourceGroup Prelude.Text
+dataSourceGroup_groupId = Lens.lens (\DataSourceGroup' {groupId} -> groupId) (\s@DataSourceGroup' {} a -> s {groupId = a} :: DataSourceGroup)
+
+-- | The identifier of the data source group you want to add to your list of
+-- data source groups. This is for filtering search results based on the
+-- groups\' access to documents in that data source.
+dataSourceGroup_dataSourceId :: Lens.Lens' DataSourceGroup Prelude.Text
+dataSourceGroup_dataSourceId = Lens.lens (\DataSourceGroup' {dataSourceId} -> dataSourceId) (\s@DataSourceGroup' {} a -> s {dataSourceId = a} :: DataSourceGroup)
+
+instance Prelude.Hashable DataSourceGroup where
+  hashWithSalt _salt DataSourceGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` groupId
+      `Prelude.hashWithSalt` dataSourceId
+
+instance Prelude.NFData DataSourceGroup where
+  rnf DataSourceGroup' {..} =
+    Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf dataSourceId
+
+instance Data.ToJSON DataSourceGroup where
+  toJSON DataSourceGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("GroupId" Data..= groupId),
+            Prelude.Just ("DataSourceId" Data..= dataSourceId)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/DataSourceStatus.hs b/gen/Amazonka/Kendra/Types/DataSourceStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/DataSourceStatus.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.Kendra.Types.DataSourceStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.DataSourceStatus
+  ( DataSourceStatus
+      ( ..,
+        DataSourceStatus_ACTIVE,
+        DataSourceStatus_CREATING,
+        DataSourceStatus_DELETING,
+        DataSourceStatus_FAILED,
+        DataSourceStatus_UPDATING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DataSourceStatus = DataSourceStatus'
+  { fromDataSourceStatus ::
+      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 DataSourceStatus_ACTIVE :: DataSourceStatus
+pattern DataSourceStatus_ACTIVE = DataSourceStatus' "ACTIVE"
+
+pattern DataSourceStatus_CREATING :: DataSourceStatus
+pattern DataSourceStatus_CREATING = DataSourceStatus' "CREATING"
+
+pattern DataSourceStatus_DELETING :: DataSourceStatus
+pattern DataSourceStatus_DELETING = DataSourceStatus' "DELETING"
+
+pattern DataSourceStatus_FAILED :: DataSourceStatus
+pattern DataSourceStatus_FAILED = DataSourceStatus' "FAILED"
+
+pattern DataSourceStatus_UPDATING :: DataSourceStatus
+pattern DataSourceStatus_UPDATING = DataSourceStatus' "UPDATING"
+
+{-# COMPLETE
+  DataSourceStatus_ACTIVE,
+  DataSourceStatus_CREATING,
+  DataSourceStatus_DELETING,
+  DataSourceStatus_FAILED,
+  DataSourceStatus_UPDATING,
+  DataSourceStatus'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/DataSourceSummary.hs b/gen/Amazonka/Kendra/Types/DataSourceSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/DataSourceSummary.hs
@@ -0,0 +1,158 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.Types.DataSourceSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.DataSourceSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DataSourceStatus
+import Amazonka.Kendra.Types.DataSourceType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Summary information for a Amazon Kendra data source.
+--
+-- /See:/ 'newDataSourceSummary' smart constructor.
+data DataSourceSummary = DataSourceSummary'
+  { -- | The UNIX datetime that the data source was created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The identifier for the data source.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The code for a language. This shows a supported language for all
+    -- documents in the data source. English is supported by default. For more
+    -- information on supported languages, including their codes, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/in-adding-languages.html Adding documents in languages other than English>.
+    languageCode :: Prelude.Maybe Prelude.Text,
+    -- | The name of the data source.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The status of the data source. When the status is @ACTIVE@ the data
+    -- source is ready to use.
+    status :: Prelude.Maybe DataSourceStatus,
+    -- | The type of the data source.
+    type' :: Prelude.Maybe DataSourceType,
+    -- | The UNIX datetime that the data source was lasted updated.
+    updatedAt :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataSourceSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdAt', 'dataSourceSummary_createdAt' - The UNIX datetime that the data source was created.
+--
+-- 'id', 'dataSourceSummary_id' - The identifier for the data source.
+--
+-- 'languageCode', 'dataSourceSummary_languageCode' - The code for a language. This shows a supported language for all
+-- documents in the data source. English is supported by default. For more
+-- information on supported languages, including their codes, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/in-adding-languages.html Adding documents in languages other than English>.
+--
+-- 'name', 'dataSourceSummary_name' - The name of the data source.
+--
+-- 'status', 'dataSourceSummary_status' - The status of the data source. When the status is @ACTIVE@ the data
+-- source is ready to use.
+--
+-- 'type'', 'dataSourceSummary_type' - The type of the data source.
+--
+-- 'updatedAt', 'dataSourceSummary_updatedAt' - The UNIX datetime that the data source was lasted updated.
+newDataSourceSummary ::
+  DataSourceSummary
+newDataSourceSummary =
+  DataSourceSummary'
+    { createdAt = Prelude.Nothing,
+      id = Prelude.Nothing,
+      languageCode = Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      updatedAt = Prelude.Nothing
+    }
+
+-- | The UNIX datetime that the data source was created.
+dataSourceSummary_createdAt :: Lens.Lens' DataSourceSummary (Prelude.Maybe Prelude.UTCTime)
+dataSourceSummary_createdAt = Lens.lens (\DataSourceSummary' {createdAt} -> createdAt) (\s@DataSourceSummary' {} a -> s {createdAt = a} :: DataSourceSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The identifier for the data source.
+dataSourceSummary_id :: Lens.Lens' DataSourceSummary (Prelude.Maybe Prelude.Text)
+dataSourceSummary_id = Lens.lens (\DataSourceSummary' {id} -> id) (\s@DataSourceSummary' {} a -> s {id = a} :: DataSourceSummary)
+
+-- | The code for a language. This shows a supported language for all
+-- documents in the data source. English is supported by default. For more
+-- information on supported languages, including their codes, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/in-adding-languages.html Adding documents in languages other than English>.
+dataSourceSummary_languageCode :: Lens.Lens' DataSourceSummary (Prelude.Maybe Prelude.Text)
+dataSourceSummary_languageCode = Lens.lens (\DataSourceSummary' {languageCode} -> languageCode) (\s@DataSourceSummary' {} a -> s {languageCode = a} :: DataSourceSummary)
+
+-- | The name of the data source.
+dataSourceSummary_name :: Lens.Lens' DataSourceSummary (Prelude.Maybe Prelude.Text)
+dataSourceSummary_name = Lens.lens (\DataSourceSummary' {name} -> name) (\s@DataSourceSummary' {} a -> s {name = a} :: DataSourceSummary)
+
+-- | The status of the data source. When the status is @ACTIVE@ the data
+-- source is ready to use.
+dataSourceSummary_status :: Lens.Lens' DataSourceSummary (Prelude.Maybe DataSourceStatus)
+dataSourceSummary_status = Lens.lens (\DataSourceSummary' {status} -> status) (\s@DataSourceSummary' {} a -> s {status = a} :: DataSourceSummary)
+
+-- | The type of the data source.
+dataSourceSummary_type :: Lens.Lens' DataSourceSummary (Prelude.Maybe DataSourceType)
+dataSourceSummary_type = Lens.lens (\DataSourceSummary' {type'} -> type') (\s@DataSourceSummary' {} a -> s {type' = a} :: DataSourceSummary)
+
+-- | The UNIX datetime that the data source was lasted updated.
+dataSourceSummary_updatedAt :: Lens.Lens' DataSourceSummary (Prelude.Maybe Prelude.UTCTime)
+dataSourceSummary_updatedAt = Lens.lens (\DataSourceSummary' {updatedAt} -> updatedAt) (\s@DataSourceSummary' {} a -> s {updatedAt = a} :: DataSourceSummary) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON DataSourceSummary where
+  parseJSON =
+    Data.withObject
+      "DataSourceSummary"
+      ( \x ->
+          DataSourceSummary'
+            Prelude.<$> (x Data..:? "CreatedAt")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "LanguageCode")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "Type")
+            Prelude.<*> (x Data..:? "UpdatedAt")
+      )
+
+instance Prelude.Hashable DataSourceSummary where
+  hashWithSalt _salt DataSourceSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` languageCode
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` updatedAt
+
+instance Prelude.NFData DataSourceSummary where
+  rnf DataSourceSummary' {..} =
+    Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf languageCode
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf updatedAt
diff --git a/gen/Amazonka/Kendra/Types/DataSourceSyncJob.hs b/gen/Amazonka/Kendra/Types/DataSourceSyncJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/DataSourceSyncJob.hs
@@ -0,0 +1,190 @@
+{-# 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.Kendra.Types.DataSourceSyncJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.DataSourceSyncJob where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DataSourceSyncJobMetrics
+import Amazonka.Kendra.Types.DataSourceSyncJobStatus
+import Amazonka.Kendra.Types.ErrorCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about a data source synchronization job.
+--
+-- /See:/ 'newDataSourceSyncJob' smart constructor.
+data DataSourceSyncJob = DataSourceSyncJob'
+  { -- | If the reason that the synchronization failed is due to an error with
+    -- the underlying data source, this field contains a code that identifies
+    -- the error.
+    dataSourceErrorCode :: Prelude.Maybe Prelude.Text,
+    -- | The UNIX datetime that the synchronization job completed.
+    endTime :: Prelude.Maybe Data.POSIX,
+    -- | If the @Status@ field is set to @FAILED@, the @ErrorCode@ field
+    -- indicates the reason the synchronization failed.
+    errorCode :: Prelude.Maybe ErrorCode,
+    -- | If the @Status@ field is set to @ERROR@, the @ErrorMessage@ field
+    -- contains a description of the error that caused the synchronization to
+    -- fail.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | A identifier for the synchronization job.
+    executionId :: Prelude.Maybe Prelude.Text,
+    -- | Maps a batch delete document request to a specific data source sync job.
+    -- This is optional and should only be supplied when documents are deleted
+    -- by a data source connector.
+    metrics :: Prelude.Maybe DataSourceSyncJobMetrics,
+    -- | The UNIX datetime that the synchronization job started.
+    startTime :: Prelude.Maybe Data.POSIX,
+    -- | The execution status of the synchronization job. When the @Status@ field
+    -- is set to @SUCCEEDED@, the synchronization job is done. If the status
+    -- code is set to @FAILED@, the @ErrorCode@ and @ErrorMessage@ fields give
+    -- you the reason for the failure.
+    status :: Prelude.Maybe DataSourceSyncJobStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataSourceSyncJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSourceErrorCode', 'dataSourceSyncJob_dataSourceErrorCode' - If the reason that the synchronization failed is due to an error with
+-- the underlying data source, this field contains a code that identifies
+-- the error.
+--
+-- 'endTime', 'dataSourceSyncJob_endTime' - The UNIX datetime that the synchronization job completed.
+--
+-- 'errorCode', 'dataSourceSyncJob_errorCode' - If the @Status@ field is set to @FAILED@, the @ErrorCode@ field
+-- indicates the reason the synchronization failed.
+--
+-- 'errorMessage', 'dataSourceSyncJob_errorMessage' - If the @Status@ field is set to @ERROR@, the @ErrorMessage@ field
+-- contains a description of the error that caused the synchronization to
+-- fail.
+--
+-- 'executionId', 'dataSourceSyncJob_executionId' - A identifier for the synchronization job.
+--
+-- 'metrics', 'dataSourceSyncJob_metrics' - Maps a batch delete document request to a specific data source sync job.
+-- This is optional and should only be supplied when documents are deleted
+-- by a data source connector.
+--
+-- 'startTime', 'dataSourceSyncJob_startTime' - The UNIX datetime that the synchronization job started.
+--
+-- 'status', 'dataSourceSyncJob_status' - The execution status of the synchronization job. When the @Status@ field
+-- is set to @SUCCEEDED@, the synchronization job is done. If the status
+-- code is set to @FAILED@, the @ErrorCode@ and @ErrorMessage@ fields give
+-- you the reason for the failure.
+newDataSourceSyncJob ::
+  DataSourceSyncJob
+newDataSourceSyncJob =
+  DataSourceSyncJob'
+    { dataSourceErrorCode =
+        Prelude.Nothing,
+      endTime = Prelude.Nothing,
+      errorCode = Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      executionId = Prelude.Nothing,
+      metrics = Prelude.Nothing,
+      startTime = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | If the reason that the synchronization failed is due to an error with
+-- the underlying data source, this field contains a code that identifies
+-- the error.
+dataSourceSyncJob_dataSourceErrorCode :: Lens.Lens' DataSourceSyncJob (Prelude.Maybe Prelude.Text)
+dataSourceSyncJob_dataSourceErrorCode = Lens.lens (\DataSourceSyncJob' {dataSourceErrorCode} -> dataSourceErrorCode) (\s@DataSourceSyncJob' {} a -> s {dataSourceErrorCode = a} :: DataSourceSyncJob)
+
+-- | The UNIX datetime that the synchronization job completed.
+dataSourceSyncJob_endTime :: Lens.Lens' DataSourceSyncJob (Prelude.Maybe Prelude.UTCTime)
+dataSourceSyncJob_endTime = Lens.lens (\DataSourceSyncJob' {endTime} -> endTime) (\s@DataSourceSyncJob' {} a -> s {endTime = a} :: DataSourceSyncJob) Prelude.. Lens.mapping Data._Time
+
+-- | If the @Status@ field is set to @FAILED@, the @ErrorCode@ field
+-- indicates the reason the synchronization failed.
+dataSourceSyncJob_errorCode :: Lens.Lens' DataSourceSyncJob (Prelude.Maybe ErrorCode)
+dataSourceSyncJob_errorCode = Lens.lens (\DataSourceSyncJob' {errorCode} -> errorCode) (\s@DataSourceSyncJob' {} a -> s {errorCode = a} :: DataSourceSyncJob)
+
+-- | If the @Status@ field is set to @ERROR@, the @ErrorMessage@ field
+-- contains a description of the error that caused the synchronization to
+-- fail.
+dataSourceSyncJob_errorMessage :: Lens.Lens' DataSourceSyncJob (Prelude.Maybe Prelude.Text)
+dataSourceSyncJob_errorMessage = Lens.lens (\DataSourceSyncJob' {errorMessage} -> errorMessage) (\s@DataSourceSyncJob' {} a -> s {errorMessage = a} :: DataSourceSyncJob)
+
+-- | A identifier for the synchronization job.
+dataSourceSyncJob_executionId :: Lens.Lens' DataSourceSyncJob (Prelude.Maybe Prelude.Text)
+dataSourceSyncJob_executionId = Lens.lens (\DataSourceSyncJob' {executionId} -> executionId) (\s@DataSourceSyncJob' {} a -> s {executionId = a} :: DataSourceSyncJob)
+
+-- | Maps a batch delete document request to a specific data source sync job.
+-- This is optional and should only be supplied when documents are deleted
+-- by a data source connector.
+dataSourceSyncJob_metrics :: Lens.Lens' DataSourceSyncJob (Prelude.Maybe DataSourceSyncJobMetrics)
+dataSourceSyncJob_metrics = Lens.lens (\DataSourceSyncJob' {metrics} -> metrics) (\s@DataSourceSyncJob' {} a -> s {metrics = a} :: DataSourceSyncJob)
+
+-- | The UNIX datetime that the synchronization job started.
+dataSourceSyncJob_startTime :: Lens.Lens' DataSourceSyncJob (Prelude.Maybe Prelude.UTCTime)
+dataSourceSyncJob_startTime = Lens.lens (\DataSourceSyncJob' {startTime} -> startTime) (\s@DataSourceSyncJob' {} a -> s {startTime = a} :: DataSourceSyncJob) Prelude.. Lens.mapping Data._Time
+
+-- | The execution status of the synchronization job. When the @Status@ field
+-- is set to @SUCCEEDED@, the synchronization job is done. If the status
+-- code is set to @FAILED@, the @ErrorCode@ and @ErrorMessage@ fields give
+-- you the reason for the failure.
+dataSourceSyncJob_status :: Lens.Lens' DataSourceSyncJob (Prelude.Maybe DataSourceSyncJobStatus)
+dataSourceSyncJob_status = Lens.lens (\DataSourceSyncJob' {status} -> status) (\s@DataSourceSyncJob' {} a -> s {status = a} :: DataSourceSyncJob)
+
+instance Data.FromJSON DataSourceSyncJob where
+  parseJSON =
+    Data.withObject
+      "DataSourceSyncJob"
+      ( \x ->
+          DataSourceSyncJob'
+            Prelude.<$> (x Data..:? "DataSourceErrorCode")
+            Prelude.<*> (x Data..:? "EndTime")
+            Prelude.<*> (x Data..:? "ErrorCode")
+            Prelude.<*> (x Data..:? "ErrorMessage")
+            Prelude.<*> (x Data..:? "ExecutionId")
+            Prelude.<*> (x Data..:? "Metrics")
+            Prelude.<*> (x Data..:? "StartTime")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable DataSourceSyncJob where
+  hashWithSalt _salt DataSourceSyncJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataSourceErrorCode
+      `Prelude.hashWithSalt` endTime
+      `Prelude.hashWithSalt` errorCode
+      `Prelude.hashWithSalt` errorMessage
+      `Prelude.hashWithSalt` executionId
+      `Prelude.hashWithSalt` metrics
+      `Prelude.hashWithSalt` startTime
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData DataSourceSyncJob where
+  rnf DataSourceSyncJob' {..} =
+    Prelude.rnf dataSourceErrorCode
+      `Prelude.seq` Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf executionId
+      `Prelude.seq` Prelude.rnf metrics
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/Kendra/Types/DataSourceSyncJobMetricTarget.hs b/gen/Amazonka/Kendra/Types/DataSourceSyncJobMetricTarget.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/DataSourceSyncJobMetricTarget.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.Kendra.Types.DataSourceSyncJobMetricTarget
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.DataSourceSyncJobMetricTarget 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
+
+-- | Maps a particular data source sync job to a particular data source.
+--
+-- /See:/ 'newDataSourceSyncJobMetricTarget' smart constructor.
+data DataSourceSyncJobMetricTarget = DataSourceSyncJobMetricTarget'
+  { -- | The ID of the sync job that is running on the data source.
+    --
+    -- If the ID of a sync job is not provided and there is a sync job running,
+    -- then the ID of this sync job is used and metrics are generated for this
+    -- sync job.
+    --
+    -- If the ID of a sync job is not provided and there is no sync job
+    -- running, then no metrics are generated and documents are
+    -- indexed\/deleted at the index level without sync job metrics included.
+    dataSourceSyncJobId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the data source that is running the sync job.
+    dataSourceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataSourceSyncJobMetricTarget' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSourceSyncJobId', 'dataSourceSyncJobMetricTarget_dataSourceSyncJobId' - The ID of the sync job that is running on the data source.
+--
+-- If the ID of a sync job is not provided and there is a sync job running,
+-- then the ID of this sync job is used and metrics are generated for this
+-- sync job.
+--
+-- If the ID of a sync job is not provided and there is no sync job
+-- running, then no metrics are generated and documents are
+-- indexed\/deleted at the index level without sync job metrics included.
+--
+-- 'dataSourceId', 'dataSourceSyncJobMetricTarget_dataSourceId' - The ID of the data source that is running the sync job.
+newDataSourceSyncJobMetricTarget ::
+  -- | 'dataSourceId'
+  Prelude.Text ->
+  DataSourceSyncJobMetricTarget
+newDataSourceSyncJobMetricTarget pDataSourceId_ =
+  DataSourceSyncJobMetricTarget'
+    { dataSourceSyncJobId =
+        Prelude.Nothing,
+      dataSourceId = pDataSourceId_
+    }
+
+-- | The ID of the sync job that is running on the data source.
+--
+-- If the ID of a sync job is not provided and there is a sync job running,
+-- then the ID of this sync job is used and metrics are generated for this
+-- sync job.
+--
+-- If the ID of a sync job is not provided and there is no sync job
+-- running, then no metrics are generated and documents are
+-- indexed\/deleted at the index level without sync job metrics included.
+dataSourceSyncJobMetricTarget_dataSourceSyncJobId :: Lens.Lens' DataSourceSyncJobMetricTarget (Prelude.Maybe Prelude.Text)
+dataSourceSyncJobMetricTarget_dataSourceSyncJobId = Lens.lens (\DataSourceSyncJobMetricTarget' {dataSourceSyncJobId} -> dataSourceSyncJobId) (\s@DataSourceSyncJobMetricTarget' {} a -> s {dataSourceSyncJobId = a} :: DataSourceSyncJobMetricTarget)
+
+-- | The ID of the data source that is running the sync job.
+dataSourceSyncJobMetricTarget_dataSourceId :: Lens.Lens' DataSourceSyncJobMetricTarget Prelude.Text
+dataSourceSyncJobMetricTarget_dataSourceId = Lens.lens (\DataSourceSyncJobMetricTarget' {dataSourceId} -> dataSourceId) (\s@DataSourceSyncJobMetricTarget' {} a -> s {dataSourceId = a} :: DataSourceSyncJobMetricTarget)
+
+instance
+  Prelude.Hashable
+    DataSourceSyncJobMetricTarget
+  where
+  hashWithSalt _salt DataSourceSyncJobMetricTarget' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataSourceSyncJobId
+      `Prelude.hashWithSalt` dataSourceId
+
+instance Prelude.NFData DataSourceSyncJobMetricTarget where
+  rnf DataSourceSyncJobMetricTarget' {..} =
+    Prelude.rnf dataSourceSyncJobId
+      `Prelude.seq` Prelude.rnf dataSourceId
+
+instance Data.ToJSON DataSourceSyncJobMetricTarget where
+  toJSON DataSourceSyncJobMetricTarget' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DataSourceSyncJobId" Data..=)
+              Prelude.<$> dataSourceSyncJobId,
+            Prelude.Just ("DataSourceId" Data..= dataSourceId)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/DataSourceSyncJobMetrics.hs b/gen/Amazonka/Kendra/Types/DataSourceSyncJobMetrics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/DataSourceSyncJobMetrics.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.Kendra.Types.DataSourceSyncJobMetrics
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.DataSourceSyncJobMetrics 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
+
+-- | Maps a batch delete document request to a specific data source sync job.
+-- This is optional and should only be supplied when documents are deleted
+-- by a data source connector.
+--
+-- /See:/ 'newDataSourceSyncJobMetrics' smart constructor.
+data DataSourceSyncJobMetrics = DataSourceSyncJobMetrics'
+  { -- | The number of documents added from the data source up to now in the data
+    -- source sync.
+    documentsAdded :: Prelude.Maybe Prelude.Text,
+    -- | The number of documents deleted from the data source up to now in the
+    -- data source sync run.
+    documentsDeleted :: Prelude.Maybe Prelude.Text,
+    -- | The number of documents that failed to sync from the data source up to
+    -- now in the data source sync run.
+    documentsFailed :: Prelude.Maybe Prelude.Text,
+    -- | The number of documents modified in the data source up to now in the
+    -- data source sync run.
+    documentsModified :: Prelude.Maybe Prelude.Text,
+    -- | The current number of documents crawled by the current sync job in the
+    -- data source.
+    documentsScanned :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataSourceSyncJobMetrics' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'documentsAdded', 'dataSourceSyncJobMetrics_documentsAdded' - The number of documents added from the data source up to now in the data
+-- source sync.
+--
+-- 'documentsDeleted', 'dataSourceSyncJobMetrics_documentsDeleted' - The number of documents deleted from the data source up to now in the
+-- data source sync run.
+--
+-- 'documentsFailed', 'dataSourceSyncJobMetrics_documentsFailed' - The number of documents that failed to sync from the data source up to
+-- now in the data source sync run.
+--
+-- 'documentsModified', 'dataSourceSyncJobMetrics_documentsModified' - The number of documents modified in the data source up to now in the
+-- data source sync run.
+--
+-- 'documentsScanned', 'dataSourceSyncJobMetrics_documentsScanned' - The current number of documents crawled by the current sync job in the
+-- data source.
+newDataSourceSyncJobMetrics ::
+  DataSourceSyncJobMetrics
+newDataSourceSyncJobMetrics =
+  DataSourceSyncJobMetrics'
+    { documentsAdded =
+        Prelude.Nothing,
+      documentsDeleted = Prelude.Nothing,
+      documentsFailed = Prelude.Nothing,
+      documentsModified = Prelude.Nothing,
+      documentsScanned = Prelude.Nothing
+    }
+
+-- | The number of documents added from the data source up to now in the data
+-- source sync.
+dataSourceSyncJobMetrics_documentsAdded :: Lens.Lens' DataSourceSyncJobMetrics (Prelude.Maybe Prelude.Text)
+dataSourceSyncJobMetrics_documentsAdded = Lens.lens (\DataSourceSyncJobMetrics' {documentsAdded} -> documentsAdded) (\s@DataSourceSyncJobMetrics' {} a -> s {documentsAdded = a} :: DataSourceSyncJobMetrics)
+
+-- | The number of documents deleted from the data source up to now in the
+-- data source sync run.
+dataSourceSyncJobMetrics_documentsDeleted :: Lens.Lens' DataSourceSyncJobMetrics (Prelude.Maybe Prelude.Text)
+dataSourceSyncJobMetrics_documentsDeleted = Lens.lens (\DataSourceSyncJobMetrics' {documentsDeleted} -> documentsDeleted) (\s@DataSourceSyncJobMetrics' {} a -> s {documentsDeleted = a} :: DataSourceSyncJobMetrics)
+
+-- | The number of documents that failed to sync from the data source up to
+-- now in the data source sync run.
+dataSourceSyncJobMetrics_documentsFailed :: Lens.Lens' DataSourceSyncJobMetrics (Prelude.Maybe Prelude.Text)
+dataSourceSyncJobMetrics_documentsFailed = Lens.lens (\DataSourceSyncJobMetrics' {documentsFailed} -> documentsFailed) (\s@DataSourceSyncJobMetrics' {} a -> s {documentsFailed = a} :: DataSourceSyncJobMetrics)
+
+-- | The number of documents modified in the data source up to now in the
+-- data source sync run.
+dataSourceSyncJobMetrics_documentsModified :: Lens.Lens' DataSourceSyncJobMetrics (Prelude.Maybe Prelude.Text)
+dataSourceSyncJobMetrics_documentsModified = Lens.lens (\DataSourceSyncJobMetrics' {documentsModified} -> documentsModified) (\s@DataSourceSyncJobMetrics' {} a -> s {documentsModified = a} :: DataSourceSyncJobMetrics)
+
+-- | The current number of documents crawled by the current sync job in the
+-- data source.
+dataSourceSyncJobMetrics_documentsScanned :: Lens.Lens' DataSourceSyncJobMetrics (Prelude.Maybe Prelude.Text)
+dataSourceSyncJobMetrics_documentsScanned = Lens.lens (\DataSourceSyncJobMetrics' {documentsScanned} -> documentsScanned) (\s@DataSourceSyncJobMetrics' {} a -> s {documentsScanned = a} :: DataSourceSyncJobMetrics)
+
+instance Data.FromJSON DataSourceSyncJobMetrics where
+  parseJSON =
+    Data.withObject
+      "DataSourceSyncJobMetrics"
+      ( \x ->
+          DataSourceSyncJobMetrics'
+            Prelude.<$> (x Data..:? "DocumentsAdded")
+            Prelude.<*> (x Data..:? "DocumentsDeleted")
+            Prelude.<*> (x Data..:? "DocumentsFailed")
+            Prelude.<*> (x Data..:? "DocumentsModified")
+            Prelude.<*> (x Data..:? "DocumentsScanned")
+      )
+
+instance Prelude.Hashable DataSourceSyncJobMetrics where
+  hashWithSalt _salt DataSourceSyncJobMetrics' {..} =
+    _salt
+      `Prelude.hashWithSalt` documentsAdded
+      `Prelude.hashWithSalt` documentsDeleted
+      `Prelude.hashWithSalt` documentsFailed
+      `Prelude.hashWithSalt` documentsModified
+      `Prelude.hashWithSalt` documentsScanned
+
+instance Prelude.NFData DataSourceSyncJobMetrics where
+  rnf DataSourceSyncJobMetrics' {..} =
+    Prelude.rnf documentsAdded
+      `Prelude.seq` Prelude.rnf documentsDeleted
+      `Prelude.seq` Prelude.rnf documentsFailed
+      `Prelude.seq` Prelude.rnf documentsModified
+      `Prelude.seq` Prelude.rnf documentsScanned
diff --git a/gen/Amazonka/Kendra/Types/DataSourceSyncJobStatus.hs b/gen/Amazonka/Kendra/Types/DataSourceSyncJobStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/DataSourceSyncJobStatus.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.Kendra.Types.DataSourceSyncJobStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.DataSourceSyncJobStatus
+  ( DataSourceSyncJobStatus
+      ( ..,
+        DataSourceSyncJobStatus_ABORTED,
+        DataSourceSyncJobStatus_FAILED,
+        DataSourceSyncJobStatus_INCOMPLETE,
+        DataSourceSyncJobStatus_STOPPING,
+        DataSourceSyncJobStatus_SUCCEEDED,
+        DataSourceSyncJobStatus_SYNCING,
+        DataSourceSyncJobStatus_SYNCING_INDEXING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DataSourceSyncJobStatus = DataSourceSyncJobStatus'
+  { fromDataSourceSyncJobStatus ::
+      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 DataSourceSyncJobStatus_ABORTED :: DataSourceSyncJobStatus
+pattern DataSourceSyncJobStatus_ABORTED = DataSourceSyncJobStatus' "ABORTED"
+
+pattern DataSourceSyncJobStatus_FAILED :: DataSourceSyncJobStatus
+pattern DataSourceSyncJobStatus_FAILED = DataSourceSyncJobStatus' "FAILED"
+
+pattern DataSourceSyncJobStatus_INCOMPLETE :: DataSourceSyncJobStatus
+pattern DataSourceSyncJobStatus_INCOMPLETE = DataSourceSyncJobStatus' "INCOMPLETE"
+
+pattern DataSourceSyncJobStatus_STOPPING :: DataSourceSyncJobStatus
+pattern DataSourceSyncJobStatus_STOPPING = DataSourceSyncJobStatus' "STOPPING"
+
+pattern DataSourceSyncJobStatus_SUCCEEDED :: DataSourceSyncJobStatus
+pattern DataSourceSyncJobStatus_SUCCEEDED = DataSourceSyncJobStatus' "SUCCEEDED"
+
+pattern DataSourceSyncJobStatus_SYNCING :: DataSourceSyncJobStatus
+pattern DataSourceSyncJobStatus_SYNCING = DataSourceSyncJobStatus' "SYNCING"
+
+pattern DataSourceSyncJobStatus_SYNCING_INDEXING :: DataSourceSyncJobStatus
+pattern DataSourceSyncJobStatus_SYNCING_INDEXING = DataSourceSyncJobStatus' "SYNCING_INDEXING"
+
+{-# COMPLETE
+  DataSourceSyncJobStatus_ABORTED,
+  DataSourceSyncJobStatus_FAILED,
+  DataSourceSyncJobStatus_INCOMPLETE,
+  DataSourceSyncJobStatus_STOPPING,
+  DataSourceSyncJobStatus_SUCCEEDED,
+  DataSourceSyncJobStatus_SYNCING,
+  DataSourceSyncJobStatus_SYNCING_INDEXING,
+  DataSourceSyncJobStatus'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/DataSourceToIndexFieldMapping.hs b/gen/Amazonka/Kendra/Types/DataSourceToIndexFieldMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/DataSourceToIndexFieldMapping.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.Kendra.Types.DataSourceToIndexFieldMapping
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.DataSourceToIndexFieldMapping 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
+
+-- | Maps a column or attribute in the data source to an index field. You
+-- must first create the fields in the index using the @UpdateIndex@ API.
+--
+-- /See:/ 'newDataSourceToIndexFieldMapping' smart constructor.
+data DataSourceToIndexFieldMapping = DataSourceToIndexFieldMapping'
+  { -- | The type of data stored in the column or attribute.
+    dateFieldFormat :: Prelude.Maybe Prelude.Text,
+    -- | The name of the column or attribute in the data source.
+    dataSourceFieldName :: Prelude.Text,
+    -- | The name of the field in the index.
+    indexFieldName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataSourceToIndexFieldMapping' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dateFieldFormat', 'dataSourceToIndexFieldMapping_dateFieldFormat' - The type of data stored in the column or attribute.
+--
+-- 'dataSourceFieldName', 'dataSourceToIndexFieldMapping_dataSourceFieldName' - The name of the column or attribute in the data source.
+--
+-- 'indexFieldName', 'dataSourceToIndexFieldMapping_indexFieldName' - The name of the field in the index.
+newDataSourceToIndexFieldMapping ::
+  -- | 'dataSourceFieldName'
+  Prelude.Text ->
+  -- | 'indexFieldName'
+  Prelude.Text ->
+  DataSourceToIndexFieldMapping
+newDataSourceToIndexFieldMapping
+  pDataSourceFieldName_
+  pIndexFieldName_ =
+    DataSourceToIndexFieldMapping'
+      { dateFieldFormat =
+          Prelude.Nothing,
+        dataSourceFieldName = pDataSourceFieldName_,
+        indexFieldName = pIndexFieldName_
+      }
+
+-- | The type of data stored in the column or attribute.
+dataSourceToIndexFieldMapping_dateFieldFormat :: Lens.Lens' DataSourceToIndexFieldMapping (Prelude.Maybe Prelude.Text)
+dataSourceToIndexFieldMapping_dateFieldFormat = Lens.lens (\DataSourceToIndexFieldMapping' {dateFieldFormat} -> dateFieldFormat) (\s@DataSourceToIndexFieldMapping' {} a -> s {dateFieldFormat = a} :: DataSourceToIndexFieldMapping)
+
+-- | The name of the column or attribute in the data source.
+dataSourceToIndexFieldMapping_dataSourceFieldName :: Lens.Lens' DataSourceToIndexFieldMapping Prelude.Text
+dataSourceToIndexFieldMapping_dataSourceFieldName = Lens.lens (\DataSourceToIndexFieldMapping' {dataSourceFieldName} -> dataSourceFieldName) (\s@DataSourceToIndexFieldMapping' {} a -> s {dataSourceFieldName = a} :: DataSourceToIndexFieldMapping)
+
+-- | The name of the field in the index.
+dataSourceToIndexFieldMapping_indexFieldName :: Lens.Lens' DataSourceToIndexFieldMapping Prelude.Text
+dataSourceToIndexFieldMapping_indexFieldName = Lens.lens (\DataSourceToIndexFieldMapping' {indexFieldName} -> indexFieldName) (\s@DataSourceToIndexFieldMapping' {} a -> s {indexFieldName = a} :: DataSourceToIndexFieldMapping)
+
+instance Data.FromJSON DataSourceToIndexFieldMapping where
+  parseJSON =
+    Data.withObject
+      "DataSourceToIndexFieldMapping"
+      ( \x ->
+          DataSourceToIndexFieldMapping'
+            Prelude.<$> (x Data..:? "DateFieldFormat")
+            Prelude.<*> (x Data..: "DataSourceFieldName")
+            Prelude.<*> (x Data..: "IndexFieldName")
+      )
+
+instance
+  Prelude.Hashable
+    DataSourceToIndexFieldMapping
+  where
+  hashWithSalt _salt DataSourceToIndexFieldMapping' {..} =
+    _salt
+      `Prelude.hashWithSalt` dateFieldFormat
+      `Prelude.hashWithSalt` dataSourceFieldName
+      `Prelude.hashWithSalt` indexFieldName
+
+instance Prelude.NFData DataSourceToIndexFieldMapping where
+  rnf DataSourceToIndexFieldMapping' {..} =
+    Prelude.rnf dateFieldFormat
+      `Prelude.seq` Prelude.rnf dataSourceFieldName
+      `Prelude.seq` Prelude.rnf indexFieldName
+
+instance Data.ToJSON DataSourceToIndexFieldMapping where
+  toJSON DataSourceToIndexFieldMapping' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DateFieldFormat" Data..=)
+              Prelude.<$> dateFieldFormat,
+            Prelude.Just
+              ("DataSourceFieldName" Data..= dataSourceFieldName),
+            Prelude.Just
+              ("IndexFieldName" Data..= indexFieldName)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/DataSourceType.hs b/gen/Amazonka/Kendra/Types/DataSourceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/DataSourceType.hs
@@ -0,0 +1,156 @@
+{-# 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.Kendra.Types.DataSourceType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.DataSourceType
+  ( DataSourceType
+      ( ..,
+        DataSourceType_ALFRESCO,
+        DataSourceType_BOX,
+        DataSourceType_CONFLUENCE,
+        DataSourceType_CUSTOM,
+        DataSourceType_DATABASE,
+        DataSourceType_FSX,
+        DataSourceType_GITHUB,
+        DataSourceType_GOOGLEDRIVE,
+        DataSourceType_JIRA,
+        DataSourceType_ONEDRIVE,
+        DataSourceType_QUIP,
+        DataSourceType_S3,
+        DataSourceType_SALESFORCE,
+        DataSourceType_SERVICENOW,
+        DataSourceType_SHAREPOINT,
+        DataSourceType_SLACK,
+        DataSourceType_TEMPLATE,
+        DataSourceType_WEBCRAWLER,
+        DataSourceType_WORKDOCS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DataSourceType = DataSourceType'
+  { fromDataSourceType ::
+      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 DataSourceType_ALFRESCO :: DataSourceType
+pattern DataSourceType_ALFRESCO = DataSourceType' "ALFRESCO"
+
+pattern DataSourceType_BOX :: DataSourceType
+pattern DataSourceType_BOX = DataSourceType' "BOX"
+
+pattern DataSourceType_CONFLUENCE :: DataSourceType
+pattern DataSourceType_CONFLUENCE = DataSourceType' "CONFLUENCE"
+
+pattern DataSourceType_CUSTOM :: DataSourceType
+pattern DataSourceType_CUSTOM = DataSourceType' "CUSTOM"
+
+pattern DataSourceType_DATABASE :: DataSourceType
+pattern DataSourceType_DATABASE = DataSourceType' "DATABASE"
+
+pattern DataSourceType_FSX :: DataSourceType
+pattern DataSourceType_FSX = DataSourceType' "FSX"
+
+pattern DataSourceType_GITHUB :: DataSourceType
+pattern DataSourceType_GITHUB = DataSourceType' "GITHUB"
+
+pattern DataSourceType_GOOGLEDRIVE :: DataSourceType
+pattern DataSourceType_GOOGLEDRIVE = DataSourceType' "GOOGLEDRIVE"
+
+pattern DataSourceType_JIRA :: DataSourceType
+pattern DataSourceType_JIRA = DataSourceType' "JIRA"
+
+pattern DataSourceType_ONEDRIVE :: DataSourceType
+pattern DataSourceType_ONEDRIVE = DataSourceType' "ONEDRIVE"
+
+pattern DataSourceType_QUIP :: DataSourceType
+pattern DataSourceType_QUIP = DataSourceType' "QUIP"
+
+pattern DataSourceType_S3 :: DataSourceType
+pattern DataSourceType_S3 = DataSourceType' "S3"
+
+pattern DataSourceType_SALESFORCE :: DataSourceType
+pattern DataSourceType_SALESFORCE = DataSourceType' "SALESFORCE"
+
+pattern DataSourceType_SERVICENOW :: DataSourceType
+pattern DataSourceType_SERVICENOW = DataSourceType' "SERVICENOW"
+
+pattern DataSourceType_SHAREPOINT :: DataSourceType
+pattern DataSourceType_SHAREPOINT = DataSourceType' "SHAREPOINT"
+
+pattern DataSourceType_SLACK :: DataSourceType
+pattern DataSourceType_SLACK = DataSourceType' "SLACK"
+
+pattern DataSourceType_TEMPLATE :: DataSourceType
+pattern DataSourceType_TEMPLATE = DataSourceType' "TEMPLATE"
+
+pattern DataSourceType_WEBCRAWLER :: DataSourceType
+pattern DataSourceType_WEBCRAWLER = DataSourceType' "WEBCRAWLER"
+
+pattern DataSourceType_WORKDOCS :: DataSourceType
+pattern DataSourceType_WORKDOCS = DataSourceType' "WORKDOCS"
+
+{-# COMPLETE
+  DataSourceType_ALFRESCO,
+  DataSourceType_BOX,
+  DataSourceType_CONFLUENCE,
+  DataSourceType_CUSTOM,
+  DataSourceType_DATABASE,
+  DataSourceType_FSX,
+  DataSourceType_GITHUB,
+  DataSourceType_GOOGLEDRIVE,
+  DataSourceType_JIRA,
+  DataSourceType_ONEDRIVE,
+  DataSourceType_QUIP,
+  DataSourceType_S3,
+  DataSourceType_SALESFORCE,
+  DataSourceType_SERVICENOW,
+  DataSourceType_SHAREPOINT,
+  DataSourceType_SLACK,
+  DataSourceType_TEMPLATE,
+  DataSourceType_WEBCRAWLER,
+  DataSourceType_WORKDOCS,
+  DataSourceType'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/DataSourceVpcConfiguration.hs b/gen/Amazonka/Kendra/Types/DataSourceVpcConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/DataSourceVpcConfiguration.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.Kendra.Types.DataSourceVpcConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.DataSourceVpcConfiguration 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 configuration information to connect to an Amazon VPC.
+--
+-- /See:/ 'newDataSourceVpcConfiguration' smart constructor.
+data DataSourceVpcConfiguration = DataSourceVpcConfiguration'
+  { -- | A list of identifiers for subnets within your Amazon VPC. The subnets
+    -- should be able to connect to each other in the VPC, and they should have
+    -- outgoing access to the Internet through a NAT device.
+    subnetIds :: Prelude.NonEmpty Prelude.Text,
+    -- | A list of identifiers of security groups within your Amazon VPC. The
+    -- security groups should enable Amazon Kendra to connect to the data
+    -- source.
+    securityGroupIds :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataSourceVpcConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'subnetIds', 'dataSourceVpcConfiguration_subnetIds' - A list of identifiers for subnets within your Amazon VPC. The subnets
+-- should be able to connect to each other in the VPC, and they should have
+-- outgoing access to the Internet through a NAT device.
+--
+-- 'securityGroupIds', 'dataSourceVpcConfiguration_securityGroupIds' - A list of identifiers of security groups within your Amazon VPC. The
+-- security groups should enable Amazon Kendra to connect to the data
+-- source.
+newDataSourceVpcConfiguration ::
+  -- | 'subnetIds'
+  Prelude.NonEmpty Prelude.Text ->
+  -- | 'securityGroupIds'
+  Prelude.NonEmpty Prelude.Text ->
+  DataSourceVpcConfiguration
+newDataSourceVpcConfiguration
+  pSubnetIds_
+  pSecurityGroupIds_ =
+    DataSourceVpcConfiguration'
+      { subnetIds =
+          Lens.coerced Lens.# pSubnetIds_,
+        securityGroupIds =
+          Lens.coerced Lens.# pSecurityGroupIds_
+      }
+
+-- | A list of identifiers for subnets within your Amazon VPC. The subnets
+-- should be able to connect to each other in the VPC, and they should have
+-- outgoing access to the Internet through a NAT device.
+dataSourceVpcConfiguration_subnetIds :: Lens.Lens' DataSourceVpcConfiguration (Prelude.NonEmpty Prelude.Text)
+dataSourceVpcConfiguration_subnetIds = Lens.lens (\DataSourceVpcConfiguration' {subnetIds} -> subnetIds) (\s@DataSourceVpcConfiguration' {} a -> s {subnetIds = a} :: DataSourceVpcConfiguration) Prelude.. Lens.coerced
+
+-- | A list of identifiers of security groups within your Amazon VPC. The
+-- security groups should enable Amazon Kendra to connect to the data
+-- source.
+dataSourceVpcConfiguration_securityGroupIds :: Lens.Lens' DataSourceVpcConfiguration (Prelude.NonEmpty Prelude.Text)
+dataSourceVpcConfiguration_securityGroupIds = Lens.lens (\DataSourceVpcConfiguration' {securityGroupIds} -> securityGroupIds) (\s@DataSourceVpcConfiguration' {} a -> s {securityGroupIds = a} :: DataSourceVpcConfiguration) Prelude.. Lens.coerced
+
+instance Data.FromJSON DataSourceVpcConfiguration where
+  parseJSON =
+    Data.withObject
+      "DataSourceVpcConfiguration"
+      ( \x ->
+          DataSourceVpcConfiguration'
+            Prelude.<$> (x Data..: "SubnetIds")
+            Prelude.<*> (x Data..: "SecurityGroupIds")
+      )
+
+instance Prelude.Hashable DataSourceVpcConfiguration where
+  hashWithSalt _salt DataSourceVpcConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` subnetIds
+      `Prelude.hashWithSalt` securityGroupIds
+
+instance Prelude.NFData DataSourceVpcConfiguration where
+  rnf DataSourceVpcConfiguration' {..} =
+    Prelude.rnf subnetIds
+      `Prelude.seq` Prelude.rnf securityGroupIds
+
+instance Data.ToJSON DataSourceVpcConfiguration where
+  toJSON DataSourceVpcConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("SubnetIds" Data..= subnetIds),
+            Prelude.Just
+              ("SecurityGroupIds" Data..= securityGroupIds)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/DatabaseConfiguration.hs b/gen/Amazonka/Kendra/Types/DatabaseConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/DatabaseConfiguration.hs
@@ -0,0 +1,177 @@
+{-# 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.Kendra.Types.DatabaseConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.DatabaseConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.AclConfiguration
+import Amazonka.Kendra.Types.ColumnConfiguration
+import Amazonka.Kendra.Types.ConnectionConfiguration
+import Amazonka.Kendra.Types.DataSourceVpcConfiguration
+import Amazonka.Kendra.Types.DatabaseEngineType
+import Amazonka.Kendra.Types.SqlConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information to connect to a index.
+--
+-- /See:/ 'newDatabaseConfiguration' smart constructor.
+data DatabaseConfiguration = DatabaseConfiguration'
+  { -- | Information about the database column that provides information for user
+    -- context filtering.
+    aclConfiguration :: Prelude.Maybe AclConfiguration,
+    -- | Provides information about how Amazon Kendra uses quote marks around SQL
+    -- identifiers when querying a database data source.
+    sqlConfiguration :: Prelude.Maybe SqlConfiguration,
+    vpcConfiguration :: Prelude.Maybe DataSourceVpcConfiguration,
+    -- | The type of database engine that runs the database.
+    databaseEngineType :: DatabaseEngineType,
+    -- | Configuration information that\'s required to connect to a database.
+    connectionConfiguration :: ConnectionConfiguration,
+    -- | Information about where the index should get the document information
+    -- from the database.
+    columnConfiguration :: ColumnConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DatabaseConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'aclConfiguration', 'databaseConfiguration_aclConfiguration' - Information about the database column that provides information for user
+-- context filtering.
+--
+-- 'sqlConfiguration', 'databaseConfiguration_sqlConfiguration' - Provides information about how Amazon Kendra uses quote marks around SQL
+-- identifiers when querying a database data source.
+--
+-- 'vpcConfiguration', 'databaseConfiguration_vpcConfiguration' - Undocumented member.
+--
+-- 'databaseEngineType', 'databaseConfiguration_databaseEngineType' - The type of database engine that runs the database.
+--
+-- 'connectionConfiguration', 'databaseConfiguration_connectionConfiguration' - Configuration information that\'s required to connect to a database.
+--
+-- 'columnConfiguration', 'databaseConfiguration_columnConfiguration' - Information about where the index should get the document information
+-- from the database.
+newDatabaseConfiguration ::
+  -- | 'databaseEngineType'
+  DatabaseEngineType ->
+  -- | 'connectionConfiguration'
+  ConnectionConfiguration ->
+  -- | 'columnConfiguration'
+  ColumnConfiguration ->
+  DatabaseConfiguration
+newDatabaseConfiguration
+  pDatabaseEngineType_
+  pConnectionConfiguration_
+  pColumnConfiguration_ =
+    DatabaseConfiguration'
+      { aclConfiguration =
+          Prelude.Nothing,
+        sqlConfiguration = Prelude.Nothing,
+        vpcConfiguration = Prelude.Nothing,
+        databaseEngineType = pDatabaseEngineType_,
+        connectionConfiguration = pConnectionConfiguration_,
+        columnConfiguration = pColumnConfiguration_
+      }
+
+-- | Information about the database column that provides information for user
+-- context filtering.
+databaseConfiguration_aclConfiguration :: Lens.Lens' DatabaseConfiguration (Prelude.Maybe AclConfiguration)
+databaseConfiguration_aclConfiguration = Lens.lens (\DatabaseConfiguration' {aclConfiguration} -> aclConfiguration) (\s@DatabaseConfiguration' {} a -> s {aclConfiguration = a} :: DatabaseConfiguration)
+
+-- | Provides information about how Amazon Kendra uses quote marks around SQL
+-- identifiers when querying a database data source.
+databaseConfiguration_sqlConfiguration :: Lens.Lens' DatabaseConfiguration (Prelude.Maybe SqlConfiguration)
+databaseConfiguration_sqlConfiguration = Lens.lens (\DatabaseConfiguration' {sqlConfiguration} -> sqlConfiguration) (\s@DatabaseConfiguration' {} a -> s {sqlConfiguration = a} :: DatabaseConfiguration)
+
+-- | Undocumented member.
+databaseConfiguration_vpcConfiguration :: Lens.Lens' DatabaseConfiguration (Prelude.Maybe DataSourceVpcConfiguration)
+databaseConfiguration_vpcConfiguration = Lens.lens (\DatabaseConfiguration' {vpcConfiguration} -> vpcConfiguration) (\s@DatabaseConfiguration' {} a -> s {vpcConfiguration = a} :: DatabaseConfiguration)
+
+-- | The type of database engine that runs the database.
+databaseConfiguration_databaseEngineType :: Lens.Lens' DatabaseConfiguration DatabaseEngineType
+databaseConfiguration_databaseEngineType = Lens.lens (\DatabaseConfiguration' {databaseEngineType} -> databaseEngineType) (\s@DatabaseConfiguration' {} a -> s {databaseEngineType = a} :: DatabaseConfiguration)
+
+-- | Configuration information that\'s required to connect to a database.
+databaseConfiguration_connectionConfiguration :: Lens.Lens' DatabaseConfiguration ConnectionConfiguration
+databaseConfiguration_connectionConfiguration = Lens.lens (\DatabaseConfiguration' {connectionConfiguration} -> connectionConfiguration) (\s@DatabaseConfiguration' {} a -> s {connectionConfiguration = a} :: DatabaseConfiguration)
+
+-- | Information about where the index should get the document information
+-- from the database.
+databaseConfiguration_columnConfiguration :: Lens.Lens' DatabaseConfiguration ColumnConfiguration
+databaseConfiguration_columnConfiguration = Lens.lens (\DatabaseConfiguration' {columnConfiguration} -> columnConfiguration) (\s@DatabaseConfiguration' {} a -> s {columnConfiguration = a} :: DatabaseConfiguration)
+
+instance Data.FromJSON DatabaseConfiguration where
+  parseJSON =
+    Data.withObject
+      "DatabaseConfiguration"
+      ( \x ->
+          DatabaseConfiguration'
+            Prelude.<$> (x Data..:? "AclConfiguration")
+            Prelude.<*> (x Data..:? "SqlConfiguration")
+            Prelude.<*> (x Data..:? "VpcConfiguration")
+            Prelude.<*> (x Data..: "DatabaseEngineType")
+            Prelude.<*> (x Data..: "ConnectionConfiguration")
+            Prelude.<*> (x Data..: "ColumnConfiguration")
+      )
+
+instance Prelude.Hashable DatabaseConfiguration where
+  hashWithSalt _salt DatabaseConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` aclConfiguration
+      `Prelude.hashWithSalt` sqlConfiguration
+      `Prelude.hashWithSalt` vpcConfiguration
+      `Prelude.hashWithSalt` databaseEngineType
+      `Prelude.hashWithSalt` connectionConfiguration
+      `Prelude.hashWithSalt` columnConfiguration
+
+instance Prelude.NFData DatabaseConfiguration where
+  rnf DatabaseConfiguration' {..} =
+    Prelude.rnf aclConfiguration
+      `Prelude.seq` Prelude.rnf sqlConfiguration
+      `Prelude.seq` Prelude.rnf vpcConfiguration
+      `Prelude.seq` Prelude.rnf databaseEngineType
+      `Prelude.seq` Prelude.rnf connectionConfiguration
+      `Prelude.seq` Prelude.rnf columnConfiguration
+
+instance Data.ToJSON DatabaseConfiguration where
+  toJSON DatabaseConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AclConfiguration" Data..=)
+              Prelude.<$> aclConfiguration,
+            ("SqlConfiguration" Data..=)
+              Prelude.<$> sqlConfiguration,
+            ("VpcConfiguration" Data..=)
+              Prelude.<$> vpcConfiguration,
+            Prelude.Just
+              ("DatabaseEngineType" Data..= databaseEngineType),
+            Prelude.Just
+              ( "ConnectionConfiguration"
+                  Data..= connectionConfiguration
+              ),
+            Prelude.Just
+              ("ColumnConfiguration" Data..= columnConfiguration)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/DatabaseEngineType.hs b/gen/Amazonka/Kendra/Types/DatabaseEngineType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/DatabaseEngineType.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.Kendra.Types.DatabaseEngineType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.DatabaseEngineType
+  ( DatabaseEngineType
+      ( ..,
+        DatabaseEngineType_RDS_AURORA_MYSQL,
+        DatabaseEngineType_RDS_AURORA_POSTGRESQL,
+        DatabaseEngineType_RDS_MYSQL,
+        DatabaseEngineType_RDS_POSTGRESQL
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DatabaseEngineType = DatabaseEngineType'
+  { fromDatabaseEngineType ::
+      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 DatabaseEngineType_RDS_AURORA_MYSQL :: DatabaseEngineType
+pattern DatabaseEngineType_RDS_AURORA_MYSQL = DatabaseEngineType' "RDS_AURORA_MYSQL"
+
+pattern DatabaseEngineType_RDS_AURORA_POSTGRESQL :: DatabaseEngineType
+pattern DatabaseEngineType_RDS_AURORA_POSTGRESQL = DatabaseEngineType' "RDS_AURORA_POSTGRESQL"
+
+pattern DatabaseEngineType_RDS_MYSQL :: DatabaseEngineType
+pattern DatabaseEngineType_RDS_MYSQL = DatabaseEngineType' "RDS_MYSQL"
+
+pattern DatabaseEngineType_RDS_POSTGRESQL :: DatabaseEngineType
+pattern DatabaseEngineType_RDS_POSTGRESQL = DatabaseEngineType' "RDS_POSTGRESQL"
+
+{-# COMPLETE
+  DatabaseEngineType_RDS_AURORA_MYSQL,
+  DatabaseEngineType_RDS_AURORA_POSTGRESQL,
+  DatabaseEngineType_RDS_MYSQL,
+  DatabaseEngineType_RDS_POSTGRESQL,
+  DatabaseEngineType'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/Document.hs b/gen/Amazonka/Kendra/Types/Document.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/Document.hs
@@ -0,0 +1,269 @@
+{-# 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.Kendra.Types.Document
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.Document where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.ContentType
+import Amazonka.Kendra.Types.DocumentAttribute
+import Amazonka.Kendra.Types.HierarchicalPrincipal
+import Amazonka.Kendra.Types.Principal
+import Amazonka.Kendra.Types.S3Path
+import qualified Amazonka.Prelude as Prelude
+
+-- | A document in an index.
+--
+-- /See:/ 'newDocument' smart constructor.
+data Document = Document'
+  { -- | The identifier of the access control configuration that you want to
+    -- apply to the document.
+    accessControlConfigurationId :: Prelude.Maybe Prelude.Text,
+    -- | Information on principals (users and\/or groups) and which documents
+    -- they should have access to. This is useful for user context filtering,
+    -- where search results are filtered based on the user or their group
+    -- access to documents.
+    accessControlList :: Prelude.Maybe [Principal],
+    -- | Custom attributes to apply to the document. Use the custom attributes to
+    -- provide additional information for searching, to provide facets for
+    -- refining searches, and to provide additional information in the query
+    -- response.
+    --
+    -- For example, \'DataSourceId\' and \'DataSourceSyncJobId\' are custom
+    -- attributes that provide information on the synchronization of documents
+    -- running on a data source. Note, \'DataSourceSyncJobId\' could be an
+    -- optional custom attribute as Amazon Kendra will use the ID of a running
+    -- sync job.
+    attributes :: Prelude.Maybe [DocumentAttribute],
+    -- | The contents of the document.
+    --
+    -- Documents passed to the @Blob@ parameter must be base64 encoded. Your
+    -- code might not need to encode the document file bytes if you\'re using
+    -- an Amazon Web Services SDK to call Amazon Kendra APIs. If you are
+    -- calling the Amazon Kendra endpoint directly using REST, you must base64
+    -- encode the contents before sending.
+    blob :: Prelude.Maybe Data.Base64,
+    -- | The file type of the document in the @Blob@ field.
+    contentType :: Prelude.Maybe ContentType,
+    -- | The list of
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/API_Principal.html principal>
+    -- lists that define the hierarchy for which documents users should have
+    -- access to.
+    hierarchicalAccessControlList :: Prelude.Maybe (Prelude.NonEmpty HierarchicalPrincipal),
+    s3Path :: Prelude.Maybe S3Path,
+    -- | The title of the document.
+    title :: Prelude.Maybe Prelude.Text,
+    -- | A identifier of the document in the index.
+    --
+    -- Note, each document ID must be unique per index. You cannot create a
+    -- data source to index your documents with their unique IDs and then use
+    -- the @BatchPutDocument@ API to index the same documents, or vice versa.
+    -- You can delete a data source and then use the @BatchPutDocument@ API to
+    -- index the same documents, or vice versa.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Document' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessControlConfigurationId', 'document_accessControlConfigurationId' - The identifier of the access control configuration that you want to
+-- apply to the document.
+--
+-- 'accessControlList', 'document_accessControlList' - Information on principals (users and\/or groups) and which documents
+-- they should have access to. This is useful for user context filtering,
+-- where search results are filtered based on the user or their group
+-- access to documents.
+--
+-- 'attributes', 'document_attributes' - Custom attributes to apply to the document. Use the custom attributes to
+-- provide additional information for searching, to provide facets for
+-- refining searches, and to provide additional information in the query
+-- response.
+--
+-- For example, \'DataSourceId\' and \'DataSourceSyncJobId\' are custom
+-- attributes that provide information on the synchronization of documents
+-- running on a data source. Note, \'DataSourceSyncJobId\' could be an
+-- optional custom attribute as Amazon Kendra will use the ID of a running
+-- sync job.
+--
+-- 'blob', 'document_blob' - The contents of the document.
+--
+-- Documents passed to the @Blob@ parameter must be base64 encoded. Your
+-- code might not need to encode the document file bytes if you\'re using
+-- an Amazon Web Services SDK to call Amazon Kendra APIs. If you are
+-- calling the Amazon Kendra endpoint directly using REST, you must base64
+-- encode the contents before sending.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+--
+-- 'contentType', 'document_contentType' - The file type of the document in the @Blob@ field.
+--
+-- 'hierarchicalAccessControlList', 'document_hierarchicalAccessControlList' - The list of
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_Principal.html principal>
+-- lists that define the hierarchy for which documents users should have
+-- access to.
+--
+-- 's3Path', 'document_s3Path' - Undocumented member.
+--
+-- 'title', 'document_title' - The title of the document.
+--
+-- 'id', 'document_id' - A identifier of the document in the index.
+--
+-- Note, each document ID must be unique per index. You cannot create a
+-- data source to index your documents with their unique IDs and then use
+-- the @BatchPutDocument@ API to index the same documents, or vice versa.
+-- You can delete a data source and then use the @BatchPutDocument@ API to
+-- index the same documents, or vice versa.
+newDocument ::
+  -- | 'id'
+  Prelude.Text ->
+  Document
+newDocument pId_ =
+  Document'
+    { accessControlConfigurationId =
+        Prelude.Nothing,
+      accessControlList = Prelude.Nothing,
+      attributes = Prelude.Nothing,
+      blob = Prelude.Nothing,
+      contentType = Prelude.Nothing,
+      hierarchicalAccessControlList = Prelude.Nothing,
+      s3Path = Prelude.Nothing,
+      title = Prelude.Nothing,
+      id = pId_
+    }
+
+-- | The identifier of the access control configuration that you want to
+-- apply to the document.
+document_accessControlConfigurationId :: Lens.Lens' Document (Prelude.Maybe Prelude.Text)
+document_accessControlConfigurationId = Lens.lens (\Document' {accessControlConfigurationId} -> accessControlConfigurationId) (\s@Document' {} a -> s {accessControlConfigurationId = a} :: Document)
+
+-- | Information on principals (users and\/or groups) and which documents
+-- they should have access to. This is useful for user context filtering,
+-- where search results are filtered based on the user or their group
+-- access to documents.
+document_accessControlList :: Lens.Lens' Document (Prelude.Maybe [Principal])
+document_accessControlList = Lens.lens (\Document' {accessControlList} -> accessControlList) (\s@Document' {} a -> s {accessControlList = a} :: Document) Prelude.. Lens.mapping Lens.coerced
+
+-- | Custom attributes to apply to the document. Use the custom attributes to
+-- provide additional information for searching, to provide facets for
+-- refining searches, and to provide additional information in the query
+-- response.
+--
+-- For example, \'DataSourceId\' and \'DataSourceSyncJobId\' are custom
+-- attributes that provide information on the synchronization of documents
+-- running on a data source. Note, \'DataSourceSyncJobId\' could be an
+-- optional custom attribute as Amazon Kendra will use the ID of a running
+-- sync job.
+document_attributes :: Lens.Lens' Document (Prelude.Maybe [DocumentAttribute])
+document_attributes = Lens.lens (\Document' {attributes} -> attributes) (\s@Document' {} a -> s {attributes = a} :: Document) Prelude.. Lens.mapping Lens.coerced
+
+-- | The contents of the document.
+--
+-- Documents passed to the @Blob@ parameter must be base64 encoded. Your
+-- code might not need to encode the document file bytes if you\'re using
+-- an Amazon Web Services SDK to call Amazon Kendra APIs. If you are
+-- calling the Amazon Kendra endpoint directly using REST, you must base64
+-- encode the contents before sending.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+document_blob :: Lens.Lens' Document (Prelude.Maybe Prelude.ByteString)
+document_blob = Lens.lens (\Document' {blob} -> blob) (\s@Document' {} a -> s {blob = a} :: Document) Prelude.. Lens.mapping Data._Base64
+
+-- | The file type of the document in the @Blob@ field.
+document_contentType :: Lens.Lens' Document (Prelude.Maybe ContentType)
+document_contentType = Lens.lens (\Document' {contentType} -> contentType) (\s@Document' {} a -> s {contentType = a} :: Document)
+
+-- | The list of
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_Principal.html principal>
+-- lists that define the hierarchy for which documents users should have
+-- access to.
+document_hierarchicalAccessControlList :: Lens.Lens' Document (Prelude.Maybe (Prelude.NonEmpty HierarchicalPrincipal))
+document_hierarchicalAccessControlList = Lens.lens (\Document' {hierarchicalAccessControlList} -> hierarchicalAccessControlList) (\s@Document' {} a -> s {hierarchicalAccessControlList = a} :: Document) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+document_s3Path :: Lens.Lens' Document (Prelude.Maybe S3Path)
+document_s3Path = Lens.lens (\Document' {s3Path} -> s3Path) (\s@Document' {} a -> s {s3Path = a} :: Document)
+
+-- | The title of the document.
+document_title :: Lens.Lens' Document (Prelude.Maybe Prelude.Text)
+document_title = Lens.lens (\Document' {title} -> title) (\s@Document' {} a -> s {title = a} :: Document)
+
+-- | A identifier of the document in the index.
+--
+-- Note, each document ID must be unique per index. You cannot create a
+-- data source to index your documents with their unique IDs and then use
+-- the @BatchPutDocument@ API to index the same documents, or vice versa.
+-- You can delete a data source and then use the @BatchPutDocument@ API to
+-- index the same documents, or vice versa.
+document_id :: Lens.Lens' Document Prelude.Text
+document_id = Lens.lens (\Document' {id} -> id) (\s@Document' {} a -> s {id = a} :: Document)
+
+instance Prelude.Hashable Document where
+  hashWithSalt _salt Document' {..} =
+    _salt
+      `Prelude.hashWithSalt` accessControlConfigurationId
+      `Prelude.hashWithSalt` accessControlList
+      `Prelude.hashWithSalt` attributes
+      `Prelude.hashWithSalt` blob
+      `Prelude.hashWithSalt` contentType
+      `Prelude.hashWithSalt` hierarchicalAccessControlList
+      `Prelude.hashWithSalt` s3Path
+      `Prelude.hashWithSalt` title
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData Document where
+  rnf Document' {..} =
+    Prelude.rnf accessControlConfigurationId
+      `Prelude.seq` Prelude.rnf accessControlList
+      `Prelude.seq` Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf blob
+      `Prelude.seq` Prelude.rnf contentType
+      `Prelude.seq` Prelude.rnf hierarchicalAccessControlList
+      `Prelude.seq` Prelude.rnf s3Path
+      `Prelude.seq` Prelude.rnf title
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToJSON Document where
+  toJSON Document' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AccessControlConfigurationId" Data..=)
+              Prelude.<$> accessControlConfigurationId,
+            ("AccessControlList" Data..=)
+              Prelude.<$> accessControlList,
+            ("Attributes" Data..=) Prelude.<$> attributes,
+            ("Blob" Data..=) Prelude.<$> blob,
+            ("ContentType" Data..=) Prelude.<$> contentType,
+            ("HierarchicalAccessControlList" Data..=)
+              Prelude.<$> hierarchicalAccessControlList,
+            ("S3Path" Data..=) Prelude.<$> s3Path,
+            ("Title" Data..=) Prelude.<$> title,
+            Prelude.Just ("Id" Data..= id)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/DocumentAttribute.hs b/gen/Amazonka/Kendra/Types/DocumentAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/DocumentAttribute.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.Kendra.Types.DocumentAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.DocumentAttribute where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DocumentAttributeValue
+import qualified Amazonka.Prelude as Prelude
+
+-- | A document attribute or metadata field. To create custom document
+-- attributes, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/custom-attributes.html Custom attributes>.
+--
+-- /See:/ 'newDocumentAttribute' smart constructor.
+data DocumentAttribute = DocumentAttribute'
+  { -- | The identifier for the attribute.
+    key :: Prelude.Text,
+    -- | The value of the attribute.
+    value :: DocumentAttributeValue
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DocumentAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'key', 'documentAttribute_key' - The identifier for the attribute.
+--
+-- 'value', 'documentAttribute_value' - The value of the attribute.
+newDocumentAttribute ::
+  -- | 'key'
+  Prelude.Text ->
+  -- | 'value'
+  DocumentAttributeValue ->
+  DocumentAttribute
+newDocumentAttribute pKey_ pValue_ =
+  DocumentAttribute' {key = pKey_, value = pValue_}
+
+-- | The identifier for the attribute.
+documentAttribute_key :: Lens.Lens' DocumentAttribute Prelude.Text
+documentAttribute_key = Lens.lens (\DocumentAttribute' {key} -> key) (\s@DocumentAttribute' {} a -> s {key = a} :: DocumentAttribute)
+
+-- | The value of the attribute.
+documentAttribute_value :: Lens.Lens' DocumentAttribute DocumentAttributeValue
+documentAttribute_value = Lens.lens (\DocumentAttribute' {value} -> value) (\s@DocumentAttribute' {} a -> s {value = a} :: DocumentAttribute)
+
+instance Data.FromJSON DocumentAttribute where
+  parseJSON =
+    Data.withObject
+      "DocumentAttribute"
+      ( \x ->
+          DocumentAttribute'
+            Prelude.<$> (x Data..: "Key")
+            Prelude.<*> (x Data..: "Value")
+      )
+
+instance Prelude.Hashable DocumentAttribute where
+  hashWithSalt _salt DocumentAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData DocumentAttribute where
+  rnf DocumentAttribute' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON DocumentAttribute where
+  toJSON DocumentAttribute' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Key" Data..= key),
+            Prelude.Just ("Value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/DocumentAttributeCondition.hs b/gen/Amazonka/Kendra/Types/DocumentAttributeCondition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/DocumentAttributeCondition.hs
@@ -0,0 +1,168 @@
+{-# 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.Kendra.Types.DocumentAttributeCondition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.DocumentAttributeCondition where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.ConditionOperator
+import Amazonka.Kendra.Types.DocumentAttributeValue
+import qualified Amazonka.Prelude as Prelude
+
+-- | The condition used for the target document attribute or metadata field
+-- when ingesting documents into Amazon Kendra. You use this with
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_DocumentAttributeTarget.html DocumentAttributeTarget to apply the condition>.
+--
+-- For example, you can create the \'Department\' target field and have it
+-- prefill department names associated with the documents based on
+-- information in the \'Source_URI\' field. Set the condition that if the
+-- \'Source_URI\' field contains \'financial\' in its URI value, then
+-- prefill the target field \'Department\' with the target value
+-- \'Finance\' for the document.
+--
+-- Amazon Kendra cannot create a target field if it has not already been
+-- created as an index field. After you create your index field, you can
+-- create a document metadata field using @DocumentAttributeTarget@. Amazon
+-- Kendra then will map your newly created metadata field to your index
+-- field.
+--
+-- /See:/ 'newDocumentAttributeCondition' smart constructor.
+data DocumentAttributeCondition = DocumentAttributeCondition'
+  { -- | The value used by the operator.
+    --
+    -- For example, you can specify the value \'financial\' for strings in the
+    -- \'Source_URI\' field that partially match or contain this value.
+    conditionOnValue :: Prelude.Maybe DocumentAttributeValue,
+    -- | The identifier of the document attribute used for the condition.
+    --
+    -- For example, \'Source_URI\' could be an identifier for the attribute or
+    -- metadata field that contains source URIs associated with the documents.
+    --
+    -- Amazon Kendra currently does not support @_document_body@ as an
+    -- attribute key used for the condition.
+    conditionDocumentAttributeKey :: Prelude.Text,
+    -- | The condition operator.
+    --
+    -- For example, you can use \'Contains\' to partially match a string.
+    operator :: ConditionOperator
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DocumentAttributeCondition' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'conditionOnValue', 'documentAttributeCondition_conditionOnValue' - The value used by the operator.
+--
+-- For example, you can specify the value \'financial\' for strings in the
+-- \'Source_URI\' field that partially match or contain this value.
+--
+-- 'conditionDocumentAttributeKey', 'documentAttributeCondition_conditionDocumentAttributeKey' - The identifier of the document attribute used for the condition.
+--
+-- For example, \'Source_URI\' could be an identifier for the attribute or
+-- metadata field that contains source URIs associated with the documents.
+--
+-- Amazon Kendra currently does not support @_document_body@ as an
+-- attribute key used for the condition.
+--
+-- 'operator', 'documentAttributeCondition_operator' - The condition operator.
+--
+-- For example, you can use \'Contains\' to partially match a string.
+newDocumentAttributeCondition ::
+  -- | 'conditionDocumentAttributeKey'
+  Prelude.Text ->
+  -- | 'operator'
+  ConditionOperator ->
+  DocumentAttributeCondition
+newDocumentAttributeCondition
+  pConditionDocumentAttributeKey_
+  pOperator_ =
+    DocumentAttributeCondition'
+      { conditionOnValue =
+          Prelude.Nothing,
+        conditionDocumentAttributeKey =
+          pConditionDocumentAttributeKey_,
+        operator = pOperator_
+      }
+
+-- | The value used by the operator.
+--
+-- For example, you can specify the value \'financial\' for strings in the
+-- \'Source_URI\' field that partially match or contain this value.
+documentAttributeCondition_conditionOnValue :: Lens.Lens' DocumentAttributeCondition (Prelude.Maybe DocumentAttributeValue)
+documentAttributeCondition_conditionOnValue = Lens.lens (\DocumentAttributeCondition' {conditionOnValue} -> conditionOnValue) (\s@DocumentAttributeCondition' {} a -> s {conditionOnValue = a} :: DocumentAttributeCondition)
+
+-- | The identifier of the document attribute used for the condition.
+--
+-- For example, \'Source_URI\' could be an identifier for the attribute or
+-- metadata field that contains source URIs associated with the documents.
+--
+-- Amazon Kendra currently does not support @_document_body@ as an
+-- attribute key used for the condition.
+documentAttributeCondition_conditionDocumentAttributeKey :: Lens.Lens' DocumentAttributeCondition Prelude.Text
+documentAttributeCondition_conditionDocumentAttributeKey = Lens.lens (\DocumentAttributeCondition' {conditionDocumentAttributeKey} -> conditionDocumentAttributeKey) (\s@DocumentAttributeCondition' {} a -> s {conditionDocumentAttributeKey = a} :: DocumentAttributeCondition)
+
+-- | The condition operator.
+--
+-- For example, you can use \'Contains\' to partially match a string.
+documentAttributeCondition_operator :: Lens.Lens' DocumentAttributeCondition ConditionOperator
+documentAttributeCondition_operator = Lens.lens (\DocumentAttributeCondition' {operator} -> operator) (\s@DocumentAttributeCondition' {} a -> s {operator = a} :: DocumentAttributeCondition)
+
+instance Data.FromJSON DocumentAttributeCondition where
+  parseJSON =
+    Data.withObject
+      "DocumentAttributeCondition"
+      ( \x ->
+          DocumentAttributeCondition'
+            Prelude.<$> (x Data..:? "ConditionOnValue")
+            Prelude.<*> (x Data..: "ConditionDocumentAttributeKey")
+            Prelude.<*> (x Data..: "Operator")
+      )
+
+instance Prelude.Hashable DocumentAttributeCondition where
+  hashWithSalt _salt DocumentAttributeCondition' {..} =
+    _salt
+      `Prelude.hashWithSalt` conditionOnValue
+      `Prelude.hashWithSalt` conditionDocumentAttributeKey
+      `Prelude.hashWithSalt` operator
+
+instance Prelude.NFData DocumentAttributeCondition where
+  rnf DocumentAttributeCondition' {..} =
+    Prelude.rnf conditionOnValue
+      `Prelude.seq` Prelude.rnf conditionDocumentAttributeKey
+      `Prelude.seq` Prelude.rnf operator
+
+instance Data.ToJSON DocumentAttributeCondition where
+  toJSON DocumentAttributeCondition' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ConditionOnValue" Data..=)
+              Prelude.<$> conditionOnValue,
+            Prelude.Just
+              ( "ConditionDocumentAttributeKey"
+                  Data..= conditionDocumentAttributeKey
+              ),
+            Prelude.Just ("Operator" Data..= operator)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/DocumentAttributeTarget.hs b/gen/Amazonka/Kendra/Types/DocumentAttributeTarget.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/DocumentAttributeTarget.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.Kendra.Types.DocumentAttributeTarget
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.DocumentAttributeTarget where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DocumentAttributeValue
+import qualified Amazonka.Prelude as Prelude
+
+-- | The target document attribute or metadata field you want to alter when
+-- ingesting documents into Amazon Kendra.
+--
+-- For example, you can delete customer identification numbers associated
+-- with the documents, stored in the document metadata field called
+-- \'Customer_ID\'. You set the target key as \'Customer_ID\' and the
+-- deletion flag to @TRUE@. This removes all customer ID values in the
+-- field \'Customer_ID\'. This would scrub personally identifiable
+-- information from each document\'s metadata.
+--
+-- Amazon Kendra cannot create a target field if it has not already been
+-- created as an index field. After you create your index field, you can
+-- create a document metadata field using @DocumentAttributeTarget@. Amazon
+-- Kendra then will map your newly created metadata field to your index
+-- field.
+--
+-- You can also use this with
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_DocumentAttributeCondition.html DocumentAttributeCondition>.
+--
+-- /See:/ 'newDocumentAttributeTarget' smart constructor.
+data DocumentAttributeTarget = DocumentAttributeTarget'
+  { -- | The identifier of the target document attribute or metadata field.
+    --
+    -- For example, \'Department\' could be an identifier for the target
+    -- attribute or metadata field that includes the department names
+    -- associated with the documents.
+    targetDocumentAttributeKey :: Prelude.Maybe Prelude.Text,
+    -- | The target value you want to create for the target attribute.
+    --
+    -- For example, \'Finance\' could be the target value for the target
+    -- attribute key \'Department\'.
+    targetDocumentAttributeValue :: Prelude.Maybe DocumentAttributeValue,
+    -- | @TRUE@ to delete the existing target value for your specified target
+    -- attribute key. You cannot create a target value and set this to @TRUE@.
+    -- To create a target value (@TargetDocumentAttributeValue@), set this to
+    -- @FALSE@.
+    targetDocumentAttributeValueDeletion :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DocumentAttributeTarget' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'targetDocumentAttributeKey', 'documentAttributeTarget_targetDocumentAttributeKey' - The identifier of the target document attribute or metadata field.
+--
+-- For example, \'Department\' could be an identifier for the target
+-- attribute or metadata field that includes the department names
+-- associated with the documents.
+--
+-- 'targetDocumentAttributeValue', 'documentAttributeTarget_targetDocumentAttributeValue' - The target value you want to create for the target attribute.
+--
+-- For example, \'Finance\' could be the target value for the target
+-- attribute key \'Department\'.
+--
+-- 'targetDocumentAttributeValueDeletion', 'documentAttributeTarget_targetDocumentAttributeValueDeletion' - @TRUE@ to delete the existing target value for your specified target
+-- attribute key. You cannot create a target value and set this to @TRUE@.
+-- To create a target value (@TargetDocumentAttributeValue@), set this to
+-- @FALSE@.
+newDocumentAttributeTarget ::
+  DocumentAttributeTarget
+newDocumentAttributeTarget =
+  DocumentAttributeTarget'
+    { targetDocumentAttributeKey =
+        Prelude.Nothing,
+      targetDocumentAttributeValue = Prelude.Nothing,
+      targetDocumentAttributeValueDeletion =
+        Prelude.Nothing
+    }
+
+-- | The identifier of the target document attribute or metadata field.
+--
+-- For example, \'Department\' could be an identifier for the target
+-- attribute or metadata field that includes the department names
+-- associated with the documents.
+documentAttributeTarget_targetDocumentAttributeKey :: Lens.Lens' DocumentAttributeTarget (Prelude.Maybe Prelude.Text)
+documentAttributeTarget_targetDocumentAttributeKey = Lens.lens (\DocumentAttributeTarget' {targetDocumentAttributeKey} -> targetDocumentAttributeKey) (\s@DocumentAttributeTarget' {} a -> s {targetDocumentAttributeKey = a} :: DocumentAttributeTarget)
+
+-- | The target value you want to create for the target attribute.
+--
+-- For example, \'Finance\' could be the target value for the target
+-- attribute key \'Department\'.
+documentAttributeTarget_targetDocumentAttributeValue :: Lens.Lens' DocumentAttributeTarget (Prelude.Maybe DocumentAttributeValue)
+documentAttributeTarget_targetDocumentAttributeValue = Lens.lens (\DocumentAttributeTarget' {targetDocumentAttributeValue} -> targetDocumentAttributeValue) (\s@DocumentAttributeTarget' {} a -> s {targetDocumentAttributeValue = a} :: DocumentAttributeTarget)
+
+-- | @TRUE@ to delete the existing target value for your specified target
+-- attribute key. You cannot create a target value and set this to @TRUE@.
+-- To create a target value (@TargetDocumentAttributeValue@), set this to
+-- @FALSE@.
+documentAttributeTarget_targetDocumentAttributeValueDeletion :: Lens.Lens' DocumentAttributeTarget (Prelude.Maybe Prelude.Bool)
+documentAttributeTarget_targetDocumentAttributeValueDeletion = Lens.lens (\DocumentAttributeTarget' {targetDocumentAttributeValueDeletion} -> targetDocumentAttributeValueDeletion) (\s@DocumentAttributeTarget' {} a -> s {targetDocumentAttributeValueDeletion = a} :: DocumentAttributeTarget)
+
+instance Data.FromJSON DocumentAttributeTarget where
+  parseJSON =
+    Data.withObject
+      "DocumentAttributeTarget"
+      ( \x ->
+          DocumentAttributeTarget'
+            Prelude.<$> (x Data..:? "TargetDocumentAttributeKey")
+            Prelude.<*> (x Data..:? "TargetDocumentAttributeValue")
+            Prelude.<*> (x Data..:? "TargetDocumentAttributeValueDeletion")
+      )
+
+instance Prelude.Hashable DocumentAttributeTarget where
+  hashWithSalt _salt DocumentAttributeTarget' {..} =
+    _salt
+      `Prelude.hashWithSalt` targetDocumentAttributeKey
+      `Prelude.hashWithSalt` targetDocumentAttributeValue
+      `Prelude.hashWithSalt` targetDocumentAttributeValueDeletion
+
+instance Prelude.NFData DocumentAttributeTarget where
+  rnf DocumentAttributeTarget' {..} =
+    Prelude.rnf targetDocumentAttributeKey
+      `Prelude.seq` Prelude.rnf targetDocumentAttributeValue
+      `Prelude.seq` Prelude.rnf targetDocumentAttributeValueDeletion
+
+instance Data.ToJSON DocumentAttributeTarget where
+  toJSON DocumentAttributeTarget' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("TargetDocumentAttributeKey" Data..=)
+              Prelude.<$> targetDocumentAttributeKey,
+            ("TargetDocumentAttributeValue" Data..=)
+              Prelude.<$> targetDocumentAttributeValue,
+            ("TargetDocumentAttributeValueDeletion" Data..=)
+              Prelude.<$> targetDocumentAttributeValueDeletion
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/DocumentAttributeValue.hs b/gen/Amazonka/Kendra/Types/DocumentAttributeValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/DocumentAttributeValue.hs
@@ -0,0 +1,143 @@
+{-# 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.Kendra.Types.DocumentAttributeValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.DocumentAttributeValue 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 of a document attribute. You can only provide one value for a
+-- document attribute.
+--
+-- /See:/ 'newDocumentAttributeValue' smart constructor.
+data DocumentAttributeValue = DocumentAttributeValue'
+  { -- | A date expressed as an ISO 8601 string.
+    --
+    -- It is important for the time zone to be included in the ISO 8601
+    -- date-time format. For example, 2012-03-25T12:30:10+01:00 is the ISO 8601
+    -- date-time format for March 25th 2012 at 12:30PM (plus 10 seconds) in
+    -- Central European Time.
+    dateValue :: Prelude.Maybe Data.POSIX,
+    -- | A long integer value.
+    longValue :: Prelude.Maybe Prelude.Integer,
+    -- | A list of strings. The default maximum length or number of strings is
+    -- 10.
+    stringListValue :: Prelude.Maybe [Prelude.Text],
+    -- | A string, such as \"department\".
+    stringValue :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DocumentAttributeValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dateValue', 'documentAttributeValue_dateValue' - A date expressed as an ISO 8601 string.
+--
+-- It is important for the time zone to be included in the ISO 8601
+-- date-time format. For example, 2012-03-25T12:30:10+01:00 is the ISO 8601
+-- date-time format for March 25th 2012 at 12:30PM (plus 10 seconds) in
+-- Central European Time.
+--
+-- 'longValue', 'documentAttributeValue_longValue' - A long integer value.
+--
+-- 'stringListValue', 'documentAttributeValue_stringListValue' - A list of strings. The default maximum length or number of strings is
+-- 10.
+--
+-- 'stringValue', 'documentAttributeValue_stringValue' - A string, such as \"department\".
+newDocumentAttributeValue ::
+  DocumentAttributeValue
+newDocumentAttributeValue =
+  DocumentAttributeValue'
+    { dateValue =
+        Prelude.Nothing,
+      longValue = Prelude.Nothing,
+      stringListValue = Prelude.Nothing,
+      stringValue = Prelude.Nothing
+    }
+
+-- | A date expressed as an ISO 8601 string.
+--
+-- It is important for the time zone to be included in the ISO 8601
+-- date-time format. For example, 2012-03-25T12:30:10+01:00 is the ISO 8601
+-- date-time format for March 25th 2012 at 12:30PM (plus 10 seconds) in
+-- Central European Time.
+documentAttributeValue_dateValue :: Lens.Lens' DocumentAttributeValue (Prelude.Maybe Prelude.UTCTime)
+documentAttributeValue_dateValue = Lens.lens (\DocumentAttributeValue' {dateValue} -> dateValue) (\s@DocumentAttributeValue' {} a -> s {dateValue = a} :: DocumentAttributeValue) Prelude.. Lens.mapping Data._Time
+
+-- | A long integer value.
+documentAttributeValue_longValue :: Lens.Lens' DocumentAttributeValue (Prelude.Maybe Prelude.Integer)
+documentAttributeValue_longValue = Lens.lens (\DocumentAttributeValue' {longValue} -> longValue) (\s@DocumentAttributeValue' {} a -> s {longValue = a} :: DocumentAttributeValue)
+
+-- | A list of strings. The default maximum length or number of strings is
+-- 10.
+documentAttributeValue_stringListValue :: Lens.Lens' DocumentAttributeValue (Prelude.Maybe [Prelude.Text])
+documentAttributeValue_stringListValue = Lens.lens (\DocumentAttributeValue' {stringListValue} -> stringListValue) (\s@DocumentAttributeValue' {} a -> s {stringListValue = a} :: DocumentAttributeValue) Prelude.. Lens.mapping Lens.coerced
+
+-- | A string, such as \"department\".
+documentAttributeValue_stringValue :: Lens.Lens' DocumentAttributeValue (Prelude.Maybe Prelude.Text)
+documentAttributeValue_stringValue = Lens.lens (\DocumentAttributeValue' {stringValue} -> stringValue) (\s@DocumentAttributeValue' {} a -> s {stringValue = a} :: DocumentAttributeValue)
+
+instance Data.FromJSON DocumentAttributeValue where
+  parseJSON =
+    Data.withObject
+      "DocumentAttributeValue"
+      ( \x ->
+          DocumentAttributeValue'
+            Prelude.<$> (x Data..:? "DateValue")
+            Prelude.<*> (x Data..:? "LongValue")
+            Prelude.<*> ( x
+                            Data..:? "StringListValue"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "StringValue")
+      )
+
+instance Prelude.Hashable DocumentAttributeValue where
+  hashWithSalt _salt DocumentAttributeValue' {..} =
+    _salt
+      `Prelude.hashWithSalt` dateValue
+      `Prelude.hashWithSalt` longValue
+      `Prelude.hashWithSalt` stringListValue
+      `Prelude.hashWithSalt` stringValue
+
+instance Prelude.NFData DocumentAttributeValue where
+  rnf DocumentAttributeValue' {..} =
+    Prelude.rnf dateValue
+      `Prelude.seq` Prelude.rnf longValue
+      `Prelude.seq` Prelude.rnf stringListValue
+      `Prelude.seq` Prelude.rnf stringValue
+
+instance Data.ToJSON DocumentAttributeValue where
+  toJSON DocumentAttributeValue' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DateValue" Data..=) Prelude.<$> dateValue,
+            ("LongValue" Data..=) Prelude.<$> longValue,
+            ("StringListValue" Data..=)
+              Prelude.<$> stringListValue,
+            ("StringValue" Data..=) Prelude.<$> stringValue
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/DocumentAttributeValueCountPair.hs b/gen/Amazonka/Kendra/Types/DocumentAttributeValueCountPair.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/DocumentAttributeValueCountPair.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.Kendra.Types.DocumentAttributeValueCountPair
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.DocumentAttributeValueCountPair where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DocumentAttributeValue
+import {-# SOURCE #-} Amazonka.Kendra.Types.FacetResult
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the count of documents that match a particular attribute when
+-- doing a faceted search.
+--
+-- /See:/ 'newDocumentAttributeValueCountPair' smart constructor.
+data DocumentAttributeValueCountPair = DocumentAttributeValueCountPair'
+  { -- | The number of documents in the response that have the attribute value
+    -- for the key.
+    count :: Prelude.Maybe Prelude.Int,
+    -- | The value of the attribute. For example, \"HR\".
+    documentAttributeValue :: Prelude.Maybe DocumentAttributeValue,
+    -- | Contains the results of a document attribute that is a nested facet. A
+    -- @FacetResult@ contains the counts for each facet nested within a facet.
+    --
+    -- For example, the document attribute or facet \"Department\" includes a
+    -- value called \"Engineering\". In addition, the document attribute or
+    -- facet \"SubDepartment\" includes the values \"Frontend\" and \"Backend\"
+    -- for documents assigned to \"Engineering\". You can display nested facets
+    -- in the search results so that documents can be searched not only by
+    -- department but also by a sub department within a department. The counts
+    -- for documents that belong to \"Frontend\" and \"Backend\" within
+    -- \"Engineering\" are returned for a query.
+    facetResults :: Prelude.Maybe [FacetResult]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DocumentAttributeValueCountPair' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'count', 'documentAttributeValueCountPair_count' - The number of documents in the response that have the attribute value
+-- for the key.
+--
+-- 'documentAttributeValue', 'documentAttributeValueCountPair_documentAttributeValue' - The value of the attribute. For example, \"HR\".
+--
+-- 'facetResults', 'documentAttributeValueCountPair_facetResults' - Contains the results of a document attribute that is a nested facet. A
+-- @FacetResult@ contains the counts for each facet nested within a facet.
+--
+-- For example, the document attribute or facet \"Department\" includes a
+-- value called \"Engineering\". In addition, the document attribute or
+-- facet \"SubDepartment\" includes the values \"Frontend\" and \"Backend\"
+-- for documents assigned to \"Engineering\". You can display nested facets
+-- in the search results so that documents can be searched not only by
+-- department but also by a sub department within a department. The counts
+-- for documents that belong to \"Frontend\" and \"Backend\" within
+-- \"Engineering\" are returned for a query.
+newDocumentAttributeValueCountPair ::
+  DocumentAttributeValueCountPair
+newDocumentAttributeValueCountPair =
+  DocumentAttributeValueCountPair'
+    { count =
+        Prelude.Nothing,
+      documentAttributeValue = Prelude.Nothing,
+      facetResults = Prelude.Nothing
+    }
+
+-- | The number of documents in the response that have the attribute value
+-- for the key.
+documentAttributeValueCountPair_count :: Lens.Lens' DocumentAttributeValueCountPair (Prelude.Maybe Prelude.Int)
+documentAttributeValueCountPair_count = Lens.lens (\DocumentAttributeValueCountPair' {count} -> count) (\s@DocumentAttributeValueCountPair' {} a -> s {count = a} :: DocumentAttributeValueCountPair)
+
+-- | The value of the attribute. For example, \"HR\".
+documentAttributeValueCountPair_documentAttributeValue :: Lens.Lens' DocumentAttributeValueCountPair (Prelude.Maybe DocumentAttributeValue)
+documentAttributeValueCountPair_documentAttributeValue = Lens.lens (\DocumentAttributeValueCountPair' {documentAttributeValue} -> documentAttributeValue) (\s@DocumentAttributeValueCountPair' {} a -> s {documentAttributeValue = a} :: DocumentAttributeValueCountPair)
+
+-- | Contains the results of a document attribute that is a nested facet. A
+-- @FacetResult@ contains the counts for each facet nested within a facet.
+--
+-- For example, the document attribute or facet \"Department\" includes a
+-- value called \"Engineering\". In addition, the document attribute or
+-- facet \"SubDepartment\" includes the values \"Frontend\" and \"Backend\"
+-- for documents assigned to \"Engineering\". You can display nested facets
+-- in the search results so that documents can be searched not only by
+-- department but also by a sub department within a department. The counts
+-- for documents that belong to \"Frontend\" and \"Backend\" within
+-- \"Engineering\" are returned for a query.
+documentAttributeValueCountPair_facetResults :: Lens.Lens' DocumentAttributeValueCountPair (Prelude.Maybe [FacetResult])
+documentAttributeValueCountPair_facetResults = Lens.lens (\DocumentAttributeValueCountPair' {facetResults} -> facetResults) (\s@DocumentAttributeValueCountPair' {} a -> s {facetResults = a} :: DocumentAttributeValueCountPair) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Data.FromJSON
+    DocumentAttributeValueCountPair
+  where
+  parseJSON =
+    Data.withObject
+      "DocumentAttributeValueCountPair"
+      ( \x ->
+          DocumentAttributeValueCountPair'
+            Prelude.<$> (x Data..:? "Count")
+            Prelude.<*> (x Data..:? "DocumentAttributeValue")
+            Prelude.<*> (x Data..:? "FacetResults" Data..!= Prelude.mempty)
+      )
+
+instance
+  Prelude.Hashable
+    DocumentAttributeValueCountPair
+  where
+  hashWithSalt
+    _salt
+    DocumentAttributeValueCountPair' {..} =
+      _salt
+        `Prelude.hashWithSalt` count
+        `Prelude.hashWithSalt` documentAttributeValue
+        `Prelude.hashWithSalt` facetResults
+
+instance
+  Prelude.NFData
+    DocumentAttributeValueCountPair
+  where
+  rnf DocumentAttributeValueCountPair' {..} =
+    Prelude.rnf count
+      `Prelude.seq` Prelude.rnf documentAttributeValue
+      `Prelude.seq` Prelude.rnf facetResults
diff --git a/gen/Amazonka/Kendra/Types/DocumentAttributeValueCountPair.hs-boot b/gen/Amazonka/Kendra/Types/DocumentAttributeValueCountPair.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/DocumentAttributeValueCountPair.hs-boot
@@ -0,0 +1,31 @@
+{-# OPTIONS_GHC -Wno-missing-methods #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.Types.DocumentAttributeValueCountPair
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.DocumentAttributeValueCountPair where
+
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+data DocumentAttributeValueCountPair
+
+instance Prelude.Eq DocumentAttributeValueCountPair
+
+instance Prelude.Read DocumentAttributeValueCountPair
+
+instance Prelude.Show DocumentAttributeValueCountPair
+
+instance Prelude.Generic DocumentAttributeValueCountPair
+
+instance Data.FromJSON DocumentAttributeValueCountPair
+
+instance Prelude.NFData DocumentAttributeValueCountPair
+
+instance Prelude.Hashable DocumentAttributeValueCountPair
diff --git a/gen/Amazonka/Kendra/Types/DocumentAttributeValueType.hs b/gen/Amazonka/Kendra/Types/DocumentAttributeValueType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/DocumentAttributeValueType.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.Kendra.Types.DocumentAttributeValueType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.DocumentAttributeValueType
+  ( DocumentAttributeValueType
+      ( ..,
+        DocumentAttributeValueType_DATE_VALUE,
+        DocumentAttributeValueType_LONG_VALUE,
+        DocumentAttributeValueType_STRING_LIST_VALUE,
+        DocumentAttributeValueType_STRING_VALUE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DocumentAttributeValueType = DocumentAttributeValueType'
+  { fromDocumentAttributeValueType ::
+      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 DocumentAttributeValueType_DATE_VALUE :: DocumentAttributeValueType
+pattern DocumentAttributeValueType_DATE_VALUE = DocumentAttributeValueType' "DATE_VALUE"
+
+pattern DocumentAttributeValueType_LONG_VALUE :: DocumentAttributeValueType
+pattern DocumentAttributeValueType_LONG_VALUE = DocumentAttributeValueType' "LONG_VALUE"
+
+pattern DocumentAttributeValueType_STRING_LIST_VALUE :: DocumentAttributeValueType
+pattern DocumentAttributeValueType_STRING_LIST_VALUE = DocumentAttributeValueType' "STRING_LIST_VALUE"
+
+pattern DocumentAttributeValueType_STRING_VALUE :: DocumentAttributeValueType
+pattern DocumentAttributeValueType_STRING_VALUE = DocumentAttributeValueType' "STRING_VALUE"
+
+{-# COMPLETE
+  DocumentAttributeValueType_DATE_VALUE,
+  DocumentAttributeValueType_LONG_VALUE,
+  DocumentAttributeValueType_STRING_LIST_VALUE,
+  DocumentAttributeValueType_STRING_VALUE,
+  DocumentAttributeValueType'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/DocumentInfo.hs b/gen/Amazonka/Kendra/Types/DocumentInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/DocumentInfo.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.Kendra.Types.DocumentInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.DocumentInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DocumentAttribute
+import qualified Amazonka.Prelude as Prelude
+
+-- | Identifies a document for which to retrieve status information
+--
+-- /See:/ 'newDocumentInfo' smart constructor.
+data DocumentInfo = DocumentInfo'
+  { -- | Attributes that identify a specific version of a document to check.
+    --
+    -- The only valid attributes are:
+    --
+    -- -   version
+    --
+    -- -   datasourceId
+    --
+    -- -   jobExecutionId
+    --
+    -- The attributes follow these rules:
+    --
+    -- -   @dataSourceId@ and @jobExecutionId@ must be used together.
+    --
+    -- -   @version@ is ignored if @dataSourceId@ and @jobExecutionId@ are not
+    --     provided.
+    --
+    -- -   If @dataSourceId@ and @jobExecutionId@ are provided, but @version@
+    --     is not, the version defaults to \"0\".
+    attributes :: Prelude.Maybe [DocumentAttribute],
+    -- | The identifier of the document.
+    documentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DocumentInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributes', 'documentInfo_attributes' - Attributes that identify a specific version of a document to check.
+--
+-- The only valid attributes are:
+--
+-- -   version
+--
+-- -   datasourceId
+--
+-- -   jobExecutionId
+--
+-- The attributes follow these rules:
+--
+-- -   @dataSourceId@ and @jobExecutionId@ must be used together.
+--
+-- -   @version@ is ignored if @dataSourceId@ and @jobExecutionId@ are not
+--     provided.
+--
+-- -   If @dataSourceId@ and @jobExecutionId@ are provided, but @version@
+--     is not, the version defaults to \"0\".
+--
+-- 'documentId', 'documentInfo_documentId' - The identifier of the document.
+newDocumentInfo ::
+  -- | 'documentId'
+  Prelude.Text ->
+  DocumentInfo
+newDocumentInfo pDocumentId_ =
+  DocumentInfo'
+    { attributes = Prelude.Nothing,
+      documentId = pDocumentId_
+    }
+
+-- | Attributes that identify a specific version of a document to check.
+--
+-- The only valid attributes are:
+--
+-- -   version
+--
+-- -   datasourceId
+--
+-- -   jobExecutionId
+--
+-- The attributes follow these rules:
+--
+-- -   @dataSourceId@ and @jobExecutionId@ must be used together.
+--
+-- -   @version@ is ignored if @dataSourceId@ and @jobExecutionId@ are not
+--     provided.
+--
+-- -   If @dataSourceId@ and @jobExecutionId@ are provided, but @version@
+--     is not, the version defaults to \"0\".
+documentInfo_attributes :: Lens.Lens' DocumentInfo (Prelude.Maybe [DocumentAttribute])
+documentInfo_attributes = Lens.lens (\DocumentInfo' {attributes} -> attributes) (\s@DocumentInfo' {} a -> s {attributes = a} :: DocumentInfo) Prelude.. Lens.mapping Lens.coerced
+
+-- | The identifier of the document.
+documentInfo_documentId :: Lens.Lens' DocumentInfo Prelude.Text
+documentInfo_documentId = Lens.lens (\DocumentInfo' {documentId} -> documentId) (\s@DocumentInfo' {} a -> s {documentId = a} :: DocumentInfo)
+
+instance Prelude.Hashable DocumentInfo where
+  hashWithSalt _salt DocumentInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributes
+      `Prelude.hashWithSalt` documentId
+
+instance Prelude.NFData DocumentInfo where
+  rnf DocumentInfo' {..} =
+    Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf documentId
+
+instance Data.ToJSON DocumentInfo where
+  toJSON DocumentInfo' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Attributes" Data..=) Prelude.<$> attributes,
+            Prelude.Just ("DocumentId" Data..= documentId)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/DocumentMetadataConfiguration.hs b/gen/Amazonka/Kendra/Types/DocumentMetadataConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/DocumentMetadataConfiguration.hs
@@ -0,0 +1,134 @@
+{-# 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.Kendra.Types.DocumentMetadataConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.DocumentMetadataConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DocumentAttributeValueType
+import Amazonka.Kendra.Types.Relevance
+import Amazonka.Kendra.Types.Search
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the properties, such as relevance tuning and searchability, of
+-- an index field.
+--
+-- /See:/ 'newDocumentMetadataConfiguration' smart constructor.
+data DocumentMetadataConfiguration = DocumentMetadataConfiguration'
+  { -- | Provides tuning parameters to determine how the field affects the search
+    -- results.
+    relevance :: Prelude.Maybe Relevance,
+    -- | Provides information about how the field is used during a search.
+    search :: Prelude.Maybe Search,
+    -- | The name of the index field.
+    name :: Prelude.Text,
+    -- | The data type of the index field.
+    type' :: DocumentAttributeValueType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DocumentMetadataConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'relevance', 'documentMetadataConfiguration_relevance' - Provides tuning parameters to determine how the field affects the search
+-- results.
+--
+-- 'search', 'documentMetadataConfiguration_search' - Provides information about how the field is used during a search.
+--
+-- 'name', 'documentMetadataConfiguration_name' - The name of the index field.
+--
+-- 'type'', 'documentMetadataConfiguration_type' - The data type of the index field.
+newDocumentMetadataConfiguration ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'type''
+  DocumentAttributeValueType ->
+  DocumentMetadataConfiguration
+newDocumentMetadataConfiguration pName_ pType_ =
+  DocumentMetadataConfiguration'
+    { relevance =
+        Prelude.Nothing,
+      search = Prelude.Nothing,
+      name = pName_,
+      type' = pType_
+    }
+
+-- | Provides tuning parameters to determine how the field affects the search
+-- results.
+documentMetadataConfiguration_relevance :: Lens.Lens' DocumentMetadataConfiguration (Prelude.Maybe Relevance)
+documentMetadataConfiguration_relevance = Lens.lens (\DocumentMetadataConfiguration' {relevance} -> relevance) (\s@DocumentMetadataConfiguration' {} a -> s {relevance = a} :: DocumentMetadataConfiguration)
+
+-- | Provides information about how the field is used during a search.
+documentMetadataConfiguration_search :: Lens.Lens' DocumentMetadataConfiguration (Prelude.Maybe Search)
+documentMetadataConfiguration_search = Lens.lens (\DocumentMetadataConfiguration' {search} -> search) (\s@DocumentMetadataConfiguration' {} a -> s {search = a} :: DocumentMetadataConfiguration)
+
+-- | The name of the index field.
+documentMetadataConfiguration_name :: Lens.Lens' DocumentMetadataConfiguration Prelude.Text
+documentMetadataConfiguration_name = Lens.lens (\DocumentMetadataConfiguration' {name} -> name) (\s@DocumentMetadataConfiguration' {} a -> s {name = a} :: DocumentMetadataConfiguration)
+
+-- | The data type of the index field.
+documentMetadataConfiguration_type :: Lens.Lens' DocumentMetadataConfiguration DocumentAttributeValueType
+documentMetadataConfiguration_type = Lens.lens (\DocumentMetadataConfiguration' {type'} -> type') (\s@DocumentMetadataConfiguration' {} a -> s {type' = a} :: DocumentMetadataConfiguration)
+
+instance Data.FromJSON DocumentMetadataConfiguration where
+  parseJSON =
+    Data.withObject
+      "DocumentMetadataConfiguration"
+      ( \x ->
+          DocumentMetadataConfiguration'
+            Prelude.<$> (x Data..:? "Relevance")
+            Prelude.<*> (x Data..:? "Search")
+            Prelude.<*> (x Data..: "Name")
+            Prelude.<*> (x Data..: "Type")
+      )
+
+instance
+  Prelude.Hashable
+    DocumentMetadataConfiguration
+  where
+  hashWithSalt _salt DocumentMetadataConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` relevance
+      `Prelude.hashWithSalt` search
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData DocumentMetadataConfiguration where
+  rnf DocumentMetadataConfiguration' {..} =
+    Prelude.rnf relevance
+      `Prelude.seq` Prelude.rnf search
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToJSON DocumentMetadataConfiguration where
+  toJSON DocumentMetadataConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Relevance" Data..=) Prelude.<$> relevance,
+            ("Search" Data..=) Prelude.<$> search,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("Type" Data..= type')
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/DocumentRelevanceConfiguration.hs b/gen/Amazonka/Kendra/Types/DocumentRelevanceConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/DocumentRelevanceConfiguration.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.Kendra.Types.DocumentRelevanceConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.DocumentRelevanceConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.Relevance
+import qualified Amazonka.Prelude as Prelude
+
+-- | Overrides the document relevance properties of a custom index field.
+--
+-- /See:/ 'newDocumentRelevanceConfiguration' smart constructor.
+data DocumentRelevanceConfiguration = DocumentRelevanceConfiguration'
+  { -- | The name of the index field.
+    name :: Prelude.Text,
+    -- | Provides information for tuning the relevance of a field in a search.
+    -- When a query includes terms that match the field, the results are given
+    -- a boost in the response based on these tuning parameters.
+    relevance :: Relevance
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DocumentRelevanceConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'documentRelevanceConfiguration_name' - The name of the index field.
+--
+-- 'relevance', 'documentRelevanceConfiguration_relevance' - Provides information for tuning the relevance of a field in a search.
+-- When a query includes terms that match the field, the results are given
+-- a boost in the response based on these tuning parameters.
+newDocumentRelevanceConfiguration ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'relevance'
+  Relevance ->
+  DocumentRelevanceConfiguration
+newDocumentRelevanceConfiguration pName_ pRelevance_ =
+  DocumentRelevanceConfiguration'
+    { name = pName_,
+      relevance = pRelevance_
+    }
+
+-- | The name of the index field.
+documentRelevanceConfiguration_name :: Lens.Lens' DocumentRelevanceConfiguration Prelude.Text
+documentRelevanceConfiguration_name = Lens.lens (\DocumentRelevanceConfiguration' {name} -> name) (\s@DocumentRelevanceConfiguration' {} a -> s {name = a} :: DocumentRelevanceConfiguration)
+
+-- | Provides information for tuning the relevance of a field in a search.
+-- When a query includes terms that match the field, the results are given
+-- a boost in the response based on these tuning parameters.
+documentRelevanceConfiguration_relevance :: Lens.Lens' DocumentRelevanceConfiguration Relevance
+documentRelevanceConfiguration_relevance = Lens.lens (\DocumentRelevanceConfiguration' {relevance} -> relevance) (\s@DocumentRelevanceConfiguration' {} a -> s {relevance = a} :: DocumentRelevanceConfiguration)
+
+instance
+  Prelude.Hashable
+    DocumentRelevanceConfiguration
+  where
+  hashWithSalt
+    _salt
+    DocumentRelevanceConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` name
+        `Prelude.hashWithSalt` relevance
+
+instance
+  Prelude.NFData
+    DocumentRelevanceConfiguration
+  where
+  rnf DocumentRelevanceConfiguration' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf relevance
+
+instance Data.ToJSON DocumentRelevanceConfiguration where
+  toJSON DocumentRelevanceConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("Relevance" Data..= relevance)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/DocumentStatus.hs b/gen/Amazonka/Kendra/Types/DocumentStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/DocumentStatus.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.Types.DocumentStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.DocumentStatus
+  ( DocumentStatus
+      ( ..,
+        DocumentStatus_FAILED,
+        DocumentStatus_INDEXED,
+        DocumentStatus_NOT_FOUND,
+        DocumentStatus_PROCESSING,
+        DocumentStatus_UPDATED,
+        DocumentStatus_UPDATE_FAILED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DocumentStatus = DocumentStatus'
+  { fromDocumentStatus ::
+      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 DocumentStatus_FAILED :: DocumentStatus
+pattern DocumentStatus_FAILED = DocumentStatus' "FAILED"
+
+pattern DocumentStatus_INDEXED :: DocumentStatus
+pattern DocumentStatus_INDEXED = DocumentStatus' "INDEXED"
+
+pattern DocumentStatus_NOT_FOUND :: DocumentStatus
+pattern DocumentStatus_NOT_FOUND = DocumentStatus' "NOT_FOUND"
+
+pattern DocumentStatus_PROCESSING :: DocumentStatus
+pattern DocumentStatus_PROCESSING = DocumentStatus' "PROCESSING"
+
+pattern DocumentStatus_UPDATED :: DocumentStatus
+pattern DocumentStatus_UPDATED = DocumentStatus' "UPDATED"
+
+pattern DocumentStatus_UPDATE_FAILED :: DocumentStatus
+pattern DocumentStatus_UPDATE_FAILED = DocumentStatus' "UPDATE_FAILED"
+
+{-# COMPLETE
+  DocumentStatus_FAILED,
+  DocumentStatus_INDEXED,
+  DocumentStatus_NOT_FOUND,
+  DocumentStatus_PROCESSING,
+  DocumentStatus_UPDATED,
+  DocumentStatus_UPDATE_FAILED,
+  DocumentStatus'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/DocumentsMetadataConfiguration.hs b/gen/Amazonka/Kendra/Types/DocumentsMetadataConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/DocumentsMetadataConfiguration.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.Kendra.Types.DocumentsMetadataConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.DocumentsMetadataConfiguration 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
+
+-- | Document metadata files that contain information such as the document
+-- access control information, source URI, document author, and custom
+-- attributes. Each metadata file contains metadata about a single
+-- document.
+--
+-- /See:/ 'newDocumentsMetadataConfiguration' smart constructor.
+data DocumentsMetadataConfiguration = DocumentsMetadataConfiguration'
+  { -- | A prefix used to filter metadata configuration files in the Amazon Web
+    -- Services S3 bucket. The S3 bucket might contain multiple metadata files.
+    -- Use @S3Prefix@ to include only the desired metadata files.
+    s3Prefix :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DocumentsMetadataConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3Prefix', 'documentsMetadataConfiguration_s3Prefix' - A prefix used to filter metadata configuration files in the Amazon Web
+-- Services S3 bucket. The S3 bucket might contain multiple metadata files.
+-- Use @S3Prefix@ to include only the desired metadata files.
+newDocumentsMetadataConfiguration ::
+  DocumentsMetadataConfiguration
+newDocumentsMetadataConfiguration =
+  DocumentsMetadataConfiguration'
+    { s3Prefix =
+        Prelude.Nothing
+    }
+
+-- | A prefix used to filter metadata configuration files in the Amazon Web
+-- Services S3 bucket. The S3 bucket might contain multiple metadata files.
+-- Use @S3Prefix@ to include only the desired metadata files.
+documentsMetadataConfiguration_s3Prefix :: Lens.Lens' DocumentsMetadataConfiguration (Prelude.Maybe Prelude.Text)
+documentsMetadataConfiguration_s3Prefix = Lens.lens (\DocumentsMetadataConfiguration' {s3Prefix} -> s3Prefix) (\s@DocumentsMetadataConfiguration' {} a -> s {s3Prefix = a} :: DocumentsMetadataConfiguration)
+
+instance Data.FromJSON DocumentsMetadataConfiguration where
+  parseJSON =
+    Data.withObject
+      "DocumentsMetadataConfiguration"
+      ( \x ->
+          DocumentsMetadataConfiguration'
+            Prelude.<$> (x Data..:? "S3Prefix")
+      )
+
+instance
+  Prelude.Hashable
+    DocumentsMetadataConfiguration
+  where
+  hashWithSalt
+    _salt
+    DocumentsMetadataConfiguration' {..} =
+      _salt `Prelude.hashWithSalt` s3Prefix
+
+instance
+  Prelude.NFData
+    DocumentsMetadataConfiguration
+  where
+  rnf DocumentsMetadataConfiguration' {..} =
+    Prelude.rnf s3Prefix
+
+instance Data.ToJSON DocumentsMetadataConfiguration where
+  toJSON DocumentsMetadataConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("S3Prefix" Data..=) Prelude.<$> s3Prefix]
+      )
diff --git a/gen/Amazonka/Kendra/Types/EndpointType.hs b/gen/Amazonka/Kendra/Types/EndpointType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/EndpointType.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.Kendra.Types.EndpointType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.EndpointType
+  ( EndpointType
+      ( ..,
+        EndpointType_HOME
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EndpointType = EndpointType'
+  { fromEndpointType ::
+      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 EndpointType_HOME :: EndpointType
+pattern EndpointType_HOME = EndpointType' "HOME"
+
+{-# COMPLETE
+  EndpointType_HOME,
+  EndpointType'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/EntityConfiguration.hs b/gen/Amazonka/Kendra/Types/EntityConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/EntityConfiguration.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.Kendra.Types.EntityConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.EntityConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.EntityType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information for users or groups in your IAM
+-- Identity Center identity source to grant access your Amazon Kendra
+-- experience.
+--
+-- /See:/ 'newEntityConfiguration' smart constructor.
+data EntityConfiguration = EntityConfiguration'
+  { -- | The identifier of a user or group in your IAM Identity Center identity
+    -- source. For example, a user ID could be an email.
+    entityId :: Prelude.Text,
+    -- | Specifies whether you are configuring a @User@ or a @Group@.
+    entityType :: EntityType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EntityConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'entityId', 'entityConfiguration_entityId' - The identifier of a user or group in your IAM Identity Center identity
+-- source. For example, a user ID could be an email.
+--
+-- 'entityType', 'entityConfiguration_entityType' - Specifies whether you are configuring a @User@ or a @Group@.
+newEntityConfiguration ::
+  -- | 'entityId'
+  Prelude.Text ->
+  -- | 'entityType'
+  EntityType ->
+  EntityConfiguration
+newEntityConfiguration pEntityId_ pEntityType_ =
+  EntityConfiguration'
+    { entityId = pEntityId_,
+      entityType = pEntityType_
+    }
+
+-- | The identifier of a user or group in your IAM Identity Center identity
+-- source. For example, a user ID could be an email.
+entityConfiguration_entityId :: Lens.Lens' EntityConfiguration Prelude.Text
+entityConfiguration_entityId = Lens.lens (\EntityConfiguration' {entityId} -> entityId) (\s@EntityConfiguration' {} a -> s {entityId = a} :: EntityConfiguration)
+
+-- | Specifies whether you are configuring a @User@ or a @Group@.
+entityConfiguration_entityType :: Lens.Lens' EntityConfiguration EntityType
+entityConfiguration_entityType = Lens.lens (\EntityConfiguration' {entityType} -> entityType) (\s@EntityConfiguration' {} a -> s {entityType = a} :: EntityConfiguration)
+
+instance Prelude.Hashable EntityConfiguration where
+  hashWithSalt _salt EntityConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` entityId
+      `Prelude.hashWithSalt` entityType
+
+instance Prelude.NFData EntityConfiguration where
+  rnf EntityConfiguration' {..} =
+    Prelude.rnf entityId
+      `Prelude.seq` Prelude.rnf entityType
+
+instance Data.ToJSON EntityConfiguration where
+  toJSON EntityConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("EntityId" Data..= entityId),
+            Prelude.Just ("EntityType" Data..= entityType)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/EntityDisplayData.hs b/gen/Amazonka/Kendra/Types/EntityDisplayData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/EntityDisplayData.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.Kendra.Types.EntityDisplayData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.EntityDisplayData 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
+
+-- | Information about the user entity.
+--
+-- /See:/ 'newEntityDisplayData' smart constructor.
+data EntityDisplayData = EntityDisplayData'
+  { -- | The first name of the user.
+    firstName :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The name of the group.
+    groupName :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The user name of the user.
+    identifiedUserName :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The last name of the user.
+    lastName :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The name of the user.
+    userName :: Prelude.Maybe (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EntityDisplayData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'firstName', 'entityDisplayData_firstName' - The first name of the user.
+--
+-- 'groupName', 'entityDisplayData_groupName' - The name of the group.
+--
+-- 'identifiedUserName', 'entityDisplayData_identifiedUserName' - The user name of the user.
+--
+-- 'lastName', 'entityDisplayData_lastName' - The last name of the user.
+--
+-- 'userName', 'entityDisplayData_userName' - The name of the user.
+newEntityDisplayData ::
+  EntityDisplayData
+newEntityDisplayData =
+  EntityDisplayData'
+    { firstName = Prelude.Nothing,
+      groupName = Prelude.Nothing,
+      identifiedUserName = Prelude.Nothing,
+      lastName = Prelude.Nothing,
+      userName = Prelude.Nothing
+    }
+
+-- | The first name of the user.
+entityDisplayData_firstName :: Lens.Lens' EntityDisplayData (Prelude.Maybe Prelude.Text)
+entityDisplayData_firstName = Lens.lens (\EntityDisplayData' {firstName} -> firstName) (\s@EntityDisplayData' {} a -> s {firstName = a} :: EntityDisplayData) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The name of the group.
+entityDisplayData_groupName :: Lens.Lens' EntityDisplayData (Prelude.Maybe Prelude.Text)
+entityDisplayData_groupName = Lens.lens (\EntityDisplayData' {groupName} -> groupName) (\s@EntityDisplayData' {} a -> s {groupName = a} :: EntityDisplayData) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The user name of the user.
+entityDisplayData_identifiedUserName :: Lens.Lens' EntityDisplayData (Prelude.Maybe Prelude.Text)
+entityDisplayData_identifiedUserName = Lens.lens (\EntityDisplayData' {identifiedUserName} -> identifiedUserName) (\s@EntityDisplayData' {} a -> s {identifiedUserName = a} :: EntityDisplayData) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The last name of the user.
+entityDisplayData_lastName :: Lens.Lens' EntityDisplayData (Prelude.Maybe Prelude.Text)
+entityDisplayData_lastName = Lens.lens (\EntityDisplayData' {lastName} -> lastName) (\s@EntityDisplayData' {} a -> s {lastName = a} :: EntityDisplayData) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The name of the user.
+entityDisplayData_userName :: Lens.Lens' EntityDisplayData (Prelude.Maybe Prelude.Text)
+entityDisplayData_userName = Lens.lens (\EntityDisplayData' {userName} -> userName) (\s@EntityDisplayData' {} a -> s {userName = a} :: EntityDisplayData) Prelude.. Lens.mapping Data._Sensitive
+
+instance Data.FromJSON EntityDisplayData where
+  parseJSON =
+    Data.withObject
+      "EntityDisplayData"
+      ( \x ->
+          EntityDisplayData'
+            Prelude.<$> (x Data..:? "FirstName")
+            Prelude.<*> (x Data..:? "GroupName")
+            Prelude.<*> (x Data..:? "IdentifiedUserName")
+            Prelude.<*> (x Data..:? "LastName")
+            Prelude.<*> (x Data..:? "UserName")
+      )
+
+instance Prelude.Hashable EntityDisplayData where
+  hashWithSalt _salt EntityDisplayData' {..} =
+    _salt
+      `Prelude.hashWithSalt` firstName
+      `Prelude.hashWithSalt` groupName
+      `Prelude.hashWithSalt` identifiedUserName
+      `Prelude.hashWithSalt` lastName
+      `Prelude.hashWithSalt` userName
+
+instance Prelude.NFData EntityDisplayData where
+  rnf EntityDisplayData' {..} =
+    Prelude.rnf firstName
+      `Prelude.seq` Prelude.rnf groupName
+      `Prelude.seq` Prelude.rnf identifiedUserName
+      `Prelude.seq` Prelude.rnf lastName
+      `Prelude.seq` Prelude.rnf userName
diff --git a/gen/Amazonka/Kendra/Types/EntityPersonaConfiguration.hs b/gen/Amazonka/Kendra/Types/EntityPersonaConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/EntityPersonaConfiguration.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.Kendra.Types.EntityPersonaConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.EntityPersonaConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.Persona
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information for users or groups in your IAM
+-- Identity Center identity source for access to your Amazon Kendra
+-- experience. Specific permissions are defined for each user or group once
+-- they are granted access to your Amazon Kendra experience.
+--
+-- /See:/ 'newEntityPersonaConfiguration' smart constructor.
+data EntityPersonaConfiguration = EntityPersonaConfiguration'
+  { -- | The identifier of a user or group in your IAM Identity Center identity
+    -- source. For example, a user ID could be an email.
+    entityId :: Prelude.Text,
+    -- | The persona that defines the specific permissions of the user or group
+    -- in your IAM Identity Center identity source. The available personas or
+    -- access roles are @Owner@ and @Viewer@. For more information on these
+    -- personas, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/deploying-search-experience-no-code.html#access-search-experience Providing access to your search page>.
+    persona :: Persona
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EntityPersonaConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'entityId', 'entityPersonaConfiguration_entityId' - The identifier of a user or group in your IAM Identity Center identity
+-- source. For example, a user ID could be an email.
+--
+-- 'persona', 'entityPersonaConfiguration_persona' - The persona that defines the specific permissions of the user or group
+-- in your IAM Identity Center identity source. The available personas or
+-- access roles are @Owner@ and @Viewer@. For more information on these
+-- personas, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/deploying-search-experience-no-code.html#access-search-experience Providing access to your search page>.
+newEntityPersonaConfiguration ::
+  -- | 'entityId'
+  Prelude.Text ->
+  -- | 'persona'
+  Persona ->
+  EntityPersonaConfiguration
+newEntityPersonaConfiguration pEntityId_ pPersona_ =
+  EntityPersonaConfiguration'
+    { entityId = pEntityId_,
+      persona = pPersona_
+    }
+
+-- | The identifier of a user or group in your IAM Identity Center identity
+-- source. For example, a user ID could be an email.
+entityPersonaConfiguration_entityId :: Lens.Lens' EntityPersonaConfiguration Prelude.Text
+entityPersonaConfiguration_entityId = Lens.lens (\EntityPersonaConfiguration' {entityId} -> entityId) (\s@EntityPersonaConfiguration' {} a -> s {entityId = a} :: EntityPersonaConfiguration)
+
+-- | The persona that defines the specific permissions of the user or group
+-- in your IAM Identity Center identity source. The available personas or
+-- access roles are @Owner@ and @Viewer@. For more information on these
+-- personas, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/deploying-search-experience-no-code.html#access-search-experience Providing access to your search page>.
+entityPersonaConfiguration_persona :: Lens.Lens' EntityPersonaConfiguration Persona
+entityPersonaConfiguration_persona = Lens.lens (\EntityPersonaConfiguration' {persona} -> persona) (\s@EntityPersonaConfiguration' {} a -> s {persona = a} :: EntityPersonaConfiguration)
+
+instance Prelude.Hashable EntityPersonaConfiguration where
+  hashWithSalt _salt EntityPersonaConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` entityId
+      `Prelude.hashWithSalt` persona
+
+instance Prelude.NFData EntityPersonaConfiguration where
+  rnf EntityPersonaConfiguration' {..} =
+    Prelude.rnf entityId
+      `Prelude.seq` Prelude.rnf persona
+
+instance Data.ToJSON EntityPersonaConfiguration where
+  toJSON EntityPersonaConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("EntityId" Data..= entityId),
+            Prelude.Just ("Persona" Data..= persona)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/EntityType.hs b/gen/Amazonka/Kendra/Types/EntityType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/EntityType.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.Kendra.Types.EntityType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.EntityType
+  ( EntityType
+      ( ..,
+        EntityType_GROUP,
+        EntityType_USER
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EntityType = EntityType'
+  { fromEntityType ::
+      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 EntityType_GROUP :: EntityType
+pattern EntityType_GROUP = EntityType' "GROUP"
+
+pattern EntityType_USER :: EntityType
+pattern EntityType_USER = EntityType' "USER"
+
+{-# COMPLETE
+  EntityType_GROUP,
+  EntityType_USER,
+  EntityType'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/ErrorCode.hs b/gen/Amazonka/Kendra/Types/ErrorCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ErrorCode.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.Kendra.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.Kendra.Types.ErrorCode
+  ( ErrorCode
+      ( ..,
+        ErrorCode_InternalError,
+        ErrorCode_InvalidRequest
+      ),
+  )
+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_InternalError :: ErrorCode
+pattern ErrorCode_InternalError = ErrorCode' "InternalError"
+
+pattern ErrorCode_InvalidRequest :: ErrorCode
+pattern ErrorCode_InvalidRequest = ErrorCode' "InvalidRequest"
+
+{-# COMPLETE
+  ErrorCode_InternalError,
+  ErrorCode_InvalidRequest,
+  ErrorCode'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/ExperienceConfiguration.hs b/gen/Amazonka/Kendra/Types/ExperienceConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ExperienceConfiguration.hs
@@ -0,0 +1,109 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.Types.ExperienceConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ExperienceConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.ContentSourceConfiguration
+import Amazonka.Kendra.Types.UserIdentityConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information for your Amazon Kendra
+-- experience. This includes the data source IDs and\/or FAQ IDs, and user
+-- or group information to grant access to your Amazon Kendra experience.
+--
+-- /See:/ 'newExperienceConfiguration' smart constructor.
+data ExperienceConfiguration = ExperienceConfiguration'
+  { -- | The identifiers of your data sources and FAQs. Or, you can specify that
+    -- you want to use documents indexed via the @BatchPutDocument@ API. This
+    -- is the content you want to use for your Amazon Kendra experience.
+    contentSourceConfiguration :: Prelude.Maybe ContentSourceConfiguration,
+    -- | The IAM Identity Center field name that contains the identifiers of your
+    -- users, such as their emails.
+    userIdentityConfiguration :: Prelude.Maybe UserIdentityConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExperienceConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contentSourceConfiguration', 'experienceConfiguration_contentSourceConfiguration' - The identifiers of your data sources and FAQs. Or, you can specify that
+-- you want to use documents indexed via the @BatchPutDocument@ API. This
+-- is the content you want to use for your Amazon Kendra experience.
+--
+-- 'userIdentityConfiguration', 'experienceConfiguration_userIdentityConfiguration' - The IAM Identity Center field name that contains the identifiers of your
+-- users, such as their emails.
+newExperienceConfiguration ::
+  ExperienceConfiguration
+newExperienceConfiguration =
+  ExperienceConfiguration'
+    { contentSourceConfiguration =
+        Prelude.Nothing,
+      userIdentityConfiguration = Prelude.Nothing
+    }
+
+-- | The identifiers of your data sources and FAQs. Or, you can specify that
+-- you want to use documents indexed via the @BatchPutDocument@ API. This
+-- is the content you want to use for your Amazon Kendra experience.
+experienceConfiguration_contentSourceConfiguration :: Lens.Lens' ExperienceConfiguration (Prelude.Maybe ContentSourceConfiguration)
+experienceConfiguration_contentSourceConfiguration = Lens.lens (\ExperienceConfiguration' {contentSourceConfiguration} -> contentSourceConfiguration) (\s@ExperienceConfiguration' {} a -> s {contentSourceConfiguration = a} :: ExperienceConfiguration)
+
+-- | The IAM Identity Center field name that contains the identifiers of your
+-- users, such as their emails.
+experienceConfiguration_userIdentityConfiguration :: Lens.Lens' ExperienceConfiguration (Prelude.Maybe UserIdentityConfiguration)
+experienceConfiguration_userIdentityConfiguration = Lens.lens (\ExperienceConfiguration' {userIdentityConfiguration} -> userIdentityConfiguration) (\s@ExperienceConfiguration' {} a -> s {userIdentityConfiguration = a} :: ExperienceConfiguration)
+
+instance Data.FromJSON ExperienceConfiguration where
+  parseJSON =
+    Data.withObject
+      "ExperienceConfiguration"
+      ( \x ->
+          ExperienceConfiguration'
+            Prelude.<$> (x Data..:? "ContentSourceConfiguration")
+            Prelude.<*> (x Data..:? "UserIdentityConfiguration")
+      )
+
+instance Prelude.Hashable ExperienceConfiguration where
+  hashWithSalt _salt ExperienceConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` contentSourceConfiguration
+      `Prelude.hashWithSalt` userIdentityConfiguration
+
+instance Prelude.NFData ExperienceConfiguration where
+  rnf ExperienceConfiguration' {..} =
+    Prelude.rnf contentSourceConfiguration
+      `Prelude.seq` Prelude.rnf userIdentityConfiguration
+
+instance Data.ToJSON ExperienceConfiguration where
+  toJSON ExperienceConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ContentSourceConfiguration" Data..=)
+              Prelude.<$> contentSourceConfiguration,
+            ("UserIdentityConfiguration" Data..=)
+              Prelude.<$> userIdentityConfiguration
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/ExperienceEndpoint.hs b/gen/Amazonka/Kendra/Types/ExperienceEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ExperienceEndpoint.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.Kendra.Types.ExperienceEndpoint
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ExperienceEndpoint where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.EndpointType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information for the endpoint for your Amazon
+-- Kendra experience.
+--
+-- /See:/ 'newExperienceEndpoint' smart constructor.
+data ExperienceEndpoint = ExperienceEndpoint'
+  { -- | The endpoint of your Amazon Kendra experience.
+    endpoint :: Prelude.Maybe Prelude.Text,
+    -- | The type of endpoint for your Amazon Kendra experience. The type
+    -- currently available is @HOME@, which is a unique and fully hosted URL to
+    -- the home page of your Amazon Kendra experience.
+    endpointType :: Prelude.Maybe EndpointType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExperienceEndpoint' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpoint', 'experienceEndpoint_endpoint' - The endpoint of your Amazon Kendra experience.
+--
+-- 'endpointType', 'experienceEndpoint_endpointType' - The type of endpoint for your Amazon Kendra experience. The type
+-- currently available is @HOME@, which is a unique and fully hosted URL to
+-- the home page of your Amazon Kendra experience.
+newExperienceEndpoint ::
+  ExperienceEndpoint
+newExperienceEndpoint =
+  ExperienceEndpoint'
+    { endpoint = Prelude.Nothing,
+      endpointType = Prelude.Nothing
+    }
+
+-- | The endpoint of your Amazon Kendra experience.
+experienceEndpoint_endpoint :: Lens.Lens' ExperienceEndpoint (Prelude.Maybe Prelude.Text)
+experienceEndpoint_endpoint = Lens.lens (\ExperienceEndpoint' {endpoint} -> endpoint) (\s@ExperienceEndpoint' {} a -> s {endpoint = a} :: ExperienceEndpoint)
+
+-- | The type of endpoint for your Amazon Kendra experience. The type
+-- currently available is @HOME@, which is a unique and fully hosted URL to
+-- the home page of your Amazon Kendra experience.
+experienceEndpoint_endpointType :: Lens.Lens' ExperienceEndpoint (Prelude.Maybe EndpointType)
+experienceEndpoint_endpointType = Lens.lens (\ExperienceEndpoint' {endpointType} -> endpointType) (\s@ExperienceEndpoint' {} a -> s {endpointType = a} :: ExperienceEndpoint)
+
+instance Data.FromJSON ExperienceEndpoint where
+  parseJSON =
+    Data.withObject
+      "ExperienceEndpoint"
+      ( \x ->
+          ExperienceEndpoint'
+            Prelude.<$> (x Data..:? "Endpoint")
+            Prelude.<*> (x Data..:? "EndpointType")
+      )
+
+instance Prelude.Hashable ExperienceEndpoint where
+  hashWithSalt _salt ExperienceEndpoint' {..} =
+    _salt
+      `Prelude.hashWithSalt` endpoint
+      `Prelude.hashWithSalt` endpointType
+
+instance Prelude.NFData ExperienceEndpoint where
+  rnf ExperienceEndpoint' {..} =
+    Prelude.rnf endpoint
+      `Prelude.seq` Prelude.rnf endpointType
diff --git a/gen/Amazonka/Kendra/Types/ExperienceEntitiesSummary.hs b/gen/Amazonka/Kendra/Types/ExperienceEntitiesSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ExperienceEntitiesSummary.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.Kendra.Types.ExperienceEntitiesSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ExperienceEntitiesSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.EntityDisplayData
+import Amazonka.Kendra.Types.EntityType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Summary information for users or groups in your IAM Identity Center
+-- identity source with granted access to your Amazon Kendra experience.
+-- You can create an Amazon Kendra experience such as a search application.
+-- For more information on creating a search application experience, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/deploying-search-experience-no-code.html Building a search experience with no code>.
+--
+-- /See:/ 'newExperienceEntitiesSummary' smart constructor.
+data ExperienceEntitiesSummary = ExperienceEntitiesSummary'
+  { -- | Information about the user entity.
+    displayData :: Prelude.Maybe EntityDisplayData,
+    -- | The identifier of a user or group in your IAM Identity Center identity
+    -- source. For example, a user ID could be an email.
+    entityId :: Prelude.Maybe Prelude.Text,
+    -- | Shows the type as @User@ or @Group@.
+    entityType :: Prelude.Maybe EntityType
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExperienceEntitiesSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'displayData', 'experienceEntitiesSummary_displayData' - Information about the user entity.
+--
+-- 'entityId', 'experienceEntitiesSummary_entityId' - The identifier of a user or group in your IAM Identity Center identity
+-- source. For example, a user ID could be an email.
+--
+-- 'entityType', 'experienceEntitiesSummary_entityType' - Shows the type as @User@ or @Group@.
+newExperienceEntitiesSummary ::
+  ExperienceEntitiesSummary
+newExperienceEntitiesSummary =
+  ExperienceEntitiesSummary'
+    { displayData =
+        Prelude.Nothing,
+      entityId = Prelude.Nothing,
+      entityType = Prelude.Nothing
+    }
+
+-- | Information about the user entity.
+experienceEntitiesSummary_displayData :: Lens.Lens' ExperienceEntitiesSummary (Prelude.Maybe EntityDisplayData)
+experienceEntitiesSummary_displayData = Lens.lens (\ExperienceEntitiesSummary' {displayData} -> displayData) (\s@ExperienceEntitiesSummary' {} a -> s {displayData = a} :: ExperienceEntitiesSummary)
+
+-- | The identifier of a user or group in your IAM Identity Center identity
+-- source. For example, a user ID could be an email.
+experienceEntitiesSummary_entityId :: Lens.Lens' ExperienceEntitiesSummary (Prelude.Maybe Prelude.Text)
+experienceEntitiesSummary_entityId = Lens.lens (\ExperienceEntitiesSummary' {entityId} -> entityId) (\s@ExperienceEntitiesSummary' {} a -> s {entityId = a} :: ExperienceEntitiesSummary)
+
+-- | Shows the type as @User@ or @Group@.
+experienceEntitiesSummary_entityType :: Lens.Lens' ExperienceEntitiesSummary (Prelude.Maybe EntityType)
+experienceEntitiesSummary_entityType = Lens.lens (\ExperienceEntitiesSummary' {entityType} -> entityType) (\s@ExperienceEntitiesSummary' {} a -> s {entityType = a} :: ExperienceEntitiesSummary)
+
+instance Data.FromJSON ExperienceEntitiesSummary where
+  parseJSON =
+    Data.withObject
+      "ExperienceEntitiesSummary"
+      ( \x ->
+          ExperienceEntitiesSummary'
+            Prelude.<$> (x Data..:? "DisplayData")
+            Prelude.<*> (x Data..:? "EntityId")
+            Prelude.<*> (x Data..:? "EntityType")
+      )
+
+instance Prelude.Hashable ExperienceEntitiesSummary where
+  hashWithSalt _salt ExperienceEntitiesSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` displayData
+      `Prelude.hashWithSalt` entityId
+      `Prelude.hashWithSalt` entityType
+
+instance Prelude.NFData ExperienceEntitiesSummary where
+  rnf ExperienceEntitiesSummary' {..} =
+    Prelude.rnf displayData
+      `Prelude.seq` Prelude.rnf entityId
+      `Prelude.seq` Prelude.rnf entityType
diff --git a/gen/Amazonka/Kendra/Types/ExperienceStatus.hs b/gen/Amazonka/Kendra/Types/ExperienceStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ExperienceStatus.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.Kendra.Types.ExperienceStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ExperienceStatus
+  ( ExperienceStatus
+      ( ..,
+        ExperienceStatus_ACTIVE,
+        ExperienceStatus_CREATING,
+        ExperienceStatus_DELETING,
+        ExperienceStatus_FAILED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ExperienceStatus = ExperienceStatus'
+  { fromExperienceStatus ::
+      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 ExperienceStatus_ACTIVE :: ExperienceStatus
+pattern ExperienceStatus_ACTIVE = ExperienceStatus' "ACTIVE"
+
+pattern ExperienceStatus_CREATING :: ExperienceStatus
+pattern ExperienceStatus_CREATING = ExperienceStatus' "CREATING"
+
+pattern ExperienceStatus_DELETING :: ExperienceStatus
+pattern ExperienceStatus_DELETING = ExperienceStatus' "DELETING"
+
+pattern ExperienceStatus_FAILED :: ExperienceStatus
+pattern ExperienceStatus_FAILED = ExperienceStatus' "FAILED"
+
+{-# COMPLETE
+  ExperienceStatus_ACTIVE,
+  ExperienceStatus_CREATING,
+  ExperienceStatus_DELETING,
+  ExperienceStatus_FAILED,
+  ExperienceStatus'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/ExperiencesSummary.hs b/gen/Amazonka/Kendra/Types/ExperiencesSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ExperiencesSummary.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.Kendra.Types.ExperiencesSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ExperiencesSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.ExperienceEndpoint
+import Amazonka.Kendra.Types.ExperienceStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Summary information for your Amazon Kendra experience. You can create an
+-- Amazon Kendra experience such as a search application. For more
+-- information on creating a search application experience, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/deploying-search-experience-no-code.html Building a search experience with no code>.
+--
+-- /See:/ 'newExperiencesSummary' smart constructor.
+data ExperiencesSummary = ExperiencesSummary'
+  { -- | The date-time your Amazon Kendra experience was created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The endpoint URLs for your Amazon Kendra experiences. The URLs are
+    -- unique and fully hosted by Amazon Web Services.
+    endpoints :: Prelude.Maybe (Prelude.NonEmpty ExperienceEndpoint),
+    -- | The identifier of your Amazon Kendra experience.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of your Amazon Kendra experience.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The processing status of your Amazon Kendra experience.
+    status :: Prelude.Maybe ExperienceStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExperiencesSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdAt', 'experiencesSummary_createdAt' - The date-time your Amazon Kendra experience was created.
+--
+-- 'endpoints', 'experiencesSummary_endpoints' - The endpoint URLs for your Amazon Kendra experiences. The URLs are
+-- unique and fully hosted by Amazon Web Services.
+--
+-- 'id', 'experiencesSummary_id' - The identifier of your Amazon Kendra experience.
+--
+-- 'name', 'experiencesSummary_name' - The name of your Amazon Kendra experience.
+--
+-- 'status', 'experiencesSummary_status' - The processing status of your Amazon Kendra experience.
+newExperiencesSummary ::
+  ExperiencesSummary
+newExperiencesSummary =
+  ExperiencesSummary'
+    { createdAt = Prelude.Nothing,
+      endpoints = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The date-time your Amazon Kendra experience was created.
+experiencesSummary_createdAt :: Lens.Lens' ExperiencesSummary (Prelude.Maybe Prelude.UTCTime)
+experiencesSummary_createdAt = Lens.lens (\ExperiencesSummary' {createdAt} -> createdAt) (\s@ExperiencesSummary' {} a -> s {createdAt = a} :: ExperiencesSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The endpoint URLs for your Amazon Kendra experiences. The URLs are
+-- unique and fully hosted by Amazon Web Services.
+experiencesSummary_endpoints :: Lens.Lens' ExperiencesSummary (Prelude.Maybe (Prelude.NonEmpty ExperienceEndpoint))
+experiencesSummary_endpoints = Lens.lens (\ExperiencesSummary' {endpoints} -> endpoints) (\s@ExperiencesSummary' {} a -> s {endpoints = a} :: ExperiencesSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The identifier of your Amazon Kendra experience.
+experiencesSummary_id :: Lens.Lens' ExperiencesSummary (Prelude.Maybe Prelude.Text)
+experiencesSummary_id = Lens.lens (\ExperiencesSummary' {id} -> id) (\s@ExperiencesSummary' {} a -> s {id = a} :: ExperiencesSummary)
+
+-- | The name of your Amazon Kendra experience.
+experiencesSummary_name :: Lens.Lens' ExperiencesSummary (Prelude.Maybe Prelude.Text)
+experiencesSummary_name = Lens.lens (\ExperiencesSummary' {name} -> name) (\s@ExperiencesSummary' {} a -> s {name = a} :: ExperiencesSummary)
+
+-- | The processing status of your Amazon Kendra experience.
+experiencesSummary_status :: Lens.Lens' ExperiencesSummary (Prelude.Maybe ExperienceStatus)
+experiencesSummary_status = Lens.lens (\ExperiencesSummary' {status} -> status) (\s@ExperiencesSummary' {} a -> s {status = a} :: ExperiencesSummary)
+
+instance Data.FromJSON ExperiencesSummary where
+  parseJSON =
+    Data.withObject
+      "ExperiencesSummary"
+      ( \x ->
+          ExperiencesSummary'
+            Prelude.<$> (x Data..:? "CreatedAt")
+            Prelude.<*> (x Data..:? "Endpoints")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable ExperiencesSummary where
+  hashWithSalt _salt ExperiencesSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` endpoints
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData ExperiencesSummary where
+  rnf ExperiencesSummary' {..} =
+    Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf endpoints
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/Kendra/Types/Facet.hs b/gen/Amazonka/Kendra/Types/Facet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/Facet.hs
@@ -0,0 +1,151 @@
+{-# 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.Kendra.Types.Facet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.Facet 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
+
+-- | Information about a document attribute. You can use document attributes
+-- as facets.
+--
+-- For example, the document attribute or facet \"Department\" includes the
+-- values \"HR\", \"Engineering\", and \"Accounting\". You can display
+-- these values in the search results so that documents can be searched by
+-- department.
+--
+-- You can display up to 10 facet values per facet for a query. If you want
+-- to increase this limit, contact
+-- <http://aws.amazon.com/contact-us/ Support>.
+--
+-- /See:/ 'newFacet' smart constructor.
+data Facet = Facet'
+  { -- | The unique key for the document attribute.
+    documentAttributeKey :: Prelude.Maybe Prelude.Text,
+    -- | An array of document attributes that are nested facets within a facet.
+    --
+    -- For example, the document attribute or facet \"Department\" includes a
+    -- value called \"Engineering\". In addition, the document attribute or
+    -- facet \"SubDepartment\" includes the values \"Frontend\" and \"Backend\"
+    -- for documents assigned to \"Engineering\". You can display nested facets
+    -- in the search results so that documents can be searched not only by
+    -- department but also by a sub department within a department. This helps
+    -- your users further narrow their search.
+    --
+    -- You can only have one nested facet within a facet. If you want to
+    -- increase this limit, contact
+    -- <http://aws.amazon.com/contact-us/ Support>.
+    facets :: Prelude.Maybe [Facet],
+    -- | Maximum number of facet values per facet. The default is 10. You can use
+    -- this to limit the number of facet values to less than 10. If you want to
+    -- increase the default, contact
+    -- <http://aws.amazon.com/contact-us/ Support>.
+    maxResults :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Facet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'documentAttributeKey', 'facet_documentAttributeKey' - The unique key for the document attribute.
+--
+-- 'facets', 'facet_facets' - An array of document attributes that are nested facets within a facet.
+--
+-- For example, the document attribute or facet \"Department\" includes a
+-- value called \"Engineering\". In addition, the document attribute or
+-- facet \"SubDepartment\" includes the values \"Frontend\" and \"Backend\"
+-- for documents assigned to \"Engineering\". You can display nested facets
+-- in the search results so that documents can be searched not only by
+-- department but also by a sub department within a department. This helps
+-- your users further narrow their search.
+--
+-- You can only have one nested facet within a facet. If you want to
+-- increase this limit, contact
+-- <http://aws.amazon.com/contact-us/ Support>.
+--
+-- 'maxResults', 'facet_maxResults' - Maximum number of facet values per facet. The default is 10. You can use
+-- this to limit the number of facet values to less than 10. If you want to
+-- increase the default, contact
+-- <http://aws.amazon.com/contact-us/ Support>.
+newFacet ::
+  Facet
+newFacet =
+  Facet'
+    { documentAttributeKey = Prelude.Nothing,
+      facets = Prelude.Nothing,
+      maxResults = Prelude.Nothing
+    }
+
+-- | The unique key for the document attribute.
+facet_documentAttributeKey :: Lens.Lens' Facet (Prelude.Maybe Prelude.Text)
+facet_documentAttributeKey = Lens.lens (\Facet' {documentAttributeKey} -> documentAttributeKey) (\s@Facet' {} a -> s {documentAttributeKey = a} :: Facet)
+
+-- | An array of document attributes that are nested facets within a facet.
+--
+-- For example, the document attribute or facet \"Department\" includes a
+-- value called \"Engineering\". In addition, the document attribute or
+-- facet \"SubDepartment\" includes the values \"Frontend\" and \"Backend\"
+-- for documents assigned to \"Engineering\". You can display nested facets
+-- in the search results so that documents can be searched not only by
+-- department but also by a sub department within a department. This helps
+-- your users further narrow their search.
+--
+-- You can only have one nested facet within a facet. If you want to
+-- increase this limit, contact
+-- <http://aws.amazon.com/contact-us/ Support>.
+facet_facets :: Lens.Lens' Facet (Prelude.Maybe [Facet])
+facet_facets = Lens.lens (\Facet' {facets} -> facets) (\s@Facet' {} a -> s {facets = a} :: Facet) Prelude.. Lens.mapping Lens.coerced
+
+-- | Maximum number of facet values per facet. The default is 10. You can use
+-- this to limit the number of facet values to less than 10. If you want to
+-- increase the default, contact
+-- <http://aws.amazon.com/contact-us/ Support>.
+facet_maxResults :: Lens.Lens' Facet (Prelude.Maybe Prelude.Natural)
+facet_maxResults = Lens.lens (\Facet' {maxResults} -> maxResults) (\s@Facet' {} a -> s {maxResults = a} :: Facet)
+
+instance Prelude.Hashable Facet where
+  hashWithSalt _salt Facet' {..} =
+    _salt
+      `Prelude.hashWithSalt` documentAttributeKey
+      `Prelude.hashWithSalt` facets
+      `Prelude.hashWithSalt` maxResults
+
+instance Prelude.NFData Facet where
+  rnf Facet' {..} =
+    Prelude.rnf documentAttributeKey
+      `Prelude.seq` Prelude.rnf facets
+      `Prelude.seq` Prelude.rnf maxResults
+
+instance Data.ToJSON Facet where
+  toJSON Facet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DocumentAttributeKey" Data..=)
+              Prelude.<$> documentAttributeKey,
+            ("Facets" Data..=) Prelude.<$> facets,
+            ("MaxResults" Data..=) Prelude.<$> maxResults
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/FacetResult.hs b/gen/Amazonka/Kendra/Types/FacetResult.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/FacetResult.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.Kendra.Types.FacetResult
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.FacetResult where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import {-# SOURCE #-} Amazonka.Kendra.Types.DocumentAttributeValueCountPair
+import Amazonka.Kendra.Types.DocumentAttributeValueType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The facet values for the documents in the response.
+--
+-- /See:/ 'newFacetResult' smart constructor.
+data FacetResult = FacetResult'
+  { -- | The key for the facet values. This is the same as the
+    -- @DocumentAttributeKey@ provided in the query.
+    documentAttributeKey :: Prelude.Maybe Prelude.Text,
+    -- | An array of key\/value pairs, where the key is the value of the
+    -- attribute and the count is the number of documents that share the key
+    -- value.
+    documentAttributeValueCountPairs :: Prelude.Maybe [DocumentAttributeValueCountPair],
+    -- | The data type of the facet value. This is the same as the type defined
+    -- for the index field when it was created.
+    documentAttributeValueType :: Prelude.Maybe DocumentAttributeValueType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FacetResult' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'documentAttributeKey', 'facetResult_documentAttributeKey' - The key for the facet values. This is the same as the
+-- @DocumentAttributeKey@ provided in the query.
+--
+-- 'documentAttributeValueCountPairs', 'facetResult_documentAttributeValueCountPairs' - An array of key\/value pairs, where the key is the value of the
+-- attribute and the count is the number of documents that share the key
+-- value.
+--
+-- 'documentAttributeValueType', 'facetResult_documentAttributeValueType' - The data type of the facet value. This is the same as the type defined
+-- for the index field when it was created.
+newFacetResult ::
+  FacetResult
+newFacetResult =
+  FacetResult'
+    { documentAttributeKey =
+        Prelude.Nothing,
+      documentAttributeValueCountPairs = Prelude.Nothing,
+      documentAttributeValueType = Prelude.Nothing
+    }
+
+-- | The key for the facet values. This is the same as the
+-- @DocumentAttributeKey@ provided in the query.
+facetResult_documentAttributeKey :: Lens.Lens' FacetResult (Prelude.Maybe Prelude.Text)
+facetResult_documentAttributeKey = Lens.lens (\FacetResult' {documentAttributeKey} -> documentAttributeKey) (\s@FacetResult' {} a -> s {documentAttributeKey = a} :: FacetResult)
+
+-- | An array of key\/value pairs, where the key is the value of the
+-- attribute and the count is the number of documents that share the key
+-- value.
+facetResult_documentAttributeValueCountPairs :: Lens.Lens' FacetResult (Prelude.Maybe [DocumentAttributeValueCountPair])
+facetResult_documentAttributeValueCountPairs = Lens.lens (\FacetResult' {documentAttributeValueCountPairs} -> documentAttributeValueCountPairs) (\s@FacetResult' {} a -> s {documentAttributeValueCountPairs = a} :: FacetResult) Prelude.. Lens.mapping Lens.coerced
+
+-- | The data type of the facet value. This is the same as the type defined
+-- for the index field when it was created.
+facetResult_documentAttributeValueType :: Lens.Lens' FacetResult (Prelude.Maybe DocumentAttributeValueType)
+facetResult_documentAttributeValueType = Lens.lens (\FacetResult' {documentAttributeValueType} -> documentAttributeValueType) (\s@FacetResult' {} a -> s {documentAttributeValueType = a} :: FacetResult)
+
+instance Data.FromJSON FacetResult where
+  parseJSON =
+    Data.withObject
+      "FacetResult"
+      ( \x ->
+          FacetResult'
+            Prelude.<$> (x Data..:? "DocumentAttributeKey")
+            Prelude.<*> ( x
+                            Data..:? "DocumentAttributeValueCountPairs"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "DocumentAttributeValueType")
+      )
+
+instance Prelude.Hashable FacetResult where
+  hashWithSalt _salt FacetResult' {..} =
+    _salt
+      `Prelude.hashWithSalt` documentAttributeKey
+      `Prelude.hashWithSalt` documentAttributeValueCountPairs
+      `Prelude.hashWithSalt` documentAttributeValueType
+
+instance Prelude.NFData FacetResult where
+  rnf FacetResult' {..} =
+    Prelude.rnf documentAttributeKey
+      `Prelude.seq` Prelude.rnf documentAttributeValueCountPairs
+      `Prelude.seq` Prelude.rnf documentAttributeValueType
diff --git a/gen/Amazonka/Kendra/Types/FacetResult.hs-boot b/gen/Amazonka/Kendra/Types/FacetResult.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/FacetResult.hs-boot
@@ -0,0 +1,31 @@
+{-# OPTIONS_GHC -Wno-missing-methods #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.Types.FacetResult
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.FacetResult where
+
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+data FacetResult
+
+instance Prelude.Eq FacetResult
+
+instance Prelude.Read FacetResult
+
+instance Prelude.Show FacetResult
+
+instance Prelude.Generic FacetResult
+
+instance Data.FromJSON FacetResult
+
+instance Prelude.NFData FacetResult
+
+instance Prelude.Hashable FacetResult
diff --git a/gen/Amazonka/Kendra/Types/FailedEntity.hs b/gen/Amazonka/Kendra/Types/FailedEntity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/FailedEntity.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.Kendra.Types.FailedEntity
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.FailedEntity 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
+
+-- | Information on the users or groups in your IAM Identity Center identity
+-- source that failed to properly configure with your Amazon Kendra
+-- experience.
+--
+-- /See:/ 'newFailedEntity' smart constructor.
+data FailedEntity = FailedEntity'
+  { -- | The identifier of the user or group in your IAM Identity Center identity
+    -- source. For example, a user ID could be an email.
+    entityId :: Prelude.Maybe Prelude.Text,
+    -- | The reason the user or group in your IAM Identity Center identity source
+    -- failed to properly configure with your Amazon Kendra experience.
+    errorMessage :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FailedEntity' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'entityId', 'failedEntity_entityId' - The identifier of the user or group in your IAM Identity Center identity
+-- source. For example, a user ID could be an email.
+--
+-- 'errorMessage', 'failedEntity_errorMessage' - The reason the user or group in your IAM Identity Center identity source
+-- failed to properly configure with your Amazon Kendra experience.
+newFailedEntity ::
+  FailedEntity
+newFailedEntity =
+  FailedEntity'
+    { entityId = Prelude.Nothing,
+      errorMessage = Prelude.Nothing
+    }
+
+-- | The identifier of the user or group in your IAM Identity Center identity
+-- source. For example, a user ID could be an email.
+failedEntity_entityId :: Lens.Lens' FailedEntity (Prelude.Maybe Prelude.Text)
+failedEntity_entityId = Lens.lens (\FailedEntity' {entityId} -> entityId) (\s@FailedEntity' {} a -> s {entityId = a} :: FailedEntity)
+
+-- | The reason the user or group in your IAM Identity Center identity source
+-- failed to properly configure with your Amazon Kendra experience.
+failedEntity_errorMessage :: Lens.Lens' FailedEntity (Prelude.Maybe Prelude.Text)
+failedEntity_errorMessage = Lens.lens (\FailedEntity' {errorMessage} -> errorMessage) (\s@FailedEntity' {} a -> s {errorMessage = a} :: FailedEntity)
+
+instance Data.FromJSON FailedEntity where
+  parseJSON =
+    Data.withObject
+      "FailedEntity"
+      ( \x ->
+          FailedEntity'
+            Prelude.<$> (x Data..:? "EntityId")
+            Prelude.<*> (x Data..:? "ErrorMessage")
+      )
+
+instance Prelude.Hashable FailedEntity where
+  hashWithSalt _salt FailedEntity' {..} =
+    _salt
+      `Prelude.hashWithSalt` entityId
+      `Prelude.hashWithSalt` errorMessage
+
+instance Prelude.NFData FailedEntity where
+  rnf FailedEntity' {..} =
+    Prelude.rnf entityId
+      `Prelude.seq` Prelude.rnf errorMessage
diff --git a/gen/Amazonka/Kendra/Types/FaqFileFormat.hs b/gen/Amazonka/Kendra/Types/FaqFileFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/FaqFileFormat.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.Kendra.Types.FaqFileFormat
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.FaqFileFormat
+  ( FaqFileFormat
+      ( ..,
+        FaqFileFormat_CSV,
+        FaqFileFormat_CSV_WITH_HEADER,
+        FaqFileFormat_JSON
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FaqFileFormat = FaqFileFormat'
+  { fromFaqFileFormat ::
+      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 FaqFileFormat_CSV :: FaqFileFormat
+pattern FaqFileFormat_CSV = FaqFileFormat' "CSV"
+
+pattern FaqFileFormat_CSV_WITH_HEADER :: FaqFileFormat
+pattern FaqFileFormat_CSV_WITH_HEADER = FaqFileFormat' "CSV_WITH_HEADER"
+
+pattern FaqFileFormat_JSON :: FaqFileFormat
+pattern FaqFileFormat_JSON = FaqFileFormat' "JSON"
+
+{-# COMPLETE
+  FaqFileFormat_CSV,
+  FaqFileFormat_CSV_WITH_HEADER,
+  FaqFileFormat_JSON,
+  FaqFileFormat'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/FaqStatistics.hs b/gen/Amazonka/Kendra/Types/FaqStatistics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/FaqStatistics.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.Kendra.Types.FaqStatistics
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.FaqStatistics 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 statistical information about the FAQ questions and answers
+-- contained in an index.
+--
+-- /See:/ 'newFaqStatistics' smart constructor.
+data FaqStatistics = FaqStatistics'
+  { -- | The total number of FAQ questions and answers contained in the index.
+    indexedQuestionAnswersCount :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FaqStatistics' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'indexedQuestionAnswersCount', 'faqStatistics_indexedQuestionAnswersCount' - The total number of FAQ questions and answers contained in the index.
+newFaqStatistics ::
+  -- | 'indexedQuestionAnswersCount'
+  Prelude.Natural ->
+  FaqStatistics
+newFaqStatistics pIndexedQuestionAnswersCount_ =
+  FaqStatistics'
+    { indexedQuestionAnswersCount =
+        pIndexedQuestionAnswersCount_
+    }
+
+-- | The total number of FAQ questions and answers contained in the index.
+faqStatistics_indexedQuestionAnswersCount :: Lens.Lens' FaqStatistics Prelude.Natural
+faqStatistics_indexedQuestionAnswersCount = Lens.lens (\FaqStatistics' {indexedQuestionAnswersCount} -> indexedQuestionAnswersCount) (\s@FaqStatistics' {} a -> s {indexedQuestionAnswersCount = a} :: FaqStatistics)
+
+instance Data.FromJSON FaqStatistics where
+  parseJSON =
+    Data.withObject
+      "FaqStatistics"
+      ( \x ->
+          FaqStatistics'
+            Prelude.<$> (x Data..: "IndexedQuestionAnswersCount")
+      )
+
+instance Prelude.Hashable FaqStatistics where
+  hashWithSalt _salt FaqStatistics' {..} =
+    _salt
+      `Prelude.hashWithSalt` indexedQuestionAnswersCount
+
+instance Prelude.NFData FaqStatistics where
+  rnf FaqStatistics' {..} =
+    Prelude.rnf indexedQuestionAnswersCount
diff --git a/gen/Amazonka/Kendra/Types/FaqStatus.hs b/gen/Amazonka/Kendra/Types/FaqStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/FaqStatus.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.Kendra.Types.FaqStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.FaqStatus
+  ( FaqStatus
+      ( ..,
+        FaqStatus_ACTIVE,
+        FaqStatus_CREATING,
+        FaqStatus_DELETING,
+        FaqStatus_FAILED,
+        FaqStatus_UPDATING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FaqStatus = FaqStatus'
+  { fromFaqStatus ::
+      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 FaqStatus_ACTIVE :: FaqStatus
+pattern FaqStatus_ACTIVE = FaqStatus' "ACTIVE"
+
+pattern FaqStatus_CREATING :: FaqStatus
+pattern FaqStatus_CREATING = FaqStatus' "CREATING"
+
+pattern FaqStatus_DELETING :: FaqStatus
+pattern FaqStatus_DELETING = FaqStatus' "DELETING"
+
+pattern FaqStatus_FAILED :: FaqStatus
+pattern FaqStatus_FAILED = FaqStatus' "FAILED"
+
+pattern FaqStatus_UPDATING :: FaqStatus
+pattern FaqStatus_UPDATING = FaqStatus' "UPDATING"
+
+{-# COMPLETE
+  FaqStatus_ACTIVE,
+  FaqStatus_CREATING,
+  FaqStatus_DELETING,
+  FaqStatus_FAILED,
+  FaqStatus_UPDATING,
+  FaqStatus'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/FaqSummary.hs b/gen/Amazonka/Kendra/Types/FaqSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/FaqSummary.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.Kendra.Types.FaqSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.FaqSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.FaqFileFormat
+import Amazonka.Kendra.Types.FaqStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Summary information for frequently asked questions and answers included
+-- in an index.
+--
+-- /See:/ 'newFaqSummary' smart constructor.
+data FaqSummary = FaqSummary'
+  { -- | The UNIX datetime that the FAQ was added to the index.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The file type used to create the FAQ.
+    fileFormat :: Prelude.Maybe FaqFileFormat,
+    -- | The identifier of the FAQ.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The code for a language. This shows a supported language for the FAQ
+    -- document as part of the summary information for FAQs. English is
+    -- supported by default. For more information on supported languages,
+    -- including their codes, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/in-adding-languages.html Adding documents in languages other than English>.
+    languageCode :: Prelude.Maybe Prelude.Text,
+    -- | The name that you assigned the FAQ when you created or updated the FAQ.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the FAQ. When the status is @ACTIVE@ the FAQ is
+    -- ready for use.
+    status :: Prelude.Maybe FaqStatus,
+    -- | The UNIX datetime that the FAQ was last updated.
+    updatedAt :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FaqSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdAt', 'faqSummary_createdAt' - The UNIX datetime that the FAQ was added to the index.
+--
+-- 'fileFormat', 'faqSummary_fileFormat' - The file type used to create the FAQ.
+--
+-- 'id', 'faqSummary_id' - The identifier of the FAQ.
+--
+-- 'languageCode', 'faqSummary_languageCode' - The code for a language. This shows a supported language for the FAQ
+-- document as part of the summary information for FAQs. English is
+-- supported by default. For more information on supported languages,
+-- including their codes, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/in-adding-languages.html Adding documents in languages other than English>.
+--
+-- 'name', 'faqSummary_name' - The name that you assigned the FAQ when you created or updated the FAQ.
+--
+-- 'status', 'faqSummary_status' - The current status of the FAQ. When the status is @ACTIVE@ the FAQ is
+-- ready for use.
+--
+-- 'updatedAt', 'faqSummary_updatedAt' - The UNIX datetime that the FAQ was last updated.
+newFaqSummary ::
+  FaqSummary
+newFaqSummary =
+  FaqSummary'
+    { createdAt = Prelude.Nothing,
+      fileFormat = Prelude.Nothing,
+      id = Prelude.Nothing,
+      languageCode = Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing,
+      updatedAt = Prelude.Nothing
+    }
+
+-- | The UNIX datetime that the FAQ was added to the index.
+faqSummary_createdAt :: Lens.Lens' FaqSummary (Prelude.Maybe Prelude.UTCTime)
+faqSummary_createdAt = Lens.lens (\FaqSummary' {createdAt} -> createdAt) (\s@FaqSummary' {} a -> s {createdAt = a} :: FaqSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The file type used to create the FAQ.
+faqSummary_fileFormat :: Lens.Lens' FaqSummary (Prelude.Maybe FaqFileFormat)
+faqSummary_fileFormat = Lens.lens (\FaqSummary' {fileFormat} -> fileFormat) (\s@FaqSummary' {} a -> s {fileFormat = a} :: FaqSummary)
+
+-- | The identifier of the FAQ.
+faqSummary_id :: Lens.Lens' FaqSummary (Prelude.Maybe Prelude.Text)
+faqSummary_id = Lens.lens (\FaqSummary' {id} -> id) (\s@FaqSummary' {} a -> s {id = a} :: FaqSummary)
+
+-- | The code for a language. This shows a supported language for the FAQ
+-- document as part of the summary information for FAQs. English is
+-- supported by default. For more information on supported languages,
+-- including their codes, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/in-adding-languages.html Adding documents in languages other than English>.
+faqSummary_languageCode :: Lens.Lens' FaqSummary (Prelude.Maybe Prelude.Text)
+faqSummary_languageCode = Lens.lens (\FaqSummary' {languageCode} -> languageCode) (\s@FaqSummary' {} a -> s {languageCode = a} :: FaqSummary)
+
+-- | The name that you assigned the FAQ when you created or updated the FAQ.
+faqSummary_name :: Lens.Lens' FaqSummary (Prelude.Maybe Prelude.Text)
+faqSummary_name = Lens.lens (\FaqSummary' {name} -> name) (\s@FaqSummary' {} a -> s {name = a} :: FaqSummary)
+
+-- | The current status of the FAQ. When the status is @ACTIVE@ the FAQ is
+-- ready for use.
+faqSummary_status :: Lens.Lens' FaqSummary (Prelude.Maybe FaqStatus)
+faqSummary_status = Lens.lens (\FaqSummary' {status} -> status) (\s@FaqSummary' {} a -> s {status = a} :: FaqSummary)
+
+-- | The UNIX datetime that the FAQ was last updated.
+faqSummary_updatedAt :: Lens.Lens' FaqSummary (Prelude.Maybe Prelude.UTCTime)
+faqSummary_updatedAt = Lens.lens (\FaqSummary' {updatedAt} -> updatedAt) (\s@FaqSummary' {} a -> s {updatedAt = a} :: FaqSummary) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON FaqSummary where
+  parseJSON =
+    Data.withObject
+      "FaqSummary"
+      ( \x ->
+          FaqSummary'
+            Prelude.<$> (x Data..:? "CreatedAt")
+            Prelude.<*> (x Data..:? "FileFormat")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "LanguageCode")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "UpdatedAt")
+      )
+
+instance Prelude.Hashable FaqSummary where
+  hashWithSalt _salt FaqSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` fileFormat
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` languageCode
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` updatedAt
+
+instance Prelude.NFData FaqSummary where
+  rnf FaqSummary' {..} =
+    Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf fileFormat
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf languageCode
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf updatedAt
diff --git a/gen/Amazonka/Kendra/Types/FsxConfiguration.hs b/gen/Amazonka/Kendra/Types/FsxConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/FsxConfiguration.hs
@@ -0,0 +1,287 @@
+{-# 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.Kendra.Types.FsxConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.FsxConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DataSourceToIndexFieldMapping
+import Amazonka.Kendra.Types.DataSourceVpcConfiguration
+import Amazonka.Kendra.Types.FsxFileSystemType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information to connect to Amazon FSx as your
+-- data source.
+--
+-- /See:/ 'newFsxConfiguration' smart constructor.
+data FsxConfiguration = FsxConfiguration'
+  { -- | A list of regular expression patterns to exclude certain files in your
+    -- Amazon FSx file system. Files that match the patterns are excluded from
+    -- the index. Files that don\'t match the patterns are included in the
+    -- index. If a file matches both an inclusion and exclusion pattern, the
+    -- exclusion pattern takes precedence and the file isn\'t included in the
+    -- index.
+    exclusionPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | A list of @DataSourceToIndexFieldMapping@ objects that map Amazon FSx
+    -- data source attributes or field names to Amazon Kendra index field
+    -- names. To create custom fields, use the @UpdateIndex@ API before you map
+    -- to Amazon FSx fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The Amazon FSx data source field names must exist in your Amazon FSx
+    -- custom metadata.
+    fieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | A list of regular expression patterns to include certain files in your
+    -- Amazon FSx file system. Files that match the patterns are included in
+    -- the index. Files that don\'t match the patterns are excluded from the
+    -- index. If a file matches both an inclusion and exclusion pattern, the
+    -- exclusion pattern takes precedence and the file isn\'t included in the
+    -- index.
+    inclusionPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | The Amazon Resource Name (ARN) of an Secrets Manager secret that
+    -- contains the key-value pairs required to connect to your Amazon FSx file
+    -- system. Windows is currently the only supported type. The secret must
+    -- contain a JSON structure with the following keys:
+    --
+    -- -   username—The Active Directory user name, along with the Domain Name
+    --     System (DNS) domain name. For example, /user\@corp.example.com/. The
+    --     Active Directory user account must have read and mounting access to
+    --     the Amazon FSx file system for Windows.
+    --
+    -- -   password—The password of the Active Directory user account with read
+    --     and mounting access to the Amazon FSx Windows file system.
+    secretArn :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the Amazon FSx file system.
+    --
+    -- You can find your file system ID on the file system dashboard in the
+    -- Amazon FSx console. For information on how to create a file system in
+    -- Amazon FSx console, using Windows File Server as an example, see
+    -- <https://docs.aws.amazon.com/fsx/latest/WindowsGuide/getting-started-step1.html Amazon FSx Getting started guide>.
+    fileSystemId :: Prelude.Text,
+    -- | The Amazon FSx file system type. Windows is currently the only supported
+    -- type.
+    fileSystemType :: FsxFileSystemType,
+    -- | Configuration information for an Amazon Virtual Private Cloud to connect
+    -- to your Amazon FSx. Your Amazon FSx instance must reside inside your
+    -- VPC.
+    vpcConfiguration :: DataSourceVpcConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FsxConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'exclusionPatterns', 'fsxConfiguration_exclusionPatterns' - A list of regular expression patterns to exclude certain files in your
+-- Amazon FSx file system. Files that match the patterns are excluded from
+-- the index. Files that don\'t match the patterns are included in the
+-- index. If a file matches both an inclusion and exclusion pattern, the
+-- exclusion pattern takes precedence and the file isn\'t included in the
+-- index.
+--
+-- 'fieldMappings', 'fsxConfiguration_fieldMappings' - A list of @DataSourceToIndexFieldMapping@ objects that map Amazon FSx
+-- data source attributes or field names to Amazon Kendra index field
+-- names. To create custom fields, use the @UpdateIndex@ API before you map
+-- to Amazon FSx fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Amazon FSx data source field names must exist in your Amazon FSx
+-- custom metadata.
+--
+-- 'inclusionPatterns', 'fsxConfiguration_inclusionPatterns' - A list of regular expression patterns to include certain files in your
+-- Amazon FSx file system. Files that match the patterns are included in
+-- the index. Files that don\'t match the patterns are excluded from the
+-- index. If a file matches both an inclusion and exclusion pattern, the
+-- exclusion pattern takes precedence and the file isn\'t included in the
+-- index.
+--
+-- 'secretArn', 'fsxConfiguration_secretArn' - The Amazon Resource Name (ARN) of an Secrets Manager secret that
+-- contains the key-value pairs required to connect to your Amazon FSx file
+-- system. Windows is currently the only supported type. The secret must
+-- contain a JSON structure with the following keys:
+--
+-- -   username—The Active Directory user name, along with the Domain Name
+--     System (DNS) domain name. For example, /user\@corp.example.com/. The
+--     Active Directory user account must have read and mounting access to
+--     the Amazon FSx file system for Windows.
+--
+-- -   password—The password of the Active Directory user account with read
+--     and mounting access to the Amazon FSx Windows file system.
+--
+-- 'fileSystemId', 'fsxConfiguration_fileSystemId' - The identifier of the Amazon FSx file system.
+--
+-- You can find your file system ID on the file system dashboard in the
+-- Amazon FSx console. For information on how to create a file system in
+-- Amazon FSx console, using Windows File Server as an example, see
+-- <https://docs.aws.amazon.com/fsx/latest/WindowsGuide/getting-started-step1.html Amazon FSx Getting started guide>.
+--
+-- 'fileSystemType', 'fsxConfiguration_fileSystemType' - The Amazon FSx file system type. Windows is currently the only supported
+-- type.
+--
+-- 'vpcConfiguration', 'fsxConfiguration_vpcConfiguration' - Configuration information for an Amazon Virtual Private Cloud to connect
+-- to your Amazon FSx. Your Amazon FSx instance must reside inside your
+-- VPC.
+newFsxConfiguration ::
+  -- | 'fileSystemId'
+  Prelude.Text ->
+  -- | 'fileSystemType'
+  FsxFileSystemType ->
+  -- | 'vpcConfiguration'
+  DataSourceVpcConfiguration ->
+  FsxConfiguration
+newFsxConfiguration
+  pFileSystemId_
+  pFileSystemType_
+  pVpcConfiguration_ =
+    FsxConfiguration'
+      { exclusionPatterns =
+          Prelude.Nothing,
+        fieldMappings = Prelude.Nothing,
+        inclusionPatterns = Prelude.Nothing,
+        secretArn = Prelude.Nothing,
+        fileSystemId = pFileSystemId_,
+        fileSystemType = pFileSystemType_,
+        vpcConfiguration = pVpcConfiguration_
+      }
+
+-- | A list of regular expression patterns to exclude certain files in your
+-- Amazon FSx file system. Files that match the patterns are excluded from
+-- the index. Files that don\'t match the patterns are included in the
+-- index. If a file matches both an inclusion and exclusion pattern, the
+-- exclusion pattern takes precedence and the file isn\'t included in the
+-- index.
+fsxConfiguration_exclusionPatterns :: Lens.Lens' FsxConfiguration (Prelude.Maybe [Prelude.Text])
+fsxConfiguration_exclusionPatterns = Lens.lens (\FsxConfiguration' {exclusionPatterns} -> exclusionPatterns) (\s@FsxConfiguration' {} a -> s {exclusionPatterns = a} :: FsxConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of @DataSourceToIndexFieldMapping@ objects that map Amazon FSx
+-- data source attributes or field names to Amazon Kendra index field
+-- names. To create custom fields, use the @UpdateIndex@ API before you map
+-- to Amazon FSx fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Amazon FSx data source field names must exist in your Amazon FSx
+-- custom metadata.
+fsxConfiguration_fieldMappings :: Lens.Lens' FsxConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+fsxConfiguration_fieldMappings = Lens.lens (\FsxConfiguration' {fieldMappings} -> fieldMappings) (\s@FsxConfiguration' {} a -> s {fieldMappings = a} :: FsxConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of regular expression patterns to include certain files in your
+-- Amazon FSx file system. Files that match the patterns are included in
+-- the index. Files that don\'t match the patterns are excluded from the
+-- index. If a file matches both an inclusion and exclusion pattern, the
+-- exclusion pattern takes precedence and the file isn\'t included in the
+-- index.
+fsxConfiguration_inclusionPatterns :: Lens.Lens' FsxConfiguration (Prelude.Maybe [Prelude.Text])
+fsxConfiguration_inclusionPatterns = Lens.lens (\FsxConfiguration' {inclusionPatterns} -> inclusionPatterns) (\s@FsxConfiguration' {} a -> s {inclusionPatterns = a} :: FsxConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of an Secrets Manager secret that
+-- contains the key-value pairs required to connect to your Amazon FSx file
+-- system. Windows is currently the only supported type. The secret must
+-- contain a JSON structure with the following keys:
+--
+-- -   username—The Active Directory user name, along with the Domain Name
+--     System (DNS) domain name. For example, /user\@corp.example.com/. The
+--     Active Directory user account must have read and mounting access to
+--     the Amazon FSx file system for Windows.
+--
+-- -   password—The password of the Active Directory user account with read
+--     and mounting access to the Amazon FSx Windows file system.
+fsxConfiguration_secretArn :: Lens.Lens' FsxConfiguration (Prelude.Maybe Prelude.Text)
+fsxConfiguration_secretArn = Lens.lens (\FsxConfiguration' {secretArn} -> secretArn) (\s@FsxConfiguration' {} a -> s {secretArn = a} :: FsxConfiguration)
+
+-- | The identifier of the Amazon FSx file system.
+--
+-- You can find your file system ID on the file system dashboard in the
+-- Amazon FSx console. For information on how to create a file system in
+-- Amazon FSx console, using Windows File Server as an example, see
+-- <https://docs.aws.amazon.com/fsx/latest/WindowsGuide/getting-started-step1.html Amazon FSx Getting started guide>.
+fsxConfiguration_fileSystemId :: Lens.Lens' FsxConfiguration Prelude.Text
+fsxConfiguration_fileSystemId = Lens.lens (\FsxConfiguration' {fileSystemId} -> fileSystemId) (\s@FsxConfiguration' {} a -> s {fileSystemId = a} :: FsxConfiguration)
+
+-- | The Amazon FSx file system type. Windows is currently the only supported
+-- type.
+fsxConfiguration_fileSystemType :: Lens.Lens' FsxConfiguration FsxFileSystemType
+fsxConfiguration_fileSystemType = Lens.lens (\FsxConfiguration' {fileSystemType} -> fileSystemType) (\s@FsxConfiguration' {} a -> s {fileSystemType = a} :: FsxConfiguration)
+
+-- | Configuration information for an Amazon Virtual Private Cloud to connect
+-- to your Amazon FSx. Your Amazon FSx instance must reside inside your
+-- VPC.
+fsxConfiguration_vpcConfiguration :: Lens.Lens' FsxConfiguration DataSourceVpcConfiguration
+fsxConfiguration_vpcConfiguration = Lens.lens (\FsxConfiguration' {vpcConfiguration} -> vpcConfiguration) (\s@FsxConfiguration' {} a -> s {vpcConfiguration = a} :: FsxConfiguration)
+
+instance Data.FromJSON FsxConfiguration where
+  parseJSON =
+    Data.withObject
+      "FsxConfiguration"
+      ( \x ->
+          FsxConfiguration'
+            Prelude.<$> ( x
+                            Data..:? "ExclusionPatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "FieldMappings")
+            Prelude.<*> ( x
+                            Data..:? "InclusionPatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "SecretArn")
+            Prelude.<*> (x Data..: "FileSystemId")
+            Prelude.<*> (x Data..: "FileSystemType")
+            Prelude.<*> (x Data..: "VpcConfiguration")
+      )
+
+instance Prelude.Hashable FsxConfiguration where
+  hashWithSalt _salt FsxConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` exclusionPatterns
+      `Prelude.hashWithSalt` fieldMappings
+      `Prelude.hashWithSalt` inclusionPatterns
+      `Prelude.hashWithSalt` secretArn
+      `Prelude.hashWithSalt` fileSystemId
+      `Prelude.hashWithSalt` fileSystemType
+      `Prelude.hashWithSalt` vpcConfiguration
+
+instance Prelude.NFData FsxConfiguration where
+  rnf FsxConfiguration' {..} =
+    Prelude.rnf exclusionPatterns
+      `Prelude.seq` Prelude.rnf fieldMappings
+      `Prelude.seq` Prelude.rnf inclusionPatterns
+      `Prelude.seq` Prelude.rnf secretArn
+      `Prelude.seq` Prelude.rnf fileSystemId
+      `Prelude.seq` Prelude.rnf fileSystemType
+      `Prelude.seq` Prelude.rnf vpcConfiguration
+
+instance Data.ToJSON FsxConfiguration where
+  toJSON FsxConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ExclusionPatterns" Data..=)
+              Prelude.<$> exclusionPatterns,
+            ("FieldMappings" Data..=) Prelude.<$> fieldMappings,
+            ("InclusionPatterns" Data..=)
+              Prelude.<$> inclusionPatterns,
+            ("SecretArn" Data..=) Prelude.<$> secretArn,
+            Prelude.Just ("FileSystemId" Data..= fileSystemId),
+            Prelude.Just
+              ("FileSystemType" Data..= fileSystemType),
+            Prelude.Just
+              ("VpcConfiguration" Data..= vpcConfiguration)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/FsxFileSystemType.hs b/gen/Amazonka/Kendra/Types/FsxFileSystemType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/FsxFileSystemType.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.Kendra.Types.FsxFileSystemType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.FsxFileSystemType
+  ( FsxFileSystemType
+      ( ..,
+        FsxFileSystemType_WINDOWS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FsxFileSystemType = FsxFileSystemType'
+  { fromFsxFileSystemType ::
+      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 FsxFileSystemType_WINDOWS :: FsxFileSystemType
+pattern FsxFileSystemType_WINDOWS = FsxFileSystemType' "WINDOWS"
+
+{-# COMPLETE
+  FsxFileSystemType_WINDOWS,
+  FsxFileSystemType'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/GitHubConfiguration.hs b/gen/Amazonka/Kendra/Types/GitHubConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/GitHubConfiguration.hs
@@ -0,0 +1,725 @@
+{-# 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.Kendra.Types.GitHubConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.GitHubConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DataSourceToIndexFieldMapping
+import Amazonka.Kendra.Types.DataSourceVpcConfiguration
+import Amazonka.Kendra.Types.GitHubDocumentCrawlProperties
+import Amazonka.Kendra.Types.OnPremiseConfiguration
+import Amazonka.Kendra.Types.SaaSConfiguration
+import Amazonka.Kendra.Types.Type
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information to connect to GitHub as your data
+-- source.
+--
+-- /See:/ 'newGitHubConfiguration' smart constructor.
+data GitHubConfiguration = GitHubConfiguration'
+  { -- | A list of regular expression patterns to exclude certain file names in
+    -- your GitHub repository or repositories. File names that match the
+    -- patterns are excluded from the index. File names that don\'t match the
+    -- patterns are included in the index. If a file matches both an exclusion
+    -- and inclusion pattern, the exclusion pattern takes precedence and the
+    -- file isn\'t included in the index.
+    exclusionFileNamePatterns :: Prelude.Maybe [Prelude.Text],
+    -- | A list of regular expression patterns to exclude certain file types in
+    -- your GitHub repository or repositories. File types that match the
+    -- patterns are excluded from the index. File types that don\'t match the
+    -- patterns are included in the index. If a file matches both an exclusion
+    -- and inclusion pattern, the exclusion pattern takes precedence and the
+    -- file isn\'t included in the index.
+    exclusionFileTypePatterns :: Prelude.Maybe [Prelude.Text],
+    -- | A list of regular expression patterns to exclude certain folder names in
+    -- your GitHub repository or repositories. Folder names that match the
+    -- patterns are excluded from the index. Folder names that don\'t match the
+    -- patterns are included in the index. If a folder matches both an
+    -- exclusion and inclusion pattern, the exclusion pattern takes precedence
+    -- and the folder isn\'t included in the index.
+    exclusionFolderNamePatterns :: Prelude.Maybe [Prelude.Text],
+    -- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+    -- field names of GitHub commits to Amazon Kendra index field names. To
+    -- create custom fields, use the @UpdateIndex@ API before you map to GitHub
+    -- fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The GitHub data source field names must exist in your GitHub custom
+    -- metadata.
+    gitHubCommitConfigurationFieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | Configuration information to include certain types of GitHub content.
+    -- You can configure to index repository files only, or also include issues
+    -- and pull requests, comments, and comment attachments.
+    gitHubDocumentCrawlProperties :: Prelude.Maybe GitHubDocumentCrawlProperties,
+    -- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+    -- field names of GitHub issue attachments to Amazon Kendra index field
+    -- names. To create custom fields, use the @UpdateIndex@ API before you map
+    -- to GitHub fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The GitHub data source field names must exist in your GitHub custom
+    -- metadata.
+    gitHubIssueAttachmentConfigurationFieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+    -- field names of GitHub issue comments to Amazon Kendra index field names.
+    -- To create custom fields, use the @UpdateIndex@ API before you map to
+    -- GitHub fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The GitHub data source field names must exist in your GitHub custom
+    -- metadata.
+    gitHubIssueCommentConfigurationFieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+    -- field names of GitHub issues to Amazon Kendra index field names. To
+    -- create custom fields, use the @UpdateIndex@ API before you map to GitHub
+    -- fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The GitHub data source field names must exist in your GitHub custom
+    -- metadata.
+    gitHubIssueDocumentConfigurationFieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+    -- field names of GitHub pull request comments to Amazon Kendra index field
+    -- names. To create custom fields, use the @UpdateIndex@ API before you map
+    -- to GitHub fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The GitHub data source field names must exist in your GitHub custom
+    -- metadata.
+    gitHubPullRequestCommentConfigurationFieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+    -- field names of GitHub pull request attachments to Amazon Kendra index
+    -- field names. To create custom fields, use the @UpdateIndex@ API before
+    -- you map to GitHub fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The GitHub data source field names must exist in your GitHub custom
+    -- metadata.
+    gitHubPullRequestDocumentAttachmentConfigurationFieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+    -- field names of GitHub pull requests to Amazon Kendra index field names.
+    -- To create custom fields, use the @UpdateIndex@ API before you map to
+    -- GitHub fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The GitHub data source field names must exist in your GitHub custom
+    -- metadata.
+    gitHubPullRequestDocumentConfigurationFieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | A list of @DataSourceToIndexFieldMapping@ objects that map GitHub
+    -- repository attributes or field names to Amazon Kendra index field names.
+    -- To create custom fields, use the @UpdateIndex@ API before you map to
+    -- GitHub fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The GitHub data source field names must exist in your GitHub custom
+    -- metadata.
+    gitHubRepositoryConfigurationFieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | A list of regular expression patterns to include certain file names in
+    -- your GitHub repository or repositories. File names that match the
+    -- patterns are included in the index. File names that don\'t match the
+    -- patterns are excluded from the index. If a file matches both an
+    -- inclusion and exclusion pattern, the exclusion pattern takes precedence
+    -- and the file isn\'t included in the index.
+    inclusionFileNamePatterns :: Prelude.Maybe [Prelude.Text],
+    -- | A list of regular expression patterns to include certain file types in
+    -- your GitHub repository or repositories. File types that match the
+    -- patterns are included in the index. File types that don\'t match the
+    -- patterns are excluded from the index. If a file matches both an
+    -- inclusion and exclusion pattern, the exclusion pattern takes precedence
+    -- and the file isn\'t included in the index.
+    inclusionFileTypePatterns :: Prelude.Maybe [Prelude.Text],
+    -- | A list of regular expression patterns to include certain folder names in
+    -- your GitHub repository or repositories. Folder names that match the
+    -- patterns are included in the index. Folder names that don\'t match the
+    -- patterns are excluded from the index. If a folder matches both an
+    -- inclusion and exclusion pattern, the exclusion pattern takes precedence
+    -- and the folder isn\'t included in the index.
+    inclusionFolderNamePatterns :: Prelude.Maybe [Prelude.Text],
+    -- | Configuration information to connect to GitHub Enterprise Server (on
+    -- premises).
+    onPremiseConfiguration :: Prelude.Maybe OnPremiseConfiguration,
+    -- | A list of names of the specific repositories you want to index.
+    repositoryFilter :: Prelude.Maybe [Prelude.Text],
+    -- | Configuration information to connect to GitHub Enterprise Cloud (SaaS).
+    saaSConfiguration :: Prelude.Maybe SaaSConfiguration,
+    -- | The type of GitHub service you want to connect to—GitHub Enterprise
+    -- Cloud (SaaS) or GitHub Enterprise Server (on premises).
+    type' :: Prelude.Maybe Type,
+    -- | @TRUE@ to use the GitHub change log to determine which documents require
+    -- updating in the index. Depending on the GitHub change log\'s size, it
+    -- may take longer for Amazon Kendra to use the change log than to scan all
+    -- of your documents in GitHub.
+    useChangeLog :: Prelude.Maybe Prelude.Bool,
+    -- | Configuration information of an Amazon Virtual Private Cloud to connect
+    -- to your GitHub. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+    vpcConfiguration :: Prelude.Maybe DataSourceVpcConfiguration,
+    -- | The Amazon Resource Name (ARN) of an Secrets Manager secret that
+    -- contains the key-value pairs required to connect to your GitHub. The
+    -- secret must contain a JSON structure with the following keys:
+    --
+    -- -   personalToken—The access token created in GitHub. For more
+    --     information on creating a token in GitHub, see
+    --     <https://docs.aws.amazon.com/kendra/latest/dg/data-source-github.html Using a GitHub data source>.
+    secretArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GitHubConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'exclusionFileNamePatterns', 'gitHubConfiguration_exclusionFileNamePatterns' - A list of regular expression patterns to exclude certain file names in
+-- your GitHub repository or repositories. File names that match the
+-- patterns are excluded from the index. File names that don\'t match the
+-- patterns are included in the index. If a file matches both an exclusion
+-- and inclusion pattern, the exclusion pattern takes precedence and the
+-- file isn\'t included in the index.
+--
+-- 'exclusionFileTypePatterns', 'gitHubConfiguration_exclusionFileTypePatterns' - A list of regular expression patterns to exclude certain file types in
+-- your GitHub repository or repositories. File types that match the
+-- patterns are excluded from the index. File types that don\'t match the
+-- patterns are included in the index. If a file matches both an exclusion
+-- and inclusion pattern, the exclusion pattern takes precedence and the
+-- file isn\'t included in the index.
+--
+-- 'exclusionFolderNamePatterns', 'gitHubConfiguration_exclusionFolderNamePatterns' - A list of regular expression patterns to exclude certain folder names in
+-- your GitHub repository or repositories. Folder names that match the
+-- patterns are excluded from the index. Folder names that don\'t match the
+-- patterns are included in the index. If a folder matches both an
+-- exclusion and inclusion pattern, the exclusion pattern takes precedence
+-- and the folder isn\'t included in the index.
+--
+-- 'gitHubCommitConfigurationFieldMappings', 'gitHubConfiguration_gitHubCommitConfigurationFieldMappings' - A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of GitHub commits to Amazon Kendra index field names. To
+-- create custom fields, use the @UpdateIndex@ API before you map to GitHub
+-- fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The GitHub data source field names must exist in your GitHub custom
+-- metadata.
+--
+-- 'gitHubDocumentCrawlProperties', 'gitHubConfiguration_gitHubDocumentCrawlProperties' - Configuration information to include certain types of GitHub content.
+-- You can configure to index repository files only, or also include issues
+-- and pull requests, comments, and comment attachments.
+--
+-- 'gitHubIssueAttachmentConfigurationFieldMappings', 'gitHubConfiguration_gitHubIssueAttachmentConfigurationFieldMappings' - A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of GitHub issue attachments to Amazon Kendra index field
+-- names. To create custom fields, use the @UpdateIndex@ API before you map
+-- to GitHub fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The GitHub data source field names must exist in your GitHub custom
+-- metadata.
+--
+-- 'gitHubIssueCommentConfigurationFieldMappings', 'gitHubConfiguration_gitHubIssueCommentConfigurationFieldMappings' - A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of GitHub issue comments to Amazon Kendra index field names.
+-- To create custom fields, use the @UpdateIndex@ API before you map to
+-- GitHub fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The GitHub data source field names must exist in your GitHub custom
+-- metadata.
+--
+-- 'gitHubIssueDocumentConfigurationFieldMappings', 'gitHubConfiguration_gitHubIssueDocumentConfigurationFieldMappings' - A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of GitHub issues to Amazon Kendra index field names. To
+-- create custom fields, use the @UpdateIndex@ API before you map to GitHub
+-- fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The GitHub data source field names must exist in your GitHub custom
+-- metadata.
+--
+-- 'gitHubPullRequestCommentConfigurationFieldMappings', 'gitHubConfiguration_gitHubPullRequestCommentConfigurationFieldMappings' - A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of GitHub pull request comments to Amazon Kendra index field
+-- names. To create custom fields, use the @UpdateIndex@ API before you map
+-- to GitHub fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The GitHub data source field names must exist in your GitHub custom
+-- metadata.
+--
+-- 'gitHubPullRequestDocumentAttachmentConfigurationFieldMappings', 'gitHubConfiguration_gitHubPullRequestDocumentAttachmentConfigurationFieldMappings' - A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of GitHub pull request attachments to Amazon Kendra index
+-- field names. To create custom fields, use the @UpdateIndex@ API before
+-- you map to GitHub fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The GitHub data source field names must exist in your GitHub custom
+-- metadata.
+--
+-- 'gitHubPullRequestDocumentConfigurationFieldMappings', 'gitHubConfiguration_gitHubPullRequestDocumentConfigurationFieldMappings' - A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of GitHub pull requests to Amazon Kendra index field names.
+-- To create custom fields, use the @UpdateIndex@ API before you map to
+-- GitHub fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The GitHub data source field names must exist in your GitHub custom
+-- metadata.
+--
+-- 'gitHubRepositoryConfigurationFieldMappings', 'gitHubConfiguration_gitHubRepositoryConfigurationFieldMappings' - A list of @DataSourceToIndexFieldMapping@ objects that map GitHub
+-- repository attributes or field names to Amazon Kendra index field names.
+-- To create custom fields, use the @UpdateIndex@ API before you map to
+-- GitHub fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The GitHub data source field names must exist in your GitHub custom
+-- metadata.
+--
+-- 'inclusionFileNamePatterns', 'gitHubConfiguration_inclusionFileNamePatterns' - A list of regular expression patterns to include certain file names in
+-- your GitHub repository or repositories. File names that match the
+-- patterns are included in the index. File names that don\'t match the
+-- patterns are excluded from the index. If a file matches both an
+-- inclusion and exclusion pattern, the exclusion pattern takes precedence
+-- and the file isn\'t included in the index.
+--
+-- 'inclusionFileTypePatterns', 'gitHubConfiguration_inclusionFileTypePatterns' - A list of regular expression patterns to include certain file types in
+-- your GitHub repository or repositories. File types that match the
+-- patterns are included in the index. File types that don\'t match the
+-- patterns are excluded from the index. If a file matches both an
+-- inclusion and exclusion pattern, the exclusion pattern takes precedence
+-- and the file isn\'t included in the index.
+--
+-- 'inclusionFolderNamePatterns', 'gitHubConfiguration_inclusionFolderNamePatterns' - A list of regular expression patterns to include certain folder names in
+-- your GitHub repository or repositories. Folder names that match the
+-- patterns are included in the index. Folder names that don\'t match the
+-- patterns are excluded from the index. If a folder matches both an
+-- inclusion and exclusion pattern, the exclusion pattern takes precedence
+-- and the folder isn\'t included in the index.
+--
+-- 'onPremiseConfiguration', 'gitHubConfiguration_onPremiseConfiguration' - Configuration information to connect to GitHub Enterprise Server (on
+-- premises).
+--
+-- 'repositoryFilter', 'gitHubConfiguration_repositoryFilter' - A list of names of the specific repositories you want to index.
+--
+-- 'saaSConfiguration', 'gitHubConfiguration_saaSConfiguration' - Configuration information to connect to GitHub Enterprise Cloud (SaaS).
+--
+-- 'type'', 'gitHubConfiguration_type' - The type of GitHub service you want to connect to—GitHub Enterprise
+-- Cloud (SaaS) or GitHub Enterprise Server (on premises).
+--
+-- 'useChangeLog', 'gitHubConfiguration_useChangeLog' - @TRUE@ to use the GitHub change log to determine which documents require
+-- updating in the index. Depending on the GitHub change log\'s size, it
+-- may take longer for Amazon Kendra to use the change log than to scan all
+-- of your documents in GitHub.
+--
+-- 'vpcConfiguration', 'gitHubConfiguration_vpcConfiguration' - Configuration information of an Amazon Virtual Private Cloud to connect
+-- to your GitHub. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+--
+-- 'secretArn', 'gitHubConfiguration_secretArn' - The Amazon Resource Name (ARN) of an Secrets Manager secret that
+-- contains the key-value pairs required to connect to your GitHub. The
+-- secret must contain a JSON structure with the following keys:
+--
+-- -   personalToken—The access token created in GitHub. For more
+--     information on creating a token in GitHub, see
+--     <https://docs.aws.amazon.com/kendra/latest/dg/data-source-github.html Using a GitHub data source>.
+newGitHubConfiguration ::
+  -- | 'secretArn'
+  Prelude.Text ->
+  GitHubConfiguration
+newGitHubConfiguration pSecretArn_ =
+  GitHubConfiguration'
+    { exclusionFileNamePatterns =
+        Prelude.Nothing,
+      exclusionFileTypePatterns = Prelude.Nothing,
+      exclusionFolderNamePatterns = Prelude.Nothing,
+      gitHubCommitConfigurationFieldMappings =
+        Prelude.Nothing,
+      gitHubDocumentCrawlProperties = Prelude.Nothing,
+      gitHubIssueAttachmentConfigurationFieldMappings =
+        Prelude.Nothing,
+      gitHubIssueCommentConfigurationFieldMappings =
+        Prelude.Nothing,
+      gitHubIssueDocumentConfigurationFieldMappings =
+        Prelude.Nothing,
+      gitHubPullRequestCommentConfigurationFieldMappings =
+        Prelude.Nothing,
+      gitHubPullRequestDocumentAttachmentConfigurationFieldMappings =
+        Prelude.Nothing,
+      gitHubPullRequestDocumentConfigurationFieldMappings =
+        Prelude.Nothing,
+      gitHubRepositoryConfigurationFieldMappings =
+        Prelude.Nothing,
+      inclusionFileNamePatterns = Prelude.Nothing,
+      inclusionFileTypePatterns = Prelude.Nothing,
+      inclusionFolderNamePatterns = Prelude.Nothing,
+      onPremiseConfiguration = Prelude.Nothing,
+      repositoryFilter = Prelude.Nothing,
+      saaSConfiguration = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      useChangeLog = Prelude.Nothing,
+      vpcConfiguration = Prelude.Nothing,
+      secretArn = pSecretArn_
+    }
+
+-- | A list of regular expression patterns to exclude certain file names in
+-- your GitHub repository or repositories. File names that match the
+-- patterns are excluded from the index. File names that don\'t match the
+-- patterns are included in the index. If a file matches both an exclusion
+-- and inclusion pattern, the exclusion pattern takes precedence and the
+-- file isn\'t included in the index.
+gitHubConfiguration_exclusionFileNamePatterns :: Lens.Lens' GitHubConfiguration (Prelude.Maybe [Prelude.Text])
+gitHubConfiguration_exclusionFileNamePatterns = Lens.lens (\GitHubConfiguration' {exclusionFileNamePatterns} -> exclusionFileNamePatterns) (\s@GitHubConfiguration' {} a -> s {exclusionFileNamePatterns = a} :: GitHubConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of regular expression patterns to exclude certain file types in
+-- your GitHub repository or repositories. File types that match the
+-- patterns are excluded from the index. File types that don\'t match the
+-- patterns are included in the index. If a file matches both an exclusion
+-- and inclusion pattern, the exclusion pattern takes precedence and the
+-- file isn\'t included in the index.
+gitHubConfiguration_exclusionFileTypePatterns :: Lens.Lens' GitHubConfiguration (Prelude.Maybe [Prelude.Text])
+gitHubConfiguration_exclusionFileTypePatterns = Lens.lens (\GitHubConfiguration' {exclusionFileTypePatterns} -> exclusionFileTypePatterns) (\s@GitHubConfiguration' {} a -> s {exclusionFileTypePatterns = a} :: GitHubConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of regular expression patterns to exclude certain folder names in
+-- your GitHub repository or repositories. Folder names that match the
+-- patterns are excluded from the index. Folder names that don\'t match the
+-- patterns are included in the index. If a folder matches both an
+-- exclusion and inclusion pattern, the exclusion pattern takes precedence
+-- and the folder isn\'t included in the index.
+gitHubConfiguration_exclusionFolderNamePatterns :: Lens.Lens' GitHubConfiguration (Prelude.Maybe [Prelude.Text])
+gitHubConfiguration_exclusionFolderNamePatterns = Lens.lens (\GitHubConfiguration' {exclusionFolderNamePatterns} -> exclusionFolderNamePatterns) (\s@GitHubConfiguration' {} a -> s {exclusionFolderNamePatterns = a} :: GitHubConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of GitHub commits to Amazon Kendra index field names. To
+-- create custom fields, use the @UpdateIndex@ API before you map to GitHub
+-- fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The GitHub data source field names must exist in your GitHub custom
+-- metadata.
+gitHubConfiguration_gitHubCommitConfigurationFieldMappings :: Lens.Lens' GitHubConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+gitHubConfiguration_gitHubCommitConfigurationFieldMappings = Lens.lens (\GitHubConfiguration' {gitHubCommitConfigurationFieldMappings} -> gitHubCommitConfigurationFieldMappings) (\s@GitHubConfiguration' {} a -> s {gitHubCommitConfigurationFieldMappings = a} :: GitHubConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Configuration information to include certain types of GitHub content.
+-- You can configure to index repository files only, or also include issues
+-- and pull requests, comments, and comment attachments.
+gitHubConfiguration_gitHubDocumentCrawlProperties :: Lens.Lens' GitHubConfiguration (Prelude.Maybe GitHubDocumentCrawlProperties)
+gitHubConfiguration_gitHubDocumentCrawlProperties = Lens.lens (\GitHubConfiguration' {gitHubDocumentCrawlProperties} -> gitHubDocumentCrawlProperties) (\s@GitHubConfiguration' {} a -> s {gitHubDocumentCrawlProperties = a} :: GitHubConfiguration)
+
+-- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of GitHub issue attachments to Amazon Kendra index field
+-- names. To create custom fields, use the @UpdateIndex@ API before you map
+-- to GitHub fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The GitHub data source field names must exist in your GitHub custom
+-- metadata.
+gitHubConfiguration_gitHubIssueAttachmentConfigurationFieldMappings :: Lens.Lens' GitHubConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+gitHubConfiguration_gitHubIssueAttachmentConfigurationFieldMappings = Lens.lens (\GitHubConfiguration' {gitHubIssueAttachmentConfigurationFieldMappings} -> gitHubIssueAttachmentConfigurationFieldMappings) (\s@GitHubConfiguration' {} a -> s {gitHubIssueAttachmentConfigurationFieldMappings = a} :: GitHubConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of GitHub issue comments to Amazon Kendra index field names.
+-- To create custom fields, use the @UpdateIndex@ API before you map to
+-- GitHub fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The GitHub data source field names must exist in your GitHub custom
+-- metadata.
+gitHubConfiguration_gitHubIssueCommentConfigurationFieldMappings :: Lens.Lens' GitHubConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+gitHubConfiguration_gitHubIssueCommentConfigurationFieldMappings = Lens.lens (\GitHubConfiguration' {gitHubIssueCommentConfigurationFieldMappings} -> gitHubIssueCommentConfigurationFieldMappings) (\s@GitHubConfiguration' {} a -> s {gitHubIssueCommentConfigurationFieldMappings = a} :: GitHubConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of GitHub issues to Amazon Kendra index field names. To
+-- create custom fields, use the @UpdateIndex@ API before you map to GitHub
+-- fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The GitHub data source field names must exist in your GitHub custom
+-- metadata.
+gitHubConfiguration_gitHubIssueDocumentConfigurationFieldMappings :: Lens.Lens' GitHubConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+gitHubConfiguration_gitHubIssueDocumentConfigurationFieldMappings = Lens.lens (\GitHubConfiguration' {gitHubIssueDocumentConfigurationFieldMappings} -> gitHubIssueDocumentConfigurationFieldMappings) (\s@GitHubConfiguration' {} a -> s {gitHubIssueDocumentConfigurationFieldMappings = a} :: GitHubConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of GitHub pull request comments to Amazon Kendra index field
+-- names. To create custom fields, use the @UpdateIndex@ API before you map
+-- to GitHub fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The GitHub data source field names must exist in your GitHub custom
+-- metadata.
+gitHubConfiguration_gitHubPullRequestCommentConfigurationFieldMappings :: Lens.Lens' GitHubConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+gitHubConfiguration_gitHubPullRequestCommentConfigurationFieldMappings = Lens.lens (\GitHubConfiguration' {gitHubPullRequestCommentConfigurationFieldMappings} -> gitHubPullRequestCommentConfigurationFieldMappings) (\s@GitHubConfiguration' {} a -> s {gitHubPullRequestCommentConfigurationFieldMappings = a} :: GitHubConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of GitHub pull request attachments to Amazon Kendra index
+-- field names. To create custom fields, use the @UpdateIndex@ API before
+-- you map to GitHub fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The GitHub data source field names must exist in your GitHub custom
+-- metadata.
+gitHubConfiguration_gitHubPullRequestDocumentAttachmentConfigurationFieldMappings :: Lens.Lens' GitHubConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+gitHubConfiguration_gitHubPullRequestDocumentAttachmentConfigurationFieldMappings = Lens.lens (\GitHubConfiguration' {gitHubPullRequestDocumentAttachmentConfigurationFieldMappings} -> gitHubPullRequestDocumentAttachmentConfigurationFieldMappings) (\s@GitHubConfiguration' {} a -> s {gitHubPullRequestDocumentAttachmentConfigurationFieldMappings = a} :: GitHubConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of GitHub pull requests to Amazon Kendra index field names.
+-- To create custom fields, use the @UpdateIndex@ API before you map to
+-- GitHub fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The GitHub data source field names must exist in your GitHub custom
+-- metadata.
+gitHubConfiguration_gitHubPullRequestDocumentConfigurationFieldMappings :: Lens.Lens' GitHubConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+gitHubConfiguration_gitHubPullRequestDocumentConfigurationFieldMappings = Lens.lens (\GitHubConfiguration' {gitHubPullRequestDocumentConfigurationFieldMappings} -> gitHubPullRequestDocumentConfigurationFieldMappings) (\s@GitHubConfiguration' {} a -> s {gitHubPullRequestDocumentConfigurationFieldMappings = a} :: GitHubConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of @DataSourceToIndexFieldMapping@ objects that map GitHub
+-- repository attributes or field names to Amazon Kendra index field names.
+-- To create custom fields, use the @UpdateIndex@ API before you map to
+-- GitHub fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The GitHub data source field names must exist in your GitHub custom
+-- metadata.
+gitHubConfiguration_gitHubRepositoryConfigurationFieldMappings :: Lens.Lens' GitHubConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+gitHubConfiguration_gitHubRepositoryConfigurationFieldMappings = Lens.lens (\GitHubConfiguration' {gitHubRepositoryConfigurationFieldMappings} -> gitHubRepositoryConfigurationFieldMappings) (\s@GitHubConfiguration' {} a -> s {gitHubRepositoryConfigurationFieldMappings = a} :: GitHubConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of regular expression patterns to include certain file names in
+-- your GitHub repository or repositories. File names that match the
+-- patterns are included in the index. File names that don\'t match the
+-- patterns are excluded from the index. If a file matches both an
+-- inclusion and exclusion pattern, the exclusion pattern takes precedence
+-- and the file isn\'t included in the index.
+gitHubConfiguration_inclusionFileNamePatterns :: Lens.Lens' GitHubConfiguration (Prelude.Maybe [Prelude.Text])
+gitHubConfiguration_inclusionFileNamePatterns = Lens.lens (\GitHubConfiguration' {inclusionFileNamePatterns} -> inclusionFileNamePatterns) (\s@GitHubConfiguration' {} a -> s {inclusionFileNamePatterns = a} :: GitHubConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of regular expression patterns to include certain file types in
+-- your GitHub repository or repositories. File types that match the
+-- patterns are included in the index. File types that don\'t match the
+-- patterns are excluded from the index. If a file matches both an
+-- inclusion and exclusion pattern, the exclusion pattern takes precedence
+-- and the file isn\'t included in the index.
+gitHubConfiguration_inclusionFileTypePatterns :: Lens.Lens' GitHubConfiguration (Prelude.Maybe [Prelude.Text])
+gitHubConfiguration_inclusionFileTypePatterns = Lens.lens (\GitHubConfiguration' {inclusionFileTypePatterns} -> inclusionFileTypePatterns) (\s@GitHubConfiguration' {} a -> s {inclusionFileTypePatterns = a} :: GitHubConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of regular expression patterns to include certain folder names in
+-- your GitHub repository or repositories. Folder names that match the
+-- patterns are included in the index. Folder names that don\'t match the
+-- patterns are excluded from the index. If a folder matches both an
+-- inclusion and exclusion pattern, the exclusion pattern takes precedence
+-- and the folder isn\'t included in the index.
+gitHubConfiguration_inclusionFolderNamePatterns :: Lens.Lens' GitHubConfiguration (Prelude.Maybe [Prelude.Text])
+gitHubConfiguration_inclusionFolderNamePatterns = Lens.lens (\GitHubConfiguration' {inclusionFolderNamePatterns} -> inclusionFolderNamePatterns) (\s@GitHubConfiguration' {} a -> s {inclusionFolderNamePatterns = a} :: GitHubConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Configuration information to connect to GitHub Enterprise Server (on
+-- premises).
+gitHubConfiguration_onPremiseConfiguration :: Lens.Lens' GitHubConfiguration (Prelude.Maybe OnPremiseConfiguration)
+gitHubConfiguration_onPremiseConfiguration = Lens.lens (\GitHubConfiguration' {onPremiseConfiguration} -> onPremiseConfiguration) (\s@GitHubConfiguration' {} a -> s {onPremiseConfiguration = a} :: GitHubConfiguration)
+
+-- | A list of names of the specific repositories you want to index.
+gitHubConfiguration_repositoryFilter :: Lens.Lens' GitHubConfiguration (Prelude.Maybe [Prelude.Text])
+gitHubConfiguration_repositoryFilter = Lens.lens (\GitHubConfiguration' {repositoryFilter} -> repositoryFilter) (\s@GitHubConfiguration' {} a -> s {repositoryFilter = a} :: GitHubConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Configuration information to connect to GitHub Enterprise Cloud (SaaS).
+gitHubConfiguration_saaSConfiguration :: Lens.Lens' GitHubConfiguration (Prelude.Maybe SaaSConfiguration)
+gitHubConfiguration_saaSConfiguration = Lens.lens (\GitHubConfiguration' {saaSConfiguration} -> saaSConfiguration) (\s@GitHubConfiguration' {} a -> s {saaSConfiguration = a} :: GitHubConfiguration)
+
+-- | The type of GitHub service you want to connect to—GitHub Enterprise
+-- Cloud (SaaS) or GitHub Enterprise Server (on premises).
+gitHubConfiguration_type :: Lens.Lens' GitHubConfiguration (Prelude.Maybe Type)
+gitHubConfiguration_type = Lens.lens (\GitHubConfiguration' {type'} -> type') (\s@GitHubConfiguration' {} a -> s {type' = a} :: GitHubConfiguration)
+
+-- | @TRUE@ to use the GitHub change log to determine which documents require
+-- updating in the index. Depending on the GitHub change log\'s size, it
+-- may take longer for Amazon Kendra to use the change log than to scan all
+-- of your documents in GitHub.
+gitHubConfiguration_useChangeLog :: Lens.Lens' GitHubConfiguration (Prelude.Maybe Prelude.Bool)
+gitHubConfiguration_useChangeLog = Lens.lens (\GitHubConfiguration' {useChangeLog} -> useChangeLog) (\s@GitHubConfiguration' {} a -> s {useChangeLog = a} :: GitHubConfiguration)
+
+-- | Configuration information of an Amazon Virtual Private Cloud to connect
+-- to your GitHub. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+gitHubConfiguration_vpcConfiguration :: Lens.Lens' GitHubConfiguration (Prelude.Maybe DataSourceVpcConfiguration)
+gitHubConfiguration_vpcConfiguration = Lens.lens (\GitHubConfiguration' {vpcConfiguration} -> vpcConfiguration) (\s@GitHubConfiguration' {} a -> s {vpcConfiguration = a} :: GitHubConfiguration)
+
+-- | The Amazon Resource Name (ARN) of an Secrets Manager secret that
+-- contains the key-value pairs required to connect to your GitHub. The
+-- secret must contain a JSON structure with the following keys:
+--
+-- -   personalToken—The access token created in GitHub. For more
+--     information on creating a token in GitHub, see
+--     <https://docs.aws.amazon.com/kendra/latest/dg/data-source-github.html Using a GitHub data source>.
+gitHubConfiguration_secretArn :: Lens.Lens' GitHubConfiguration Prelude.Text
+gitHubConfiguration_secretArn = Lens.lens (\GitHubConfiguration' {secretArn} -> secretArn) (\s@GitHubConfiguration' {} a -> s {secretArn = a} :: GitHubConfiguration)
+
+instance Data.FromJSON GitHubConfiguration where
+  parseJSON =
+    Data.withObject
+      "GitHubConfiguration"
+      ( \x ->
+          GitHubConfiguration'
+            Prelude.<$> ( x
+                            Data..:? "ExclusionFileNamePatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "ExclusionFileTypePatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "ExclusionFolderNamePatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "GitHubCommitConfigurationFieldMappings")
+            Prelude.<*> (x Data..:? "GitHubDocumentCrawlProperties")
+            Prelude.<*> ( x
+                            Data..:? "GitHubIssueAttachmentConfigurationFieldMappings"
+                        )
+            Prelude.<*> ( x
+                            Data..:? "GitHubIssueCommentConfigurationFieldMappings"
+                        )
+            Prelude.<*> ( x
+                            Data..:? "GitHubIssueDocumentConfigurationFieldMappings"
+                        )
+            Prelude.<*> ( x
+                            Data..:? "GitHubPullRequestCommentConfigurationFieldMappings"
+                        )
+            Prelude.<*> ( x
+                            Data..:? "GitHubPullRequestDocumentAttachmentConfigurationFieldMappings"
+                        )
+            Prelude.<*> ( x
+                            Data..:? "GitHubPullRequestDocumentConfigurationFieldMappings"
+                        )
+            Prelude.<*> ( x
+                            Data..:? "GitHubRepositoryConfigurationFieldMappings"
+                        )
+            Prelude.<*> ( x
+                            Data..:? "InclusionFileNamePatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "InclusionFileTypePatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "InclusionFolderNamePatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "OnPremiseConfiguration")
+            Prelude.<*> ( x
+                            Data..:? "RepositoryFilter"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "SaaSConfiguration")
+            Prelude.<*> (x Data..:? "Type")
+            Prelude.<*> (x Data..:? "UseChangeLog")
+            Prelude.<*> (x Data..:? "VpcConfiguration")
+            Prelude.<*> (x Data..: "SecretArn")
+      )
+
+instance Prelude.Hashable GitHubConfiguration where
+  hashWithSalt _salt GitHubConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` exclusionFileNamePatterns
+      `Prelude.hashWithSalt` exclusionFileTypePatterns
+      `Prelude.hashWithSalt` exclusionFolderNamePatterns
+      `Prelude.hashWithSalt` gitHubCommitConfigurationFieldMappings
+      `Prelude.hashWithSalt` gitHubDocumentCrawlProperties
+      `Prelude.hashWithSalt` gitHubIssueAttachmentConfigurationFieldMappings
+      `Prelude.hashWithSalt` gitHubIssueCommentConfigurationFieldMappings
+      `Prelude.hashWithSalt` gitHubIssueDocumentConfigurationFieldMappings
+      `Prelude.hashWithSalt` gitHubPullRequestCommentConfigurationFieldMappings
+      `Prelude.hashWithSalt` gitHubPullRequestDocumentAttachmentConfigurationFieldMappings
+      `Prelude.hashWithSalt` gitHubPullRequestDocumentConfigurationFieldMappings
+      `Prelude.hashWithSalt` gitHubRepositoryConfigurationFieldMappings
+      `Prelude.hashWithSalt` inclusionFileNamePatterns
+      `Prelude.hashWithSalt` inclusionFileTypePatterns
+      `Prelude.hashWithSalt` inclusionFolderNamePatterns
+      `Prelude.hashWithSalt` onPremiseConfiguration
+      `Prelude.hashWithSalt` repositoryFilter
+      `Prelude.hashWithSalt` saaSConfiguration
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` useChangeLog
+      `Prelude.hashWithSalt` vpcConfiguration
+      `Prelude.hashWithSalt` secretArn
+
+instance Prelude.NFData GitHubConfiguration where
+  rnf GitHubConfiguration' {..} =
+    Prelude.rnf exclusionFileNamePatterns
+      `Prelude.seq` Prelude.rnf exclusionFileTypePatterns
+      `Prelude.seq` Prelude.rnf exclusionFolderNamePatterns
+      `Prelude.seq` Prelude.rnf gitHubCommitConfigurationFieldMappings
+      `Prelude.seq` Prelude.rnf gitHubDocumentCrawlProperties
+      `Prelude.seq` Prelude.rnf
+        gitHubIssueAttachmentConfigurationFieldMappings
+      `Prelude.seq` Prelude.rnf
+        gitHubIssueCommentConfigurationFieldMappings
+      `Prelude.seq` Prelude.rnf
+        gitHubIssueDocumentConfigurationFieldMappings
+      `Prelude.seq` Prelude.rnf
+        gitHubPullRequestCommentConfigurationFieldMappings
+      `Prelude.seq` Prelude.rnf
+        gitHubPullRequestDocumentAttachmentConfigurationFieldMappings
+      `Prelude.seq` Prelude.rnf
+        gitHubPullRequestDocumentConfigurationFieldMappings
+      `Prelude.seq` Prelude.rnf
+        gitHubRepositoryConfigurationFieldMappings
+      `Prelude.seq` Prelude.rnf inclusionFileNamePatterns
+      `Prelude.seq` Prelude.rnf inclusionFileTypePatterns
+      `Prelude.seq` Prelude.rnf inclusionFolderNamePatterns
+      `Prelude.seq` Prelude.rnf onPremiseConfiguration
+      `Prelude.seq` Prelude.rnf repositoryFilter
+      `Prelude.seq` Prelude.rnf saaSConfiguration
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf useChangeLog
+      `Prelude.seq` Prelude.rnf vpcConfiguration
+      `Prelude.seq` Prelude.rnf secretArn
+
+instance Data.ToJSON GitHubConfiguration where
+  toJSON GitHubConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ExclusionFileNamePatterns" Data..=)
+              Prelude.<$> exclusionFileNamePatterns,
+            ("ExclusionFileTypePatterns" Data..=)
+              Prelude.<$> exclusionFileTypePatterns,
+            ("ExclusionFolderNamePatterns" Data..=)
+              Prelude.<$> exclusionFolderNamePatterns,
+            ("GitHubCommitConfigurationFieldMappings" Data..=)
+              Prelude.<$> gitHubCommitConfigurationFieldMappings,
+            ("GitHubDocumentCrawlProperties" Data..=)
+              Prelude.<$> gitHubDocumentCrawlProperties,
+            ( "GitHubIssueAttachmentConfigurationFieldMappings"
+                Data..=
+            )
+              Prelude.<$> gitHubIssueAttachmentConfigurationFieldMappings,
+            ( "GitHubIssueCommentConfigurationFieldMappings"
+                Data..=
+            )
+              Prelude.<$> gitHubIssueCommentConfigurationFieldMappings,
+            ( "GitHubIssueDocumentConfigurationFieldMappings"
+                Data..=
+            )
+              Prelude.<$> gitHubIssueDocumentConfigurationFieldMappings,
+            ( "GitHubPullRequestCommentConfigurationFieldMappings"
+                Data..=
+            )
+              Prelude.<$> gitHubPullRequestCommentConfigurationFieldMappings,
+            ( "GitHubPullRequestDocumentAttachmentConfigurationFieldMappings"
+                Data..=
+            )
+              Prelude.<$> gitHubPullRequestDocumentAttachmentConfigurationFieldMappings,
+            ( "GitHubPullRequestDocumentConfigurationFieldMappings"
+                Data..=
+            )
+              Prelude.<$> gitHubPullRequestDocumentConfigurationFieldMappings,
+            ( "GitHubRepositoryConfigurationFieldMappings"
+                Data..=
+            )
+              Prelude.<$> gitHubRepositoryConfigurationFieldMappings,
+            ("InclusionFileNamePatterns" Data..=)
+              Prelude.<$> inclusionFileNamePatterns,
+            ("InclusionFileTypePatterns" Data..=)
+              Prelude.<$> inclusionFileTypePatterns,
+            ("InclusionFolderNamePatterns" Data..=)
+              Prelude.<$> inclusionFolderNamePatterns,
+            ("OnPremiseConfiguration" Data..=)
+              Prelude.<$> onPremiseConfiguration,
+            ("RepositoryFilter" Data..=)
+              Prelude.<$> repositoryFilter,
+            ("SaaSConfiguration" Data..=)
+              Prelude.<$> saaSConfiguration,
+            ("Type" Data..=) Prelude.<$> type',
+            ("UseChangeLog" Data..=) Prelude.<$> useChangeLog,
+            ("VpcConfiguration" Data..=)
+              Prelude.<$> vpcConfiguration,
+            Prelude.Just ("SecretArn" Data..= secretArn)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/GitHubDocumentCrawlProperties.hs b/gen/Amazonka/Kendra/Types/GitHubDocumentCrawlProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/GitHubDocumentCrawlProperties.hs
@@ -0,0 +1,173 @@
+{-# 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.Kendra.Types.GitHubDocumentCrawlProperties
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.GitHubDocumentCrawlProperties 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 configuration information to include certain types of
+-- GitHub content. You can configure to index repository files only, or
+-- also include issues and pull requests, comments, and comment
+-- attachments.
+--
+-- /See:/ 'newGitHubDocumentCrawlProperties' smart constructor.
+data GitHubDocumentCrawlProperties = GitHubDocumentCrawlProperties'
+  { -- | @TRUE@ to index all issues within a repository.
+    crawlIssue :: Prelude.Maybe Prelude.Bool,
+    -- | @TRUE@ to index all comments on issues.
+    crawlIssueComment :: Prelude.Maybe Prelude.Bool,
+    -- | @TRUE@ to include all comment attachments for issues.
+    crawlIssueCommentAttachment :: Prelude.Maybe Prelude.Bool,
+    -- | @TRUE@ to index all pull requests within a repository.
+    crawlPullRequest :: Prelude.Maybe Prelude.Bool,
+    -- | @TRUE@ to index all comments on pull requests.
+    crawlPullRequestComment :: Prelude.Maybe Prelude.Bool,
+    -- | @TRUE@ to include all comment attachments for pull requests.
+    crawlPullRequestCommentAttachment :: Prelude.Maybe Prelude.Bool,
+    -- | @TRUE@ to index all files with a repository.
+    crawlRepositoryDocuments :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GitHubDocumentCrawlProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'crawlIssue', 'gitHubDocumentCrawlProperties_crawlIssue' - @TRUE@ to index all issues within a repository.
+--
+-- 'crawlIssueComment', 'gitHubDocumentCrawlProperties_crawlIssueComment' - @TRUE@ to index all comments on issues.
+--
+-- 'crawlIssueCommentAttachment', 'gitHubDocumentCrawlProperties_crawlIssueCommentAttachment' - @TRUE@ to include all comment attachments for issues.
+--
+-- 'crawlPullRequest', 'gitHubDocumentCrawlProperties_crawlPullRequest' - @TRUE@ to index all pull requests within a repository.
+--
+-- 'crawlPullRequestComment', 'gitHubDocumentCrawlProperties_crawlPullRequestComment' - @TRUE@ to index all comments on pull requests.
+--
+-- 'crawlPullRequestCommentAttachment', 'gitHubDocumentCrawlProperties_crawlPullRequestCommentAttachment' - @TRUE@ to include all comment attachments for pull requests.
+--
+-- 'crawlRepositoryDocuments', 'gitHubDocumentCrawlProperties_crawlRepositoryDocuments' - @TRUE@ to index all files with a repository.
+newGitHubDocumentCrawlProperties ::
+  GitHubDocumentCrawlProperties
+newGitHubDocumentCrawlProperties =
+  GitHubDocumentCrawlProperties'
+    { crawlIssue =
+        Prelude.Nothing,
+      crawlIssueComment = Prelude.Nothing,
+      crawlIssueCommentAttachment =
+        Prelude.Nothing,
+      crawlPullRequest = Prelude.Nothing,
+      crawlPullRequestComment = Prelude.Nothing,
+      crawlPullRequestCommentAttachment =
+        Prelude.Nothing,
+      crawlRepositoryDocuments = Prelude.Nothing
+    }
+
+-- | @TRUE@ to index all issues within a repository.
+gitHubDocumentCrawlProperties_crawlIssue :: Lens.Lens' GitHubDocumentCrawlProperties (Prelude.Maybe Prelude.Bool)
+gitHubDocumentCrawlProperties_crawlIssue = Lens.lens (\GitHubDocumentCrawlProperties' {crawlIssue} -> crawlIssue) (\s@GitHubDocumentCrawlProperties' {} a -> s {crawlIssue = a} :: GitHubDocumentCrawlProperties)
+
+-- | @TRUE@ to index all comments on issues.
+gitHubDocumentCrawlProperties_crawlIssueComment :: Lens.Lens' GitHubDocumentCrawlProperties (Prelude.Maybe Prelude.Bool)
+gitHubDocumentCrawlProperties_crawlIssueComment = Lens.lens (\GitHubDocumentCrawlProperties' {crawlIssueComment} -> crawlIssueComment) (\s@GitHubDocumentCrawlProperties' {} a -> s {crawlIssueComment = a} :: GitHubDocumentCrawlProperties)
+
+-- | @TRUE@ to include all comment attachments for issues.
+gitHubDocumentCrawlProperties_crawlIssueCommentAttachment :: Lens.Lens' GitHubDocumentCrawlProperties (Prelude.Maybe Prelude.Bool)
+gitHubDocumentCrawlProperties_crawlIssueCommentAttachment = Lens.lens (\GitHubDocumentCrawlProperties' {crawlIssueCommentAttachment} -> crawlIssueCommentAttachment) (\s@GitHubDocumentCrawlProperties' {} a -> s {crawlIssueCommentAttachment = a} :: GitHubDocumentCrawlProperties)
+
+-- | @TRUE@ to index all pull requests within a repository.
+gitHubDocumentCrawlProperties_crawlPullRequest :: Lens.Lens' GitHubDocumentCrawlProperties (Prelude.Maybe Prelude.Bool)
+gitHubDocumentCrawlProperties_crawlPullRequest = Lens.lens (\GitHubDocumentCrawlProperties' {crawlPullRequest} -> crawlPullRequest) (\s@GitHubDocumentCrawlProperties' {} a -> s {crawlPullRequest = a} :: GitHubDocumentCrawlProperties)
+
+-- | @TRUE@ to index all comments on pull requests.
+gitHubDocumentCrawlProperties_crawlPullRequestComment :: Lens.Lens' GitHubDocumentCrawlProperties (Prelude.Maybe Prelude.Bool)
+gitHubDocumentCrawlProperties_crawlPullRequestComment = Lens.lens (\GitHubDocumentCrawlProperties' {crawlPullRequestComment} -> crawlPullRequestComment) (\s@GitHubDocumentCrawlProperties' {} a -> s {crawlPullRequestComment = a} :: GitHubDocumentCrawlProperties)
+
+-- | @TRUE@ to include all comment attachments for pull requests.
+gitHubDocumentCrawlProperties_crawlPullRequestCommentAttachment :: Lens.Lens' GitHubDocumentCrawlProperties (Prelude.Maybe Prelude.Bool)
+gitHubDocumentCrawlProperties_crawlPullRequestCommentAttachment = Lens.lens (\GitHubDocumentCrawlProperties' {crawlPullRequestCommentAttachment} -> crawlPullRequestCommentAttachment) (\s@GitHubDocumentCrawlProperties' {} a -> s {crawlPullRequestCommentAttachment = a} :: GitHubDocumentCrawlProperties)
+
+-- | @TRUE@ to index all files with a repository.
+gitHubDocumentCrawlProperties_crawlRepositoryDocuments :: Lens.Lens' GitHubDocumentCrawlProperties (Prelude.Maybe Prelude.Bool)
+gitHubDocumentCrawlProperties_crawlRepositoryDocuments = Lens.lens (\GitHubDocumentCrawlProperties' {crawlRepositoryDocuments} -> crawlRepositoryDocuments) (\s@GitHubDocumentCrawlProperties' {} a -> s {crawlRepositoryDocuments = a} :: GitHubDocumentCrawlProperties)
+
+instance Data.FromJSON GitHubDocumentCrawlProperties where
+  parseJSON =
+    Data.withObject
+      "GitHubDocumentCrawlProperties"
+      ( \x ->
+          GitHubDocumentCrawlProperties'
+            Prelude.<$> (x Data..:? "CrawlIssue")
+            Prelude.<*> (x Data..:? "CrawlIssueComment")
+            Prelude.<*> (x Data..:? "CrawlIssueCommentAttachment")
+            Prelude.<*> (x Data..:? "CrawlPullRequest")
+            Prelude.<*> (x Data..:? "CrawlPullRequestComment")
+            Prelude.<*> (x Data..:? "CrawlPullRequestCommentAttachment")
+            Prelude.<*> (x Data..:? "CrawlRepositoryDocuments")
+      )
+
+instance
+  Prelude.Hashable
+    GitHubDocumentCrawlProperties
+  where
+  hashWithSalt _salt GitHubDocumentCrawlProperties' {..} =
+    _salt
+      `Prelude.hashWithSalt` crawlIssue
+      `Prelude.hashWithSalt` crawlIssueComment
+      `Prelude.hashWithSalt` crawlIssueCommentAttachment
+      `Prelude.hashWithSalt` crawlPullRequest
+      `Prelude.hashWithSalt` crawlPullRequestComment
+      `Prelude.hashWithSalt` crawlPullRequestCommentAttachment
+      `Prelude.hashWithSalt` crawlRepositoryDocuments
+
+instance Prelude.NFData GitHubDocumentCrawlProperties where
+  rnf GitHubDocumentCrawlProperties' {..} =
+    Prelude.rnf crawlIssue
+      `Prelude.seq` Prelude.rnf crawlIssueComment
+      `Prelude.seq` Prelude.rnf crawlIssueCommentAttachment
+      `Prelude.seq` Prelude.rnf crawlPullRequest
+      `Prelude.seq` Prelude.rnf crawlPullRequestComment
+      `Prelude.seq` Prelude.rnf crawlPullRequestCommentAttachment
+      `Prelude.seq` Prelude.rnf crawlRepositoryDocuments
+
+instance Data.ToJSON GitHubDocumentCrawlProperties where
+  toJSON GitHubDocumentCrawlProperties' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CrawlIssue" Data..=) Prelude.<$> crawlIssue,
+            ("CrawlIssueComment" Data..=)
+              Prelude.<$> crawlIssueComment,
+            ("CrawlIssueCommentAttachment" Data..=)
+              Prelude.<$> crawlIssueCommentAttachment,
+            ("CrawlPullRequest" Data..=)
+              Prelude.<$> crawlPullRequest,
+            ("CrawlPullRequestComment" Data..=)
+              Prelude.<$> crawlPullRequestComment,
+            ("CrawlPullRequestCommentAttachment" Data..=)
+              Prelude.<$> crawlPullRequestCommentAttachment,
+            ("CrawlRepositoryDocuments" Data..=)
+              Prelude.<$> crawlRepositoryDocuments
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/GoogleDriveConfiguration.hs b/gen/Amazonka/Kendra/Types/GoogleDriveConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/GoogleDriveConfiguration.hs
@@ -0,0 +1,258 @@
+{-# 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.Kendra.Types.GoogleDriveConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.GoogleDriveConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DataSourceToIndexFieldMapping
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information to connect to Google Drive as
+-- your data source.
+--
+-- /See:/ 'newGoogleDriveConfiguration' smart constructor.
+data GoogleDriveConfiguration = GoogleDriveConfiguration'
+  { -- | A list of MIME types to exclude from the index. All documents matching
+    -- the specified MIME type are excluded.
+    --
+    -- For a list of MIME types, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/data-source-google-drive.html Using a Google Workspace Drive data source>.
+    excludeMimeTypes :: Prelude.Maybe [Prelude.Text],
+    -- | A list of identifiers or shared drives to exclude from the index. All
+    -- files and folders stored on the shared drive are excluded.
+    excludeSharedDrives :: Prelude.Maybe [Prelude.Text],
+    -- | A list of email addresses of the users. Documents owned by these users
+    -- are excluded from the index. Documents shared with excluded users are
+    -- indexed unless they are excluded in another way.
+    excludeUserAccounts :: Prelude.Maybe [Prelude.Text],
+    -- | A list of regular expression patterns to exclude certain items in your
+    -- Google Drive, including shared drives and users\' My Drives. Items that
+    -- match the patterns are excluded from the index. Items that don\'t match
+    -- the patterns are included in the index. If an item matches both an
+    -- inclusion and exclusion pattern, the exclusion pattern takes precedence
+    -- and the item isn\'t included in the index.
+    exclusionPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | Maps Google Drive data source attributes or field names to Amazon Kendra
+    -- index field names. To create custom fields, use the @UpdateIndex@ API
+    -- before you map to Google Drive fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The Google Drive data source field names must exist in your Google Drive
+    -- custom metadata.
+    fieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | A list of regular expression patterns to include certain items in your
+    -- Google Drive, including shared drives and users\' My Drives. Items that
+    -- match the patterns are included in the index. Items that don\'t match
+    -- the patterns are excluded from the index. If an item matches both an
+    -- inclusion and exclusion pattern, the exclusion pattern takes precedence
+    -- and the item isn\'t included in the index.
+    inclusionPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | The Amazon Resource Name (ARN) of a Secrets Managersecret that contains
+    -- the credentials required to connect to Google Drive. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/data-source-google-drive.html Using a Google Workspace Drive data source>.
+    secretArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GoogleDriveConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'excludeMimeTypes', 'googleDriveConfiguration_excludeMimeTypes' - A list of MIME types to exclude from the index. All documents matching
+-- the specified MIME type are excluded.
+--
+-- For a list of MIME types, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/data-source-google-drive.html Using a Google Workspace Drive data source>.
+--
+-- 'excludeSharedDrives', 'googleDriveConfiguration_excludeSharedDrives' - A list of identifiers or shared drives to exclude from the index. All
+-- files and folders stored on the shared drive are excluded.
+--
+-- 'excludeUserAccounts', 'googleDriveConfiguration_excludeUserAccounts' - A list of email addresses of the users. Documents owned by these users
+-- are excluded from the index. Documents shared with excluded users are
+-- indexed unless they are excluded in another way.
+--
+-- 'exclusionPatterns', 'googleDriveConfiguration_exclusionPatterns' - A list of regular expression patterns to exclude certain items in your
+-- Google Drive, including shared drives and users\' My Drives. Items that
+-- match the patterns are excluded from the index. Items that don\'t match
+-- the patterns are included in the index. If an item matches both an
+-- inclusion and exclusion pattern, the exclusion pattern takes precedence
+-- and the item isn\'t included in the index.
+--
+-- 'fieldMappings', 'googleDriveConfiguration_fieldMappings' - Maps Google Drive data source attributes or field names to Amazon Kendra
+-- index field names. To create custom fields, use the @UpdateIndex@ API
+-- before you map to Google Drive fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Google Drive data source field names must exist in your Google Drive
+-- custom metadata.
+--
+-- 'inclusionPatterns', 'googleDriveConfiguration_inclusionPatterns' - A list of regular expression patterns to include certain items in your
+-- Google Drive, including shared drives and users\' My Drives. Items that
+-- match the patterns are included in the index. Items that don\'t match
+-- the patterns are excluded from the index. If an item matches both an
+-- inclusion and exclusion pattern, the exclusion pattern takes precedence
+-- and the item isn\'t included in the index.
+--
+-- 'secretArn', 'googleDriveConfiguration_secretArn' - The Amazon Resource Name (ARN) of a Secrets Managersecret that contains
+-- the credentials required to connect to Google Drive. For more
+-- information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/data-source-google-drive.html Using a Google Workspace Drive data source>.
+newGoogleDriveConfiguration ::
+  -- | 'secretArn'
+  Prelude.Text ->
+  GoogleDriveConfiguration
+newGoogleDriveConfiguration pSecretArn_ =
+  GoogleDriveConfiguration'
+    { excludeMimeTypes =
+        Prelude.Nothing,
+      excludeSharedDrives = Prelude.Nothing,
+      excludeUserAccounts = Prelude.Nothing,
+      exclusionPatterns = Prelude.Nothing,
+      fieldMappings = Prelude.Nothing,
+      inclusionPatterns = Prelude.Nothing,
+      secretArn = pSecretArn_
+    }
+
+-- | A list of MIME types to exclude from the index. All documents matching
+-- the specified MIME type are excluded.
+--
+-- For a list of MIME types, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/data-source-google-drive.html Using a Google Workspace Drive data source>.
+googleDriveConfiguration_excludeMimeTypes :: Lens.Lens' GoogleDriveConfiguration (Prelude.Maybe [Prelude.Text])
+googleDriveConfiguration_excludeMimeTypes = Lens.lens (\GoogleDriveConfiguration' {excludeMimeTypes} -> excludeMimeTypes) (\s@GoogleDriveConfiguration' {} a -> s {excludeMimeTypes = a} :: GoogleDriveConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of identifiers or shared drives to exclude from the index. All
+-- files and folders stored on the shared drive are excluded.
+googleDriveConfiguration_excludeSharedDrives :: Lens.Lens' GoogleDriveConfiguration (Prelude.Maybe [Prelude.Text])
+googleDriveConfiguration_excludeSharedDrives = Lens.lens (\GoogleDriveConfiguration' {excludeSharedDrives} -> excludeSharedDrives) (\s@GoogleDriveConfiguration' {} a -> s {excludeSharedDrives = a} :: GoogleDriveConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of email addresses of the users. Documents owned by these users
+-- are excluded from the index. Documents shared with excluded users are
+-- indexed unless they are excluded in another way.
+googleDriveConfiguration_excludeUserAccounts :: Lens.Lens' GoogleDriveConfiguration (Prelude.Maybe [Prelude.Text])
+googleDriveConfiguration_excludeUserAccounts = Lens.lens (\GoogleDriveConfiguration' {excludeUserAccounts} -> excludeUserAccounts) (\s@GoogleDriveConfiguration' {} a -> s {excludeUserAccounts = a} :: GoogleDriveConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of regular expression patterns to exclude certain items in your
+-- Google Drive, including shared drives and users\' My Drives. Items that
+-- match the patterns are excluded from the index. Items that don\'t match
+-- the patterns are included in the index. If an item matches both an
+-- inclusion and exclusion pattern, the exclusion pattern takes precedence
+-- and the item isn\'t included in the index.
+googleDriveConfiguration_exclusionPatterns :: Lens.Lens' GoogleDriveConfiguration (Prelude.Maybe [Prelude.Text])
+googleDriveConfiguration_exclusionPatterns = Lens.lens (\GoogleDriveConfiguration' {exclusionPatterns} -> exclusionPatterns) (\s@GoogleDriveConfiguration' {} a -> s {exclusionPatterns = a} :: GoogleDriveConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Maps Google Drive data source attributes or field names to Amazon Kendra
+-- index field names. To create custom fields, use the @UpdateIndex@ API
+-- before you map to Google Drive fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Google Drive data source field names must exist in your Google Drive
+-- custom metadata.
+googleDriveConfiguration_fieldMappings :: Lens.Lens' GoogleDriveConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+googleDriveConfiguration_fieldMappings = Lens.lens (\GoogleDriveConfiguration' {fieldMappings} -> fieldMappings) (\s@GoogleDriveConfiguration' {} a -> s {fieldMappings = a} :: GoogleDriveConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of regular expression patterns to include certain items in your
+-- Google Drive, including shared drives and users\' My Drives. Items that
+-- match the patterns are included in the index. Items that don\'t match
+-- the patterns are excluded from the index. If an item matches both an
+-- inclusion and exclusion pattern, the exclusion pattern takes precedence
+-- and the item isn\'t included in the index.
+googleDriveConfiguration_inclusionPatterns :: Lens.Lens' GoogleDriveConfiguration (Prelude.Maybe [Prelude.Text])
+googleDriveConfiguration_inclusionPatterns = Lens.lens (\GoogleDriveConfiguration' {inclusionPatterns} -> inclusionPatterns) (\s@GoogleDriveConfiguration' {} a -> s {inclusionPatterns = a} :: GoogleDriveConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of a Secrets Managersecret that contains
+-- the credentials required to connect to Google Drive. For more
+-- information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/data-source-google-drive.html Using a Google Workspace Drive data source>.
+googleDriveConfiguration_secretArn :: Lens.Lens' GoogleDriveConfiguration Prelude.Text
+googleDriveConfiguration_secretArn = Lens.lens (\GoogleDriveConfiguration' {secretArn} -> secretArn) (\s@GoogleDriveConfiguration' {} a -> s {secretArn = a} :: GoogleDriveConfiguration)
+
+instance Data.FromJSON GoogleDriveConfiguration where
+  parseJSON =
+    Data.withObject
+      "GoogleDriveConfiguration"
+      ( \x ->
+          GoogleDriveConfiguration'
+            Prelude.<$> ( x
+                            Data..:? "ExcludeMimeTypes"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "ExcludeSharedDrives"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "ExcludeUserAccounts"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "ExclusionPatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "FieldMappings")
+            Prelude.<*> ( x
+                            Data..:? "InclusionPatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "SecretArn")
+      )
+
+instance Prelude.Hashable GoogleDriveConfiguration where
+  hashWithSalt _salt GoogleDriveConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` excludeMimeTypes
+      `Prelude.hashWithSalt` excludeSharedDrives
+      `Prelude.hashWithSalt` excludeUserAccounts
+      `Prelude.hashWithSalt` exclusionPatterns
+      `Prelude.hashWithSalt` fieldMappings
+      `Prelude.hashWithSalt` inclusionPatterns
+      `Prelude.hashWithSalt` secretArn
+
+instance Prelude.NFData GoogleDriveConfiguration where
+  rnf GoogleDriveConfiguration' {..} =
+    Prelude.rnf excludeMimeTypes
+      `Prelude.seq` Prelude.rnf excludeSharedDrives
+      `Prelude.seq` Prelude.rnf excludeUserAccounts
+      `Prelude.seq` Prelude.rnf exclusionPatterns
+      `Prelude.seq` Prelude.rnf fieldMappings
+      `Prelude.seq` Prelude.rnf inclusionPatterns
+      `Prelude.seq` Prelude.rnf secretArn
+
+instance Data.ToJSON GoogleDriveConfiguration where
+  toJSON GoogleDriveConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ExcludeMimeTypes" Data..=)
+              Prelude.<$> excludeMimeTypes,
+            ("ExcludeSharedDrives" Data..=)
+              Prelude.<$> excludeSharedDrives,
+            ("ExcludeUserAccounts" Data..=)
+              Prelude.<$> excludeUserAccounts,
+            ("ExclusionPatterns" Data..=)
+              Prelude.<$> exclusionPatterns,
+            ("FieldMappings" Data..=) Prelude.<$> fieldMappings,
+            ("InclusionPatterns" Data..=)
+              Prelude.<$> inclusionPatterns,
+            Prelude.Just ("SecretArn" Data..= secretArn)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/GroupMembers.hs b/gen/Amazonka/Kendra/Types/GroupMembers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/GroupMembers.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.Kendra.Types.GroupMembers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.GroupMembers where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.MemberGroup
+import Amazonka.Kendra.Types.MemberUser
+import Amazonka.Kendra.Types.S3Path
+import qualified Amazonka.Prelude as Prelude
+
+-- | A list of users or sub groups that belong to a group. This is useful for
+-- user context filtering, where search results are filtered based on the
+-- user or their group access to documents.
+--
+-- /See:/ 'newGroupMembers' smart constructor.
+data GroupMembers = GroupMembers'
+  { -- | A list of sub groups that belong to a group. For example, the sub groups
+    -- \"Research\", \"Engineering\", and \"Sales and Marketing\" all belong to
+    -- the group \"Company\".
+    memberGroups :: Prelude.Maybe (Prelude.NonEmpty MemberGroup),
+    -- | A list of users that belong to a group. For example, a list of interns
+    -- all belong to the \"Interns\" group.
+    memberUsers :: Prelude.Maybe (Prelude.NonEmpty MemberUser),
+    -- | If you have more than 1000 users and\/or sub groups for a single group,
+    -- you need to provide the path to the S3 file that lists your users and
+    -- sub groups for a group. Your sub groups can contain more than 1000
+    -- users, but the list of sub groups that belong to a group (and\/or users)
+    -- must be no more than 1000.
+    --
+    -- You can download this
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/samples/group_members.zip example S3 file>
+    -- that uses the correct format for listing group members. Note,
+    -- @dataSourceId@ is optional. The value of @type@ for a group is always
+    -- @GROUP@ and for a user it is always @USER@.
+    s3PathforGroupMembers :: Prelude.Maybe S3Path
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GroupMembers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'memberGroups', 'groupMembers_memberGroups' - A list of sub groups that belong to a group. For example, the sub groups
+-- \"Research\", \"Engineering\", and \"Sales and Marketing\" all belong to
+-- the group \"Company\".
+--
+-- 'memberUsers', 'groupMembers_memberUsers' - A list of users that belong to a group. For example, a list of interns
+-- all belong to the \"Interns\" group.
+--
+-- 's3PathforGroupMembers', 'groupMembers_s3PathforGroupMembers' - If you have more than 1000 users and\/or sub groups for a single group,
+-- you need to provide the path to the S3 file that lists your users and
+-- sub groups for a group. Your sub groups can contain more than 1000
+-- users, but the list of sub groups that belong to a group (and\/or users)
+-- must be no more than 1000.
+--
+-- You can download this
+-- <https://docs.aws.amazon.com/kendra/latest/dg/samples/group_members.zip example S3 file>
+-- that uses the correct format for listing group members. Note,
+-- @dataSourceId@ is optional. The value of @type@ for a group is always
+-- @GROUP@ and for a user it is always @USER@.
+newGroupMembers ::
+  GroupMembers
+newGroupMembers =
+  GroupMembers'
+    { memberGroups = Prelude.Nothing,
+      memberUsers = Prelude.Nothing,
+      s3PathforGroupMembers = Prelude.Nothing
+    }
+
+-- | A list of sub groups that belong to a group. For example, the sub groups
+-- \"Research\", \"Engineering\", and \"Sales and Marketing\" all belong to
+-- the group \"Company\".
+groupMembers_memberGroups :: Lens.Lens' GroupMembers (Prelude.Maybe (Prelude.NonEmpty MemberGroup))
+groupMembers_memberGroups = Lens.lens (\GroupMembers' {memberGroups} -> memberGroups) (\s@GroupMembers' {} a -> s {memberGroups = a} :: GroupMembers) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of users that belong to a group. For example, a list of interns
+-- all belong to the \"Interns\" group.
+groupMembers_memberUsers :: Lens.Lens' GroupMembers (Prelude.Maybe (Prelude.NonEmpty MemberUser))
+groupMembers_memberUsers = Lens.lens (\GroupMembers' {memberUsers} -> memberUsers) (\s@GroupMembers' {} a -> s {memberUsers = a} :: GroupMembers) Prelude.. Lens.mapping Lens.coerced
+
+-- | If you have more than 1000 users and\/or sub groups for a single group,
+-- you need to provide the path to the S3 file that lists your users and
+-- sub groups for a group. Your sub groups can contain more than 1000
+-- users, but the list of sub groups that belong to a group (and\/or users)
+-- must be no more than 1000.
+--
+-- You can download this
+-- <https://docs.aws.amazon.com/kendra/latest/dg/samples/group_members.zip example S3 file>
+-- that uses the correct format for listing group members. Note,
+-- @dataSourceId@ is optional. The value of @type@ for a group is always
+-- @GROUP@ and for a user it is always @USER@.
+groupMembers_s3PathforGroupMembers :: Lens.Lens' GroupMembers (Prelude.Maybe S3Path)
+groupMembers_s3PathforGroupMembers = Lens.lens (\GroupMembers' {s3PathforGroupMembers} -> s3PathforGroupMembers) (\s@GroupMembers' {} a -> s {s3PathforGroupMembers = a} :: GroupMembers)
+
+instance Prelude.Hashable GroupMembers where
+  hashWithSalt _salt GroupMembers' {..} =
+    _salt
+      `Prelude.hashWithSalt` memberGroups
+      `Prelude.hashWithSalt` memberUsers
+      `Prelude.hashWithSalt` s3PathforGroupMembers
+
+instance Prelude.NFData GroupMembers where
+  rnf GroupMembers' {..} =
+    Prelude.rnf memberGroups
+      `Prelude.seq` Prelude.rnf memberUsers
+      `Prelude.seq` Prelude.rnf s3PathforGroupMembers
+
+instance Data.ToJSON GroupMembers where
+  toJSON GroupMembers' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MemberGroups" Data..=) Prelude.<$> memberGroups,
+            ("MemberUsers" Data..=) Prelude.<$> memberUsers,
+            ("S3PathforGroupMembers" Data..=)
+              Prelude.<$> s3PathforGroupMembers
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/GroupOrderingIdSummary.hs b/gen/Amazonka/Kendra/Types/GroupOrderingIdSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/GroupOrderingIdSummary.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.Kendra.Types.GroupOrderingIdSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.GroupOrderingIdSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.PrincipalMappingStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Summary information on the processing of @PUT@ and @DELETE@ actions for
+-- mapping users to their groups.
+--
+-- /See:/ 'newGroupOrderingIdSummary' smart constructor.
+data GroupOrderingIdSummary = GroupOrderingIdSummary'
+  { -- | The reason an action could not be processed. An action can be a @PUT@ or
+    -- @DELETE@ action for mapping users to their groups.
+    failureReason :: Prelude.Maybe Prelude.Text,
+    -- | The last date-time an action was updated. An action can be a @PUT@ or
+    -- @DELETE@ action for mapping users to their groups.
+    lastUpdatedAt :: Prelude.Maybe Data.POSIX,
+    -- | The order in which actions should complete processing. An action can be
+    -- a @PUT@ or @DELETE@ action for mapping users to their groups.
+    orderingId :: Prelude.Maybe Prelude.Natural,
+    -- | The date-time an action was received by Amazon Kendra. An action can be
+    -- a @PUT@ or @DELETE@ action for mapping users to their groups.
+    receivedAt :: Prelude.Maybe Data.POSIX,
+    -- | The current processing status of actions for mapping users to their
+    -- groups. The status can be either @PROCESSING@, @SUCCEEDED@, @DELETING@,
+    -- @DELETED@, or @FAILED@.
+    status :: Prelude.Maybe PrincipalMappingStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GroupOrderingIdSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failureReason', 'groupOrderingIdSummary_failureReason' - The reason an action could not be processed. An action can be a @PUT@ or
+-- @DELETE@ action for mapping users to their groups.
+--
+-- 'lastUpdatedAt', 'groupOrderingIdSummary_lastUpdatedAt' - The last date-time an action was updated. An action can be a @PUT@ or
+-- @DELETE@ action for mapping users to their groups.
+--
+-- 'orderingId', 'groupOrderingIdSummary_orderingId' - The order in which actions should complete processing. An action can be
+-- a @PUT@ or @DELETE@ action for mapping users to their groups.
+--
+-- 'receivedAt', 'groupOrderingIdSummary_receivedAt' - The date-time an action was received by Amazon Kendra. An action can be
+-- a @PUT@ or @DELETE@ action for mapping users to their groups.
+--
+-- 'status', 'groupOrderingIdSummary_status' - The current processing status of actions for mapping users to their
+-- groups. The status can be either @PROCESSING@, @SUCCEEDED@, @DELETING@,
+-- @DELETED@, or @FAILED@.
+newGroupOrderingIdSummary ::
+  GroupOrderingIdSummary
+newGroupOrderingIdSummary =
+  GroupOrderingIdSummary'
+    { failureReason =
+        Prelude.Nothing,
+      lastUpdatedAt = Prelude.Nothing,
+      orderingId = Prelude.Nothing,
+      receivedAt = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The reason an action could not be processed. An action can be a @PUT@ or
+-- @DELETE@ action for mapping users to their groups.
+groupOrderingIdSummary_failureReason :: Lens.Lens' GroupOrderingIdSummary (Prelude.Maybe Prelude.Text)
+groupOrderingIdSummary_failureReason = Lens.lens (\GroupOrderingIdSummary' {failureReason} -> failureReason) (\s@GroupOrderingIdSummary' {} a -> s {failureReason = a} :: GroupOrderingIdSummary)
+
+-- | The last date-time an action was updated. An action can be a @PUT@ or
+-- @DELETE@ action for mapping users to their groups.
+groupOrderingIdSummary_lastUpdatedAt :: Lens.Lens' GroupOrderingIdSummary (Prelude.Maybe Prelude.UTCTime)
+groupOrderingIdSummary_lastUpdatedAt = Lens.lens (\GroupOrderingIdSummary' {lastUpdatedAt} -> lastUpdatedAt) (\s@GroupOrderingIdSummary' {} a -> s {lastUpdatedAt = a} :: GroupOrderingIdSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The order in which actions should complete processing. An action can be
+-- a @PUT@ or @DELETE@ action for mapping users to their groups.
+groupOrderingIdSummary_orderingId :: Lens.Lens' GroupOrderingIdSummary (Prelude.Maybe Prelude.Natural)
+groupOrderingIdSummary_orderingId = Lens.lens (\GroupOrderingIdSummary' {orderingId} -> orderingId) (\s@GroupOrderingIdSummary' {} a -> s {orderingId = a} :: GroupOrderingIdSummary)
+
+-- | The date-time an action was received by Amazon Kendra. An action can be
+-- a @PUT@ or @DELETE@ action for mapping users to their groups.
+groupOrderingIdSummary_receivedAt :: Lens.Lens' GroupOrderingIdSummary (Prelude.Maybe Prelude.UTCTime)
+groupOrderingIdSummary_receivedAt = Lens.lens (\GroupOrderingIdSummary' {receivedAt} -> receivedAt) (\s@GroupOrderingIdSummary' {} a -> s {receivedAt = a} :: GroupOrderingIdSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The current processing status of actions for mapping users to their
+-- groups. The status can be either @PROCESSING@, @SUCCEEDED@, @DELETING@,
+-- @DELETED@, or @FAILED@.
+groupOrderingIdSummary_status :: Lens.Lens' GroupOrderingIdSummary (Prelude.Maybe PrincipalMappingStatus)
+groupOrderingIdSummary_status = Lens.lens (\GroupOrderingIdSummary' {status} -> status) (\s@GroupOrderingIdSummary' {} a -> s {status = a} :: GroupOrderingIdSummary)
+
+instance Data.FromJSON GroupOrderingIdSummary where
+  parseJSON =
+    Data.withObject
+      "GroupOrderingIdSummary"
+      ( \x ->
+          GroupOrderingIdSummary'
+            Prelude.<$> (x Data..:? "FailureReason")
+            Prelude.<*> (x Data..:? "LastUpdatedAt")
+            Prelude.<*> (x Data..:? "OrderingId")
+            Prelude.<*> (x Data..:? "ReceivedAt")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable GroupOrderingIdSummary where
+  hashWithSalt _salt GroupOrderingIdSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` failureReason
+      `Prelude.hashWithSalt` lastUpdatedAt
+      `Prelude.hashWithSalt` orderingId
+      `Prelude.hashWithSalt` receivedAt
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData GroupOrderingIdSummary where
+  rnf GroupOrderingIdSummary' {..} =
+    Prelude.rnf failureReason
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
+      `Prelude.seq` Prelude.rnf orderingId
+      `Prelude.seq` Prelude.rnf receivedAt
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/Kendra/Types/GroupSummary.hs b/gen/Amazonka/Kendra/Types/GroupSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/GroupSummary.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.Kendra.Types.GroupSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.GroupSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Summary information for groups.
+--
+-- /See:/ 'newGroupSummary' smart constructor.
+data GroupSummary = GroupSummary'
+  { -- | The identifier of the group you want group summary information on.
+    groupId :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp identifier used for the latest @PUT@ or @DELETE@ action.
+    orderingId :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GroupSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groupId', 'groupSummary_groupId' - The identifier of the group you want group summary information on.
+--
+-- 'orderingId', 'groupSummary_orderingId' - The timestamp identifier used for the latest @PUT@ or @DELETE@ action.
+newGroupSummary ::
+  GroupSummary
+newGroupSummary =
+  GroupSummary'
+    { groupId = Prelude.Nothing,
+      orderingId = Prelude.Nothing
+    }
+
+-- | The identifier of the group you want group summary information on.
+groupSummary_groupId :: Lens.Lens' GroupSummary (Prelude.Maybe Prelude.Text)
+groupSummary_groupId = Lens.lens (\GroupSummary' {groupId} -> groupId) (\s@GroupSummary' {} a -> s {groupId = a} :: GroupSummary)
+
+-- | The timestamp identifier used for the latest @PUT@ or @DELETE@ action.
+groupSummary_orderingId :: Lens.Lens' GroupSummary (Prelude.Maybe Prelude.Natural)
+groupSummary_orderingId = Lens.lens (\GroupSummary' {orderingId} -> orderingId) (\s@GroupSummary' {} a -> s {orderingId = a} :: GroupSummary)
+
+instance Data.FromJSON GroupSummary where
+  parseJSON =
+    Data.withObject
+      "GroupSummary"
+      ( \x ->
+          GroupSummary'
+            Prelude.<$> (x Data..:? "GroupId")
+            Prelude.<*> (x Data..:? "OrderingId")
+      )
+
+instance Prelude.Hashable GroupSummary where
+  hashWithSalt _salt GroupSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` groupId
+      `Prelude.hashWithSalt` orderingId
+
+instance Prelude.NFData GroupSummary where
+  rnf GroupSummary' {..} =
+    Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf orderingId
diff --git a/gen/Amazonka/Kendra/Types/HierarchicalPrincipal.hs b/gen/Amazonka/Kendra/Types/HierarchicalPrincipal.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/HierarchicalPrincipal.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.Kendra.Types.HierarchicalPrincipal
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.HierarchicalPrincipal where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.Principal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information to define the hierarchy for which documents users should
+-- have access to.
+--
+-- /See:/ 'newHierarchicalPrincipal' smart constructor.
+data HierarchicalPrincipal = HierarchicalPrincipal'
+  { -- | A list of
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/API_Principal.html principal>
+    -- lists that define the hierarchy for which documents users should have
+    -- access to. Each hierarchical list specifies which user or group has
+    -- allow or deny access for each document.
+    principalList :: [Principal]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'HierarchicalPrincipal' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'principalList', 'hierarchicalPrincipal_principalList' - A list of
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_Principal.html principal>
+-- lists that define the hierarchy for which documents users should have
+-- access to. Each hierarchical list specifies which user or group has
+-- allow or deny access for each document.
+newHierarchicalPrincipal ::
+  HierarchicalPrincipal
+newHierarchicalPrincipal =
+  HierarchicalPrincipal'
+    { principalList =
+        Prelude.mempty
+    }
+
+-- | A list of
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_Principal.html principal>
+-- lists that define the hierarchy for which documents users should have
+-- access to. Each hierarchical list specifies which user or group has
+-- allow or deny access for each document.
+hierarchicalPrincipal_principalList :: Lens.Lens' HierarchicalPrincipal [Principal]
+hierarchicalPrincipal_principalList = Lens.lens (\HierarchicalPrincipal' {principalList} -> principalList) (\s@HierarchicalPrincipal' {} a -> s {principalList = a} :: HierarchicalPrincipal) Prelude.. Lens.coerced
+
+instance Data.FromJSON HierarchicalPrincipal where
+  parseJSON =
+    Data.withObject
+      "HierarchicalPrincipal"
+      ( \x ->
+          HierarchicalPrincipal'
+            Prelude.<$> (x Data..:? "PrincipalList" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable HierarchicalPrincipal where
+  hashWithSalt _salt HierarchicalPrincipal' {..} =
+    _salt `Prelude.hashWithSalt` principalList
+
+instance Prelude.NFData HierarchicalPrincipal where
+  rnf HierarchicalPrincipal' {..} =
+    Prelude.rnf principalList
+
+instance Data.ToJSON HierarchicalPrincipal where
+  toJSON HierarchicalPrincipal' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("PrincipalList" Data..= principalList)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/Highlight.hs b/gen/Amazonka/Kendra/Types/Highlight.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/Highlight.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.Kendra.Types.Highlight
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.Highlight where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.HighlightType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information that you can use to highlight a search result so
+-- that your users can quickly identify terms in the response.
+--
+-- /See:/ 'newHighlight' smart constructor.
+data Highlight = Highlight'
+  { -- | Indicates whether the response is the best response. True if this is the
+    -- best response; otherwise, false.
+    topAnswer :: Prelude.Maybe Prelude.Bool,
+    -- | The highlight type.
+    type' :: Prelude.Maybe HighlightType,
+    -- | The zero-based location in the response string where the highlight
+    -- starts.
+    beginOffset :: Prelude.Int,
+    -- | The zero-based location in the response string where the highlight ends.
+    endOffset :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Highlight' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'topAnswer', 'highlight_topAnswer' - Indicates whether the response is the best response. True if this is the
+-- best response; otherwise, false.
+--
+-- 'type'', 'highlight_type' - The highlight type.
+--
+-- 'beginOffset', 'highlight_beginOffset' - The zero-based location in the response string where the highlight
+-- starts.
+--
+-- 'endOffset', 'highlight_endOffset' - The zero-based location in the response string where the highlight ends.
+newHighlight ::
+  -- | 'beginOffset'
+  Prelude.Int ->
+  -- | 'endOffset'
+  Prelude.Int ->
+  Highlight
+newHighlight pBeginOffset_ pEndOffset_ =
+  Highlight'
+    { topAnswer = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      beginOffset = pBeginOffset_,
+      endOffset = pEndOffset_
+    }
+
+-- | Indicates whether the response is the best response. True if this is the
+-- best response; otherwise, false.
+highlight_topAnswer :: Lens.Lens' Highlight (Prelude.Maybe Prelude.Bool)
+highlight_topAnswer = Lens.lens (\Highlight' {topAnswer} -> topAnswer) (\s@Highlight' {} a -> s {topAnswer = a} :: Highlight)
+
+-- | The highlight type.
+highlight_type :: Lens.Lens' Highlight (Prelude.Maybe HighlightType)
+highlight_type = Lens.lens (\Highlight' {type'} -> type') (\s@Highlight' {} a -> s {type' = a} :: Highlight)
+
+-- | The zero-based location in the response string where the highlight
+-- starts.
+highlight_beginOffset :: Lens.Lens' Highlight Prelude.Int
+highlight_beginOffset = Lens.lens (\Highlight' {beginOffset} -> beginOffset) (\s@Highlight' {} a -> s {beginOffset = a} :: Highlight)
+
+-- | The zero-based location in the response string where the highlight ends.
+highlight_endOffset :: Lens.Lens' Highlight Prelude.Int
+highlight_endOffset = Lens.lens (\Highlight' {endOffset} -> endOffset) (\s@Highlight' {} a -> s {endOffset = a} :: Highlight)
+
+instance Data.FromJSON Highlight where
+  parseJSON =
+    Data.withObject
+      "Highlight"
+      ( \x ->
+          Highlight'
+            Prelude.<$> (x Data..:? "TopAnswer")
+            Prelude.<*> (x Data..:? "Type")
+            Prelude.<*> (x Data..: "BeginOffset")
+            Prelude.<*> (x Data..: "EndOffset")
+      )
+
+instance Prelude.Hashable Highlight where
+  hashWithSalt _salt Highlight' {..} =
+    _salt
+      `Prelude.hashWithSalt` topAnswer
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` beginOffset
+      `Prelude.hashWithSalt` endOffset
+
+instance Prelude.NFData Highlight where
+  rnf Highlight' {..} =
+    Prelude.rnf topAnswer
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf beginOffset
+      `Prelude.seq` Prelude.rnf endOffset
diff --git a/gen/Amazonka/Kendra/Types/HighlightType.hs b/gen/Amazonka/Kendra/Types/HighlightType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/HighlightType.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.Kendra.Types.HighlightType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.HighlightType
+  ( HighlightType
+      ( ..,
+        HighlightType_STANDARD,
+        HighlightType_THESAURUS_SYNONYM
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype HighlightType = HighlightType'
+  { fromHighlightType ::
+      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 HighlightType_STANDARD :: HighlightType
+pattern HighlightType_STANDARD = HighlightType' "STANDARD"
+
+pattern HighlightType_THESAURUS_SYNONYM :: HighlightType
+pattern HighlightType_THESAURUS_SYNONYM = HighlightType' "THESAURUS_SYNONYM"
+
+{-# COMPLETE
+  HighlightType_STANDARD,
+  HighlightType_THESAURUS_SYNONYM,
+  HighlightType'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/HookConfiguration.hs b/gen/Amazonka/Kendra/Types/HookConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/HookConfiguration.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.Kendra.Types.HookConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.HookConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DocumentAttributeCondition
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information for invoking a Lambda function in
+-- Lambda to alter document metadata and content when ingesting documents
+-- into Amazon Kendra. You can configure your Lambda function using
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_CustomDocumentEnrichmentConfiguration.html PreExtractionHookConfiguration>
+-- if you want to apply advanced alterations on the original or raw
+-- documents. If you want to apply advanced alterations on the Amazon
+-- Kendra structured documents, you must configure your Lambda function
+-- using
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_CustomDocumentEnrichmentConfiguration.html PostExtractionHookConfiguration>.
+-- You can only invoke one Lambda function. However, this function can
+-- invoke other functions it requires.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/custom-document-enrichment.html Customizing document metadata during the ingestion process>.
+--
+-- /See:/ 'newHookConfiguration' smart constructor.
+data HookConfiguration = HookConfiguration'
+  { -- | The condition used for when a Lambda function should be invoked.
+    --
+    -- For example, you can specify a condition that if there are empty
+    -- date-time values, then Amazon Kendra should invoke a function that
+    -- inserts the current date-time.
+    invocationCondition :: Prelude.Maybe DocumentAttributeCondition,
+    -- | The Amazon Resource Name (ARN) of a role with permission to run a Lambda
+    -- function during ingestion. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html IAM roles for Amazon Kendra>.
+    lambdaArn :: Prelude.Text,
+    -- | Stores the original, raw documents or the structured, parsed documents
+    -- before and after altering them. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/custom-document-enrichment.html#cde-data-contracts-lambda Data contracts for Lambda functions>.
+    s3Bucket :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'HookConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'invocationCondition', 'hookConfiguration_invocationCondition' - The condition used for when a Lambda function should be invoked.
+--
+-- For example, you can specify a condition that if there are empty
+-- date-time values, then Amazon Kendra should invoke a function that
+-- inserts the current date-time.
+--
+-- 'lambdaArn', 'hookConfiguration_lambdaArn' - The Amazon Resource Name (ARN) of a role with permission to run a Lambda
+-- function during ingestion. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html IAM roles for Amazon Kendra>.
+--
+-- 's3Bucket', 'hookConfiguration_s3Bucket' - Stores the original, raw documents or the structured, parsed documents
+-- before and after altering them. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/custom-document-enrichment.html#cde-data-contracts-lambda Data contracts for Lambda functions>.
+newHookConfiguration ::
+  -- | 'lambdaArn'
+  Prelude.Text ->
+  -- | 's3Bucket'
+  Prelude.Text ->
+  HookConfiguration
+newHookConfiguration pLambdaArn_ pS3Bucket_ =
+  HookConfiguration'
+    { invocationCondition =
+        Prelude.Nothing,
+      lambdaArn = pLambdaArn_,
+      s3Bucket = pS3Bucket_
+    }
+
+-- | The condition used for when a Lambda function should be invoked.
+--
+-- For example, you can specify a condition that if there are empty
+-- date-time values, then Amazon Kendra should invoke a function that
+-- inserts the current date-time.
+hookConfiguration_invocationCondition :: Lens.Lens' HookConfiguration (Prelude.Maybe DocumentAttributeCondition)
+hookConfiguration_invocationCondition = Lens.lens (\HookConfiguration' {invocationCondition} -> invocationCondition) (\s@HookConfiguration' {} a -> s {invocationCondition = a} :: HookConfiguration)
+
+-- | The Amazon Resource Name (ARN) of a role with permission to run a Lambda
+-- function during ingestion. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html IAM roles for Amazon Kendra>.
+hookConfiguration_lambdaArn :: Lens.Lens' HookConfiguration Prelude.Text
+hookConfiguration_lambdaArn = Lens.lens (\HookConfiguration' {lambdaArn} -> lambdaArn) (\s@HookConfiguration' {} a -> s {lambdaArn = a} :: HookConfiguration)
+
+-- | Stores the original, raw documents or the structured, parsed documents
+-- before and after altering them. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/custom-document-enrichment.html#cde-data-contracts-lambda Data contracts for Lambda functions>.
+hookConfiguration_s3Bucket :: Lens.Lens' HookConfiguration Prelude.Text
+hookConfiguration_s3Bucket = Lens.lens (\HookConfiguration' {s3Bucket} -> s3Bucket) (\s@HookConfiguration' {} a -> s {s3Bucket = a} :: HookConfiguration)
+
+instance Data.FromJSON HookConfiguration where
+  parseJSON =
+    Data.withObject
+      "HookConfiguration"
+      ( \x ->
+          HookConfiguration'
+            Prelude.<$> (x Data..:? "InvocationCondition")
+            Prelude.<*> (x Data..: "LambdaArn")
+            Prelude.<*> (x Data..: "S3Bucket")
+      )
+
+instance Prelude.Hashable HookConfiguration where
+  hashWithSalt _salt HookConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` invocationCondition
+      `Prelude.hashWithSalt` lambdaArn
+      `Prelude.hashWithSalt` s3Bucket
+
+instance Prelude.NFData HookConfiguration where
+  rnf HookConfiguration' {..} =
+    Prelude.rnf invocationCondition
+      `Prelude.seq` Prelude.rnf lambdaArn
+      `Prelude.seq` Prelude.rnf s3Bucket
+
+instance Data.ToJSON HookConfiguration where
+  toJSON HookConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("InvocationCondition" Data..=)
+              Prelude.<$> invocationCondition,
+            Prelude.Just ("LambdaArn" Data..= lambdaArn),
+            Prelude.Just ("S3Bucket" Data..= s3Bucket)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/IndexConfigurationSummary.hs b/gen/Amazonka/Kendra/Types/IndexConfigurationSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/IndexConfigurationSummary.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.Kendra.Types.IndexConfigurationSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.IndexConfigurationSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.IndexEdition
+import Amazonka.Kendra.Types.IndexStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Summary information on the configuration of an index.
+--
+-- /See:/ 'newIndexConfigurationSummary' smart constructor.
+data IndexConfigurationSummary = IndexConfigurationSummary'
+  { -- | Indicates whether the index is a Enterprise Edition index or a Developer
+    -- Edition index.
+    edition :: Prelude.Maybe IndexEdition,
+    -- | A identifier for the index. Use this to identify the index when you are
+    -- using APIs such as @Query@, @DescribeIndex@, @UpdateIndex@, and
+    -- @DeleteIndex@.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the index.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The Unix timestamp when the index was created.
+    createdAt :: Data.POSIX,
+    -- | The Unix timestamp when the index was last updated by the @UpdateIndex@
+    -- API.
+    updatedAt :: Data.POSIX,
+    -- | The current status of the index. When the status is @ACTIVE@, the index
+    -- is ready to search.
+    status :: IndexStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IndexConfigurationSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'edition', 'indexConfigurationSummary_edition' - Indicates whether the index is a Enterprise Edition index or a Developer
+-- Edition index.
+--
+-- 'id', 'indexConfigurationSummary_id' - A identifier for the index. Use this to identify the index when you are
+-- using APIs such as @Query@, @DescribeIndex@, @UpdateIndex@, and
+-- @DeleteIndex@.
+--
+-- 'name', 'indexConfigurationSummary_name' - The name of the index.
+--
+-- 'createdAt', 'indexConfigurationSummary_createdAt' - The Unix timestamp when the index was created.
+--
+-- 'updatedAt', 'indexConfigurationSummary_updatedAt' - The Unix timestamp when the index was last updated by the @UpdateIndex@
+-- API.
+--
+-- 'status', 'indexConfigurationSummary_status' - The current status of the index. When the status is @ACTIVE@, the index
+-- is ready to search.
+newIndexConfigurationSummary ::
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'updatedAt'
+  Prelude.UTCTime ->
+  -- | 'status'
+  IndexStatus ->
+  IndexConfigurationSummary
+newIndexConfigurationSummary
+  pCreatedAt_
+  pUpdatedAt_
+  pStatus_ =
+    IndexConfigurationSummary'
+      { edition =
+          Prelude.Nothing,
+        id = Prelude.Nothing,
+        name = Prelude.Nothing,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        updatedAt = Data._Time Lens.# pUpdatedAt_,
+        status = pStatus_
+      }
+
+-- | Indicates whether the index is a Enterprise Edition index or a Developer
+-- Edition index.
+indexConfigurationSummary_edition :: Lens.Lens' IndexConfigurationSummary (Prelude.Maybe IndexEdition)
+indexConfigurationSummary_edition = Lens.lens (\IndexConfigurationSummary' {edition} -> edition) (\s@IndexConfigurationSummary' {} a -> s {edition = a} :: IndexConfigurationSummary)
+
+-- | A identifier for the index. Use this to identify the index when you are
+-- using APIs such as @Query@, @DescribeIndex@, @UpdateIndex@, and
+-- @DeleteIndex@.
+indexConfigurationSummary_id :: Lens.Lens' IndexConfigurationSummary (Prelude.Maybe Prelude.Text)
+indexConfigurationSummary_id = Lens.lens (\IndexConfigurationSummary' {id} -> id) (\s@IndexConfigurationSummary' {} a -> s {id = a} :: IndexConfigurationSummary)
+
+-- | The name of the index.
+indexConfigurationSummary_name :: Lens.Lens' IndexConfigurationSummary (Prelude.Maybe Prelude.Text)
+indexConfigurationSummary_name = Lens.lens (\IndexConfigurationSummary' {name} -> name) (\s@IndexConfigurationSummary' {} a -> s {name = a} :: IndexConfigurationSummary)
+
+-- | The Unix timestamp when the index was created.
+indexConfigurationSummary_createdAt :: Lens.Lens' IndexConfigurationSummary Prelude.UTCTime
+indexConfigurationSummary_createdAt = Lens.lens (\IndexConfigurationSummary' {createdAt} -> createdAt) (\s@IndexConfigurationSummary' {} a -> s {createdAt = a} :: IndexConfigurationSummary) Prelude.. Data._Time
+
+-- | The Unix timestamp when the index was last updated by the @UpdateIndex@
+-- API.
+indexConfigurationSummary_updatedAt :: Lens.Lens' IndexConfigurationSummary Prelude.UTCTime
+indexConfigurationSummary_updatedAt = Lens.lens (\IndexConfigurationSummary' {updatedAt} -> updatedAt) (\s@IndexConfigurationSummary' {} a -> s {updatedAt = a} :: IndexConfigurationSummary) Prelude.. Data._Time
+
+-- | The current status of the index. When the status is @ACTIVE@, the index
+-- is ready to search.
+indexConfigurationSummary_status :: Lens.Lens' IndexConfigurationSummary IndexStatus
+indexConfigurationSummary_status = Lens.lens (\IndexConfigurationSummary' {status} -> status) (\s@IndexConfigurationSummary' {} a -> s {status = a} :: IndexConfigurationSummary)
+
+instance Data.FromJSON IndexConfigurationSummary where
+  parseJSON =
+    Data.withObject
+      "IndexConfigurationSummary"
+      ( \x ->
+          IndexConfigurationSummary'
+            Prelude.<$> (x Data..:? "Edition")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..: "CreatedAt")
+            Prelude.<*> (x Data..: "UpdatedAt")
+            Prelude.<*> (x Data..: "Status")
+      )
+
+instance Prelude.Hashable IndexConfigurationSummary where
+  hashWithSalt _salt IndexConfigurationSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` edition
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` updatedAt
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData IndexConfigurationSummary where
+  rnf IndexConfigurationSummary' {..} =
+    Prelude.rnf edition
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/Kendra/Types/IndexEdition.hs b/gen/Amazonka/Kendra/Types/IndexEdition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/IndexEdition.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.Kendra.Types.IndexEdition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.IndexEdition
+  ( IndexEdition
+      ( ..,
+        IndexEdition_DEVELOPER_EDITION,
+        IndexEdition_ENTERPRISE_EDITION
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype IndexEdition = IndexEdition'
+  { fromIndexEdition ::
+      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 IndexEdition_DEVELOPER_EDITION :: IndexEdition
+pattern IndexEdition_DEVELOPER_EDITION = IndexEdition' "DEVELOPER_EDITION"
+
+pattern IndexEdition_ENTERPRISE_EDITION :: IndexEdition
+pattern IndexEdition_ENTERPRISE_EDITION = IndexEdition' "ENTERPRISE_EDITION"
+
+{-# COMPLETE
+  IndexEdition_DEVELOPER_EDITION,
+  IndexEdition_ENTERPRISE_EDITION,
+  IndexEdition'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/IndexStatistics.hs b/gen/Amazonka/Kendra/Types/IndexStatistics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/IndexStatistics.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.Kendra.Types.IndexStatistics
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.IndexStatistics where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.FaqStatistics
+import Amazonka.Kendra.Types.TextDocumentStatistics
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about the number of documents and the number of
+-- questions and answers in an index.
+--
+-- /See:/ 'newIndexStatistics' smart constructor.
+data IndexStatistics = IndexStatistics'
+  { -- | The number of question and answer topics in the index.
+    faqStatistics :: FaqStatistics,
+    -- | The number of text documents indexed.
+    textDocumentStatistics :: TextDocumentStatistics
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IndexStatistics' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'faqStatistics', 'indexStatistics_faqStatistics' - The number of question and answer topics in the index.
+--
+-- 'textDocumentStatistics', 'indexStatistics_textDocumentStatistics' - The number of text documents indexed.
+newIndexStatistics ::
+  -- | 'faqStatistics'
+  FaqStatistics ->
+  -- | 'textDocumentStatistics'
+  TextDocumentStatistics ->
+  IndexStatistics
+newIndexStatistics
+  pFaqStatistics_
+  pTextDocumentStatistics_ =
+    IndexStatistics'
+      { faqStatistics = pFaqStatistics_,
+        textDocumentStatistics = pTextDocumentStatistics_
+      }
+
+-- | The number of question and answer topics in the index.
+indexStatistics_faqStatistics :: Lens.Lens' IndexStatistics FaqStatistics
+indexStatistics_faqStatistics = Lens.lens (\IndexStatistics' {faqStatistics} -> faqStatistics) (\s@IndexStatistics' {} a -> s {faqStatistics = a} :: IndexStatistics)
+
+-- | The number of text documents indexed.
+indexStatistics_textDocumentStatistics :: Lens.Lens' IndexStatistics TextDocumentStatistics
+indexStatistics_textDocumentStatistics = Lens.lens (\IndexStatistics' {textDocumentStatistics} -> textDocumentStatistics) (\s@IndexStatistics' {} a -> s {textDocumentStatistics = a} :: IndexStatistics)
+
+instance Data.FromJSON IndexStatistics where
+  parseJSON =
+    Data.withObject
+      "IndexStatistics"
+      ( \x ->
+          IndexStatistics'
+            Prelude.<$> (x Data..: "FaqStatistics")
+            Prelude.<*> (x Data..: "TextDocumentStatistics")
+      )
+
+instance Prelude.Hashable IndexStatistics where
+  hashWithSalt _salt IndexStatistics' {..} =
+    _salt
+      `Prelude.hashWithSalt` faqStatistics
+      `Prelude.hashWithSalt` textDocumentStatistics
+
+instance Prelude.NFData IndexStatistics where
+  rnf IndexStatistics' {..} =
+    Prelude.rnf faqStatistics
+      `Prelude.seq` Prelude.rnf textDocumentStatistics
diff --git a/gen/Amazonka/Kendra/Types/IndexStatus.hs b/gen/Amazonka/Kendra/Types/IndexStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/IndexStatus.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.Types.IndexStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.IndexStatus
+  ( IndexStatus
+      ( ..,
+        IndexStatus_ACTIVE,
+        IndexStatus_CREATING,
+        IndexStatus_DELETING,
+        IndexStatus_FAILED,
+        IndexStatus_SYSTEM_UPDATING,
+        IndexStatus_UPDATING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype IndexStatus = IndexStatus'
+  { fromIndexStatus ::
+      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 IndexStatus_ACTIVE :: IndexStatus
+pattern IndexStatus_ACTIVE = IndexStatus' "ACTIVE"
+
+pattern IndexStatus_CREATING :: IndexStatus
+pattern IndexStatus_CREATING = IndexStatus' "CREATING"
+
+pattern IndexStatus_DELETING :: IndexStatus
+pattern IndexStatus_DELETING = IndexStatus' "DELETING"
+
+pattern IndexStatus_FAILED :: IndexStatus
+pattern IndexStatus_FAILED = IndexStatus' "FAILED"
+
+pattern IndexStatus_SYSTEM_UPDATING :: IndexStatus
+pattern IndexStatus_SYSTEM_UPDATING = IndexStatus' "SYSTEM_UPDATING"
+
+pattern IndexStatus_UPDATING :: IndexStatus
+pattern IndexStatus_UPDATING = IndexStatus' "UPDATING"
+
+{-# COMPLETE
+  IndexStatus_ACTIVE,
+  IndexStatus_CREATING,
+  IndexStatus_DELETING,
+  IndexStatus_FAILED,
+  IndexStatus_SYSTEM_UPDATING,
+  IndexStatus_UPDATING,
+  IndexStatus'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/InlineCustomDocumentEnrichmentConfiguration.hs b/gen/Amazonka/Kendra/Types/InlineCustomDocumentEnrichmentConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/InlineCustomDocumentEnrichmentConfiguration.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.Kendra.Types.InlineCustomDocumentEnrichmentConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.InlineCustomDocumentEnrichmentConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DocumentAttributeCondition
+import Amazonka.Kendra.Types.DocumentAttributeTarget
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information for applying basic logic to alter
+-- document metadata and content when ingesting documents into Amazon
+-- Kendra. To apply advanced logic, to go beyond what you can do with basic
+-- logic, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_HookConfiguration.html HookConfiguration>.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/custom-document-enrichment.html Customizing document metadata during the ingestion process>.
+--
+-- /See:/ 'newInlineCustomDocumentEnrichmentConfiguration' smart constructor.
+data InlineCustomDocumentEnrichmentConfiguration = InlineCustomDocumentEnrichmentConfiguration'
+  { -- | Configuration of the condition used for the target document attribute or
+    -- metadata field when ingesting documents into Amazon Kendra.
+    condition :: Prelude.Maybe DocumentAttributeCondition,
+    -- | @TRUE@ to delete content if the condition used for the target attribute
+    -- is met.
+    documentContentDeletion :: Prelude.Maybe Prelude.Bool,
+    -- | Configuration of the target document attribute or metadata field when
+    -- ingesting documents into Amazon Kendra. You can also include a value.
+    target :: Prelude.Maybe DocumentAttributeTarget
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InlineCustomDocumentEnrichmentConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'inlineCustomDocumentEnrichmentConfiguration_condition' - Configuration of the condition used for the target document attribute or
+-- metadata field when ingesting documents into Amazon Kendra.
+--
+-- 'documentContentDeletion', 'inlineCustomDocumentEnrichmentConfiguration_documentContentDeletion' - @TRUE@ to delete content if the condition used for the target attribute
+-- is met.
+--
+-- 'target', 'inlineCustomDocumentEnrichmentConfiguration_target' - Configuration of the target document attribute or metadata field when
+-- ingesting documents into Amazon Kendra. You can also include a value.
+newInlineCustomDocumentEnrichmentConfiguration ::
+  InlineCustomDocumentEnrichmentConfiguration
+newInlineCustomDocumentEnrichmentConfiguration =
+  InlineCustomDocumentEnrichmentConfiguration'
+    { condition =
+        Prelude.Nothing,
+      documentContentDeletion =
+        Prelude.Nothing,
+      target = Prelude.Nothing
+    }
+
+-- | Configuration of the condition used for the target document attribute or
+-- metadata field when ingesting documents into Amazon Kendra.
+inlineCustomDocumentEnrichmentConfiguration_condition :: Lens.Lens' InlineCustomDocumentEnrichmentConfiguration (Prelude.Maybe DocumentAttributeCondition)
+inlineCustomDocumentEnrichmentConfiguration_condition = Lens.lens (\InlineCustomDocumentEnrichmentConfiguration' {condition} -> condition) (\s@InlineCustomDocumentEnrichmentConfiguration' {} a -> s {condition = a} :: InlineCustomDocumentEnrichmentConfiguration)
+
+-- | @TRUE@ to delete content if the condition used for the target attribute
+-- is met.
+inlineCustomDocumentEnrichmentConfiguration_documentContentDeletion :: Lens.Lens' InlineCustomDocumentEnrichmentConfiguration (Prelude.Maybe Prelude.Bool)
+inlineCustomDocumentEnrichmentConfiguration_documentContentDeletion = Lens.lens (\InlineCustomDocumentEnrichmentConfiguration' {documentContentDeletion} -> documentContentDeletion) (\s@InlineCustomDocumentEnrichmentConfiguration' {} a -> s {documentContentDeletion = a} :: InlineCustomDocumentEnrichmentConfiguration)
+
+-- | Configuration of the target document attribute or metadata field when
+-- ingesting documents into Amazon Kendra. You can also include a value.
+inlineCustomDocumentEnrichmentConfiguration_target :: Lens.Lens' InlineCustomDocumentEnrichmentConfiguration (Prelude.Maybe DocumentAttributeTarget)
+inlineCustomDocumentEnrichmentConfiguration_target = Lens.lens (\InlineCustomDocumentEnrichmentConfiguration' {target} -> target) (\s@InlineCustomDocumentEnrichmentConfiguration' {} a -> s {target = a} :: InlineCustomDocumentEnrichmentConfiguration)
+
+instance
+  Data.FromJSON
+    InlineCustomDocumentEnrichmentConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "InlineCustomDocumentEnrichmentConfiguration"
+      ( \x ->
+          InlineCustomDocumentEnrichmentConfiguration'
+            Prelude.<$> (x Data..:? "Condition")
+            Prelude.<*> (x Data..:? "DocumentContentDeletion")
+            Prelude.<*> (x Data..:? "Target")
+      )
+
+instance
+  Prelude.Hashable
+    InlineCustomDocumentEnrichmentConfiguration
+  where
+  hashWithSalt
+    _salt
+    InlineCustomDocumentEnrichmentConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` condition
+        `Prelude.hashWithSalt` documentContentDeletion
+        `Prelude.hashWithSalt` target
+
+instance
+  Prelude.NFData
+    InlineCustomDocumentEnrichmentConfiguration
+  where
+  rnf InlineCustomDocumentEnrichmentConfiguration' {..} =
+    Prelude.rnf condition
+      `Prelude.seq` Prelude.rnf documentContentDeletion
+      `Prelude.seq` Prelude.rnf target
+
+instance
+  Data.ToJSON
+    InlineCustomDocumentEnrichmentConfiguration
+  where
+  toJSON
+    InlineCustomDocumentEnrichmentConfiguration' {..} =
+      Data.object
+        ( Prelude.catMaybes
+            [ ("Condition" Data..=) Prelude.<$> condition,
+              ("DocumentContentDeletion" Data..=)
+                Prelude.<$> documentContentDeletion,
+              ("Target" Data..=) Prelude.<$> target
+            ]
+        )
diff --git a/gen/Amazonka/Kendra/Types/Interval.hs b/gen/Amazonka/Kendra/Types/Interval.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/Interval.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.Types.Interval
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.Interval
+  ( Interval
+      ( ..,
+        Interval_ONE_MONTH_AGO,
+        Interval_ONE_WEEK_AGO,
+        Interval_THIS_MONTH,
+        Interval_THIS_WEEK,
+        Interval_TWO_MONTHS_AGO,
+        Interval_TWO_WEEKS_AGO
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Interval = Interval'
+  { fromInterval ::
+      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 Interval_ONE_MONTH_AGO :: Interval
+pattern Interval_ONE_MONTH_AGO = Interval' "ONE_MONTH_AGO"
+
+pattern Interval_ONE_WEEK_AGO :: Interval
+pattern Interval_ONE_WEEK_AGO = Interval' "ONE_WEEK_AGO"
+
+pattern Interval_THIS_MONTH :: Interval
+pattern Interval_THIS_MONTH = Interval' "THIS_MONTH"
+
+pattern Interval_THIS_WEEK :: Interval
+pattern Interval_THIS_WEEK = Interval' "THIS_WEEK"
+
+pattern Interval_TWO_MONTHS_AGO :: Interval
+pattern Interval_TWO_MONTHS_AGO = Interval' "TWO_MONTHS_AGO"
+
+pattern Interval_TWO_WEEKS_AGO :: Interval
+pattern Interval_TWO_WEEKS_AGO = Interval' "TWO_WEEKS_AGO"
+
+{-# COMPLETE
+  Interval_ONE_MONTH_AGO,
+  Interval_ONE_WEEK_AGO,
+  Interval_THIS_MONTH,
+  Interval_THIS_WEEK,
+  Interval_TWO_MONTHS_AGO,
+  Interval_TWO_WEEKS_AGO,
+  Interval'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/IssueSubEntity.hs b/gen/Amazonka/Kendra/Types/IssueSubEntity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/IssueSubEntity.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.Kendra.Types.IssueSubEntity
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.IssueSubEntity
+  ( IssueSubEntity
+      ( ..,
+        IssueSubEntity_ATTACHMENTS,
+        IssueSubEntity_COMMENTS,
+        IssueSubEntity_WORKLOGS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype IssueSubEntity = IssueSubEntity'
+  { fromIssueSubEntity ::
+      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 IssueSubEntity_ATTACHMENTS :: IssueSubEntity
+pattern IssueSubEntity_ATTACHMENTS = IssueSubEntity' "ATTACHMENTS"
+
+pattern IssueSubEntity_COMMENTS :: IssueSubEntity
+pattern IssueSubEntity_COMMENTS = IssueSubEntity' "COMMENTS"
+
+pattern IssueSubEntity_WORKLOGS :: IssueSubEntity
+pattern IssueSubEntity_WORKLOGS = IssueSubEntity' "WORKLOGS"
+
+{-# COMPLETE
+  IssueSubEntity_ATTACHMENTS,
+  IssueSubEntity_COMMENTS,
+  IssueSubEntity_WORKLOGS,
+  IssueSubEntity'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/JiraConfiguration.hs b/gen/Amazonka/Kendra/Types/JiraConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/JiraConfiguration.hs
@@ -0,0 +1,464 @@
+{-# 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.Kendra.Types.JiraConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.JiraConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DataSourceToIndexFieldMapping
+import Amazonka.Kendra.Types.DataSourceVpcConfiguration
+import Amazonka.Kendra.Types.IssueSubEntity
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information to connect to Jira as your data
+-- source.
+--
+-- /See:/ 'newJiraConfiguration' smart constructor.
+data JiraConfiguration = JiraConfiguration'
+  { -- | A list of DataSourceToIndexFieldMapping objects that map attributes or
+    -- field names of Jira attachments to Amazon Kendra index field names. To
+    -- create custom fields, use the UpdateIndex API before you map to Jira
+    -- fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The Jira data source field names must exist in your Jira custom
+    -- metadata.
+    attachmentFieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | A list of DataSourceToIndexFieldMapping objects that map attributes or
+    -- field names of Jira comments to Amazon Kendra index field names. To
+    -- create custom fields, use the UpdateIndex API before you map to Jira
+    -- fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The Jira data source field names must exist in your Jira custom
+    -- metadata.
+    commentFieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | A list of regular expression patterns to exclude certain file paths,
+    -- file names, and file types in your Jira data source. Files that match
+    -- the patterns are excluded from the index. Files that don’t match the
+    -- patterns are included in the index. If a file matches both an inclusion
+    -- pattern and an exclusion pattern, the exclusion pattern takes precedence
+    -- and the file isn\'t included in the index.
+    exclusionPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | A list of regular expression patterns to include certain file paths,
+    -- file names, and file types in your Jira data source. Files that match
+    -- the patterns are included in the index. Files that don\'t match the
+    -- patterns are excluded from the index. If a file matches both an
+    -- inclusion pattern and an exclusion pattern, the exclusion pattern takes
+    -- precedence and the file isn\'t included in the index.
+    inclusionPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | A list of DataSourceToIndexFieldMapping objects that map attributes or
+    -- field names of Jira issues to Amazon Kendra index field names. To create
+    -- custom fields, use the UpdateIndex API before you map to Jira fields.
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The Jira data source field names must exist in your Jira custom
+    -- metadata.
+    issueFieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | Specify whether to crawl comments, attachments, and work logs. You can
+    -- specify one or more of these options.
+    issueSubEntityFilter :: Prelude.Maybe [IssueSubEntity],
+    -- | Specify which issue types to crawl in your Jira data source. You can
+    -- specify one or more of these options to crawl.
+    issueType :: Prelude.Maybe [Prelude.Text],
+    -- | Specify which projects to crawl in your Jira data source. You can
+    -- specify one or more Jira project IDs.
+    project :: Prelude.Maybe [Prelude.Text],
+    -- | A list of DataSourceToIndexFieldMapping objects that map attributes or
+    -- field names of Jira projects to Amazon Kendra index field names. To
+    -- create custom fields, use the UpdateIndex API before you map to Jira
+    -- fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The Jira data source field names must exist in your Jira custom
+    -- metadata.
+    projectFieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | Specify which statuses to crawl in your Jira data source. You can
+    -- specify one or more of these options to crawl.
+    status :: Prelude.Maybe [Prelude.Text],
+    -- | @TRUE@ to use the Jira change log to determine which documents require
+    -- updating in the index. Depending on the change log\'s size, it may take
+    -- longer for Amazon Kendra to use the change log than to scan all of your
+    -- documents in Jira.
+    useChangeLog :: Prelude.Maybe Prelude.Bool,
+    -- | Configuration information for an Amazon Virtual Private Cloud to connect
+    -- to your Jira. Your Jira account must reside inside your VPC.
+    vpcConfiguration :: Prelude.Maybe DataSourceVpcConfiguration,
+    -- | A list of DataSourceToIndexFieldMapping objects that map attributes or
+    -- field names of Jira work logs to Amazon Kendra index field names. To
+    -- create custom fields, use the UpdateIndex API before you map to Jira
+    -- fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The Jira data source field names must exist in your Jira custom
+    -- metadata.
+    workLogFieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | The URL of the Jira account. For example, /company.atlassian.net/ or
+    -- /https:\/\/jira.company.com/. You can find your Jira account URL in the
+    -- URL of your profile page for Jira desktop.
+    jiraAccountUrl :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of a secret in Secrets Manager contains
+    -- the key-value pairs required to connect to your Jira data source. The
+    -- secret must contain a JSON structure with the following keys:
+    --
+    -- -   jiraId—The Jira username.
+    --
+    -- -   jiraCredentials—The Jira API token. For more information on creating
+    --     an API token in Jira, see
+    --     <https://docs.aws.amazon.com/kendra/latest/dg/data-source-jira.html Using a Jira data source>.
+    secretArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JiraConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attachmentFieldMappings', 'jiraConfiguration_attachmentFieldMappings' - A list of DataSourceToIndexFieldMapping objects that map attributes or
+-- field names of Jira attachments to Amazon Kendra index field names. To
+-- create custom fields, use the UpdateIndex API before you map to Jira
+-- fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Jira data source field names must exist in your Jira custom
+-- metadata.
+--
+-- 'commentFieldMappings', 'jiraConfiguration_commentFieldMappings' - A list of DataSourceToIndexFieldMapping objects that map attributes or
+-- field names of Jira comments to Amazon Kendra index field names. To
+-- create custom fields, use the UpdateIndex API before you map to Jira
+-- fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Jira data source field names must exist in your Jira custom
+-- metadata.
+--
+-- 'exclusionPatterns', 'jiraConfiguration_exclusionPatterns' - A list of regular expression patterns to exclude certain file paths,
+-- file names, and file types in your Jira data source. Files that match
+-- the patterns are excluded from the index. Files that don’t match the
+-- patterns are included in the index. If a file matches both an inclusion
+-- pattern and an exclusion pattern, the exclusion pattern takes precedence
+-- and the file isn\'t included in the index.
+--
+-- 'inclusionPatterns', 'jiraConfiguration_inclusionPatterns' - A list of regular expression patterns to include certain file paths,
+-- file names, and file types in your Jira data source. Files that match
+-- the patterns are included in the index. Files that don\'t match the
+-- patterns are excluded from the index. If a file matches both an
+-- inclusion pattern and an exclusion pattern, the exclusion pattern takes
+-- precedence and the file isn\'t included in the index.
+--
+-- 'issueFieldMappings', 'jiraConfiguration_issueFieldMappings' - A list of DataSourceToIndexFieldMapping objects that map attributes or
+-- field names of Jira issues to Amazon Kendra index field names. To create
+-- custom fields, use the UpdateIndex API before you map to Jira fields.
+-- For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Jira data source field names must exist in your Jira custom
+-- metadata.
+--
+-- 'issueSubEntityFilter', 'jiraConfiguration_issueSubEntityFilter' - Specify whether to crawl comments, attachments, and work logs. You can
+-- specify one or more of these options.
+--
+-- 'issueType', 'jiraConfiguration_issueType' - Specify which issue types to crawl in your Jira data source. You can
+-- specify one or more of these options to crawl.
+--
+-- 'project', 'jiraConfiguration_project' - Specify which projects to crawl in your Jira data source. You can
+-- specify one or more Jira project IDs.
+--
+-- 'projectFieldMappings', 'jiraConfiguration_projectFieldMappings' - A list of DataSourceToIndexFieldMapping objects that map attributes or
+-- field names of Jira projects to Amazon Kendra index field names. To
+-- create custom fields, use the UpdateIndex API before you map to Jira
+-- fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Jira data source field names must exist in your Jira custom
+-- metadata.
+--
+-- 'status', 'jiraConfiguration_status' - Specify which statuses to crawl in your Jira data source. You can
+-- specify one or more of these options to crawl.
+--
+-- 'useChangeLog', 'jiraConfiguration_useChangeLog' - @TRUE@ to use the Jira change log to determine which documents require
+-- updating in the index. Depending on the change log\'s size, it may take
+-- longer for Amazon Kendra to use the change log than to scan all of your
+-- documents in Jira.
+--
+-- 'vpcConfiguration', 'jiraConfiguration_vpcConfiguration' - Configuration information for an Amazon Virtual Private Cloud to connect
+-- to your Jira. Your Jira account must reside inside your VPC.
+--
+-- 'workLogFieldMappings', 'jiraConfiguration_workLogFieldMappings' - A list of DataSourceToIndexFieldMapping objects that map attributes or
+-- field names of Jira work logs to Amazon Kendra index field names. To
+-- create custom fields, use the UpdateIndex API before you map to Jira
+-- fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Jira data source field names must exist in your Jira custom
+-- metadata.
+--
+-- 'jiraAccountUrl', 'jiraConfiguration_jiraAccountUrl' - The URL of the Jira account. For example, /company.atlassian.net/ or
+-- /https:\/\/jira.company.com/. You can find your Jira account URL in the
+-- URL of your profile page for Jira desktop.
+--
+-- 'secretArn', 'jiraConfiguration_secretArn' - The Amazon Resource Name (ARN) of a secret in Secrets Manager contains
+-- the key-value pairs required to connect to your Jira data source. The
+-- secret must contain a JSON structure with the following keys:
+--
+-- -   jiraId—The Jira username.
+--
+-- -   jiraCredentials—The Jira API token. For more information on creating
+--     an API token in Jira, see
+--     <https://docs.aws.amazon.com/kendra/latest/dg/data-source-jira.html Using a Jira data source>.
+newJiraConfiguration ::
+  -- | 'jiraAccountUrl'
+  Prelude.Text ->
+  -- | 'secretArn'
+  Prelude.Text ->
+  JiraConfiguration
+newJiraConfiguration pJiraAccountUrl_ pSecretArn_ =
+  JiraConfiguration'
+    { attachmentFieldMappings =
+        Prelude.Nothing,
+      commentFieldMappings = Prelude.Nothing,
+      exclusionPatterns = Prelude.Nothing,
+      inclusionPatterns = Prelude.Nothing,
+      issueFieldMappings = Prelude.Nothing,
+      issueSubEntityFilter = Prelude.Nothing,
+      issueType = Prelude.Nothing,
+      project = Prelude.Nothing,
+      projectFieldMappings = Prelude.Nothing,
+      status = Prelude.Nothing,
+      useChangeLog = Prelude.Nothing,
+      vpcConfiguration = Prelude.Nothing,
+      workLogFieldMappings = Prelude.Nothing,
+      jiraAccountUrl = pJiraAccountUrl_,
+      secretArn = pSecretArn_
+    }
+
+-- | A list of DataSourceToIndexFieldMapping objects that map attributes or
+-- field names of Jira attachments to Amazon Kendra index field names. To
+-- create custom fields, use the UpdateIndex API before you map to Jira
+-- fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Jira data source field names must exist in your Jira custom
+-- metadata.
+jiraConfiguration_attachmentFieldMappings :: Lens.Lens' JiraConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+jiraConfiguration_attachmentFieldMappings = Lens.lens (\JiraConfiguration' {attachmentFieldMappings} -> attachmentFieldMappings) (\s@JiraConfiguration' {} a -> s {attachmentFieldMappings = a} :: JiraConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of DataSourceToIndexFieldMapping objects that map attributes or
+-- field names of Jira comments to Amazon Kendra index field names. To
+-- create custom fields, use the UpdateIndex API before you map to Jira
+-- fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Jira data source field names must exist in your Jira custom
+-- metadata.
+jiraConfiguration_commentFieldMappings :: Lens.Lens' JiraConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+jiraConfiguration_commentFieldMappings = Lens.lens (\JiraConfiguration' {commentFieldMappings} -> commentFieldMappings) (\s@JiraConfiguration' {} a -> s {commentFieldMappings = a} :: JiraConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of regular expression patterns to exclude certain file paths,
+-- file names, and file types in your Jira data source. Files that match
+-- the patterns are excluded from the index. Files that don’t match the
+-- patterns are included in the index. If a file matches both an inclusion
+-- pattern and an exclusion pattern, the exclusion pattern takes precedence
+-- and the file isn\'t included in the index.
+jiraConfiguration_exclusionPatterns :: Lens.Lens' JiraConfiguration (Prelude.Maybe [Prelude.Text])
+jiraConfiguration_exclusionPatterns = Lens.lens (\JiraConfiguration' {exclusionPatterns} -> exclusionPatterns) (\s@JiraConfiguration' {} a -> s {exclusionPatterns = a} :: JiraConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of regular expression patterns to include certain file paths,
+-- file names, and file types in your Jira data source. Files that match
+-- the patterns are included in the index. Files that don\'t match the
+-- patterns are excluded from the index. If a file matches both an
+-- inclusion pattern and an exclusion pattern, the exclusion pattern takes
+-- precedence and the file isn\'t included in the index.
+jiraConfiguration_inclusionPatterns :: Lens.Lens' JiraConfiguration (Prelude.Maybe [Prelude.Text])
+jiraConfiguration_inclusionPatterns = Lens.lens (\JiraConfiguration' {inclusionPatterns} -> inclusionPatterns) (\s@JiraConfiguration' {} a -> s {inclusionPatterns = a} :: JiraConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of DataSourceToIndexFieldMapping objects that map attributes or
+-- field names of Jira issues to Amazon Kendra index field names. To create
+-- custom fields, use the UpdateIndex API before you map to Jira fields.
+-- For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Jira data source field names must exist in your Jira custom
+-- metadata.
+jiraConfiguration_issueFieldMappings :: Lens.Lens' JiraConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+jiraConfiguration_issueFieldMappings = Lens.lens (\JiraConfiguration' {issueFieldMappings} -> issueFieldMappings) (\s@JiraConfiguration' {} a -> s {issueFieldMappings = a} :: JiraConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specify whether to crawl comments, attachments, and work logs. You can
+-- specify one or more of these options.
+jiraConfiguration_issueSubEntityFilter :: Lens.Lens' JiraConfiguration (Prelude.Maybe [IssueSubEntity])
+jiraConfiguration_issueSubEntityFilter = Lens.lens (\JiraConfiguration' {issueSubEntityFilter} -> issueSubEntityFilter) (\s@JiraConfiguration' {} a -> s {issueSubEntityFilter = a} :: JiraConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specify which issue types to crawl in your Jira data source. You can
+-- specify one or more of these options to crawl.
+jiraConfiguration_issueType :: Lens.Lens' JiraConfiguration (Prelude.Maybe [Prelude.Text])
+jiraConfiguration_issueType = Lens.lens (\JiraConfiguration' {issueType} -> issueType) (\s@JiraConfiguration' {} a -> s {issueType = a} :: JiraConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specify which projects to crawl in your Jira data source. You can
+-- specify one or more Jira project IDs.
+jiraConfiguration_project :: Lens.Lens' JiraConfiguration (Prelude.Maybe [Prelude.Text])
+jiraConfiguration_project = Lens.lens (\JiraConfiguration' {project} -> project) (\s@JiraConfiguration' {} a -> s {project = a} :: JiraConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of DataSourceToIndexFieldMapping objects that map attributes or
+-- field names of Jira projects to Amazon Kendra index field names. To
+-- create custom fields, use the UpdateIndex API before you map to Jira
+-- fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Jira data source field names must exist in your Jira custom
+-- metadata.
+jiraConfiguration_projectFieldMappings :: Lens.Lens' JiraConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+jiraConfiguration_projectFieldMappings = Lens.lens (\JiraConfiguration' {projectFieldMappings} -> projectFieldMappings) (\s@JiraConfiguration' {} a -> s {projectFieldMappings = a} :: JiraConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specify which statuses to crawl in your Jira data source. You can
+-- specify one or more of these options to crawl.
+jiraConfiguration_status :: Lens.Lens' JiraConfiguration (Prelude.Maybe [Prelude.Text])
+jiraConfiguration_status = Lens.lens (\JiraConfiguration' {status} -> status) (\s@JiraConfiguration' {} a -> s {status = a} :: JiraConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | @TRUE@ to use the Jira change log to determine which documents require
+-- updating in the index. Depending on the change log\'s size, it may take
+-- longer for Amazon Kendra to use the change log than to scan all of your
+-- documents in Jira.
+jiraConfiguration_useChangeLog :: Lens.Lens' JiraConfiguration (Prelude.Maybe Prelude.Bool)
+jiraConfiguration_useChangeLog = Lens.lens (\JiraConfiguration' {useChangeLog} -> useChangeLog) (\s@JiraConfiguration' {} a -> s {useChangeLog = a} :: JiraConfiguration)
+
+-- | Configuration information for an Amazon Virtual Private Cloud to connect
+-- to your Jira. Your Jira account must reside inside your VPC.
+jiraConfiguration_vpcConfiguration :: Lens.Lens' JiraConfiguration (Prelude.Maybe DataSourceVpcConfiguration)
+jiraConfiguration_vpcConfiguration = Lens.lens (\JiraConfiguration' {vpcConfiguration} -> vpcConfiguration) (\s@JiraConfiguration' {} a -> s {vpcConfiguration = a} :: JiraConfiguration)
+
+-- | A list of DataSourceToIndexFieldMapping objects that map attributes or
+-- field names of Jira work logs to Amazon Kendra index field names. To
+-- create custom fields, use the UpdateIndex API before you map to Jira
+-- fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Jira data source field names must exist in your Jira custom
+-- metadata.
+jiraConfiguration_workLogFieldMappings :: Lens.Lens' JiraConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+jiraConfiguration_workLogFieldMappings = Lens.lens (\JiraConfiguration' {workLogFieldMappings} -> workLogFieldMappings) (\s@JiraConfiguration' {} a -> s {workLogFieldMappings = a} :: JiraConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The URL of the Jira account. For example, /company.atlassian.net/ or
+-- /https:\/\/jira.company.com/. You can find your Jira account URL in the
+-- URL of your profile page for Jira desktop.
+jiraConfiguration_jiraAccountUrl :: Lens.Lens' JiraConfiguration Prelude.Text
+jiraConfiguration_jiraAccountUrl = Lens.lens (\JiraConfiguration' {jiraAccountUrl} -> jiraAccountUrl) (\s@JiraConfiguration' {} a -> s {jiraAccountUrl = a} :: JiraConfiguration)
+
+-- | The Amazon Resource Name (ARN) of a secret in Secrets Manager contains
+-- the key-value pairs required to connect to your Jira data source. The
+-- secret must contain a JSON structure with the following keys:
+--
+-- -   jiraId—The Jira username.
+--
+-- -   jiraCredentials—The Jira API token. For more information on creating
+--     an API token in Jira, see
+--     <https://docs.aws.amazon.com/kendra/latest/dg/data-source-jira.html Using a Jira data source>.
+jiraConfiguration_secretArn :: Lens.Lens' JiraConfiguration Prelude.Text
+jiraConfiguration_secretArn = Lens.lens (\JiraConfiguration' {secretArn} -> secretArn) (\s@JiraConfiguration' {} a -> s {secretArn = a} :: JiraConfiguration)
+
+instance Data.FromJSON JiraConfiguration where
+  parseJSON =
+    Data.withObject
+      "JiraConfiguration"
+      ( \x ->
+          JiraConfiguration'
+            Prelude.<$> (x Data..:? "AttachmentFieldMappings")
+            Prelude.<*> (x Data..:? "CommentFieldMappings")
+            Prelude.<*> ( x
+                            Data..:? "ExclusionPatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "InclusionPatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "IssueFieldMappings")
+            Prelude.<*> ( x
+                            Data..:? "IssueSubEntityFilter"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "IssueType" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Project" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "ProjectFieldMappings")
+            Prelude.<*> (x Data..:? "Status" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "UseChangeLog")
+            Prelude.<*> (x Data..:? "VpcConfiguration")
+            Prelude.<*> (x Data..:? "WorkLogFieldMappings")
+            Prelude.<*> (x Data..: "JiraAccountUrl")
+            Prelude.<*> (x Data..: "SecretArn")
+      )
+
+instance Prelude.Hashable JiraConfiguration where
+  hashWithSalt _salt JiraConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` attachmentFieldMappings
+      `Prelude.hashWithSalt` commentFieldMappings
+      `Prelude.hashWithSalt` exclusionPatterns
+      `Prelude.hashWithSalt` inclusionPatterns
+      `Prelude.hashWithSalt` issueFieldMappings
+      `Prelude.hashWithSalt` issueSubEntityFilter
+      `Prelude.hashWithSalt` issueType
+      `Prelude.hashWithSalt` project
+      `Prelude.hashWithSalt` projectFieldMappings
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` useChangeLog
+      `Prelude.hashWithSalt` vpcConfiguration
+      `Prelude.hashWithSalt` workLogFieldMappings
+      `Prelude.hashWithSalt` jiraAccountUrl
+      `Prelude.hashWithSalt` secretArn
+
+instance Prelude.NFData JiraConfiguration where
+  rnf JiraConfiguration' {..} =
+    Prelude.rnf attachmentFieldMappings
+      `Prelude.seq` Prelude.rnf commentFieldMappings
+      `Prelude.seq` Prelude.rnf exclusionPatterns
+      `Prelude.seq` Prelude.rnf inclusionPatterns
+      `Prelude.seq` Prelude.rnf issueFieldMappings
+      `Prelude.seq` Prelude.rnf issueSubEntityFilter
+      `Prelude.seq` Prelude.rnf issueType
+      `Prelude.seq` Prelude.rnf project
+      `Prelude.seq` Prelude.rnf projectFieldMappings
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf useChangeLog
+      `Prelude.seq` Prelude.rnf vpcConfiguration
+      `Prelude.seq` Prelude.rnf workLogFieldMappings
+      `Prelude.seq` Prelude.rnf jiraAccountUrl
+      `Prelude.seq` Prelude.rnf secretArn
+
+instance Data.ToJSON JiraConfiguration where
+  toJSON JiraConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AttachmentFieldMappings" Data..=)
+              Prelude.<$> attachmentFieldMappings,
+            ("CommentFieldMappings" Data..=)
+              Prelude.<$> commentFieldMappings,
+            ("ExclusionPatterns" Data..=)
+              Prelude.<$> exclusionPatterns,
+            ("InclusionPatterns" Data..=)
+              Prelude.<$> inclusionPatterns,
+            ("IssueFieldMappings" Data..=)
+              Prelude.<$> issueFieldMappings,
+            ("IssueSubEntityFilter" Data..=)
+              Prelude.<$> issueSubEntityFilter,
+            ("IssueType" Data..=) Prelude.<$> issueType,
+            ("Project" Data..=) Prelude.<$> project,
+            ("ProjectFieldMappings" Data..=)
+              Prelude.<$> projectFieldMappings,
+            ("Status" Data..=) Prelude.<$> status,
+            ("UseChangeLog" Data..=) Prelude.<$> useChangeLog,
+            ("VpcConfiguration" Data..=)
+              Prelude.<$> vpcConfiguration,
+            ("WorkLogFieldMappings" Data..=)
+              Prelude.<$> workLogFieldMappings,
+            Prelude.Just
+              ("JiraAccountUrl" Data..= jiraAccountUrl),
+            Prelude.Just ("SecretArn" Data..= secretArn)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/JsonTokenTypeConfiguration.hs b/gen/Amazonka/Kendra/Types/JsonTokenTypeConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/JsonTokenTypeConfiguration.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.Kendra.Types.JsonTokenTypeConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.JsonTokenTypeConfiguration 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 configuration information for the JSON token type.
+--
+-- /See:/ 'newJsonTokenTypeConfiguration' smart constructor.
+data JsonTokenTypeConfiguration = JsonTokenTypeConfiguration'
+  { -- | The user name attribute field.
+    userNameAttributeField :: Prelude.Text,
+    -- | The group attribute field.
+    groupAttributeField :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JsonTokenTypeConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'userNameAttributeField', 'jsonTokenTypeConfiguration_userNameAttributeField' - The user name attribute field.
+--
+-- 'groupAttributeField', 'jsonTokenTypeConfiguration_groupAttributeField' - The group attribute field.
+newJsonTokenTypeConfiguration ::
+  -- | 'userNameAttributeField'
+  Prelude.Text ->
+  -- | 'groupAttributeField'
+  Prelude.Text ->
+  JsonTokenTypeConfiguration
+newJsonTokenTypeConfiguration
+  pUserNameAttributeField_
+  pGroupAttributeField_ =
+    JsonTokenTypeConfiguration'
+      { userNameAttributeField =
+          pUserNameAttributeField_,
+        groupAttributeField = pGroupAttributeField_
+      }
+
+-- | The user name attribute field.
+jsonTokenTypeConfiguration_userNameAttributeField :: Lens.Lens' JsonTokenTypeConfiguration Prelude.Text
+jsonTokenTypeConfiguration_userNameAttributeField = Lens.lens (\JsonTokenTypeConfiguration' {userNameAttributeField} -> userNameAttributeField) (\s@JsonTokenTypeConfiguration' {} a -> s {userNameAttributeField = a} :: JsonTokenTypeConfiguration)
+
+-- | The group attribute field.
+jsonTokenTypeConfiguration_groupAttributeField :: Lens.Lens' JsonTokenTypeConfiguration Prelude.Text
+jsonTokenTypeConfiguration_groupAttributeField = Lens.lens (\JsonTokenTypeConfiguration' {groupAttributeField} -> groupAttributeField) (\s@JsonTokenTypeConfiguration' {} a -> s {groupAttributeField = a} :: JsonTokenTypeConfiguration)
+
+instance Data.FromJSON JsonTokenTypeConfiguration where
+  parseJSON =
+    Data.withObject
+      "JsonTokenTypeConfiguration"
+      ( \x ->
+          JsonTokenTypeConfiguration'
+            Prelude.<$> (x Data..: "UserNameAttributeField")
+            Prelude.<*> (x Data..: "GroupAttributeField")
+      )
+
+instance Prelude.Hashable JsonTokenTypeConfiguration where
+  hashWithSalt _salt JsonTokenTypeConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` userNameAttributeField
+      `Prelude.hashWithSalt` groupAttributeField
+
+instance Prelude.NFData JsonTokenTypeConfiguration where
+  rnf JsonTokenTypeConfiguration' {..} =
+    Prelude.rnf userNameAttributeField
+      `Prelude.seq` Prelude.rnf groupAttributeField
+
+instance Data.ToJSON JsonTokenTypeConfiguration where
+  toJSON JsonTokenTypeConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "UserNameAttributeField"
+                  Data..= userNameAttributeField
+              ),
+            Prelude.Just
+              ("GroupAttributeField" Data..= groupAttributeField)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/JwtTokenTypeConfiguration.hs b/gen/Amazonka/Kendra/Types/JwtTokenTypeConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/JwtTokenTypeConfiguration.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.Kendra.Types.JwtTokenTypeConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.JwtTokenTypeConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.KeyLocation
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information for the JWT token type.
+--
+-- /See:/ 'newJwtTokenTypeConfiguration' smart constructor.
+data JwtTokenTypeConfiguration = JwtTokenTypeConfiguration'
+  { -- | The regular expression that identifies the claim.
+    claimRegex :: Prelude.Maybe Prelude.Text,
+    -- | The group attribute field.
+    groupAttributeField :: Prelude.Maybe Prelude.Text,
+    -- | The issuer of the token.
+    issuer :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (arn) of the secret.
+    secretManagerArn :: Prelude.Maybe Prelude.Text,
+    -- | The signing key URL.
+    url :: Prelude.Maybe Prelude.Text,
+    -- | The user name attribute field.
+    userNameAttributeField :: Prelude.Maybe Prelude.Text,
+    -- | The location of the key.
+    keyLocation :: KeyLocation
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JwtTokenTypeConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'claimRegex', 'jwtTokenTypeConfiguration_claimRegex' - The regular expression that identifies the claim.
+--
+-- 'groupAttributeField', 'jwtTokenTypeConfiguration_groupAttributeField' - The group attribute field.
+--
+-- 'issuer', 'jwtTokenTypeConfiguration_issuer' - The issuer of the token.
+--
+-- 'secretManagerArn', 'jwtTokenTypeConfiguration_secretManagerArn' - The Amazon Resource Name (arn) of the secret.
+--
+-- 'url', 'jwtTokenTypeConfiguration_url' - The signing key URL.
+--
+-- 'userNameAttributeField', 'jwtTokenTypeConfiguration_userNameAttributeField' - The user name attribute field.
+--
+-- 'keyLocation', 'jwtTokenTypeConfiguration_keyLocation' - The location of the key.
+newJwtTokenTypeConfiguration ::
+  -- | 'keyLocation'
+  KeyLocation ->
+  JwtTokenTypeConfiguration
+newJwtTokenTypeConfiguration pKeyLocation_ =
+  JwtTokenTypeConfiguration'
+    { claimRegex =
+        Prelude.Nothing,
+      groupAttributeField = Prelude.Nothing,
+      issuer = Prelude.Nothing,
+      secretManagerArn = Prelude.Nothing,
+      url = Prelude.Nothing,
+      userNameAttributeField = Prelude.Nothing,
+      keyLocation = pKeyLocation_
+    }
+
+-- | The regular expression that identifies the claim.
+jwtTokenTypeConfiguration_claimRegex :: Lens.Lens' JwtTokenTypeConfiguration (Prelude.Maybe Prelude.Text)
+jwtTokenTypeConfiguration_claimRegex = Lens.lens (\JwtTokenTypeConfiguration' {claimRegex} -> claimRegex) (\s@JwtTokenTypeConfiguration' {} a -> s {claimRegex = a} :: JwtTokenTypeConfiguration)
+
+-- | The group attribute field.
+jwtTokenTypeConfiguration_groupAttributeField :: Lens.Lens' JwtTokenTypeConfiguration (Prelude.Maybe Prelude.Text)
+jwtTokenTypeConfiguration_groupAttributeField = Lens.lens (\JwtTokenTypeConfiguration' {groupAttributeField} -> groupAttributeField) (\s@JwtTokenTypeConfiguration' {} a -> s {groupAttributeField = a} :: JwtTokenTypeConfiguration)
+
+-- | The issuer of the token.
+jwtTokenTypeConfiguration_issuer :: Lens.Lens' JwtTokenTypeConfiguration (Prelude.Maybe Prelude.Text)
+jwtTokenTypeConfiguration_issuer = Lens.lens (\JwtTokenTypeConfiguration' {issuer} -> issuer) (\s@JwtTokenTypeConfiguration' {} a -> s {issuer = a} :: JwtTokenTypeConfiguration)
+
+-- | The Amazon Resource Name (arn) of the secret.
+jwtTokenTypeConfiguration_secretManagerArn :: Lens.Lens' JwtTokenTypeConfiguration (Prelude.Maybe Prelude.Text)
+jwtTokenTypeConfiguration_secretManagerArn = Lens.lens (\JwtTokenTypeConfiguration' {secretManagerArn} -> secretManagerArn) (\s@JwtTokenTypeConfiguration' {} a -> s {secretManagerArn = a} :: JwtTokenTypeConfiguration)
+
+-- | The signing key URL.
+jwtTokenTypeConfiguration_url :: Lens.Lens' JwtTokenTypeConfiguration (Prelude.Maybe Prelude.Text)
+jwtTokenTypeConfiguration_url = Lens.lens (\JwtTokenTypeConfiguration' {url} -> url) (\s@JwtTokenTypeConfiguration' {} a -> s {url = a} :: JwtTokenTypeConfiguration)
+
+-- | The user name attribute field.
+jwtTokenTypeConfiguration_userNameAttributeField :: Lens.Lens' JwtTokenTypeConfiguration (Prelude.Maybe Prelude.Text)
+jwtTokenTypeConfiguration_userNameAttributeField = Lens.lens (\JwtTokenTypeConfiguration' {userNameAttributeField} -> userNameAttributeField) (\s@JwtTokenTypeConfiguration' {} a -> s {userNameAttributeField = a} :: JwtTokenTypeConfiguration)
+
+-- | The location of the key.
+jwtTokenTypeConfiguration_keyLocation :: Lens.Lens' JwtTokenTypeConfiguration KeyLocation
+jwtTokenTypeConfiguration_keyLocation = Lens.lens (\JwtTokenTypeConfiguration' {keyLocation} -> keyLocation) (\s@JwtTokenTypeConfiguration' {} a -> s {keyLocation = a} :: JwtTokenTypeConfiguration)
+
+instance Data.FromJSON JwtTokenTypeConfiguration where
+  parseJSON =
+    Data.withObject
+      "JwtTokenTypeConfiguration"
+      ( \x ->
+          JwtTokenTypeConfiguration'
+            Prelude.<$> (x Data..:? "ClaimRegex")
+            Prelude.<*> (x Data..:? "GroupAttributeField")
+            Prelude.<*> (x Data..:? "Issuer")
+            Prelude.<*> (x Data..:? "SecretManagerArn")
+            Prelude.<*> (x Data..:? "URL")
+            Prelude.<*> (x Data..:? "UserNameAttributeField")
+            Prelude.<*> (x Data..: "KeyLocation")
+      )
+
+instance Prelude.Hashable JwtTokenTypeConfiguration where
+  hashWithSalt _salt JwtTokenTypeConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` claimRegex
+      `Prelude.hashWithSalt` groupAttributeField
+      `Prelude.hashWithSalt` issuer
+      `Prelude.hashWithSalt` secretManagerArn
+      `Prelude.hashWithSalt` url
+      `Prelude.hashWithSalt` userNameAttributeField
+      `Prelude.hashWithSalt` keyLocation
+
+instance Prelude.NFData JwtTokenTypeConfiguration where
+  rnf JwtTokenTypeConfiguration' {..} =
+    Prelude.rnf claimRegex
+      `Prelude.seq` Prelude.rnf groupAttributeField
+      `Prelude.seq` Prelude.rnf issuer
+      `Prelude.seq` Prelude.rnf secretManagerArn
+      `Prelude.seq` Prelude.rnf url
+      `Prelude.seq` Prelude.rnf userNameAttributeField
+      `Prelude.seq` Prelude.rnf keyLocation
+
+instance Data.ToJSON JwtTokenTypeConfiguration where
+  toJSON JwtTokenTypeConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClaimRegex" Data..=) Prelude.<$> claimRegex,
+            ("GroupAttributeField" Data..=)
+              Prelude.<$> groupAttributeField,
+            ("Issuer" Data..=) Prelude.<$> issuer,
+            ("SecretManagerArn" Data..=)
+              Prelude.<$> secretManagerArn,
+            ("URL" Data..=) Prelude.<$> url,
+            ("UserNameAttributeField" Data..=)
+              Prelude.<$> userNameAttributeField,
+            Prelude.Just ("KeyLocation" Data..= keyLocation)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/KeyLocation.hs b/gen/Amazonka/Kendra/Types/KeyLocation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/KeyLocation.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.Kendra.Types.KeyLocation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.KeyLocation
+  ( KeyLocation
+      ( ..,
+        KeyLocation_SECRET_MANAGER,
+        KeyLocation_URL
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype KeyLocation = KeyLocation'
+  { fromKeyLocation ::
+      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 KeyLocation_SECRET_MANAGER :: KeyLocation
+pattern KeyLocation_SECRET_MANAGER = KeyLocation' "SECRET_MANAGER"
+
+pattern KeyLocation_URL :: KeyLocation
+pattern KeyLocation_URL = KeyLocation' "URL"
+
+{-# COMPLETE
+  KeyLocation_SECRET_MANAGER,
+  KeyLocation_URL,
+  KeyLocation'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/MemberGroup.hs b/gen/Amazonka/Kendra/Types/MemberGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/MemberGroup.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.Kendra.Types.MemberGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.MemberGroup 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 sub groups that belong to a group.
+--
+-- /See:/ 'newMemberGroup' smart constructor.
+data MemberGroup = MemberGroup'
+  { -- | The identifier of the data source for the sub group you want to map to a
+    -- group.
+    dataSourceId :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the sub group you want to map to a group.
+    groupId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MemberGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSourceId', 'memberGroup_dataSourceId' - The identifier of the data source for the sub group you want to map to a
+-- group.
+--
+-- 'groupId', 'memberGroup_groupId' - The identifier of the sub group you want to map to a group.
+newMemberGroup ::
+  -- | 'groupId'
+  Prelude.Text ->
+  MemberGroup
+newMemberGroup pGroupId_ =
+  MemberGroup'
+    { dataSourceId = Prelude.Nothing,
+      groupId = pGroupId_
+    }
+
+-- | The identifier of the data source for the sub group you want to map to a
+-- group.
+memberGroup_dataSourceId :: Lens.Lens' MemberGroup (Prelude.Maybe Prelude.Text)
+memberGroup_dataSourceId = Lens.lens (\MemberGroup' {dataSourceId} -> dataSourceId) (\s@MemberGroup' {} a -> s {dataSourceId = a} :: MemberGroup)
+
+-- | The identifier of the sub group you want to map to a group.
+memberGroup_groupId :: Lens.Lens' MemberGroup Prelude.Text
+memberGroup_groupId = Lens.lens (\MemberGroup' {groupId} -> groupId) (\s@MemberGroup' {} a -> s {groupId = a} :: MemberGroup)
+
+instance Prelude.Hashable MemberGroup where
+  hashWithSalt _salt MemberGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataSourceId
+      `Prelude.hashWithSalt` groupId
+
+instance Prelude.NFData MemberGroup where
+  rnf MemberGroup' {..} =
+    Prelude.rnf dataSourceId
+      `Prelude.seq` Prelude.rnf groupId
+
+instance Data.ToJSON MemberGroup where
+  toJSON MemberGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DataSourceId" Data..=) Prelude.<$> dataSourceId,
+            Prelude.Just ("GroupId" Data..= groupId)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/MemberUser.hs b/gen/Amazonka/Kendra/Types/MemberUser.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/MemberUser.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.Kendra.Types.MemberUser
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.MemberUser 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 users that belong to a group.
+--
+-- /See:/ 'newMemberUser' smart constructor.
+data MemberUser = MemberUser'
+  { -- | The identifier of the user you want to map to a group.
+    userId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MemberUser' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'userId', 'memberUser_userId' - The identifier of the user you want to map to a group.
+newMemberUser ::
+  -- | 'userId'
+  Prelude.Text ->
+  MemberUser
+newMemberUser pUserId_ =
+  MemberUser' {userId = pUserId_}
+
+-- | The identifier of the user you want to map to a group.
+memberUser_userId :: Lens.Lens' MemberUser Prelude.Text
+memberUser_userId = Lens.lens (\MemberUser' {userId} -> userId) (\s@MemberUser' {} a -> s {userId = a} :: MemberUser)
+
+instance Prelude.Hashable MemberUser where
+  hashWithSalt _salt MemberUser' {..} =
+    _salt `Prelude.hashWithSalt` userId
+
+instance Prelude.NFData MemberUser where
+  rnf MemberUser' {..} = Prelude.rnf userId
+
+instance Data.ToJSON MemberUser where
+  toJSON MemberUser' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("UserId" Data..= userId)]
+      )
diff --git a/gen/Amazonka/Kendra/Types/MetricType.hs b/gen/Amazonka/Kendra/Types/MetricType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/MetricType.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.Types.MetricType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.MetricType
+  ( MetricType
+      ( ..,
+        MetricType_AGG_QUERY_DOC_METRICS,
+        MetricType_DOCS_BY_CLICK_COUNT,
+        MetricType_QUERIES_BY_COUNT,
+        MetricType_QUERIES_BY_ZERO_CLICK_RATE,
+        MetricType_QUERIES_BY_ZERO_RESULT_RATE,
+        MetricType_TREND_QUERY_DOC_METRICS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype MetricType = MetricType'
+  { fromMetricType ::
+      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 MetricType_AGG_QUERY_DOC_METRICS :: MetricType
+pattern MetricType_AGG_QUERY_DOC_METRICS = MetricType' "AGG_QUERY_DOC_METRICS"
+
+pattern MetricType_DOCS_BY_CLICK_COUNT :: MetricType
+pattern MetricType_DOCS_BY_CLICK_COUNT = MetricType' "DOCS_BY_CLICK_COUNT"
+
+pattern MetricType_QUERIES_BY_COUNT :: MetricType
+pattern MetricType_QUERIES_BY_COUNT = MetricType' "QUERIES_BY_COUNT"
+
+pattern MetricType_QUERIES_BY_ZERO_CLICK_RATE :: MetricType
+pattern MetricType_QUERIES_BY_ZERO_CLICK_RATE = MetricType' "QUERIES_BY_ZERO_CLICK_RATE"
+
+pattern MetricType_QUERIES_BY_ZERO_RESULT_RATE :: MetricType
+pattern MetricType_QUERIES_BY_ZERO_RESULT_RATE = MetricType' "QUERIES_BY_ZERO_RESULT_RATE"
+
+pattern MetricType_TREND_QUERY_DOC_METRICS :: MetricType
+pattern MetricType_TREND_QUERY_DOC_METRICS = MetricType' "TREND_QUERY_DOC_METRICS"
+
+{-# COMPLETE
+  MetricType_AGG_QUERY_DOC_METRICS,
+  MetricType_DOCS_BY_CLICK_COUNT,
+  MetricType_QUERIES_BY_COUNT,
+  MetricType_QUERIES_BY_ZERO_CLICK_RATE,
+  MetricType_QUERIES_BY_ZERO_RESULT_RATE,
+  MetricType_TREND_QUERY_DOC_METRICS,
+  MetricType'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/Mode.hs b/gen/Amazonka/Kendra/Types/Mode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/Mode.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.Kendra.Types.Mode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.Mode
+  ( Mode
+      ( ..,
+        Mode_ENABLED,
+        Mode_LEARN_ONLY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Mode = Mode' {fromMode :: 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 Mode_ENABLED :: Mode
+pattern Mode_ENABLED = Mode' "ENABLED"
+
+pattern Mode_LEARN_ONLY :: Mode
+pattern Mode_LEARN_ONLY = Mode' "LEARN_ONLY"
+
+{-# COMPLETE
+  Mode_ENABLED,
+  Mode_LEARN_ONLY,
+  Mode'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/OnPremiseConfiguration.hs b/gen/Amazonka/Kendra/Types/OnPremiseConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/OnPremiseConfiguration.hs
@@ -0,0 +1,151 @@
+{-# 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.Kendra.Types.OnPremiseConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.OnPremiseConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.S3Path
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information to connect to GitHub Enterprise
+-- Server (on premises).
+--
+-- /See:/ 'newOnPremiseConfiguration' smart constructor.
+data OnPremiseConfiguration = OnPremiseConfiguration'
+  { -- | The GitHub host URL or API endpoint URL. For example,
+    -- /https:\/\/on-prem-host-url\/api\/v3\//
+    hostUrl :: Prelude.Text,
+    -- | The name of the organization of the GitHub Enterprise Server
+    -- (in-premise) account you want to connect to. You can find your
+    -- organization name by logging into GitHub desktop and selecting __Your
+    -- organizations__ under your profile picture dropdown.
+    organizationName :: Prelude.Text,
+    -- | The path to the SSL certificate stored in an Amazon S3 bucket. You use
+    -- this to connect to GitHub if you require a secure SSL connection.
+    --
+    -- You can simply generate a self-signed X509 certificate on any computer
+    -- using OpenSSL. For an example of using OpenSSL to create an X509
+    -- certificate, see
+    -- <https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/configuring-https-ssl.html Create and sign an X509 certificate>.
+    sslCertificateS3Path :: S3Path
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OnPremiseConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'hostUrl', 'onPremiseConfiguration_hostUrl' - The GitHub host URL or API endpoint URL. For example,
+-- /https:\/\/on-prem-host-url\/api\/v3\//
+--
+-- 'organizationName', 'onPremiseConfiguration_organizationName' - The name of the organization of the GitHub Enterprise Server
+-- (in-premise) account you want to connect to. You can find your
+-- organization name by logging into GitHub desktop and selecting __Your
+-- organizations__ under your profile picture dropdown.
+--
+-- 'sslCertificateS3Path', 'onPremiseConfiguration_sslCertificateS3Path' - The path to the SSL certificate stored in an Amazon S3 bucket. You use
+-- this to connect to GitHub if you require a secure SSL connection.
+--
+-- You can simply generate a self-signed X509 certificate on any computer
+-- using OpenSSL. For an example of using OpenSSL to create an X509
+-- certificate, see
+-- <https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/configuring-https-ssl.html Create and sign an X509 certificate>.
+newOnPremiseConfiguration ::
+  -- | 'hostUrl'
+  Prelude.Text ->
+  -- | 'organizationName'
+  Prelude.Text ->
+  -- | 'sslCertificateS3Path'
+  S3Path ->
+  OnPremiseConfiguration
+newOnPremiseConfiguration
+  pHostUrl_
+  pOrganizationName_
+  pSslCertificateS3Path_ =
+    OnPremiseConfiguration'
+      { hostUrl = pHostUrl_,
+        organizationName = pOrganizationName_,
+        sslCertificateS3Path = pSslCertificateS3Path_
+      }
+
+-- | The GitHub host URL or API endpoint URL. For example,
+-- /https:\/\/on-prem-host-url\/api\/v3\//
+onPremiseConfiguration_hostUrl :: Lens.Lens' OnPremiseConfiguration Prelude.Text
+onPremiseConfiguration_hostUrl = Lens.lens (\OnPremiseConfiguration' {hostUrl} -> hostUrl) (\s@OnPremiseConfiguration' {} a -> s {hostUrl = a} :: OnPremiseConfiguration)
+
+-- | The name of the organization of the GitHub Enterprise Server
+-- (in-premise) account you want to connect to. You can find your
+-- organization name by logging into GitHub desktop and selecting __Your
+-- organizations__ under your profile picture dropdown.
+onPremiseConfiguration_organizationName :: Lens.Lens' OnPremiseConfiguration Prelude.Text
+onPremiseConfiguration_organizationName = Lens.lens (\OnPremiseConfiguration' {organizationName} -> organizationName) (\s@OnPremiseConfiguration' {} a -> s {organizationName = a} :: OnPremiseConfiguration)
+
+-- | The path to the SSL certificate stored in an Amazon S3 bucket. You use
+-- this to connect to GitHub if you require a secure SSL connection.
+--
+-- You can simply generate a self-signed X509 certificate on any computer
+-- using OpenSSL. For an example of using OpenSSL to create an X509
+-- certificate, see
+-- <https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/configuring-https-ssl.html Create and sign an X509 certificate>.
+onPremiseConfiguration_sslCertificateS3Path :: Lens.Lens' OnPremiseConfiguration S3Path
+onPremiseConfiguration_sslCertificateS3Path = Lens.lens (\OnPremiseConfiguration' {sslCertificateS3Path} -> sslCertificateS3Path) (\s@OnPremiseConfiguration' {} a -> s {sslCertificateS3Path = a} :: OnPremiseConfiguration)
+
+instance Data.FromJSON OnPremiseConfiguration where
+  parseJSON =
+    Data.withObject
+      "OnPremiseConfiguration"
+      ( \x ->
+          OnPremiseConfiguration'
+            Prelude.<$> (x Data..: "HostUrl")
+            Prelude.<*> (x Data..: "OrganizationName")
+            Prelude.<*> (x Data..: "SslCertificateS3Path")
+      )
+
+instance Prelude.Hashable OnPremiseConfiguration where
+  hashWithSalt _salt OnPremiseConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` hostUrl
+      `Prelude.hashWithSalt` organizationName
+      `Prelude.hashWithSalt` sslCertificateS3Path
+
+instance Prelude.NFData OnPremiseConfiguration where
+  rnf OnPremiseConfiguration' {..} =
+    Prelude.rnf hostUrl
+      `Prelude.seq` Prelude.rnf organizationName
+      `Prelude.seq` Prelude.rnf sslCertificateS3Path
+
+instance Data.ToJSON OnPremiseConfiguration where
+  toJSON OnPremiseConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("HostUrl" Data..= hostUrl),
+            Prelude.Just
+              ("OrganizationName" Data..= organizationName),
+            Prelude.Just
+              ( "SslCertificateS3Path"
+                  Data..= sslCertificateS3Path
+              )
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/OneDriveConfiguration.hs b/gen/Amazonka/Kendra/Types/OneDriveConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/OneDriveConfiguration.hs
@@ -0,0 +1,250 @@
+{-# 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.Kendra.Types.OneDriveConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.OneDriveConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DataSourceToIndexFieldMapping
+import Amazonka.Kendra.Types.OneDriveUsers
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information to connect to OneDrive as your
+-- data source.
+--
+-- /See:/ 'newOneDriveConfiguration' smart constructor.
+data OneDriveConfiguration = OneDriveConfiguration'
+  { -- | @TRUE@ to disable local groups information.
+    disableLocalGroups :: Prelude.Maybe Prelude.Bool,
+    -- | A list of regular expression patterns to exclude certain documents in
+    -- your OneDrive. Documents that match the patterns are excluded from the
+    -- index. Documents that don\'t match the patterns are included in the
+    -- index. If a document matches both an inclusion and exclusion pattern,
+    -- the exclusion pattern takes precedence and the document isn\'t included
+    -- in the index.
+    --
+    -- The pattern is applied to the file name.
+    exclusionPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | A list of @DataSourceToIndexFieldMapping@ objects that map OneDrive data
+    -- source attributes or field names to Amazon Kendra index field names. To
+    -- create custom fields, use the @UpdateIndex@ API before you map to
+    -- OneDrive fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The OneDrive data source field names must exist in your OneDrive custom
+    -- metadata.
+    fieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | A list of regular expression patterns to include certain documents in
+    -- your OneDrive. Documents that match the patterns are included in the
+    -- index. Documents that don\'t match the patterns are excluded from the
+    -- index. If a document matches both an inclusion and exclusion pattern,
+    -- the exclusion pattern takes precedence and the document isn\'t included
+    -- in the index.
+    --
+    -- The pattern is applied to the file name.
+    inclusionPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | The Azure Active Directory domain of the organization.
+    tenantDomain :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of an Secrets Managersecret that contains
+    -- the user name and password to connect to OneDrive. The user namd should
+    -- be the application ID for the OneDrive application, and the password is
+    -- the application key for the OneDrive application.
+    secretArn :: Prelude.Text,
+    -- | A list of user accounts whose documents should be indexed.
+    oneDriveUsers :: OneDriveUsers
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OneDriveConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'disableLocalGroups', 'oneDriveConfiguration_disableLocalGroups' - @TRUE@ to disable local groups information.
+--
+-- 'exclusionPatterns', 'oneDriveConfiguration_exclusionPatterns' - A list of regular expression patterns to exclude certain documents in
+-- your OneDrive. Documents that match the patterns are excluded from the
+-- index. Documents that don\'t match the patterns are included in the
+-- index. If a document matches both an inclusion and exclusion pattern,
+-- the exclusion pattern takes precedence and the document isn\'t included
+-- in the index.
+--
+-- The pattern is applied to the file name.
+--
+-- 'fieldMappings', 'oneDriveConfiguration_fieldMappings' - A list of @DataSourceToIndexFieldMapping@ objects that map OneDrive data
+-- source attributes or field names to Amazon Kendra index field names. To
+-- create custom fields, use the @UpdateIndex@ API before you map to
+-- OneDrive fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The OneDrive data source field names must exist in your OneDrive custom
+-- metadata.
+--
+-- 'inclusionPatterns', 'oneDriveConfiguration_inclusionPatterns' - A list of regular expression patterns to include certain documents in
+-- your OneDrive. Documents that match the patterns are included in the
+-- index. Documents that don\'t match the patterns are excluded from the
+-- index. If a document matches both an inclusion and exclusion pattern,
+-- the exclusion pattern takes precedence and the document isn\'t included
+-- in the index.
+--
+-- The pattern is applied to the file name.
+--
+-- 'tenantDomain', 'oneDriveConfiguration_tenantDomain' - The Azure Active Directory domain of the organization.
+--
+-- 'secretArn', 'oneDriveConfiguration_secretArn' - The Amazon Resource Name (ARN) of an Secrets Managersecret that contains
+-- the user name and password to connect to OneDrive. The user namd should
+-- be the application ID for the OneDrive application, and the password is
+-- the application key for the OneDrive application.
+--
+-- 'oneDriveUsers', 'oneDriveConfiguration_oneDriveUsers' - A list of user accounts whose documents should be indexed.
+newOneDriveConfiguration ::
+  -- | 'tenantDomain'
+  Prelude.Text ->
+  -- | 'secretArn'
+  Prelude.Text ->
+  -- | 'oneDriveUsers'
+  OneDriveUsers ->
+  OneDriveConfiguration
+newOneDriveConfiguration
+  pTenantDomain_
+  pSecretArn_
+  pOneDriveUsers_ =
+    OneDriveConfiguration'
+      { disableLocalGroups =
+          Prelude.Nothing,
+        exclusionPatterns = Prelude.Nothing,
+        fieldMappings = Prelude.Nothing,
+        inclusionPatterns = Prelude.Nothing,
+        tenantDomain = pTenantDomain_,
+        secretArn = pSecretArn_,
+        oneDriveUsers = pOneDriveUsers_
+      }
+
+-- | @TRUE@ to disable local groups information.
+oneDriveConfiguration_disableLocalGroups :: Lens.Lens' OneDriveConfiguration (Prelude.Maybe Prelude.Bool)
+oneDriveConfiguration_disableLocalGroups = Lens.lens (\OneDriveConfiguration' {disableLocalGroups} -> disableLocalGroups) (\s@OneDriveConfiguration' {} a -> s {disableLocalGroups = a} :: OneDriveConfiguration)
+
+-- | A list of regular expression patterns to exclude certain documents in
+-- your OneDrive. Documents that match the patterns are excluded from the
+-- index. Documents that don\'t match the patterns are included in the
+-- index. If a document matches both an inclusion and exclusion pattern,
+-- the exclusion pattern takes precedence and the document isn\'t included
+-- in the index.
+--
+-- The pattern is applied to the file name.
+oneDriveConfiguration_exclusionPatterns :: Lens.Lens' OneDriveConfiguration (Prelude.Maybe [Prelude.Text])
+oneDriveConfiguration_exclusionPatterns = Lens.lens (\OneDriveConfiguration' {exclusionPatterns} -> exclusionPatterns) (\s@OneDriveConfiguration' {} a -> s {exclusionPatterns = a} :: OneDriveConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of @DataSourceToIndexFieldMapping@ objects that map OneDrive data
+-- source attributes or field names to Amazon Kendra index field names. To
+-- create custom fields, use the @UpdateIndex@ API before you map to
+-- OneDrive fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The OneDrive data source field names must exist in your OneDrive custom
+-- metadata.
+oneDriveConfiguration_fieldMappings :: Lens.Lens' OneDriveConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+oneDriveConfiguration_fieldMappings = Lens.lens (\OneDriveConfiguration' {fieldMappings} -> fieldMappings) (\s@OneDriveConfiguration' {} a -> s {fieldMappings = a} :: OneDriveConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of regular expression patterns to include certain documents in
+-- your OneDrive. Documents that match the patterns are included in the
+-- index. Documents that don\'t match the patterns are excluded from the
+-- index. If a document matches both an inclusion and exclusion pattern,
+-- the exclusion pattern takes precedence and the document isn\'t included
+-- in the index.
+--
+-- The pattern is applied to the file name.
+oneDriveConfiguration_inclusionPatterns :: Lens.Lens' OneDriveConfiguration (Prelude.Maybe [Prelude.Text])
+oneDriveConfiguration_inclusionPatterns = Lens.lens (\OneDriveConfiguration' {inclusionPatterns} -> inclusionPatterns) (\s@OneDriveConfiguration' {} a -> s {inclusionPatterns = a} :: OneDriveConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Azure Active Directory domain of the organization.
+oneDriveConfiguration_tenantDomain :: Lens.Lens' OneDriveConfiguration Prelude.Text
+oneDriveConfiguration_tenantDomain = Lens.lens (\OneDriveConfiguration' {tenantDomain} -> tenantDomain) (\s@OneDriveConfiguration' {} a -> s {tenantDomain = a} :: OneDriveConfiguration)
+
+-- | The Amazon Resource Name (ARN) of an Secrets Managersecret that contains
+-- the user name and password to connect to OneDrive. The user namd should
+-- be the application ID for the OneDrive application, and the password is
+-- the application key for the OneDrive application.
+oneDriveConfiguration_secretArn :: Lens.Lens' OneDriveConfiguration Prelude.Text
+oneDriveConfiguration_secretArn = Lens.lens (\OneDriveConfiguration' {secretArn} -> secretArn) (\s@OneDriveConfiguration' {} a -> s {secretArn = a} :: OneDriveConfiguration)
+
+-- | A list of user accounts whose documents should be indexed.
+oneDriveConfiguration_oneDriveUsers :: Lens.Lens' OneDriveConfiguration OneDriveUsers
+oneDriveConfiguration_oneDriveUsers = Lens.lens (\OneDriveConfiguration' {oneDriveUsers} -> oneDriveUsers) (\s@OneDriveConfiguration' {} a -> s {oneDriveUsers = a} :: OneDriveConfiguration)
+
+instance Data.FromJSON OneDriveConfiguration where
+  parseJSON =
+    Data.withObject
+      "OneDriveConfiguration"
+      ( \x ->
+          OneDriveConfiguration'
+            Prelude.<$> (x Data..:? "DisableLocalGroups")
+            Prelude.<*> ( x
+                            Data..:? "ExclusionPatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "FieldMappings")
+            Prelude.<*> ( x
+                            Data..:? "InclusionPatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "TenantDomain")
+            Prelude.<*> (x Data..: "SecretArn")
+            Prelude.<*> (x Data..: "OneDriveUsers")
+      )
+
+instance Prelude.Hashable OneDriveConfiguration where
+  hashWithSalt _salt OneDriveConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` disableLocalGroups
+      `Prelude.hashWithSalt` exclusionPatterns
+      `Prelude.hashWithSalt` fieldMappings
+      `Prelude.hashWithSalt` inclusionPatterns
+      `Prelude.hashWithSalt` tenantDomain
+      `Prelude.hashWithSalt` secretArn
+      `Prelude.hashWithSalt` oneDriveUsers
+
+instance Prelude.NFData OneDriveConfiguration where
+  rnf OneDriveConfiguration' {..} =
+    Prelude.rnf disableLocalGroups
+      `Prelude.seq` Prelude.rnf exclusionPatterns
+      `Prelude.seq` Prelude.rnf fieldMappings
+      `Prelude.seq` Prelude.rnf inclusionPatterns
+      `Prelude.seq` Prelude.rnf tenantDomain
+      `Prelude.seq` Prelude.rnf secretArn
+      `Prelude.seq` Prelude.rnf oneDriveUsers
+
+instance Data.ToJSON OneDriveConfiguration where
+  toJSON OneDriveConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DisableLocalGroups" Data..=)
+              Prelude.<$> disableLocalGroups,
+            ("ExclusionPatterns" Data..=)
+              Prelude.<$> exclusionPatterns,
+            ("FieldMappings" Data..=) Prelude.<$> fieldMappings,
+            ("InclusionPatterns" Data..=)
+              Prelude.<$> inclusionPatterns,
+            Prelude.Just ("TenantDomain" Data..= tenantDomain),
+            Prelude.Just ("SecretArn" Data..= secretArn),
+            Prelude.Just
+              ("OneDriveUsers" Data..= oneDriveUsers)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/OneDriveUsers.hs b/gen/Amazonka/Kendra/Types/OneDriveUsers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/OneDriveUsers.hs
@@ -0,0 +1,111 @@
+{-# 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.Kendra.Types.OneDriveUsers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.OneDriveUsers where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.S3Path
+import qualified Amazonka.Prelude as Prelude
+
+-- | User accounts whose documents should be indexed.
+--
+-- /See:/ 'newOneDriveUsers' smart constructor.
+data OneDriveUsers = OneDriveUsers'
+  { -- | A list of users whose documents should be indexed. Specify the user
+    -- names in email format, for example, @username\@tenantdomain@. If you
+    -- need to index the documents of more than 100 users, use the
+    -- @OneDriveUserS3Path@ field to specify the location of a file containing
+    -- a list of users.
+    oneDriveUserList :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The S3 bucket location of a file containing a list of users whose
+    -- documents should be indexed.
+    oneDriveUserS3Path :: Prelude.Maybe S3Path
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OneDriveUsers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'oneDriveUserList', 'oneDriveUsers_oneDriveUserList' - A list of users whose documents should be indexed. Specify the user
+-- names in email format, for example, @username\@tenantdomain@. If you
+-- need to index the documents of more than 100 users, use the
+-- @OneDriveUserS3Path@ field to specify the location of a file containing
+-- a list of users.
+--
+-- 'oneDriveUserS3Path', 'oneDriveUsers_oneDriveUserS3Path' - The S3 bucket location of a file containing a list of users whose
+-- documents should be indexed.
+newOneDriveUsers ::
+  OneDriveUsers
+newOneDriveUsers =
+  OneDriveUsers'
+    { oneDriveUserList = Prelude.Nothing,
+      oneDriveUserS3Path = Prelude.Nothing
+    }
+
+-- | A list of users whose documents should be indexed. Specify the user
+-- names in email format, for example, @username\@tenantdomain@. If you
+-- need to index the documents of more than 100 users, use the
+-- @OneDriveUserS3Path@ field to specify the location of a file containing
+-- a list of users.
+oneDriveUsers_oneDriveUserList :: Lens.Lens' OneDriveUsers (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+oneDriveUsers_oneDriveUserList = Lens.lens (\OneDriveUsers' {oneDriveUserList} -> oneDriveUserList) (\s@OneDriveUsers' {} a -> s {oneDriveUserList = a} :: OneDriveUsers) Prelude.. Lens.mapping Lens.coerced
+
+-- | The S3 bucket location of a file containing a list of users whose
+-- documents should be indexed.
+oneDriveUsers_oneDriveUserS3Path :: Lens.Lens' OneDriveUsers (Prelude.Maybe S3Path)
+oneDriveUsers_oneDriveUserS3Path = Lens.lens (\OneDriveUsers' {oneDriveUserS3Path} -> oneDriveUserS3Path) (\s@OneDriveUsers' {} a -> s {oneDriveUserS3Path = a} :: OneDriveUsers)
+
+instance Data.FromJSON OneDriveUsers where
+  parseJSON =
+    Data.withObject
+      "OneDriveUsers"
+      ( \x ->
+          OneDriveUsers'
+            Prelude.<$> (x Data..:? "OneDriveUserList")
+            Prelude.<*> (x Data..:? "OneDriveUserS3Path")
+      )
+
+instance Prelude.Hashable OneDriveUsers where
+  hashWithSalt _salt OneDriveUsers' {..} =
+    _salt
+      `Prelude.hashWithSalt` oneDriveUserList
+      `Prelude.hashWithSalt` oneDriveUserS3Path
+
+instance Prelude.NFData OneDriveUsers where
+  rnf OneDriveUsers' {..} =
+    Prelude.rnf oneDriveUserList
+      `Prelude.seq` Prelude.rnf oneDriveUserS3Path
+
+instance Data.ToJSON OneDriveUsers where
+  toJSON OneDriveUsers' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("OneDriveUserList" Data..=)
+              Prelude.<$> oneDriveUserList,
+            ("OneDriveUserS3Path" Data..=)
+              Prelude.<$> oneDriveUserS3Path
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/Order.hs b/gen/Amazonka/Kendra/Types/Order.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/Order.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.Kendra.Types.Order
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.Order
+  ( Order
+      ( ..,
+        Order_ASCENDING,
+        Order_DESCENDING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Order = Order' {fromOrder :: 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 Order_ASCENDING :: Order
+pattern Order_ASCENDING = Order' "ASCENDING"
+
+pattern Order_DESCENDING :: Order
+pattern Order_DESCENDING = Order' "DESCENDING"
+
+{-# COMPLETE
+  Order_ASCENDING,
+  Order_DESCENDING,
+  Order'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/Persona.hs b/gen/Amazonka/Kendra/Types/Persona.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/Persona.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.Kendra.Types.Persona
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.Persona
+  ( Persona
+      ( ..,
+        Persona_OWNER,
+        Persona_VIEWER
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Persona = Persona' {fromPersona :: 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 Persona_OWNER :: Persona
+pattern Persona_OWNER = Persona' "OWNER"
+
+pattern Persona_VIEWER :: Persona
+pattern Persona_VIEWER = Persona' "VIEWER"
+
+{-# COMPLETE
+  Persona_OWNER,
+  Persona_VIEWER,
+  Persona'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/PersonasSummary.hs b/gen/Amazonka/Kendra/Types/PersonasSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/PersonasSummary.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.Kendra.Types.PersonasSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.PersonasSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.Persona
+import qualified Amazonka.Prelude as Prelude
+
+-- | Summary information for users or groups in your IAM Identity Center
+-- identity source. This applies to users and groups with specific
+-- permissions that define their level of access to your Amazon Kendra
+-- experience. You can create an Amazon Kendra experience such as a search
+-- application. For more information on creating a search application
+-- experience, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/deploying-search-experience-no-code.html Building a search experience with no code>.
+--
+-- /See:/ 'newPersonasSummary' smart constructor.
+data PersonasSummary = PersonasSummary'
+  { -- | The date-time the summary information was created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The identifier of a user or group in your IAM Identity Center identity
+    -- source. For example, a user ID could be an email.
+    entityId :: Prelude.Maybe Prelude.Text,
+    -- | The persona that defines the specific permissions of the user or group
+    -- in your IAM Identity Center identity source. The available personas or
+    -- access roles are @Owner@ and @Viewer@. For more information on these
+    -- personas, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/deploying-search-experience-no-code.html#access-search-experience Providing access to your search page>.
+    persona :: Prelude.Maybe Persona,
+    -- | The date-time the summary information was last updated.
+    updatedAt :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PersonasSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdAt', 'personasSummary_createdAt' - The date-time the summary information was created.
+--
+-- 'entityId', 'personasSummary_entityId' - The identifier of a user or group in your IAM Identity Center identity
+-- source. For example, a user ID could be an email.
+--
+-- 'persona', 'personasSummary_persona' - The persona that defines the specific permissions of the user or group
+-- in your IAM Identity Center identity source. The available personas or
+-- access roles are @Owner@ and @Viewer@. For more information on these
+-- personas, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/deploying-search-experience-no-code.html#access-search-experience Providing access to your search page>.
+--
+-- 'updatedAt', 'personasSummary_updatedAt' - The date-time the summary information was last updated.
+newPersonasSummary ::
+  PersonasSummary
+newPersonasSummary =
+  PersonasSummary'
+    { createdAt = Prelude.Nothing,
+      entityId = Prelude.Nothing,
+      persona = Prelude.Nothing,
+      updatedAt = Prelude.Nothing
+    }
+
+-- | The date-time the summary information was created.
+personasSummary_createdAt :: Lens.Lens' PersonasSummary (Prelude.Maybe Prelude.UTCTime)
+personasSummary_createdAt = Lens.lens (\PersonasSummary' {createdAt} -> createdAt) (\s@PersonasSummary' {} a -> s {createdAt = a} :: PersonasSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The identifier of a user or group in your IAM Identity Center identity
+-- source. For example, a user ID could be an email.
+personasSummary_entityId :: Lens.Lens' PersonasSummary (Prelude.Maybe Prelude.Text)
+personasSummary_entityId = Lens.lens (\PersonasSummary' {entityId} -> entityId) (\s@PersonasSummary' {} a -> s {entityId = a} :: PersonasSummary)
+
+-- | The persona that defines the specific permissions of the user or group
+-- in your IAM Identity Center identity source. The available personas or
+-- access roles are @Owner@ and @Viewer@. For more information on these
+-- personas, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/deploying-search-experience-no-code.html#access-search-experience Providing access to your search page>.
+personasSummary_persona :: Lens.Lens' PersonasSummary (Prelude.Maybe Persona)
+personasSummary_persona = Lens.lens (\PersonasSummary' {persona} -> persona) (\s@PersonasSummary' {} a -> s {persona = a} :: PersonasSummary)
+
+-- | The date-time the summary information was last updated.
+personasSummary_updatedAt :: Lens.Lens' PersonasSummary (Prelude.Maybe Prelude.UTCTime)
+personasSummary_updatedAt = Lens.lens (\PersonasSummary' {updatedAt} -> updatedAt) (\s@PersonasSummary' {} a -> s {updatedAt = a} :: PersonasSummary) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON PersonasSummary where
+  parseJSON =
+    Data.withObject
+      "PersonasSummary"
+      ( \x ->
+          PersonasSummary'
+            Prelude.<$> (x Data..:? "CreatedAt")
+            Prelude.<*> (x Data..:? "EntityId")
+            Prelude.<*> (x Data..:? "Persona")
+            Prelude.<*> (x Data..:? "UpdatedAt")
+      )
+
+instance Prelude.Hashable PersonasSummary where
+  hashWithSalt _salt PersonasSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` entityId
+      `Prelude.hashWithSalt` persona
+      `Prelude.hashWithSalt` updatedAt
+
+instance Prelude.NFData PersonasSummary where
+  rnf PersonasSummary' {..} =
+    Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf entityId
+      `Prelude.seq` Prelude.rnf persona
+      `Prelude.seq` Prelude.rnf updatedAt
diff --git a/gen/Amazonka/Kendra/Types/Principal.hs b/gen/Amazonka/Kendra/Types/Principal.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/Principal.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.Kendra.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.Kendra.Types.Principal where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.PrincipalType
+import Amazonka.Kendra.Types.ReadAccessType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides user and group information for
+-- <https://docs.aws.amazon.com/kendra/latest/dg/user-context-filter.html user context filtering>.
+--
+-- /See:/ 'newPrincipal' smart constructor.
+data Principal = Principal'
+  { -- | The identifier of the data source the principal should access documents
+    -- from.
+    dataSourceId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the user or group.
+    name :: Prelude.Text,
+    -- | The type of principal.
+    type' :: PrincipalType,
+    -- | Whether to allow or deny document access to the principal.
+    access :: ReadAccessType
+  }
+  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:
+--
+-- 'dataSourceId', 'principal_dataSourceId' - The identifier of the data source the principal should access documents
+-- from.
+--
+-- 'name', 'principal_name' - The name of the user or group.
+--
+-- 'type'', 'principal_type' - The type of principal.
+--
+-- 'access', 'principal_access' - Whether to allow or deny document access to the principal.
+newPrincipal ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'type''
+  PrincipalType ->
+  -- | 'access'
+  ReadAccessType ->
+  Principal
+newPrincipal pName_ pType_ pAccess_ =
+  Principal'
+    { dataSourceId = Prelude.Nothing,
+      name = pName_,
+      type' = pType_,
+      access = pAccess_
+    }
+
+-- | The identifier of the data source the principal should access documents
+-- from.
+principal_dataSourceId :: Lens.Lens' Principal (Prelude.Maybe Prelude.Text)
+principal_dataSourceId = Lens.lens (\Principal' {dataSourceId} -> dataSourceId) (\s@Principal' {} a -> s {dataSourceId = a} :: Principal)
+
+-- | The name of the user or group.
+principal_name :: Lens.Lens' Principal Prelude.Text
+principal_name = Lens.lens (\Principal' {name} -> name) (\s@Principal' {} a -> s {name = a} :: Principal)
+
+-- | The type of principal.
+principal_type :: Lens.Lens' Principal PrincipalType
+principal_type = Lens.lens (\Principal' {type'} -> type') (\s@Principal' {} a -> s {type' = a} :: Principal)
+
+-- | Whether to allow or deny document access to the principal.
+principal_access :: Lens.Lens' Principal ReadAccessType
+principal_access = Lens.lens (\Principal' {access} -> access) (\s@Principal' {} a -> s {access = a} :: Principal)
+
+instance Data.FromJSON Principal where
+  parseJSON =
+    Data.withObject
+      "Principal"
+      ( \x ->
+          Principal'
+            Prelude.<$> (x Data..:? "DataSourceId")
+            Prelude.<*> (x Data..: "Name")
+            Prelude.<*> (x Data..: "Type")
+            Prelude.<*> (x Data..: "Access")
+      )
+
+instance Prelude.Hashable Principal where
+  hashWithSalt _salt Principal' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataSourceId
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` access
+
+instance Prelude.NFData Principal where
+  rnf Principal' {..} =
+    Prelude.rnf dataSourceId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf access
+
+instance Data.ToJSON Principal where
+  toJSON Principal' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DataSourceId" Data..=) Prelude.<$> dataSourceId,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("Type" Data..= type'),
+            Prelude.Just ("Access" Data..= access)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/PrincipalMappingStatus.hs b/gen/Amazonka/Kendra/Types/PrincipalMappingStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/PrincipalMappingStatus.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.Kendra.Types.PrincipalMappingStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.PrincipalMappingStatus
+  ( PrincipalMappingStatus
+      ( ..,
+        PrincipalMappingStatus_DELETED,
+        PrincipalMappingStatus_DELETING,
+        PrincipalMappingStatus_FAILED,
+        PrincipalMappingStatus_PROCESSING,
+        PrincipalMappingStatus_SUCCEEDED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PrincipalMappingStatus = PrincipalMappingStatus'
+  { fromPrincipalMappingStatus ::
+      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 PrincipalMappingStatus_DELETED :: PrincipalMappingStatus
+pattern PrincipalMappingStatus_DELETED = PrincipalMappingStatus' "DELETED"
+
+pattern PrincipalMappingStatus_DELETING :: PrincipalMappingStatus
+pattern PrincipalMappingStatus_DELETING = PrincipalMappingStatus' "DELETING"
+
+pattern PrincipalMappingStatus_FAILED :: PrincipalMappingStatus
+pattern PrincipalMappingStatus_FAILED = PrincipalMappingStatus' "FAILED"
+
+pattern PrincipalMappingStatus_PROCESSING :: PrincipalMappingStatus
+pattern PrincipalMappingStatus_PROCESSING = PrincipalMappingStatus' "PROCESSING"
+
+pattern PrincipalMappingStatus_SUCCEEDED :: PrincipalMappingStatus
+pattern PrincipalMappingStatus_SUCCEEDED = PrincipalMappingStatus' "SUCCEEDED"
+
+{-# COMPLETE
+  PrincipalMappingStatus_DELETED,
+  PrincipalMappingStatus_DELETING,
+  PrincipalMappingStatus_FAILED,
+  PrincipalMappingStatus_PROCESSING,
+  PrincipalMappingStatus_SUCCEEDED,
+  PrincipalMappingStatus'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/PrincipalType.hs b/gen/Amazonka/Kendra/Types/PrincipalType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/PrincipalType.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.Kendra.Types.PrincipalType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.PrincipalType
+  ( PrincipalType
+      ( ..,
+        PrincipalType_GROUP,
+        PrincipalType_USER
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PrincipalType = PrincipalType'
+  { fromPrincipalType ::
+      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 PrincipalType_GROUP :: PrincipalType
+pattern PrincipalType_GROUP = PrincipalType' "GROUP"
+
+pattern PrincipalType_USER :: PrincipalType
+pattern PrincipalType_USER = PrincipalType' "USER"
+
+{-# COMPLETE
+  PrincipalType_GROUP,
+  PrincipalType_USER,
+  PrincipalType'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/ProxyConfiguration.hs b/gen/Amazonka/Kendra/Types/ProxyConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ProxyConfiguration.hs
@@ -0,0 +1,153 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.Types.ProxyConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ProxyConfiguration 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 configuration information for a web proxy to connect to
+-- website hosts.
+--
+-- /See:/ 'newProxyConfiguration' smart constructor.
+data ProxyConfiguration = ProxyConfiguration'
+  { -- | Your secret ARN, which you can create in
+    -- <https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html Secrets Manager>
+    --
+    -- The credentials are optional. You use a secret if web proxy credentials
+    -- are required to connect to a website host. Amazon Kendra currently
+    -- support basic authentication to connect to a web proxy server. The
+    -- secret stores your credentials.
+    credentials :: Prelude.Maybe Prelude.Text,
+    -- | The name of the website host you want to connect to via a web proxy
+    -- server.
+    --
+    -- For example, the host name of https:\/\/a.example.com\/page1.html is
+    -- \"a.example.com\".
+    host :: Prelude.Text,
+    -- | The port number of the website host you want to connect to via a web
+    -- proxy server.
+    --
+    -- For example, the port for https:\/\/a.example.com\/page1.html is 443,
+    -- the standard port for HTTPS.
+    port :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ProxyConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'credentials', 'proxyConfiguration_credentials' - Your secret ARN, which you can create in
+-- <https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html Secrets Manager>
+--
+-- The credentials are optional. You use a secret if web proxy credentials
+-- are required to connect to a website host. Amazon Kendra currently
+-- support basic authentication to connect to a web proxy server. The
+-- secret stores your credentials.
+--
+-- 'host', 'proxyConfiguration_host' - The name of the website host you want to connect to via a web proxy
+-- server.
+--
+-- For example, the host name of https:\/\/a.example.com\/page1.html is
+-- \"a.example.com\".
+--
+-- 'port', 'proxyConfiguration_port' - The port number of the website host you want to connect to via a web
+-- proxy server.
+--
+-- For example, the port for https:\/\/a.example.com\/page1.html is 443,
+-- the standard port for HTTPS.
+newProxyConfiguration ::
+  -- | 'host'
+  Prelude.Text ->
+  -- | 'port'
+  Prelude.Natural ->
+  ProxyConfiguration
+newProxyConfiguration pHost_ pPort_ =
+  ProxyConfiguration'
+    { credentials = Prelude.Nothing,
+      host = pHost_,
+      port = pPort_
+    }
+
+-- | Your secret ARN, which you can create in
+-- <https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html Secrets Manager>
+--
+-- The credentials are optional. You use a secret if web proxy credentials
+-- are required to connect to a website host. Amazon Kendra currently
+-- support basic authentication to connect to a web proxy server. The
+-- secret stores your credentials.
+proxyConfiguration_credentials :: Lens.Lens' ProxyConfiguration (Prelude.Maybe Prelude.Text)
+proxyConfiguration_credentials = Lens.lens (\ProxyConfiguration' {credentials} -> credentials) (\s@ProxyConfiguration' {} a -> s {credentials = a} :: ProxyConfiguration)
+
+-- | The name of the website host you want to connect to via a web proxy
+-- server.
+--
+-- For example, the host name of https:\/\/a.example.com\/page1.html is
+-- \"a.example.com\".
+proxyConfiguration_host :: Lens.Lens' ProxyConfiguration Prelude.Text
+proxyConfiguration_host = Lens.lens (\ProxyConfiguration' {host} -> host) (\s@ProxyConfiguration' {} a -> s {host = a} :: ProxyConfiguration)
+
+-- | The port number of the website host you want to connect to via a web
+-- proxy server.
+--
+-- For example, the port for https:\/\/a.example.com\/page1.html is 443,
+-- the standard port for HTTPS.
+proxyConfiguration_port :: Lens.Lens' ProxyConfiguration Prelude.Natural
+proxyConfiguration_port = Lens.lens (\ProxyConfiguration' {port} -> port) (\s@ProxyConfiguration' {} a -> s {port = a} :: ProxyConfiguration)
+
+instance Data.FromJSON ProxyConfiguration where
+  parseJSON =
+    Data.withObject
+      "ProxyConfiguration"
+      ( \x ->
+          ProxyConfiguration'
+            Prelude.<$> (x Data..:? "Credentials")
+            Prelude.<*> (x Data..: "Host")
+            Prelude.<*> (x Data..: "Port")
+      )
+
+instance Prelude.Hashable ProxyConfiguration where
+  hashWithSalt _salt ProxyConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` credentials
+      `Prelude.hashWithSalt` host
+      `Prelude.hashWithSalt` port
+
+instance Prelude.NFData ProxyConfiguration where
+  rnf ProxyConfiguration' {..} =
+    Prelude.rnf credentials
+      `Prelude.seq` Prelude.rnf host
+      `Prelude.seq` Prelude.rnf port
+
+instance Data.ToJSON ProxyConfiguration where
+  toJSON ProxyConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Credentials" Data..=) Prelude.<$> credentials,
+            Prelude.Just ("Host" Data..= host),
+            Prelude.Just ("Port" Data..= port)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/QueryIdentifiersEnclosingOption.hs b/gen/Amazonka/Kendra/Types/QueryIdentifiersEnclosingOption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/QueryIdentifiersEnclosingOption.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.Kendra.Types.QueryIdentifiersEnclosingOption
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.QueryIdentifiersEnclosingOption
+  ( QueryIdentifiersEnclosingOption
+      ( ..,
+        QueryIdentifiersEnclosingOption_DOUBLE_QUOTES,
+        QueryIdentifiersEnclosingOption_NONE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype QueryIdentifiersEnclosingOption = QueryIdentifiersEnclosingOption'
+  { fromQueryIdentifiersEnclosingOption ::
+      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 QueryIdentifiersEnclosingOption_DOUBLE_QUOTES :: QueryIdentifiersEnclosingOption
+pattern QueryIdentifiersEnclosingOption_DOUBLE_QUOTES = QueryIdentifiersEnclosingOption' "DOUBLE_QUOTES"
+
+pattern QueryIdentifiersEnclosingOption_NONE :: QueryIdentifiersEnclosingOption
+pattern QueryIdentifiersEnclosingOption_NONE = QueryIdentifiersEnclosingOption' "NONE"
+
+{-# COMPLETE
+  QueryIdentifiersEnclosingOption_DOUBLE_QUOTES,
+  QueryIdentifiersEnclosingOption_NONE,
+  QueryIdentifiersEnclosingOption'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/QueryResultFormat.hs b/gen/Amazonka/Kendra/Types/QueryResultFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/QueryResultFormat.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.Kendra.Types.QueryResultFormat
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.QueryResultFormat
+  ( QueryResultFormat
+      ( ..,
+        QueryResultFormat_TABLE,
+        QueryResultFormat_TEXT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype QueryResultFormat = QueryResultFormat'
+  { fromQueryResultFormat ::
+      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 QueryResultFormat_TABLE :: QueryResultFormat
+pattern QueryResultFormat_TABLE = QueryResultFormat' "TABLE"
+
+pattern QueryResultFormat_TEXT :: QueryResultFormat
+pattern QueryResultFormat_TEXT = QueryResultFormat' "TEXT"
+
+{-# COMPLETE
+  QueryResultFormat_TABLE,
+  QueryResultFormat_TEXT,
+  QueryResultFormat'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/QueryResultItem.hs b/gen/Amazonka/Kendra/Types/QueryResultItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/QueryResultItem.hs
@@ -0,0 +1,283 @@
+{-# 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.Kendra.Types.QueryResultItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.QueryResultItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.AdditionalResultAttribute
+import Amazonka.Kendra.Types.DocumentAttribute
+import Amazonka.Kendra.Types.QueryResultFormat
+import Amazonka.Kendra.Types.QueryResultType
+import Amazonka.Kendra.Types.ScoreAttributes
+import Amazonka.Kendra.Types.TableExcerpt
+import Amazonka.Kendra.Types.TextWithHighlights
+import qualified Amazonka.Prelude as Prelude
+
+-- | A single query result.
+--
+-- A query result contains information about a document returned by the
+-- query. This includes the original location of the document, a list of
+-- attributes assigned to the document, and relevant text from the document
+-- that satisfies the query.
+--
+-- /See:/ 'newQueryResultItem' smart constructor.
+data QueryResultItem = QueryResultItem'
+  { -- | One or more additional attributes associated with the query result.
+    additionalAttributes :: Prelude.Maybe [AdditionalResultAttribute],
+    -- | An array of document attributes assigned to a document in the search
+    -- results. For example, the document author (@_author@) or the source URI
+    -- (@_source_uri@) of the document.
+    documentAttributes :: Prelude.Maybe [DocumentAttribute],
+    -- | An extract of the text in the document. Contains information about
+    -- highlighting the relevant terms in the excerpt.
+    documentExcerpt :: Prelude.Maybe TextWithHighlights,
+    -- | The identifier for the document.
+    documentId :: Prelude.Maybe Prelude.Text,
+    -- | The title of the document. Contains the text of the title and
+    -- information for highlighting the relevant terms in the title.
+    documentTitle :: Prelude.Maybe TextWithHighlights,
+    -- | The URI of the original location of the document.
+    documentURI :: Prelude.Maybe Prelude.Text,
+    -- | A token that identifies a particular result from a particular query. Use
+    -- this token to provide click-through feedback for the result. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/submitting-feedback.html Submitting feedback>
+    -- .
+    feedbackToken :: Prelude.Maybe Prelude.Text,
+    -- | If the @Type@ of document within the response is @ANSWER@, then it is
+    -- either a @TABLE@ answer or @TEXT@ answer. If it\'s a table answer, a
+    -- table excerpt is returned in @TableExcerpt@. If it\'s a text answer, a
+    -- text excerpt is returned in @DocumentExcerpt@.
+    format :: Prelude.Maybe QueryResultFormat,
+    -- | The identifier for the query result.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | Indicates the confidence that Amazon Kendra has that a result matches
+    -- the query that you provided. Each result is placed into a bin that
+    -- indicates the confidence, @VERY_HIGH@, @HIGH@, @MEDIUM@ and @LOW@. You
+    -- can use the score to determine if a response meets the confidence needed
+    -- for your application.
+    --
+    -- The field is only set to @LOW@ when the @Type@ field is set to
+    -- @DOCUMENT@ and Amazon Kendra is not confident that the result matches
+    -- the query.
+    scoreAttributes :: Prelude.Maybe ScoreAttributes,
+    -- | An excerpt from a table within a document.
+    tableExcerpt :: Prelude.Maybe TableExcerpt,
+    -- | The type of document within the response. For example, a response could
+    -- include a question-answer that\'s relevant to the query.
+    type' :: Prelude.Maybe QueryResultType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'QueryResultItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'additionalAttributes', 'queryResultItem_additionalAttributes' - One or more additional attributes associated with the query result.
+--
+-- 'documentAttributes', 'queryResultItem_documentAttributes' - An array of document attributes assigned to a document in the search
+-- results. For example, the document author (@_author@) or the source URI
+-- (@_source_uri@) of the document.
+--
+-- 'documentExcerpt', 'queryResultItem_documentExcerpt' - An extract of the text in the document. Contains information about
+-- highlighting the relevant terms in the excerpt.
+--
+-- 'documentId', 'queryResultItem_documentId' - The identifier for the document.
+--
+-- 'documentTitle', 'queryResultItem_documentTitle' - The title of the document. Contains the text of the title and
+-- information for highlighting the relevant terms in the title.
+--
+-- 'documentURI', 'queryResultItem_documentURI' - The URI of the original location of the document.
+--
+-- 'feedbackToken', 'queryResultItem_feedbackToken' - A token that identifies a particular result from a particular query. Use
+-- this token to provide click-through feedback for the result. For more
+-- information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/submitting-feedback.html Submitting feedback>
+-- .
+--
+-- 'format', 'queryResultItem_format' - If the @Type@ of document within the response is @ANSWER@, then it is
+-- either a @TABLE@ answer or @TEXT@ answer. If it\'s a table answer, a
+-- table excerpt is returned in @TableExcerpt@. If it\'s a text answer, a
+-- text excerpt is returned in @DocumentExcerpt@.
+--
+-- 'id', 'queryResultItem_id' - The identifier for the query result.
+--
+-- 'scoreAttributes', 'queryResultItem_scoreAttributes' - Indicates the confidence that Amazon Kendra has that a result matches
+-- the query that you provided. Each result is placed into a bin that
+-- indicates the confidence, @VERY_HIGH@, @HIGH@, @MEDIUM@ and @LOW@. You
+-- can use the score to determine if a response meets the confidence needed
+-- for your application.
+--
+-- The field is only set to @LOW@ when the @Type@ field is set to
+-- @DOCUMENT@ and Amazon Kendra is not confident that the result matches
+-- the query.
+--
+-- 'tableExcerpt', 'queryResultItem_tableExcerpt' - An excerpt from a table within a document.
+--
+-- 'type'', 'queryResultItem_type' - The type of document within the response. For example, a response could
+-- include a question-answer that\'s relevant to the query.
+newQueryResultItem ::
+  QueryResultItem
+newQueryResultItem =
+  QueryResultItem'
+    { additionalAttributes =
+        Prelude.Nothing,
+      documentAttributes = Prelude.Nothing,
+      documentExcerpt = Prelude.Nothing,
+      documentId = Prelude.Nothing,
+      documentTitle = Prelude.Nothing,
+      documentURI = Prelude.Nothing,
+      feedbackToken = Prelude.Nothing,
+      format = Prelude.Nothing,
+      id = Prelude.Nothing,
+      scoreAttributes = Prelude.Nothing,
+      tableExcerpt = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | One or more additional attributes associated with the query result.
+queryResultItem_additionalAttributes :: Lens.Lens' QueryResultItem (Prelude.Maybe [AdditionalResultAttribute])
+queryResultItem_additionalAttributes = Lens.lens (\QueryResultItem' {additionalAttributes} -> additionalAttributes) (\s@QueryResultItem' {} a -> s {additionalAttributes = a} :: QueryResultItem) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array of document attributes assigned to a document in the search
+-- results. For example, the document author (@_author@) or the source URI
+-- (@_source_uri@) of the document.
+queryResultItem_documentAttributes :: Lens.Lens' QueryResultItem (Prelude.Maybe [DocumentAttribute])
+queryResultItem_documentAttributes = Lens.lens (\QueryResultItem' {documentAttributes} -> documentAttributes) (\s@QueryResultItem' {} a -> s {documentAttributes = a} :: QueryResultItem) Prelude.. Lens.mapping Lens.coerced
+
+-- | An extract of the text in the document. Contains information about
+-- highlighting the relevant terms in the excerpt.
+queryResultItem_documentExcerpt :: Lens.Lens' QueryResultItem (Prelude.Maybe TextWithHighlights)
+queryResultItem_documentExcerpt = Lens.lens (\QueryResultItem' {documentExcerpt} -> documentExcerpt) (\s@QueryResultItem' {} a -> s {documentExcerpt = a} :: QueryResultItem)
+
+-- | The identifier for the document.
+queryResultItem_documentId :: Lens.Lens' QueryResultItem (Prelude.Maybe Prelude.Text)
+queryResultItem_documentId = Lens.lens (\QueryResultItem' {documentId} -> documentId) (\s@QueryResultItem' {} a -> s {documentId = a} :: QueryResultItem)
+
+-- | The title of the document. Contains the text of the title and
+-- information for highlighting the relevant terms in the title.
+queryResultItem_documentTitle :: Lens.Lens' QueryResultItem (Prelude.Maybe TextWithHighlights)
+queryResultItem_documentTitle = Lens.lens (\QueryResultItem' {documentTitle} -> documentTitle) (\s@QueryResultItem' {} a -> s {documentTitle = a} :: QueryResultItem)
+
+-- | The URI of the original location of the document.
+queryResultItem_documentURI :: Lens.Lens' QueryResultItem (Prelude.Maybe Prelude.Text)
+queryResultItem_documentURI = Lens.lens (\QueryResultItem' {documentURI} -> documentURI) (\s@QueryResultItem' {} a -> s {documentURI = a} :: QueryResultItem)
+
+-- | A token that identifies a particular result from a particular query. Use
+-- this token to provide click-through feedback for the result. For more
+-- information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/submitting-feedback.html Submitting feedback>
+-- .
+queryResultItem_feedbackToken :: Lens.Lens' QueryResultItem (Prelude.Maybe Prelude.Text)
+queryResultItem_feedbackToken = Lens.lens (\QueryResultItem' {feedbackToken} -> feedbackToken) (\s@QueryResultItem' {} a -> s {feedbackToken = a} :: QueryResultItem)
+
+-- | If the @Type@ of document within the response is @ANSWER@, then it is
+-- either a @TABLE@ answer or @TEXT@ answer. If it\'s a table answer, a
+-- table excerpt is returned in @TableExcerpt@. If it\'s a text answer, a
+-- text excerpt is returned in @DocumentExcerpt@.
+queryResultItem_format :: Lens.Lens' QueryResultItem (Prelude.Maybe QueryResultFormat)
+queryResultItem_format = Lens.lens (\QueryResultItem' {format} -> format) (\s@QueryResultItem' {} a -> s {format = a} :: QueryResultItem)
+
+-- | The identifier for the query result.
+queryResultItem_id :: Lens.Lens' QueryResultItem (Prelude.Maybe Prelude.Text)
+queryResultItem_id = Lens.lens (\QueryResultItem' {id} -> id) (\s@QueryResultItem' {} a -> s {id = a} :: QueryResultItem)
+
+-- | Indicates the confidence that Amazon Kendra has that a result matches
+-- the query that you provided. Each result is placed into a bin that
+-- indicates the confidence, @VERY_HIGH@, @HIGH@, @MEDIUM@ and @LOW@. You
+-- can use the score to determine if a response meets the confidence needed
+-- for your application.
+--
+-- The field is only set to @LOW@ when the @Type@ field is set to
+-- @DOCUMENT@ and Amazon Kendra is not confident that the result matches
+-- the query.
+queryResultItem_scoreAttributes :: Lens.Lens' QueryResultItem (Prelude.Maybe ScoreAttributes)
+queryResultItem_scoreAttributes = Lens.lens (\QueryResultItem' {scoreAttributes} -> scoreAttributes) (\s@QueryResultItem' {} a -> s {scoreAttributes = a} :: QueryResultItem)
+
+-- | An excerpt from a table within a document.
+queryResultItem_tableExcerpt :: Lens.Lens' QueryResultItem (Prelude.Maybe TableExcerpt)
+queryResultItem_tableExcerpt = Lens.lens (\QueryResultItem' {tableExcerpt} -> tableExcerpt) (\s@QueryResultItem' {} a -> s {tableExcerpt = a} :: QueryResultItem)
+
+-- | The type of document within the response. For example, a response could
+-- include a question-answer that\'s relevant to the query.
+queryResultItem_type :: Lens.Lens' QueryResultItem (Prelude.Maybe QueryResultType)
+queryResultItem_type = Lens.lens (\QueryResultItem' {type'} -> type') (\s@QueryResultItem' {} a -> s {type' = a} :: QueryResultItem)
+
+instance Data.FromJSON QueryResultItem where
+  parseJSON =
+    Data.withObject
+      "QueryResultItem"
+      ( \x ->
+          QueryResultItem'
+            Prelude.<$> ( x
+                            Data..:? "AdditionalAttributes"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "DocumentAttributes"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "DocumentExcerpt")
+            Prelude.<*> (x Data..:? "DocumentId")
+            Prelude.<*> (x Data..:? "DocumentTitle")
+            Prelude.<*> (x Data..:? "DocumentURI")
+            Prelude.<*> (x Data..:? "FeedbackToken")
+            Prelude.<*> (x Data..:? "Format")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "ScoreAttributes")
+            Prelude.<*> (x Data..:? "TableExcerpt")
+            Prelude.<*> (x Data..:? "Type")
+      )
+
+instance Prelude.Hashable QueryResultItem where
+  hashWithSalt _salt QueryResultItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` additionalAttributes
+      `Prelude.hashWithSalt` documentAttributes
+      `Prelude.hashWithSalt` documentExcerpt
+      `Prelude.hashWithSalt` documentId
+      `Prelude.hashWithSalt` documentTitle
+      `Prelude.hashWithSalt` documentURI
+      `Prelude.hashWithSalt` feedbackToken
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` scoreAttributes
+      `Prelude.hashWithSalt` tableExcerpt
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData QueryResultItem where
+  rnf QueryResultItem' {..} =
+    Prelude.rnf additionalAttributes
+      `Prelude.seq` Prelude.rnf documentAttributes
+      `Prelude.seq` Prelude.rnf documentExcerpt
+      `Prelude.seq` Prelude.rnf documentId
+      `Prelude.seq` Prelude.rnf documentTitle
+      `Prelude.seq` Prelude.rnf documentURI
+      `Prelude.seq` Prelude.rnf feedbackToken
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf scoreAttributes
+      `Prelude.seq` Prelude.rnf tableExcerpt
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/Kendra/Types/QueryResultType.hs b/gen/Amazonka/Kendra/Types/QueryResultType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/QueryResultType.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.Kendra.Types.QueryResultType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.QueryResultType
+  ( QueryResultType
+      ( ..,
+        QueryResultType_ANSWER,
+        QueryResultType_DOCUMENT,
+        QueryResultType_QUESTION_ANSWER
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype QueryResultType = QueryResultType'
+  { fromQueryResultType ::
+      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 QueryResultType_ANSWER :: QueryResultType
+pattern QueryResultType_ANSWER = QueryResultType' "ANSWER"
+
+pattern QueryResultType_DOCUMENT :: QueryResultType
+pattern QueryResultType_DOCUMENT = QueryResultType' "DOCUMENT"
+
+pattern QueryResultType_QUESTION_ANSWER :: QueryResultType
+pattern QueryResultType_QUESTION_ANSWER = QueryResultType' "QUESTION_ANSWER"
+
+{-# COMPLETE
+  QueryResultType_ANSWER,
+  QueryResultType_DOCUMENT,
+  QueryResultType_QUESTION_ANSWER,
+  QueryResultType'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/QuerySuggestionsBlockListStatus.hs b/gen/Amazonka/Kendra/Types/QuerySuggestionsBlockListStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/QuerySuggestionsBlockListStatus.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.Types.QuerySuggestionsBlockListStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.QuerySuggestionsBlockListStatus
+  ( QuerySuggestionsBlockListStatus
+      ( ..,
+        QuerySuggestionsBlockListStatus_ACTIVE,
+        QuerySuggestionsBlockListStatus_ACTIVE_BUT_UPDATE_FAILED,
+        QuerySuggestionsBlockListStatus_CREATING,
+        QuerySuggestionsBlockListStatus_DELETING,
+        QuerySuggestionsBlockListStatus_FAILED,
+        QuerySuggestionsBlockListStatus_UPDATING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype QuerySuggestionsBlockListStatus = QuerySuggestionsBlockListStatus'
+  { fromQuerySuggestionsBlockListStatus ::
+      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 QuerySuggestionsBlockListStatus_ACTIVE :: QuerySuggestionsBlockListStatus
+pattern QuerySuggestionsBlockListStatus_ACTIVE = QuerySuggestionsBlockListStatus' "ACTIVE"
+
+pattern QuerySuggestionsBlockListStatus_ACTIVE_BUT_UPDATE_FAILED :: QuerySuggestionsBlockListStatus
+pattern QuerySuggestionsBlockListStatus_ACTIVE_BUT_UPDATE_FAILED = QuerySuggestionsBlockListStatus' "ACTIVE_BUT_UPDATE_FAILED"
+
+pattern QuerySuggestionsBlockListStatus_CREATING :: QuerySuggestionsBlockListStatus
+pattern QuerySuggestionsBlockListStatus_CREATING = QuerySuggestionsBlockListStatus' "CREATING"
+
+pattern QuerySuggestionsBlockListStatus_DELETING :: QuerySuggestionsBlockListStatus
+pattern QuerySuggestionsBlockListStatus_DELETING = QuerySuggestionsBlockListStatus' "DELETING"
+
+pattern QuerySuggestionsBlockListStatus_FAILED :: QuerySuggestionsBlockListStatus
+pattern QuerySuggestionsBlockListStatus_FAILED = QuerySuggestionsBlockListStatus' "FAILED"
+
+pattern QuerySuggestionsBlockListStatus_UPDATING :: QuerySuggestionsBlockListStatus
+pattern QuerySuggestionsBlockListStatus_UPDATING = QuerySuggestionsBlockListStatus' "UPDATING"
+
+{-# COMPLETE
+  QuerySuggestionsBlockListStatus_ACTIVE,
+  QuerySuggestionsBlockListStatus_ACTIVE_BUT_UPDATE_FAILED,
+  QuerySuggestionsBlockListStatus_CREATING,
+  QuerySuggestionsBlockListStatus_DELETING,
+  QuerySuggestionsBlockListStatus_FAILED,
+  QuerySuggestionsBlockListStatus_UPDATING,
+  QuerySuggestionsBlockListStatus'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/QuerySuggestionsBlockListSummary.hs b/gen/Amazonka/Kendra/Types/QuerySuggestionsBlockListSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/QuerySuggestionsBlockListSummary.hs
@@ -0,0 +1,155 @@
+{-# 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.Kendra.Types.QuerySuggestionsBlockListSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.QuerySuggestionsBlockListSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.QuerySuggestionsBlockListStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Summary information on a query suggestions block list.
+--
+-- This includes information on the block list ID, block list name, when
+-- the block list was created, when the block list was last updated, and
+-- the count of block words\/phrases in the block list.
+--
+-- For information on the current quota limits for block lists, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/quotas.html Quotas for Amazon Kendra>.
+--
+-- /See:/ 'newQuerySuggestionsBlockListSummary' smart constructor.
+data QuerySuggestionsBlockListSummary = QuerySuggestionsBlockListSummary'
+  { -- | The date-time summary information for a query suggestions block list was
+    -- last created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The identifier of a block list.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The number of items in the block list file.
+    itemCount :: Prelude.Maybe Prelude.Int,
+    -- | The name of the block list.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The status of the block list.
+    status :: Prelude.Maybe QuerySuggestionsBlockListStatus,
+    -- | The date-time the block list was last updated.
+    updatedAt :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'QuerySuggestionsBlockListSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdAt', 'querySuggestionsBlockListSummary_createdAt' - The date-time summary information for a query suggestions block list was
+-- last created.
+--
+-- 'id', 'querySuggestionsBlockListSummary_id' - The identifier of a block list.
+--
+-- 'itemCount', 'querySuggestionsBlockListSummary_itemCount' - The number of items in the block list file.
+--
+-- 'name', 'querySuggestionsBlockListSummary_name' - The name of the block list.
+--
+-- 'status', 'querySuggestionsBlockListSummary_status' - The status of the block list.
+--
+-- 'updatedAt', 'querySuggestionsBlockListSummary_updatedAt' - The date-time the block list was last updated.
+newQuerySuggestionsBlockListSummary ::
+  QuerySuggestionsBlockListSummary
+newQuerySuggestionsBlockListSummary =
+  QuerySuggestionsBlockListSummary'
+    { createdAt =
+        Prelude.Nothing,
+      id = Prelude.Nothing,
+      itemCount = Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing,
+      updatedAt = Prelude.Nothing
+    }
+
+-- | The date-time summary information for a query suggestions block list was
+-- last created.
+querySuggestionsBlockListSummary_createdAt :: Lens.Lens' QuerySuggestionsBlockListSummary (Prelude.Maybe Prelude.UTCTime)
+querySuggestionsBlockListSummary_createdAt = Lens.lens (\QuerySuggestionsBlockListSummary' {createdAt} -> createdAt) (\s@QuerySuggestionsBlockListSummary' {} a -> s {createdAt = a} :: QuerySuggestionsBlockListSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The identifier of a block list.
+querySuggestionsBlockListSummary_id :: Lens.Lens' QuerySuggestionsBlockListSummary (Prelude.Maybe Prelude.Text)
+querySuggestionsBlockListSummary_id = Lens.lens (\QuerySuggestionsBlockListSummary' {id} -> id) (\s@QuerySuggestionsBlockListSummary' {} a -> s {id = a} :: QuerySuggestionsBlockListSummary)
+
+-- | The number of items in the block list file.
+querySuggestionsBlockListSummary_itemCount :: Lens.Lens' QuerySuggestionsBlockListSummary (Prelude.Maybe Prelude.Int)
+querySuggestionsBlockListSummary_itemCount = Lens.lens (\QuerySuggestionsBlockListSummary' {itemCount} -> itemCount) (\s@QuerySuggestionsBlockListSummary' {} a -> s {itemCount = a} :: QuerySuggestionsBlockListSummary)
+
+-- | The name of the block list.
+querySuggestionsBlockListSummary_name :: Lens.Lens' QuerySuggestionsBlockListSummary (Prelude.Maybe Prelude.Text)
+querySuggestionsBlockListSummary_name = Lens.lens (\QuerySuggestionsBlockListSummary' {name} -> name) (\s@QuerySuggestionsBlockListSummary' {} a -> s {name = a} :: QuerySuggestionsBlockListSummary)
+
+-- | The status of the block list.
+querySuggestionsBlockListSummary_status :: Lens.Lens' QuerySuggestionsBlockListSummary (Prelude.Maybe QuerySuggestionsBlockListStatus)
+querySuggestionsBlockListSummary_status = Lens.lens (\QuerySuggestionsBlockListSummary' {status} -> status) (\s@QuerySuggestionsBlockListSummary' {} a -> s {status = a} :: QuerySuggestionsBlockListSummary)
+
+-- | The date-time the block list was last updated.
+querySuggestionsBlockListSummary_updatedAt :: Lens.Lens' QuerySuggestionsBlockListSummary (Prelude.Maybe Prelude.UTCTime)
+querySuggestionsBlockListSummary_updatedAt = Lens.lens (\QuerySuggestionsBlockListSummary' {updatedAt} -> updatedAt) (\s@QuerySuggestionsBlockListSummary' {} a -> s {updatedAt = a} :: QuerySuggestionsBlockListSummary) Prelude.. Lens.mapping Data._Time
+
+instance
+  Data.FromJSON
+    QuerySuggestionsBlockListSummary
+  where
+  parseJSON =
+    Data.withObject
+      "QuerySuggestionsBlockListSummary"
+      ( \x ->
+          QuerySuggestionsBlockListSummary'
+            Prelude.<$> (x Data..:? "CreatedAt")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "ItemCount")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "UpdatedAt")
+      )
+
+instance
+  Prelude.Hashable
+    QuerySuggestionsBlockListSummary
+  where
+  hashWithSalt
+    _salt
+    QuerySuggestionsBlockListSummary' {..} =
+      _salt
+        `Prelude.hashWithSalt` createdAt
+        `Prelude.hashWithSalt` id
+        `Prelude.hashWithSalt` itemCount
+        `Prelude.hashWithSalt` name
+        `Prelude.hashWithSalt` status
+        `Prelude.hashWithSalt` updatedAt
+
+instance
+  Prelude.NFData
+    QuerySuggestionsBlockListSummary
+  where
+  rnf QuerySuggestionsBlockListSummary' {..} =
+    Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf itemCount
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf updatedAt
diff --git a/gen/Amazonka/Kendra/Types/QuerySuggestionsStatus.hs b/gen/Amazonka/Kendra/Types/QuerySuggestionsStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/QuerySuggestionsStatus.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.Kendra.Types.QuerySuggestionsStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.QuerySuggestionsStatus
+  ( QuerySuggestionsStatus
+      ( ..,
+        QuerySuggestionsStatus_ACTIVE,
+        QuerySuggestionsStatus_UPDATING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype QuerySuggestionsStatus = QuerySuggestionsStatus'
+  { fromQuerySuggestionsStatus ::
+      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 QuerySuggestionsStatus_ACTIVE :: QuerySuggestionsStatus
+pattern QuerySuggestionsStatus_ACTIVE = QuerySuggestionsStatus' "ACTIVE"
+
+pattern QuerySuggestionsStatus_UPDATING :: QuerySuggestionsStatus
+pattern QuerySuggestionsStatus_UPDATING = QuerySuggestionsStatus' "UPDATING"
+
+{-# COMPLETE
+  QuerySuggestionsStatus_ACTIVE,
+  QuerySuggestionsStatus_UPDATING,
+  QuerySuggestionsStatus'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/QuipConfiguration.hs b/gen/Amazonka/Kendra/Types/QuipConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/QuipConfiguration.hs
@@ -0,0 +1,360 @@
+{-# 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.Kendra.Types.QuipConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.QuipConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DataSourceToIndexFieldMapping
+import Amazonka.Kendra.Types.DataSourceVpcConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information to connect to Quip as your data
+-- source.
+--
+-- /See:/ 'newQuipConfiguration' smart constructor.
+data QuipConfiguration = QuipConfiguration'
+  { -- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+    -- field names of Quip attachments to Amazon Kendra index field names. To
+    -- create custom fields, use the @UpdateIndex@ API before you map to Quip
+    -- fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The Quip field names must exist in your Quip custom metadata.
+    attachmentFieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | @TRUE@ to index attachments.
+    crawlAttachments :: Prelude.Maybe Prelude.Bool,
+    -- | @TRUE@ to index the contents of chat rooms.
+    crawlChatRooms :: Prelude.Maybe Prelude.Bool,
+    -- | @TRUE@ to index file comments.
+    crawlFileComments :: Prelude.Maybe Prelude.Bool,
+    -- | A list of regular expression patterns to exclude certain files in your
+    -- Quip file system. Files that match the patterns are excluded from the
+    -- index. Files that don’t match the patterns are included in the index. If
+    -- a file matches both an inclusion pattern and an exclusion pattern, the
+    -- exclusion pattern takes precedence, and the file isn\'t included in the
+    -- index.
+    exclusionPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | The identifiers of the Quip folders you want to index. You can find the
+    -- folder ID in your browser URL when you access your folder in Quip. For
+    -- example,
+    -- /https:\/\/quip-company.quipdomain.com\/zlLuOVNSarTL\/folder-name/. The
+    -- folder ID in this example is \"zlLuOVNSarTL\".
+    folderIds :: Prelude.Maybe [Prelude.Text],
+    -- | A list of regular expression patterns to include certain files in your
+    -- Quip file system. Files that match the patterns are included in the
+    -- index. Files that don\'t match the patterns are excluded from the index.
+    -- If a file matches both an inclusion pattern and an exclusion pattern,
+    -- the exclusion pattern takes precedence, and the file isn\'t included in
+    -- the index.
+    inclusionPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+    -- field names of Quip messages to Amazon Kendra index field names. To
+    -- create custom fields, use the @UpdateIndex@ API before you map to Quip
+    -- fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The Quip field names must exist in your Quip custom metadata.
+    messageFieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+    -- field names of Quip threads to Amazon Kendra index field names. To
+    -- create custom fields, use the @UpdateIndex@ API before you map to Quip
+    -- fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The Quip field names must exist in your Quip custom metadata.
+    threadFieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | Configuration information for an Amazon Virtual Private Cloud (VPC) to
+    -- connect to your Quip. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+    vpcConfiguration :: Prelude.Maybe DataSourceVpcConfiguration,
+    -- | The Quip site domain. For example,
+    -- /https:\/\/quip-company.quipdomain.com\/browse/. The domain in this
+    -- example is \"quipdomain\".
+    domain :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of an Secrets Manager secret that
+    -- contains the key-value pairs that are required to connect to your Quip.
+    -- The secret must contain a JSON structure with the following keys:
+    --
+    -- -   accessToken—The token created in Quip. For more information, see
+    --     <https://docs.aws.amazon.com/kendra/latest/dg/data-source-slack.html Using a Quip data source>.
+    secretArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'QuipConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attachmentFieldMappings', 'quipConfiguration_attachmentFieldMappings' - A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of Quip attachments to Amazon Kendra index field names. To
+-- create custom fields, use the @UpdateIndex@ API before you map to Quip
+-- fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Quip field names must exist in your Quip custom metadata.
+--
+-- 'crawlAttachments', 'quipConfiguration_crawlAttachments' - @TRUE@ to index attachments.
+--
+-- 'crawlChatRooms', 'quipConfiguration_crawlChatRooms' - @TRUE@ to index the contents of chat rooms.
+--
+-- 'crawlFileComments', 'quipConfiguration_crawlFileComments' - @TRUE@ to index file comments.
+--
+-- 'exclusionPatterns', 'quipConfiguration_exclusionPatterns' - A list of regular expression patterns to exclude certain files in your
+-- Quip file system. Files that match the patterns are excluded from the
+-- index. Files that don’t match the patterns are included in the index. If
+-- a file matches both an inclusion pattern and an exclusion pattern, the
+-- exclusion pattern takes precedence, and the file isn\'t included in the
+-- index.
+--
+-- 'folderIds', 'quipConfiguration_folderIds' - The identifiers of the Quip folders you want to index. You can find the
+-- folder ID in your browser URL when you access your folder in Quip. For
+-- example,
+-- /https:\/\/quip-company.quipdomain.com\/zlLuOVNSarTL\/folder-name/. The
+-- folder ID in this example is \"zlLuOVNSarTL\".
+--
+-- 'inclusionPatterns', 'quipConfiguration_inclusionPatterns' - A list of regular expression patterns to include certain files in your
+-- Quip file system. Files that match the patterns are included in the
+-- index. Files that don\'t match the patterns are excluded from the index.
+-- If a file matches both an inclusion pattern and an exclusion pattern,
+-- the exclusion pattern takes precedence, and the file isn\'t included in
+-- the index.
+--
+-- 'messageFieldMappings', 'quipConfiguration_messageFieldMappings' - A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of Quip messages to Amazon Kendra index field names. To
+-- create custom fields, use the @UpdateIndex@ API before you map to Quip
+-- fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Quip field names must exist in your Quip custom metadata.
+--
+-- 'threadFieldMappings', 'quipConfiguration_threadFieldMappings' - A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of Quip threads to Amazon Kendra index field names. To
+-- create custom fields, use the @UpdateIndex@ API before you map to Quip
+-- fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Quip field names must exist in your Quip custom metadata.
+--
+-- 'vpcConfiguration', 'quipConfiguration_vpcConfiguration' - Configuration information for an Amazon Virtual Private Cloud (VPC) to
+-- connect to your Quip. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+--
+-- 'domain', 'quipConfiguration_domain' - The Quip site domain. For example,
+-- /https:\/\/quip-company.quipdomain.com\/browse/. The domain in this
+-- example is \"quipdomain\".
+--
+-- 'secretArn', 'quipConfiguration_secretArn' - The Amazon Resource Name (ARN) of an Secrets Manager secret that
+-- contains the key-value pairs that are required to connect to your Quip.
+-- The secret must contain a JSON structure with the following keys:
+--
+-- -   accessToken—The token created in Quip. For more information, see
+--     <https://docs.aws.amazon.com/kendra/latest/dg/data-source-slack.html Using a Quip data source>.
+newQuipConfiguration ::
+  -- | 'domain'
+  Prelude.Text ->
+  -- | 'secretArn'
+  Prelude.Text ->
+  QuipConfiguration
+newQuipConfiguration pDomain_ pSecretArn_ =
+  QuipConfiguration'
+    { attachmentFieldMappings =
+        Prelude.Nothing,
+      crawlAttachments = Prelude.Nothing,
+      crawlChatRooms = Prelude.Nothing,
+      crawlFileComments = Prelude.Nothing,
+      exclusionPatterns = Prelude.Nothing,
+      folderIds = Prelude.Nothing,
+      inclusionPatterns = Prelude.Nothing,
+      messageFieldMappings = Prelude.Nothing,
+      threadFieldMappings = Prelude.Nothing,
+      vpcConfiguration = Prelude.Nothing,
+      domain = pDomain_,
+      secretArn = pSecretArn_
+    }
+
+-- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of Quip attachments to Amazon Kendra index field names. To
+-- create custom fields, use the @UpdateIndex@ API before you map to Quip
+-- fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Quip field names must exist in your Quip custom metadata.
+quipConfiguration_attachmentFieldMappings :: Lens.Lens' QuipConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+quipConfiguration_attachmentFieldMappings = Lens.lens (\QuipConfiguration' {attachmentFieldMappings} -> attachmentFieldMappings) (\s@QuipConfiguration' {} a -> s {attachmentFieldMappings = a} :: QuipConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | @TRUE@ to index attachments.
+quipConfiguration_crawlAttachments :: Lens.Lens' QuipConfiguration (Prelude.Maybe Prelude.Bool)
+quipConfiguration_crawlAttachments = Lens.lens (\QuipConfiguration' {crawlAttachments} -> crawlAttachments) (\s@QuipConfiguration' {} a -> s {crawlAttachments = a} :: QuipConfiguration)
+
+-- | @TRUE@ to index the contents of chat rooms.
+quipConfiguration_crawlChatRooms :: Lens.Lens' QuipConfiguration (Prelude.Maybe Prelude.Bool)
+quipConfiguration_crawlChatRooms = Lens.lens (\QuipConfiguration' {crawlChatRooms} -> crawlChatRooms) (\s@QuipConfiguration' {} a -> s {crawlChatRooms = a} :: QuipConfiguration)
+
+-- | @TRUE@ to index file comments.
+quipConfiguration_crawlFileComments :: Lens.Lens' QuipConfiguration (Prelude.Maybe Prelude.Bool)
+quipConfiguration_crawlFileComments = Lens.lens (\QuipConfiguration' {crawlFileComments} -> crawlFileComments) (\s@QuipConfiguration' {} a -> s {crawlFileComments = a} :: QuipConfiguration)
+
+-- | A list of regular expression patterns to exclude certain files in your
+-- Quip file system. Files that match the patterns are excluded from the
+-- index. Files that don’t match the patterns are included in the index. If
+-- a file matches both an inclusion pattern and an exclusion pattern, the
+-- exclusion pattern takes precedence, and the file isn\'t included in the
+-- index.
+quipConfiguration_exclusionPatterns :: Lens.Lens' QuipConfiguration (Prelude.Maybe [Prelude.Text])
+quipConfiguration_exclusionPatterns = Lens.lens (\QuipConfiguration' {exclusionPatterns} -> exclusionPatterns) (\s@QuipConfiguration' {} a -> s {exclusionPatterns = a} :: QuipConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The identifiers of the Quip folders you want to index. You can find the
+-- folder ID in your browser URL when you access your folder in Quip. For
+-- example,
+-- /https:\/\/quip-company.quipdomain.com\/zlLuOVNSarTL\/folder-name/. The
+-- folder ID in this example is \"zlLuOVNSarTL\".
+quipConfiguration_folderIds :: Lens.Lens' QuipConfiguration (Prelude.Maybe [Prelude.Text])
+quipConfiguration_folderIds = Lens.lens (\QuipConfiguration' {folderIds} -> folderIds) (\s@QuipConfiguration' {} a -> s {folderIds = a} :: QuipConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of regular expression patterns to include certain files in your
+-- Quip file system. Files that match the patterns are included in the
+-- index. Files that don\'t match the patterns are excluded from the index.
+-- If a file matches both an inclusion pattern and an exclusion pattern,
+-- the exclusion pattern takes precedence, and the file isn\'t included in
+-- the index.
+quipConfiguration_inclusionPatterns :: Lens.Lens' QuipConfiguration (Prelude.Maybe [Prelude.Text])
+quipConfiguration_inclusionPatterns = Lens.lens (\QuipConfiguration' {inclusionPatterns} -> inclusionPatterns) (\s@QuipConfiguration' {} a -> s {inclusionPatterns = a} :: QuipConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of Quip messages to Amazon Kendra index field names. To
+-- create custom fields, use the @UpdateIndex@ API before you map to Quip
+-- fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Quip field names must exist in your Quip custom metadata.
+quipConfiguration_messageFieldMappings :: Lens.Lens' QuipConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+quipConfiguration_messageFieldMappings = Lens.lens (\QuipConfiguration' {messageFieldMappings} -> messageFieldMappings) (\s@QuipConfiguration' {} a -> s {messageFieldMappings = a} :: QuipConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of @DataSourceToIndexFieldMapping@ objects that map attributes or
+-- field names of Quip threads to Amazon Kendra index field names. To
+-- create custom fields, use the @UpdateIndex@ API before you map to Quip
+-- fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Quip field names must exist in your Quip custom metadata.
+quipConfiguration_threadFieldMappings :: Lens.Lens' QuipConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+quipConfiguration_threadFieldMappings = Lens.lens (\QuipConfiguration' {threadFieldMappings} -> threadFieldMappings) (\s@QuipConfiguration' {} a -> s {threadFieldMappings = a} :: QuipConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Configuration information for an Amazon Virtual Private Cloud (VPC) to
+-- connect to your Quip. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+quipConfiguration_vpcConfiguration :: Lens.Lens' QuipConfiguration (Prelude.Maybe DataSourceVpcConfiguration)
+quipConfiguration_vpcConfiguration = Lens.lens (\QuipConfiguration' {vpcConfiguration} -> vpcConfiguration) (\s@QuipConfiguration' {} a -> s {vpcConfiguration = a} :: QuipConfiguration)
+
+-- | The Quip site domain. For example,
+-- /https:\/\/quip-company.quipdomain.com\/browse/. The domain in this
+-- example is \"quipdomain\".
+quipConfiguration_domain :: Lens.Lens' QuipConfiguration Prelude.Text
+quipConfiguration_domain = Lens.lens (\QuipConfiguration' {domain} -> domain) (\s@QuipConfiguration' {} a -> s {domain = a} :: QuipConfiguration)
+
+-- | The Amazon Resource Name (ARN) of an Secrets Manager secret that
+-- contains the key-value pairs that are required to connect to your Quip.
+-- The secret must contain a JSON structure with the following keys:
+--
+-- -   accessToken—The token created in Quip. For more information, see
+--     <https://docs.aws.amazon.com/kendra/latest/dg/data-source-slack.html Using a Quip data source>.
+quipConfiguration_secretArn :: Lens.Lens' QuipConfiguration Prelude.Text
+quipConfiguration_secretArn = Lens.lens (\QuipConfiguration' {secretArn} -> secretArn) (\s@QuipConfiguration' {} a -> s {secretArn = a} :: QuipConfiguration)
+
+instance Data.FromJSON QuipConfiguration where
+  parseJSON =
+    Data.withObject
+      "QuipConfiguration"
+      ( \x ->
+          QuipConfiguration'
+            Prelude.<$> (x Data..:? "AttachmentFieldMappings")
+            Prelude.<*> (x Data..:? "CrawlAttachments")
+            Prelude.<*> (x Data..:? "CrawlChatRooms")
+            Prelude.<*> (x Data..:? "CrawlFileComments")
+            Prelude.<*> ( x
+                            Data..:? "ExclusionPatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "FolderIds" Data..!= Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..:? "InclusionPatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "MessageFieldMappings")
+            Prelude.<*> (x Data..:? "ThreadFieldMappings")
+            Prelude.<*> (x Data..:? "VpcConfiguration")
+            Prelude.<*> (x Data..: "Domain")
+            Prelude.<*> (x Data..: "SecretArn")
+      )
+
+instance Prelude.Hashable QuipConfiguration where
+  hashWithSalt _salt QuipConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` attachmentFieldMappings
+      `Prelude.hashWithSalt` crawlAttachments
+      `Prelude.hashWithSalt` crawlChatRooms
+      `Prelude.hashWithSalt` crawlFileComments
+      `Prelude.hashWithSalt` exclusionPatterns
+      `Prelude.hashWithSalt` folderIds
+      `Prelude.hashWithSalt` inclusionPatterns
+      `Prelude.hashWithSalt` messageFieldMappings
+      `Prelude.hashWithSalt` threadFieldMappings
+      `Prelude.hashWithSalt` vpcConfiguration
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` secretArn
+
+instance Prelude.NFData QuipConfiguration where
+  rnf QuipConfiguration' {..} =
+    Prelude.rnf attachmentFieldMappings
+      `Prelude.seq` Prelude.rnf crawlAttachments
+      `Prelude.seq` Prelude.rnf crawlChatRooms
+      `Prelude.seq` Prelude.rnf crawlFileComments
+      `Prelude.seq` Prelude.rnf exclusionPatterns
+      `Prelude.seq` Prelude.rnf folderIds
+      `Prelude.seq` Prelude.rnf inclusionPatterns
+      `Prelude.seq` Prelude.rnf messageFieldMappings
+      `Prelude.seq` Prelude.rnf threadFieldMappings
+      `Prelude.seq` Prelude.rnf vpcConfiguration
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf secretArn
+
+instance Data.ToJSON QuipConfiguration where
+  toJSON QuipConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AttachmentFieldMappings" Data..=)
+              Prelude.<$> attachmentFieldMappings,
+            ("CrawlAttachments" Data..=)
+              Prelude.<$> crawlAttachments,
+            ("CrawlChatRooms" Data..=)
+              Prelude.<$> crawlChatRooms,
+            ("CrawlFileComments" Data..=)
+              Prelude.<$> crawlFileComments,
+            ("ExclusionPatterns" Data..=)
+              Prelude.<$> exclusionPatterns,
+            ("FolderIds" Data..=) Prelude.<$> folderIds,
+            ("InclusionPatterns" Data..=)
+              Prelude.<$> inclusionPatterns,
+            ("MessageFieldMappings" Data..=)
+              Prelude.<$> messageFieldMappings,
+            ("ThreadFieldMappings" Data..=)
+              Prelude.<$> threadFieldMappings,
+            ("VpcConfiguration" Data..=)
+              Prelude.<$> vpcConfiguration,
+            Prelude.Just ("Domain" Data..= domain),
+            Prelude.Just ("SecretArn" Data..= secretArn)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/ReadAccessType.hs b/gen/Amazonka/Kendra/Types/ReadAccessType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ReadAccessType.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.Kendra.Types.ReadAccessType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ReadAccessType
+  ( ReadAccessType
+      ( ..,
+        ReadAccessType_ALLOW,
+        ReadAccessType_DENY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ReadAccessType = ReadAccessType'
+  { fromReadAccessType ::
+      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 ReadAccessType_ALLOW :: ReadAccessType
+pattern ReadAccessType_ALLOW = ReadAccessType' "ALLOW"
+
+pattern ReadAccessType_DENY :: ReadAccessType
+pattern ReadAccessType_DENY = ReadAccessType' "DENY"
+
+{-# COMPLETE
+  ReadAccessType_ALLOW,
+  ReadAccessType_DENY,
+  ReadAccessType'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/Relevance.hs b/gen/Amazonka/Kendra/Types/Relevance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/Relevance.hs
@@ -0,0 +1,241 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.Types.Relevance
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.Relevance where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.Order
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information for tuning the relevance of a field in a search.
+-- When a query includes terms that match the field, the results are given
+-- a boost in the response based on these tuning parameters.
+--
+-- /See:/ 'newRelevance' smart constructor.
+data Relevance = Relevance'
+  { -- | Specifies the time period that the boost applies to. For example, to
+    -- make the boost apply to documents with the field value within the last
+    -- month, you would use \"2628000s\". Once the field value is beyond the
+    -- specified range, the effect of the boost drops off. The higher the
+    -- importance, the faster the effect drops off. If you don\'t specify a
+    -- value, the default is 3 months. The value of the field is a numeric
+    -- string followed by the character \"s\", for example \"86400s\" for one
+    -- day, or \"604800s\" for one week.
+    --
+    -- Only applies to @DATE@ fields.
+    duration :: Prelude.Maybe Prelude.Text,
+    -- | Indicates that this field determines how \"fresh\" a document is. For
+    -- example, if document 1 was created on November 5, and document 2 was
+    -- created on October 31, document 1 is \"fresher\" than document 2. You
+    -- can only set the @Freshness@ field on one @DATE@ type field. Only
+    -- applies to @DATE@ fields.
+    freshness :: Prelude.Maybe Prelude.Bool,
+    -- | The relative importance of the field in the search. Larger numbers
+    -- provide more of a boost than smaller numbers.
+    importance :: Prelude.Maybe Prelude.Natural,
+    -- | Determines how values should be interpreted.
+    --
+    -- When the @RankOrder@ field is @ASCENDING@, higher numbers are better.
+    -- For example, a document with a rating score of 10 is higher ranking than
+    -- a document with a rating score of 1.
+    --
+    -- When the @RankOrder@ field is @DESCENDING@, lower numbers are better.
+    -- For example, in a task tracking application, a priority 1 task is more
+    -- important than a priority 5 task.
+    --
+    -- Only applies to @LONG@ and @DOUBLE@ fields.
+    rankOrder :: Prelude.Maybe Order,
+    -- | A list of values that should be given a different boost when they appear
+    -- in the result list. For example, if you are boosting a field called
+    -- \"department,\" query terms that match the department field are boosted
+    -- in the result. However, you can add entries from the department field to
+    -- boost documents with those values higher.
+    --
+    -- For example, you can add entries to the map with names of departments.
+    -- If you add \"HR\",5 and \"Legal\",3 those departments are given special
+    -- attention when they appear in the metadata of a document. When those
+    -- terms appear they are given the specified importance instead of the
+    -- regular importance for the boost.
+    valueImportanceMap :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Natural)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Relevance' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'duration', 'relevance_duration' - Specifies the time period that the boost applies to. For example, to
+-- make the boost apply to documents with the field value within the last
+-- month, you would use \"2628000s\". Once the field value is beyond the
+-- specified range, the effect of the boost drops off. The higher the
+-- importance, the faster the effect drops off. If you don\'t specify a
+-- value, the default is 3 months. The value of the field is a numeric
+-- string followed by the character \"s\", for example \"86400s\" for one
+-- day, or \"604800s\" for one week.
+--
+-- Only applies to @DATE@ fields.
+--
+-- 'freshness', 'relevance_freshness' - Indicates that this field determines how \"fresh\" a document is. For
+-- example, if document 1 was created on November 5, and document 2 was
+-- created on October 31, document 1 is \"fresher\" than document 2. You
+-- can only set the @Freshness@ field on one @DATE@ type field. Only
+-- applies to @DATE@ fields.
+--
+-- 'importance', 'relevance_importance' - The relative importance of the field in the search. Larger numbers
+-- provide more of a boost than smaller numbers.
+--
+-- 'rankOrder', 'relevance_rankOrder' - Determines how values should be interpreted.
+--
+-- When the @RankOrder@ field is @ASCENDING@, higher numbers are better.
+-- For example, a document with a rating score of 10 is higher ranking than
+-- a document with a rating score of 1.
+--
+-- When the @RankOrder@ field is @DESCENDING@, lower numbers are better.
+-- For example, in a task tracking application, a priority 1 task is more
+-- important than a priority 5 task.
+--
+-- Only applies to @LONG@ and @DOUBLE@ fields.
+--
+-- 'valueImportanceMap', 'relevance_valueImportanceMap' - A list of values that should be given a different boost when they appear
+-- in the result list. For example, if you are boosting a field called
+-- \"department,\" query terms that match the department field are boosted
+-- in the result. However, you can add entries from the department field to
+-- boost documents with those values higher.
+--
+-- For example, you can add entries to the map with names of departments.
+-- If you add \"HR\",5 and \"Legal\",3 those departments are given special
+-- attention when they appear in the metadata of a document. When those
+-- terms appear they are given the specified importance instead of the
+-- regular importance for the boost.
+newRelevance ::
+  Relevance
+newRelevance =
+  Relevance'
+    { duration = Prelude.Nothing,
+      freshness = Prelude.Nothing,
+      importance = Prelude.Nothing,
+      rankOrder = Prelude.Nothing,
+      valueImportanceMap = Prelude.Nothing
+    }
+
+-- | Specifies the time period that the boost applies to. For example, to
+-- make the boost apply to documents with the field value within the last
+-- month, you would use \"2628000s\". Once the field value is beyond the
+-- specified range, the effect of the boost drops off. The higher the
+-- importance, the faster the effect drops off. If you don\'t specify a
+-- value, the default is 3 months. The value of the field is a numeric
+-- string followed by the character \"s\", for example \"86400s\" for one
+-- day, or \"604800s\" for one week.
+--
+-- Only applies to @DATE@ fields.
+relevance_duration :: Lens.Lens' Relevance (Prelude.Maybe Prelude.Text)
+relevance_duration = Lens.lens (\Relevance' {duration} -> duration) (\s@Relevance' {} a -> s {duration = a} :: Relevance)
+
+-- | Indicates that this field determines how \"fresh\" a document is. For
+-- example, if document 1 was created on November 5, and document 2 was
+-- created on October 31, document 1 is \"fresher\" than document 2. You
+-- can only set the @Freshness@ field on one @DATE@ type field. Only
+-- applies to @DATE@ fields.
+relevance_freshness :: Lens.Lens' Relevance (Prelude.Maybe Prelude.Bool)
+relevance_freshness = Lens.lens (\Relevance' {freshness} -> freshness) (\s@Relevance' {} a -> s {freshness = a} :: Relevance)
+
+-- | The relative importance of the field in the search. Larger numbers
+-- provide more of a boost than smaller numbers.
+relevance_importance :: Lens.Lens' Relevance (Prelude.Maybe Prelude.Natural)
+relevance_importance = Lens.lens (\Relevance' {importance} -> importance) (\s@Relevance' {} a -> s {importance = a} :: Relevance)
+
+-- | Determines how values should be interpreted.
+--
+-- When the @RankOrder@ field is @ASCENDING@, higher numbers are better.
+-- For example, a document with a rating score of 10 is higher ranking than
+-- a document with a rating score of 1.
+--
+-- When the @RankOrder@ field is @DESCENDING@, lower numbers are better.
+-- For example, in a task tracking application, a priority 1 task is more
+-- important than a priority 5 task.
+--
+-- Only applies to @LONG@ and @DOUBLE@ fields.
+relevance_rankOrder :: Lens.Lens' Relevance (Prelude.Maybe Order)
+relevance_rankOrder = Lens.lens (\Relevance' {rankOrder} -> rankOrder) (\s@Relevance' {} a -> s {rankOrder = a} :: Relevance)
+
+-- | A list of values that should be given a different boost when they appear
+-- in the result list. For example, if you are boosting a field called
+-- \"department,\" query terms that match the department field are boosted
+-- in the result. However, you can add entries from the department field to
+-- boost documents with those values higher.
+--
+-- For example, you can add entries to the map with names of departments.
+-- If you add \"HR\",5 and \"Legal\",3 those departments are given special
+-- attention when they appear in the metadata of a document. When those
+-- terms appear they are given the specified importance instead of the
+-- regular importance for the boost.
+relevance_valueImportanceMap :: Lens.Lens' Relevance (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Natural))
+relevance_valueImportanceMap = Lens.lens (\Relevance' {valueImportanceMap} -> valueImportanceMap) (\s@Relevance' {} a -> s {valueImportanceMap = a} :: Relevance) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON Relevance where
+  parseJSON =
+    Data.withObject
+      "Relevance"
+      ( \x ->
+          Relevance'
+            Prelude.<$> (x Data..:? "Duration")
+            Prelude.<*> (x Data..:? "Freshness")
+            Prelude.<*> (x Data..:? "Importance")
+            Prelude.<*> (x Data..:? "RankOrder")
+            Prelude.<*> ( x
+                            Data..:? "ValueImportanceMap"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable Relevance where
+  hashWithSalt _salt Relevance' {..} =
+    _salt
+      `Prelude.hashWithSalt` duration
+      `Prelude.hashWithSalt` freshness
+      `Prelude.hashWithSalt` importance
+      `Prelude.hashWithSalt` rankOrder
+      `Prelude.hashWithSalt` valueImportanceMap
+
+instance Prelude.NFData Relevance where
+  rnf Relevance' {..} =
+    Prelude.rnf duration
+      `Prelude.seq` Prelude.rnf freshness
+      `Prelude.seq` Prelude.rnf importance
+      `Prelude.seq` Prelude.rnf rankOrder
+      `Prelude.seq` Prelude.rnf valueImportanceMap
+
+instance Data.ToJSON Relevance where
+  toJSON Relevance' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Duration" Data..=) Prelude.<$> duration,
+            ("Freshness" Data..=) Prelude.<$> freshness,
+            ("Importance" Data..=) Prelude.<$> importance,
+            ("RankOrder" Data..=) Prelude.<$> rankOrder,
+            ("ValueImportanceMap" Data..=)
+              Prelude.<$> valueImportanceMap
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/RelevanceFeedback.hs b/gen/Amazonka/Kendra/Types/RelevanceFeedback.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/RelevanceFeedback.hs
@@ -0,0 +1,94 @@
+{-# 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.Kendra.Types.RelevanceFeedback
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.RelevanceFeedback where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.RelevanceType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides feedback on how relevant a document is to a search. Your
+-- application uses the @SubmitFeedback@ API to provide relevance
+-- information.
+--
+-- /See:/ 'newRelevanceFeedback' smart constructor.
+data RelevanceFeedback = RelevanceFeedback'
+  { -- | The identifier of the search result that the user provided relevance
+    -- feedback for.
+    resultId :: Prelude.Text,
+    -- | Whether to document was relevant or not relevant to the search.
+    relevanceValue :: RelevanceType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RelevanceFeedback' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resultId', 'relevanceFeedback_resultId' - The identifier of the search result that the user provided relevance
+-- feedback for.
+--
+-- 'relevanceValue', 'relevanceFeedback_relevanceValue' - Whether to document was relevant or not relevant to the search.
+newRelevanceFeedback ::
+  -- | 'resultId'
+  Prelude.Text ->
+  -- | 'relevanceValue'
+  RelevanceType ->
+  RelevanceFeedback
+newRelevanceFeedback pResultId_ pRelevanceValue_ =
+  RelevanceFeedback'
+    { resultId = pResultId_,
+      relevanceValue = pRelevanceValue_
+    }
+
+-- | The identifier of the search result that the user provided relevance
+-- feedback for.
+relevanceFeedback_resultId :: Lens.Lens' RelevanceFeedback Prelude.Text
+relevanceFeedback_resultId = Lens.lens (\RelevanceFeedback' {resultId} -> resultId) (\s@RelevanceFeedback' {} a -> s {resultId = a} :: RelevanceFeedback)
+
+-- | Whether to document was relevant or not relevant to the search.
+relevanceFeedback_relevanceValue :: Lens.Lens' RelevanceFeedback RelevanceType
+relevanceFeedback_relevanceValue = Lens.lens (\RelevanceFeedback' {relevanceValue} -> relevanceValue) (\s@RelevanceFeedback' {} a -> s {relevanceValue = a} :: RelevanceFeedback)
+
+instance Prelude.Hashable RelevanceFeedback where
+  hashWithSalt _salt RelevanceFeedback' {..} =
+    _salt
+      `Prelude.hashWithSalt` resultId
+      `Prelude.hashWithSalt` relevanceValue
+
+instance Prelude.NFData RelevanceFeedback where
+  rnf RelevanceFeedback' {..} =
+    Prelude.rnf resultId
+      `Prelude.seq` Prelude.rnf relevanceValue
+
+instance Data.ToJSON RelevanceFeedback where
+  toJSON RelevanceFeedback' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResultId" Data..= resultId),
+            Prelude.Just
+              ("RelevanceValue" Data..= relevanceValue)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/RelevanceType.hs b/gen/Amazonka/Kendra/Types/RelevanceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/RelevanceType.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.Kendra.Types.RelevanceType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.RelevanceType
+  ( RelevanceType
+      ( ..,
+        RelevanceType_NOT_RELEVANT,
+        RelevanceType_RELEVANT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RelevanceType = RelevanceType'
+  { fromRelevanceType ::
+      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 RelevanceType_NOT_RELEVANT :: RelevanceType
+pattern RelevanceType_NOT_RELEVANT = RelevanceType' "NOT_RELEVANT"
+
+pattern RelevanceType_RELEVANT :: RelevanceType
+pattern RelevanceType_RELEVANT = RelevanceType' "RELEVANT"
+
+{-# COMPLETE
+  RelevanceType_NOT_RELEVANT,
+  RelevanceType_RELEVANT,
+  RelevanceType'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/S3DataSourceConfiguration.hs b/gen/Amazonka/Kendra/Types/S3DataSourceConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/S3DataSourceConfiguration.hs
@@ -0,0 +1,266 @@
+{-# 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.Kendra.Types.S3DataSourceConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.S3DataSourceConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.AccessControlListConfiguration
+import Amazonka.Kendra.Types.DocumentsMetadataConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information to connect to an Amazon S3
+-- bucket.
+--
+-- /See:/ 'newS3DataSourceConfiguration' smart constructor.
+data S3DataSourceConfiguration = S3DataSourceConfiguration'
+  { -- | Provides the path to the S3 bucket that contains the user context
+    -- filtering files for the data source. For the format of the file, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/s3-acl.html Access control for S3 data sources>.
+    accessControlListConfiguration :: Prelude.Maybe AccessControlListConfiguration,
+    documentsMetadataConfiguration :: Prelude.Maybe DocumentsMetadataConfiguration,
+    -- | A list of glob patterns for documents that should not be indexed. If a
+    -- document that matches an inclusion prefix or inclusion pattern also
+    -- matches an exclusion pattern, the document is not indexed.
+    --
+    -- Some
+    -- <https://docs.aws.amazon.com/cli/latest/reference/s3/#use-of-exclude-and-include-filters examples>
+    -- are:
+    --
+    -- -   /*.png , *.jpg/ will exclude all PNG and JPEG image files in a
+    --     directory (files with the extensions .png and .jpg).
+    --
+    -- -   /*internal*/ will exclude all files in a directory that contain
+    --     \'internal\' in the file name, such as \'internal\',
+    --     \'internal_only\', \'company_internal\'.
+    --
+    -- -   /**\/*internal*/ will exclude all internal-related files in a
+    --     directory and its subdirectories.
+    exclusionPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | A list of glob patterns for documents that should be indexed. If a
+    -- document that matches an inclusion pattern also matches an exclusion
+    -- pattern, the document is not indexed.
+    --
+    -- Some
+    -- <https://docs.aws.amazon.com/cli/latest/reference/s3/#use-of-exclude-and-include-filters examples>
+    -- are:
+    --
+    -- -   /*.txt/ will include all text files in a directory (files with the
+    --     extension .txt).
+    --
+    -- -   /**\/*.txt/ will include all text files in a directory and its
+    --     subdirectories.
+    --
+    -- -   /*tax*/ will include all files in a directory that contain \'tax\'
+    --     in the file name, such as \'tax\', \'taxes\', \'income_tax\'.
+    inclusionPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | A list of S3 prefixes for the documents that should be included in the
+    -- index.
+    inclusionPrefixes :: Prelude.Maybe [Prelude.Text],
+    -- | The name of the bucket that contains the documents.
+    bucketName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3DataSourceConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessControlListConfiguration', 's3DataSourceConfiguration_accessControlListConfiguration' - Provides the path to the S3 bucket that contains the user context
+-- filtering files for the data source. For the format of the file, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/s3-acl.html Access control for S3 data sources>.
+--
+-- 'documentsMetadataConfiguration', 's3DataSourceConfiguration_documentsMetadataConfiguration' - Undocumented member.
+--
+-- 'exclusionPatterns', 's3DataSourceConfiguration_exclusionPatterns' - A list of glob patterns for documents that should not be indexed. If a
+-- document that matches an inclusion prefix or inclusion pattern also
+-- matches an exclusion pattern, the document is not indexed.
+--
+-- Some
+-- <https://docs.aws.amazon.com/cli/latest/reference/s3/#use-of-exclude-and-include-filters examples>
+-- are:
+--
+-- -   /*.png , *.jpg/ will exclude all PNG and JPEG image files in a
+--     directory (files with the extensions .png and .jpg).
+--
+-- -   /*internal*/ will exclude all files in a directory that contain
+--     \'internal\' in the file name, such as \'internal\',
+--     \'internal_only\', \'company_internal\'.
+--
+-- -   /**\/*internal*/ will exclude all internal-related files in a
+--     directory and its subdirectories.
+--
+-- 'inclusionPatterns', 's3DataSourceConfiguration_inclusionPatterns' - A list of glob patterns for documents that should be indexed. If a
+-- document that matches an inclusion pattern also matches an exclusion
+-- pattern, the document is not indexed.
+--
+-- Some
+-- <https://docs.aws.amazon.com/cli/latest/reference/s3/#use-of-exclude-and-include-filters examples>
+-- are:
+--
+-- -   /*.txt/ will include all text files in a directory (files with the
+--     extension .txt).
+--
+-- -   /**\/*.txt/ will include all text files in a directory and its
+--     subdirectories.
+--
+-- -   /*tax*/ will include all files in a directory that contain \'tax\'
+--     in the file name, such as \'tax\', \'taxes\', \'income_tax\'.
+--
+-- 'inclusionPrefixes', 's3DataSourceConfiguration_inclusionPrefixes' - A list of S3 prefixes for the documents that should be included in the
+-- index.
+--
+-- 'bucketName', 's3DataSourceConfiguration_bucketName' - The name of the bucket that contains the documents.
+newS3DataSourceConfiguration ::
+  -- | 'bucketName'
+  Prelude.Text ->
+  S3DataSourceConfiguration
+newS3DataSourceConfiguration pBucketName_ =
+  S3DataSourceConfiguration'
+    { accessControlListConfiguration =
+        Prelude.Nothing,
+      documentsMetadataConfiguration = Prelude.Nothing,
+      exclusionPatterns = Prelude.Nothing,
+      inclusionPatterns = Prelude.Nothing,
+      inclusionPrefixes = Prelude.Nothing,
+      bucketName = pBucketName_
+    }
+
+-- | Provides the path to the S3 bucket that contains the user context
+-- filtering files for the data source. For the format of the file, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/s3-acl.html Access control for S3 data sources>.
+s3DataSourceConfiguration_accessControlListConfiguration :: Lens.Lens' S3DataSourceConfiguration (Prelude.Maybe AccessControlListConfiguration)
+s3DataSourceConfiguration_accessControlListConfiguration = Lens.lens (\S3DataSourceConfiguration' {accessControlListConfiguration} -> accessControlListConfiguration) (\s@S3DataSourceConfiguration' {} a -> s {accessControlListConfiguration = a} :: S3DataSourceConfiguration)
+
+-- | Undocumented member.
+s3DataSourceConfiguration_documentsMetadataConfiguration :: Lens.Lens' S3DataSourceConfiguration (Prelude.Maybe DocumentsMetadataConfiguration)
+s3DataSourceConfiguration_documentsMetadataConfiguration = Lens.lens (\S3DataSourceConfiguration' {documentsMetadataConfiguration} -> documentsMetadataConfiguration) (\s@S3DataSourceConfiguration' {} a -> s {documentsMetadataConfiguration = a} :: S3DataSourceConfiguration)
+
+-- | A list of glob patterns for documents that should not be indexed. If a
+-- document that matches an inclusion prefix or inclusion pattern also
+-- matches an exclusion pattern, the document is not indexed.
+--
+-- Some
+-- <https://docs.aws.amazon.com/cli/latest/reference/s3/#use-of-exclude-and-include-filters examples>
+-- are:
+--
+-- -   /*.png , *.jpg/ will exclude all PNG and JPEG image files in a
+--     directory (files with the extensions .png and .jpg).
+--
+-- -   /*internal*/ will exclude all files in a directory that contain
+--     \'internal\' in the file name, such as \'internal\',
+--     \'internal_only\', \'company_internal\'.
+--
+-- -   /**\/*internal*/ will exclude all internal-related files in a
+--     directory and its subdirectories.
+s3DataSourceConfiguration_exclusionPatterns :: Lens.Lens' S3DataSourceConfiguration (Prelude.Maybe [Prelude.Text])
+s3DataSourceConfiguration_exclusionPatterns = Lens.lens (\S3DataSourceConfiguration' {exclusionPatterns} -> exclusionPatterns) (\s@S3DataSourceConfiguration' {} a -> s {exclusionPatterns = a} :: S3DataSourceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of glob patterns for documents that should be indexed. If a
+-- document that matches an inclusion pattern also matches an exclusion
+-- pattern, the document is not indexed.
+--
+-- Some
+-- <https://docs.aws.amazon.com/cli/latest/reference/s3/#use-of-exclude-and-include-filters examples>
+-- are:
+--
+-- -   /*.txt/ will include all text files in a directory (files with the
+--     extension .txt).
+--
+-- -   /**\/*.txt/ will include all text files in a directory and its
+--     subdirectories.
+--
+-- -   /*tax*/ will include all files in a directory that contain \'tax\'
+--     in the file name, such as \'tax\', \'taxes\', \'income_tax\'.
+s3DataSourceConfiguration_inclusionPatterns :: Lens.Lens' S3DataSourceConfiguration (Prelude.Maybe [Prelude.Text])
+s3DataSourceConfiguration_inclusionPatterns = Lens.lens (\S3DataSourceConfiguration' {inclusionPatterns} -> inclusionPatterns) (\s@S3DataSourceConfiguration' {} a -> s {inclusionPatterns = a} :: S3DataSourceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of S3 prefixes for the documents that should be included in the
+-- index.
+s3DataSourceConfiguration_inclusionPrefixes :: Lens.Lens' S3DataSourceConfiguration (Prelude.Maybe [Prelude.Text])
+s3DataSourceConfiguration_inclusionPrefixes = Lens.lens (\S3DataSourceConfiguration' {inclusionPrefixes} -> inclusionPrefixes) (\s@S3DataSourceConfiguration' {} a -> s {inclusionPrefixes = a} :: S3DataSourceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the bucket that contains the documents.
+s3DataSourceConfiguration_bucketName :: Lens.Lens' S3DataSourceConfiguration Prelude.Text
+s3DataSourceConfiguration_bucketName = Lens.lens (\S3DataSourceConfiguration' {bucketName} -> bucketName) (\s@S3DataSourceConfiguration' {} a -> s {bucketName = a} :: S3DataSourceConfiguration)
+
+instance Data.FromJSON S3DataSourceConfiguration where
+  parseJSON =
+    Data.withObject
+      "S3DataSourceConfiguration"
+      ( \x ->
+          S3DataSourceConfiguration'
+            Prelude.<$> (x Data..:? "AccessControlListConfiguration")
+            Prelude.<*> (x Data..:? "DocumentsMetadataConfiguration")
+            Prelude.<*> ( x
+                            Data..:? "ExclusionPatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "InclusionPatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "InclusionPrefixes"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "BucketName")
+      )
+
+instance Prelude.Hashable S3DataSourceConfiguration where
+  hashWithSalt _salt S3DataSourceConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` accessControlListConfiguration
+      `Prelude.hashWithSalt` documentsMetadataConfiguration
+      `Prelude.hashWithSalt` exclusionPatterns
+      `Prelude.hashWithSalt` inclusionPatterns
+      `Prelude.hashWithSalt` inclusionPrefixes
+      `Prelude.hashWithSalt` bucketName
+
+instance Prelude.NFData S3DataSourceConfiguration where
+  rnf S3DataSourceConfiguration' {..} =
+    Prelude.rnf accessControlListConfiguration
+      `Prelude.seq` Prelude.rnf documentsMetadataConfiguration
+      `Prelude.seq` Prelude.rnf exclusionPatterns
+      `Prelude.seq` Prelude.rnf inclusionPatterns
+      `Prelude.seq` Prelude.rnf inclusionPrefixes
+      `Prelude.seq` Prelude.rnf bucketName
+
+instance Data.ToJSON S3DataSourceConfiguration where
+  toJSON S3DataSourceConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AccessControlListConfiguration" Data..=)
+              Prelude.<$> accessControlListConfiguration,
+            ("DocumentsMetadataConfiguration" Data..=)
+              Prelude.<$> documentsMetadataConfiguration,
+            ("ExclusionPatterns" Data..=)
+              Prelude.<$> exclusionPatterns,
+            ("InclusionPatterns" Data..=)
+              Prelude.<$> inclusionPatterns,
+            ("InclusionPrefixes" Data..=)
+              Prelude.<$> inclusionPrefixes,
+            Prelude.Just ("BucketName" Data..= bucketName)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/S3Path.hs b/gen/Amazonka/Kendra/Types/S3Path.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/S3Path.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.Kendra.Types.S3Path
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.S3Path 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
+
+-- | Information required to find a specific file in an Amazon S3 bucket.
+--
+-- /See:/ 'newS3Path' smart constructor.
+data S3Path = S3Path'
+  { -- | The name of the S3 bucket that contains the file.
+    bucket :: Prelude.Text,
+    -- | The name of the file.
+    key :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3Path' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bucket', 's3Path_bucket' - The name of the S3 bucket that contains the file.
+--
+-- 'key', 's3Path_key' - The name of the file.
+newS3Path ::
+  -- | 'bucket'
+  Prelude.Text ->
+  -- | 'key'
+  Prelude.Text ->
+  S3Path
+newS3Path pBucket_ pKey_ =
+  S3Path' {bucket = pBucket_, key = pKey_}
+
+-- | The name of the S3 bucket that contains the file.
+s3Path_bucket :: Lens.Lens' S3Path Prelude.Text
+s3Path_bucket = Lens.lens (\S3Path' {bucket} -> bucket) (\s@S3Path' {} a -> s {bucket = a} :: S3Path)
+
+-- | The name of the file.
+s3Path_key :: Lens.Lens' S3Path Prelude.Text
+s3Path_key = Lens.lens (\S3Path' {key} -> key) (\s@S3Path' {} a -> s {key = a} :: S3Path)
+
+instance Data.FromJSON S3Path where
+  parseJSON =
+    Data.withObject
+      "S3Path"
+      ( \x ->
+          S3Path'
+            Prelude.<$> (x Data..: "Bucket")
+            Prelude.<*> (x Data..: "Key")
+      )
+
+instance Prelude.Hashable S3Path where
+  hashWithSalt _salt S3Path' {..} =
+    _salt
+      `Prelude.hashWithSalt` bucket
+      `Prelude.hashWithSalt` key
+
+instance Prelude.NFData S3Path where
+  rnf S3Path' {..} =
+    Prelude.rnf bucket `Prelude.seq` Prelude.rnf key
+
+instance Data.ToJSON S3Path where
+  toJSON S3Path' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Bucket" Data..= bucket),
+            Prelude.Just ("Key" Data..= key)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/SaaSConfiguration.hs b/gen/Amazonka/Kendra/Types/SaaSConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/SaaSConfiguration.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.Kendra.Types.SaaSConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.SaaSConfiguration 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 configuration information to connect to GitHub Enterprise
+-- Cloud (SaaS).
+--
+-- /See:/ 'newSaaSConfiguration' smart constructor.
+data SaaSConfiguration = SaaSConfiguration'
+  { -- | The name of the organization of the GitHub Enterprise Cloud (SaaS)
+    -- account you want to connect to. You can find your organization name by
+    -- logging into GitHub desktop and selecting __Your organizations__ under
+    -- your profile picture dropdown.
+    organizationName :: Prelude.Text,
+    -- | The GitHub host URL or API endpoint URL. For example,
+    -- /https:\/\/api.github.com/.
+    hostUrl :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SaaSConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'organizationName', 'saaSConfiguration_organizationName' - The name of the organization of the GitHub Enterprise Cloud (SaaS)
+-- account you want to connect to. You can find your organization name by
+-- logging into GitHub desktop and selecting __Your organizations__ under
+-- your profile picture dropdown.
+--
+-- 'hostUrl', 'saaSConfiguration_hostUrl' - The GitHub host URL or API endpoint URL. For example,
+-- /https:\/\/api.github.com/.
+newSaaSConfiguration ::
+  -- | 'organizationName'
+  Prelude.Text ->
+  -- | 'hostUrl'
+  Prelude.Text ->
+  SaaSConfiguration
+newSaaSConfiguration pOrganizationName_ pHostUrl_ =
+  SaaSConfiguration'
+    { organizationName =
+        pOrganizationName_,
+      hostUrl = pHostUrl_
+    }
+
+-- | The name of the organization of the GitHub Enterprise Cloud (SaaS)
+-- account you want to connect to. You can find your organization name by
+-- logging into GitHub desktop and selecting __Your organizations__ under
+-- your profile picture dropdown.
+saaSConfiguration_organizationName :: Lens.Lens' SaaSConfiguration Prelude.Text
+saaSConfiguration_organizationName = Lens.lens (\SaaSConfiguration' {organizationName} -> organizationName) (\s@SaaSConfiguration' {} a -> s {organizationName = a} :: SaaSConfiguration)
+
+-- | The GitHub host URL or API endpoint URL. For example,
+-- /https:\/\/api.github.com/.
+saaSConfiguration_hostUrl :: Lens.Lens' SaaSConfiguration Prelude.Text
+saaSConfiguration_hostUrl = Lens.lens (\SaaSConfiguration' {hostUrl} -> hostUrl) (\s@SaaSConfiguration' {} a -> s {hostUrl = a} :: SaaSConfiguration)
+
+instance Data.FromJSON SaaSConfiguration where
+  parseJSON =
+    Data.withObject
+      "SaaSConfiguration"
+      ( \x ->
+          SaaSConfiguration'
+            Prelude.<$> (x Data..: "OrganizationName")
+            Prelude.<*> (x Data..: "HostUrl")
+      )
+
+instance Prelude.Hashable SaaSConfiguration where
+  hashWithSalt _salt SaaSConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` organizationName
+      `Prelude.hashWithSalt` hostUrl
+
+instance Prelude.NFData SaaSConfiguration where
+  rnf SaaSConfiguration' {..} =
+    Prelude.rnf organizationName
+      `Prelude.seq` Prelude.rnf hostUrl
+
+instance Data.ToJSON SaaSConfiguration where
+  toJSON SaaSConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("OrganizationName" Data..= organizationName),
+            Prelude.Just ("HostUrl" Data..= hostUrl)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/SalesforceChatterFeedConfiguration.hs b/gen/Amazonka/Kendra/Types/SalesforceChatterFeedConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/SalesforceChatterFeedConfiguration.hs
@@ -0,0 +1,164 @@
+{-# 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.Kendra.Types.SalesforceChatterFeedConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.SalesforceChatterFeedConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DataSourceToIndexFieldMapping
+import Amazonka.Kendra.Types.SalesforceChatterFeedIncludeFilterType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The configuration information for syncing a Salesforce chatter feed. The
+-- contents of the object comes from the Salesforce FeedItem table.
+--
+-- /See:/ 'newSalesforceChatterFeedConfiguration' smart constructor.
+data SalesforceChatterFeedConfiguration = SalesforceChatterFeedConfiguration'
+  { -- | The name of the column in the Salesforce FeedItem table that contains
+    -- the title of the document. This is typically the @Title@ column.
+    documentTitleFieldName :: Prelude.Maybe Prelude.Text,
+    -- | Maps fields from a Salesforce chatter feed into Amazon Kendra index
+    -- fields.
+    fieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | Filters the documents in the feed based on status of the user. When you
+    -- specify @ACTIVE_USERS@ only documents from users who have an active
+    -- account are indexed. When you specify @STANDARD_USER@ only documents for
+    -- Salesforce standard users are documented. You can specify both.
+    includeFilterTypes :: Prelude.Maybe (Prelude.NonEmpty SalesforceChatterFeedIncludeFilterType),
+    -- | The name of the column in the Salesforce FeedItem table that contains
+    -- the content to index. Typically this is the @Body@ column.
+    documentDataFieldName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SalesforceChatterFeedConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'documentTitleFieldName', 'salesforceChatterFeedConfiguration_documentTitleFieldName' - The name of the column in the Salesforce FeedItem table that contains
+-- the title of the document. This is typically the @Title@ column.
+--
+-- 'fieldMappings', 'salesforceChatterFeedConfiguration_fieldMappings' - Maps fields from a Salesforce chatter feed into Amazon Kendra index
+-- fields.
+--
+-- 'includeFilterTypes', 'salesforceChatterFeedConfiguration_includeFilterTypes' - Filters the documents in the feed based on status of the user. When you
+-- specify @ACTIVE_USERS@ only documents from users who have an active
+-- account are indexed. When you specify @STANDARD_USER@ only documents for
+-- Salesforce standard users are documented. You can specify both.
+--
+-- 'documentDataFieldName', 'salesforceChatterFeedConfiguration_documentDataFieldName' - The name of the column in the Salesforce FeedItem table that contains
+-- the content to index. Typically this is the @Body@ column.
+newSalesforceChatterFeedConfiguration ::
+  -- | 'documentDataFieldName'
+  Prelude.Text ->
+  SalesforceChatterFeedConfiguration
+newSalesforceChatterFeedConfiguration
+  pDocumentDataFieldName_ =
+    SalesforceChatterFeedConfiguration'
+      { documentTitleFieldName =
+          Prelude.Nothing,
+        fieldMappings = Prelude.Nothing,
+        includeFilterTypes = Prelude.Nothing,
+        documentDataFieldName =
+          pDocumentDataFieldName_
+      }
+
+-- | The name of the column in the Salesforce FeedItem table that contains
+-- the title of the document. This is typically the @Title@ column.
+salesforceChatterFeedConfiguration_documentTitleFieldName :: Lens.Lens' SalesforceChatterFeedConfiguration (Prelude.Maybe Prelude.Text)
+salesforceChatterFeedConfiguration_documentTitleFieldName = Lens.lens (\SalesforceChatterFeedConfiguration' {documentTitleFieldName} -> documentTitleFieldName) (\s@SalesforceChatterFeedConfiguration' {} a -> s {documentTitleFieldName = a} :: SalesforceChatterFeedConfiguration)
+
+-- | Maps fields from a Salesforce chatter feed into Amazon Kendra index
+-- fields.
+salesforceChatterFeedConfiguration_fieldMappings :: Lens.Lens' SalesforceChatterFeedConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+salesforceChatterFeedConfiguration_fieldMappings = Lens.lens (\SalesforceChatterFeedConfiguration' {fieldMappings} -> fieldMappings) (\s@SalesforceChatterFeedConfiguration' {} a -> s {fieldMappings = a} :: SalesforceChatterFeedConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Filters the documents in the feed based on status of the user. When you
+-- specify @ACTIVE_USERS@ only documents from users who have an active
+-- account are indexed. When you specify @STANDARD_USER@ only documents for
+-- Salesforce standard users are documented. You can specify both.
+salesforceChatterFeedConfiguration_includeFilterTypes :: Lens.Lens' SalesforceChatterFeedConfiguration (Prelude.Maybe (Prelude.NonEmpty SalesforceChatterFeedIncludeFilterType))
+salesforceChatterFeedConfiguration_includeFilterTypes = Lens.lens (\SalesforceChatterFeedConfiguration' {includeFilterTypes} -> includeFilterTypes) (\s@SalesforceChatterFeedConfiguration' {} a -> s {includeFilterTypes = a} :: SalesforceChatterFeedConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the column in the Salesforce FeedItem table that contains
+-- the content to index. Typically this is the @Body@ column.
+salesforceChatterFeedConfiguration_documentDataFieldName :: Lens.Lens' SalesforceChatterFeedConfiguration Prelude.Text
+salesforceChatterFeedConfiguration_documentDataFieldName = Lens.lens (\SalesforceChatterFeedConfiguration' {documentDataFieldName} -> documentDataFieldName) (\s@SalesforceChatterFeedConfiguration' {} a -> s {documentDataFieldName = a} :: SalesforceChatterFeedConfiguration)
+
+instance
+  Data.FromJSON
+    SalesforceChatterFeedConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "SalesforceChatterFeedConfiguration"
+      ( \x ->
+          SalesforceChatterFeedConfiguration'
+            Prelude.<$> (x Data..:? "DocumentTitleFieldName")
+            Prelude.<*> (x Data..:? "FieldMappings")
+            Prelude.<*> (x Data..:? "IncludeFilterTypes")
+            Prelude.<*> (x Data..: "DocumentDataFieldName")
+      )
+
+instance
+  Prelude.Hashable
+    SalesforceChatterFeedConfiguration
+  where
+  hashWithSalt
+    _salt
+    SalesforceChatterFeedConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` documentTitleFieldName
+        `Prelude.hashWithSalt` fieldMappings
+        `Prelude.hashWithSalt` includeFilterTypes
+        `Prelude.hashWithSalt` documentDataFieldName
+
+instance
+  Prelude.NFData
+    SalesforceChatterFeedConfiguration
+  where
+  rnf SalesforceChatterFeedConfiguration' {..} =
+    Prelude.rnf documentTitleFieldName
+      `Prelude.seq` Prelude.rnf fieldMappings
+      `Prelude.seq` Prelude.rnf includeFilterTypes
+      `Prelude.seq` Prelude.rnf documentDataFieldName
+
+instance
+  Data.ToJSON
+    SalesforceChatterFeedConfiguration
+  where
+  toJSON SalesforceChatterFeedConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DocumentTitleFieldName" Data..=)
+              Prelude.<$> documentTitleFieldName,
+            ("FieldMappings" Data..=) Prelude.<$> fieldMappings,
+            ("IncludeFilterTypes" Data..=)
+              Prelude.<$> includeFilterTypes,
+            Prelude.Just
+              ( "DocumentDataFieldName"
+                  Data..= documentDataFieldName
+              )
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/SalesforceChatterFeedIncludeFilterType.hs b/gen/Amazonka/Kendra/Types/SalesforceChatterFeedIncludeFilterType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/SalesforceChatterFeedIncludeFilterType.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.Kendra.Types.SalesforceChatterFeedIncludeFilterType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.SalesforceChatterFeedIncludeFilterType
+  ( SalesforceChatterFeedIncludeFilterType
+      ( ..,
+        SalesforceChatterFeedIncludeFilterType_ACTIVE_USER,
+        SalesforceChatterFeedIncludeFilterType_STANDARD_USER
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SalesforceChatterFeedIncludeFilterType = SalesforceChatterFeedIncludeFilterType'
+  { fromSalesforceChatterFeedIncludeFilterType ::
+      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 SalesforceChatterFeedIncludeFilterType_ACTIVE_USER :: SalesforceChatterFeedIncludeFilterType
+pattern SalesforceChatterFeedIncludeFilterType_ACTIVE_USER = SalesforceChatterFeedIncludeFilterType' "ACTIVE_USER"
+
+pattern SalesforceChatterFeedIncludeFilterType_STANDARD_USER :: SalesforceChatterFeedIncludeFilterType
+pattern SalesforceChatterFeedIncludeFilterType_STANDARD_USER = SalesforceChatterFeedIncludeFilterType' "STANDARD_USER"
+
+{-# COMPLETE
+  SalesforceChatterFeedIncludeFilterType_ACTIVE_USER,
+  SalesforceChatterFeedIncludeFilterType_STANDARD_USER,
+  SalesforceChatterFeedIncludeFilterType'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/SalesforceConfiguration.hs b/gen/Amazonka/Kendra/Types/SalesforceConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/SalesforceConfiguration.hs
@@ -0,0 +1,328 @@
+{-# 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.Kendra.Types.SalesforceConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.SalesforceConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.SalesforceChatterFeedConfiguration
+import Amazonka.Kendra.Types.SalesforceKnowledgeArticleConfiguration
+import Amazonka.Kendra.Types.SalesforceStandardObjectAttachmentConfiguration
+import Amazonka.Kendra.Types.SalesforceStandardObjectConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information to connect to Salesforce as your
+-- data source.
+--
+-- /See:/ 'newSalesforceConfiguration' smart constructor.
+data SalesforceConfiguration = SalesforceConfiguration'
+  { -- | Configuration information for Salesforce chatter feeds.
+    chatterFeedConfiguration :: Prelude.Maybe SalesforceChatterFeedConfiguration,
+    -- | Indicates whether Amazon Kendra should index attachments to Salesforce
+    -- objects.
+    crawlAttachments :: Prelude.Maybe Prelude.Bool,
+    -- | A list of regular expression patterns to exclude certain documents in
+    -- your Salesforce. Documents that match the patterns are excluded from the
+    -- index. Documents that don\'t match the patterns are included in the
+    -- index. If a document matches both an inclusion and exclusion pattern,
+    -- the exclusion pattern takes precedence and the document isn\'t included
+    -- in the index.
+    --
+    -- The pattern is applied to the name of the attached file.
+    excludeAttachmentFilePatterns :: Prelude.Maybe [Prelude.Text],
+    -- | A list of regular expression patterns to include certain documents in
+    -- your Salesforce. Documents that match the patterns are included in the
+    -- index. Documents that don\'t match the patterns are excluded from the
+    -- index. If a document matches both an inclusion and exclusion pattern,
+    -- the exclusion pattern takes precedence and the document isn\'t included
+    -- in the index.
+    --
+    -- The pattern is applied to the name of the attached file.
+    includeAttachmentFilePatterns :: Prelude.Maybe [Prelude.Text],
+    -- | Configuration information for the knowledge article types that Amazon
+    -- Kendra indexes. Amazon Kendra indexes standard knowledge articles and
+    -- the standard fields of knowledge articles, or the custom fields of
+    -- custom knowledge articles, but not both.
+    knowledgeArticleConfiguration :: Prelude.Maybe SalesforceKnowledgeArticleConfiguration,
+    -- | Configuration information for processing attachments to Salesforce
+    -- standard objects.
+    standardObjectAttachmentConfiguration :: Prelude.Maybe SalesforceStandardObjectAttachmentConfiguration,
+    -- | Configuration of the Salesforce standard objects that Amazon Kendra
+    -- indexes.
+    standardObjectConfigurations :: Prelude.Maybe (Prelude.NonEmpty SalesforceStandardObjectConfiguration),
+    -- | The instance URL for the Salesforce site that you want to index.
+    serverUrl :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of an Secrets Managersecret that contains
+    -- the key\/value pairs required to connect to your Salesforce instance.
+    -- The secret must contain a JSON structure with the following keys:
+    --
+    -- -   authenticationUrl - The OAUTH endpoint that Amazon Kendra connects
+    --     to get an OAUTH token.
+    --
+    -- -   consumerKey - The application public key generated when you created
+    --     your Salesforce application.
+    --
+    -- -   consumerSecret - The application private key generated when you
+    --     created your Salesforce application.
+    --
+    -- -   password - The password associated with the user logging in to the
+    --     Salesforce instance.
+    --
+    -- -   securityToken - The token associated with the user account logging
+    --     in to the Salesforce instance.
+    --
+    -- -   username - The user name of the user logging in to the Salesforce
+    --     instance.
+    secretArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SalesforceConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'chatterFeedConfiguration', 'salesforceConfiguration_chatterFeedConfiguration' - Configuration information for Salesforce chatter feeds.
+--
+-- 'crawlAttachments', 'salesforceConfiguration_crawlAttachments' - Indicates whether Amazon Kendra should index attachments to Salesforce
+-- objects.
+--
+-- 'excludeAttachmentFilePatterns', 'salesforceConfiguration_excludeAttachmentFilePatterns' - A list of regular expression patterns to exclude certain documents in
+-- your Salesforce. Documents that match the patterns are excluded from the
+-- index. Documents that don\'t match the patterns are included in the
+-- index. If a document matches both an inclusion and exclusion pattern,
+-- the exclusion pattern takes precedence and the document isn\'t included
+-- in the index.
+--
+-- The pattern is applied to the name of the attached file.
+--
+-- 'includeAttachmentFilePatterns', 'salesforceConfiguration_includeAttachmentFilePatterns' - A list of regular expression patterns to include certain documents in
+-- your Salesforce. Documents that match the patterns are included in the
+-- index. Documents that don\'t match the patterns are excluded from the
+-- index. If a document matches both an inclusion and exclusion pattern,
+-- the exclusion pattern takes precedence and the document isn\'t included
+-- in the index.
+--
+-- The pattern is applied to the name of the attached file.
+--
+-- 'knowledgeArticleConfiguration', 'salesforceConfiguration_knowledgeArticleConfiguration' - Configuration information for the knowledge article types that Amazon
+-- Kendra indexes. Amazon Kendra indexes standard knowledge articles and
+-- the standard fields of knowledge articles, or the custom fields of
+-- custom knowledge articles, but not both.
+--
+-- 'standardObjectAttachmentConfiguration', 'salesforceConfiguration_standardObjectAttachmentConfiguration' - Configuration information for processing attachments to Salesforce
+-- standard objects.
+--
+-- 'standardObjectConfigurations', 'salesforceConfiguration_standardObjectConfigurations' - Configuration of the Salesforce standard objects that Amazon Kendra
+-- indexes.
+--
+-- 'serverUrl', 'salesforceConfiguration_serverUrl' - The instance URL for the Salesforce site that you want to index.
+--
+-- 'secretArn', 'salesforceConfiguration_secretArn' - The Amazon Resource Name (ARN) of an Secrets Managersecret that contains
+-- the key\/value pairs required to connect to your Salesforce instance.
+-- The secret must contain a JSON structure with the following keys:
+--
+-- -   authenticationUrl - The OAUTH endpoint that Amazon Kendra connects
+--     to get an OAUTH token.
+--
+-- -   consumerKey - The application public key generated when you created
+--     your Salesforce application.
+--
+-- -   consumerSecret - The application private key generated when you
+--     created your Salesforce application.
+--
+-- -   password - The password associated with the user logging in to the
+--     Salesforce instance.
+--
+-- -   securityToken - The token associated with the user account logging
+--     in to the Salesforce instance.
+--
+-- -   username - The user name of the user logging in to the Salesforce
+--     instance.
+newSalesforceConfiguration ::
+  -- | 'serverUrl'
+  Prelude.Text ->
+  -- | 'secretArn'
+  Prelude.Text ->
+  SalesforceConfiguration
+newSalesforceConfiguration pServerUrl_ pSecretArn_ =
+  SalesforceConfiguration'
+    { chatterFeedConfiguration =
+        Prelude.Nothing,
+      crawlAttachments = Prelude.Nothing,
+      excludeAttachmentFilePatterns = Prelude.Nothing,
+      includeAttachmentFilePatterns = Prelude.Nothing,
+      knowledgeArticleConfiguration = Prelude.Nothing,
+      standardObjectAttachmentConfiguration =
+        Prelude.Nothing,
+      standardObjectConfigurations = Prelude.Nothing,
+      serverUrl = pServerUrl_,
+      secretArn = pSecretArn_
+    }
+
+-- | Configuration information for Salesforce chatter feeds.
+salesforceConfiguration_chatterFeedConfiguration :: Lens.Lens' SalesforceConfiguration (Prelude.Maybe SalesforceChatterFeedConfiguration)
+salesforceConfiguration_chatterFeedConfiguration = Lens.lens (\SalesforceConfiguration' {chatterFeedConfiguration} -> chatterFeedConfiguration) (\s@SalesforceConfiguration' {} a -> s {chatterFeedConfiguration = a} :: SalesforceConfiguration)
+
+-- | Indicates whether Amazon Kendra should index attachments to Salesforce
+-- objects.
+salesforceConfiguration_crawlAttachments :: Lens.Lens' SalesforceConfiguration (Prelude.Maybe Prelude.Bool)
+salesforceConfiguration_crawlAttachments = Lens.lens (\SalesforceConfiguration' {crawlAttachments} -> crawlAttachments) (\s@SalesforceConfiguration' {} a -> s {crawlAttachments = a} :: SalesforceConfiguration)
+
+-- | A list of regular expression patterns to exclude certain documents in
+-- your Salesforce. Documents that match the patterns are excluded from the
+-- index. Documents that don\'t match the patterns are included in the
+-- index. If a document matches both an inclusion and exclusion pattern,
+-- the exclusion pattern takes precedence and the document isn\'t included
+-- in the index.
+--
+-- The pattern is applied to the name of the attached file.
+salesforceConfiguration_excludeAttachmentFilePatterns :: Lens.Lens' SalesforceConfiguration (Prelude.Maybe [Prelude.Text])
+salesforceConfiguration_excludeAttachmentFilePatterns = Lens.lens (\SalesforceConfiguration' {excludeAttachmentFilePatterns} -> excludeAttachmentFilePatterns) (\s@SalesforceConfiguration' {} a -> s {excludeAttachmentFilePatterns = a} :: SalesforceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of regular expression patterns to include certain documents in
+-- your Salesforce. Documents that match the patterns are included in the
+-- index. Documents that don\'t match the patterns are excluded from the
+-- index. If a document matches both an inclusion and exclusion pattern,
+-- the exclusion pattern takes precedence and the document isn\'t included
+-- in the index.
+--
+-- The pattern is applied to the name of the attached file.
+salesforceConfiguration_includeAttachmentFilePatterns :: Lens.Lens' SalesforceConfiguration (Prelude.Maybe [Prelude.Text])
+salesforceConfiguration_includeAttachmentFilePatterns = Lens.lens (\SalesforceConfiguration' {includeAttachmentFilePatterns} -> includeAttachmentFilePatterns) (\s@SalesforceConfiguration' {} a -> s {includeAttachmentFilePatterns = a} :: SalesforceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Configuration information for the knowledge article types that Amazon
+-- Kendra indexes. Amazon Kendra indexes standard knowledge articles and
+-- the standard fields of knowledge articles, or the custom fields of
+-- custom knowledge articles, but not both.
+salesforceConfiguration_knowledgeArticleConfiguration :: Lens.Lens' SalesforceConfiguration (Prelude.Maybe SalesforceKnowledgeArticleConfiguration)
+salesforceConfiguration_knowledgeArticleConfiguration = Lens.lens (\SalesforceConfiguration' {knowledgeArticleConfiguration} -> knowledgeArticleConfiguration) (\s@SalesforceConfiguration' {} a -> s {knowledgeArticleConfiguration = a} :: SalesforceConfiguration)
+
+-- | Configuration information for processing attachments to Salesforce
+-- standard objects.
+salesforceConfiguration_standardObjectAttachmentConfiguration :: Lens.Lens' SalesforceConfiguration (Prelude.Maybe SalesforceStandardObjectAttachmentConfiguration)
+salesforceConfiguration_standardObjectAttachmentConfiguration = Lens.lens (\SalesforceConfiguration' {standardObjectAttachmentConfiguration} -> standardObjectAttachmentConfiguration) (\s@SalesforceConfiguration' {} a -> s {standardObjectAttachmentConfiguration = a} :: SalesforceConfiguration)
+
+-- | Configuration of the Salesforce standard objects that Amazon Kendra
+-- indexes.
+salesforceConfiguration_standardObjectConfigurations :: Lens.Lens' SalesforceConfiguration (Prelude.Maybe (Prelude.NonEmpty SalesforceStandardObjectConfiguration))
+salesforceConfiguration_standardObjectConfigurations = Lens.lens (\SalesforceConfiguration' {standardObjectConfigurations} -> standardObjectConfigurations) (\s@SalesforceConfiguration' {} a -> s {standardObjectConfigurations = a} :: SalesforceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The instance URL for the Salesforce site that you want to index.
+salesforceConfiguration_serverUrl :: Lens.Lens' SalesforceConfiguration Prelude.Text
+salesforceConfiguration_serverUrl = Lens.lens (\SalesforceConfiguration' {serverUrl} -> serverUrl) (\s@SalesforceConfiguration' {} a -> s {serverUrl = a} :: SalesforceConfiguration)
+
+-- | The Amazon Resource Name (ARN) of an Secrets Managersecret that contains
+-- the key\/value pairs required to connect to your Salesforce instance.
+-- The secret must contain a JSON structure with the following keys:
+--
+-- -   authenticationUrl - The OAUTH endpoint that Amazon Kendra connects
+--     to get an OAUTH token.
+--
+-- -   consumerKey - The application public key generated when you created
+--     your Salesforce application.
+--
+-- -   consumerSecret - The application private key generated when you
+--     created your Salesforce application.
+--
+-- -   password - The password associated with the user logging in to the
+--     Salesforce instance.
+--
+-- -   securityToken - The token associated with the user account logging
+--     in to the Salesforce instance.
+--
+-- -   username - The user name of the user logging in to the Salesforce
+--     instance.
+salesforceConfiguration_secretArn :: Lens.Lens' SalesforceConfiguration Prelude.Text
+salesforceConfiguration_secretArn = Lens.lens (\SalesforceConfiguration' {secretArn} -> secretArn) (\s@SalesforceConfiguration' {} a -> s {secretArn = a} :: SalesforceConfiguration)
+
+instance Data.FromJSON SalesforceConfiguration where
+  parseJSON =
+    Data.withObject
+      "SalesforceConfiguration"
+      ( \x ->
+          SalesforceConfiguration'
+            Prelude.<$> (x Data..:? "ChatterFeedConfiguration")
+            Prelude.<*> (x Data..:? "CrawlAttachments")
+            Prelude.<*> ( x
+                            Data..:? "ExcludeAttachmentFilePatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "IncludeAttachmentFilePatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "KnowledgeArticleConfiguration")
+            Prelude.<*> (x Data..:? "StandardObjectAttachmentConfiguration")
+            Prelude.<*> (x Data..:? "StandardObjectConfigurations")
+            Prelude.<*> (x Data..: "ServerUrl")
+            Prelude.<*> (x Data..: "SecretArn")
+      )
+
+instance Prelude.Hashable SalesforceConfiguration where
+  hashWithSalt _salt SalesforceConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` chatterFeedConfiguration
+      `Prelude.hashWithSalt` crawlAttachments
+      `Prelude.hashWithSalt` excludeAttachmentFilePatterns
+      `Prelude.hashWithSalt` includeAttachmentFilePatterns
+      `Prelude.hashWithSalt` knowledgeArticleConfiguration
+      `Prelude.hashWithSalt` standardObjectAttachmentConfiguration
+      `Prelude.hashWithSalt` standardObjectConfigurations
+      `Prelude.hashWithSalt` serverUrl
+      `Prelude.hashWithSalt` secretArn
+
+instance Prelude.NFData SalesforceConfiguration where
+  rnf SalesforceConfiguration' {..} =
+    Prelude.rnf chatterFeedConfiguration
+      `Prelude.seq` Prelude.rnf crawlAttachments
+      `Prelude.seq` Prelude.rnf excludeAttachmentFilePatterns
+      `Prelude.seq` Prelude.rnf includeAttachmentFilePatterns
+      `Prelude.seq` Prelude.rnf knowledgeArticleConfiguration
+      `Prelude.seq` Prelude.rnf standardObjectAttachmentConfiguration
+      `Prelude.seq` Prelude.rnf standardObjectConfigurations
+      `Prelude.seq` Prelude.rnf serverUrl
+      `Prelude.seq` Prelude.rnf secretArn
+
+instance Data.ToJSON SalesforceConfiguration where
+  toJSON SalesforceConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ChatterFeedConfiguration" Data..=)
+              Prelude.<$> chatterFeedConfiguration,
+            ("CrawlAttachments" Data..=)
+              Prelude.<$> crawlAttachments,
+            ("ExcludeAttachmentFilePatterns" Data..=)
+              Prelude.<$> excludeAttachmentFilePatterns,
+            ("IncludeAttachmentFilePatterns" Data..=)
+              Prelude.<$> includeAttachmentFilePatterns,
+            ("KnowledgeArticleConfiguration" Data..=)
+              Prelude.<$> knowledgeArticleConfiguration,
+            ("StandardObjectAttachmentConfiguration" Data..=)
+              Prelude.<$> standardObjectAttachmentConfiguration,
+            ("StandardObjectConfigurations" Data..=)
+              Prelude.<$> standardObjectConfigurations,
+            Prelude.Just ("ServerUrl" Data..= serverUrl),
+            Prelude.Just ("SecretArn" Data..= secretArn)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/SalesforceCustomKnowledgeArticleTypeConfiguration.hs b/gen/Amazonka/Kendra/Types/SalesforceCustomKnowledgeArticleTypeConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/SalesforceCustomKnowledgeArticleTypeConfiguration.hs
@@ -0,0 +1,171 @@
+{-# 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.Kendra.Types.SalesforceCustomKnowledgeArticleTypeConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.SalesforceCustomKnowledgeArticleTypeConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DataSourceToIndexFieldMapping
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information for indexing Salesforce custom
+-- articles.
+--
+-- /See:/ 'newSalesforceCustomKnowledgeArticleTypeConfiguration' smart constructor.
+data SalesforceCustomKnowledgeArticleTypeConfiguration = SalesforceCustomKnowledgeArticleTypeConfiguration'
+  { -- | The name of the field in the custom knowledge article that contains the
+    -- document title.
+    documentTitleFieldName :: Prelude.Maybe Prelude.Text,
+    -- | Maps attributes or field names of the custom knowledge article to Amazon
+    -- Kendra index field names. To create custom fields, use the @UpdateIndex@
+    -- API before you map to Salesforce fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The Salesforce data source field names must exist in your Salesforce
+    -- custom metadata.
+    fieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | The name of the configuration.
+    name :: Prelude.Text,
+    -- | The name of the field in the custom knowledge article that contains the
+    -- document data to index.
+    documentDataFieldName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SalesforceCustomKnowledgeArticleTypeConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'documentTitleFieldName', 'salesforceCustomKnowledgeArticleTypeConfiguration_documentTitleFieldName' - The name of the field in the custom knowledge article that contains the
+-- document title.
+--
+-- 'fieldMappings', 'salesforceCustomKnowledgeArticleTypeConfiguration_fieldMappings' - Maps attributes or field names of the custom knowledge article to Amazon
+-- Kendra index field names. To create custom fields, use the @UpdateIndex@
+-- API before you map to Salesforce fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Salesforce data source field names must exist in your Salesforce
+-- custom metadata.
+--
+-- 'name', 'salesforceCustomKnowledgeArticleTypeConfiguration_name' - The name of the configuration.
+--
+-- 'documentDataFieldName', 'salesforceCustomKnowledgeArticleTypeConfiguration_documentDataFieldName' - The name of the field in the custom knowledge article that contains the
+-- document data to index.
+newSalesforceCustomKnowledgeArticleTypeConfiguration ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'documentDataFieldName'
+  Prelude.Text ->
+  SalesforceCustomKnowledgeArticleTypeConfiguration
+newSalesforceCustomKnowledgeArticleTypeConfiguration
+  pName_
+  pDocumentDataFieldName_ =
+    SalesforceCustomKnowledgeArticleTypeConfiguration'
+      { documentTitleFieldName =
+          Prelude.Nothing,
+        fieldMappings =
+          Prelude.Nothing,
+        name = pName_,
+        documentDataFieldName =
+          pDocumentDataFieldName_
+      }
+
+-- | The name of the field in the custom knowledge article that contains the
+-- document title.
+salesforceCustomKnowledgeArticleTypeConfiguration_documentTitleFieldName :: Lens.Lens' SalesforceCustomKnowledgeArticleTypeConfiguration (Prelude.Maybe Prelude.Text)
+salesforceCustomKnowledgeArticleTypeConfiguration_documentTitleFieldName = Lens.lens (\SalesforceCustomKnowledgeArticleTypeConfiguration' {documentTitleFieldName} -> documentTitleFieldName) (\s@SalesforceCustomKnowledgeArticleTypeConfiguration' {} a -> s {documentTitleFieldName = a} :: SalesforceCustomKnowledgeArticleTypeConfiguration)
+
+-- | Maps attributes or field names of the custom knowledge article to Amazon
+-- Kendra index field names. To create custom fields, use the @UpdateIndex@
+-- API before you map to Salesforce fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Salesforce data source field names must exist in your Salesforce
+-- custom metadata.
+salesforceCustomKnowledgeArticleTypeConfiguration_fieldMappings :: Lens.Lens' SalesforceCustomKnowledgeArticleTypeConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+salesforceCustomKnowledgeArticleTypeConfiguration_fieldMappings = Lens.lens (\SalesforceCustomKnowledgeArticleTypeConfiguration' {fieldMappings} -> fieldMappings) (\s@SalesforceCustomKnowledgeArticleTypeConfiguration' {} a -> s {fieldMappings = a} :: SalesforceCustomKnowledgeArticleTypeConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the configuration.
+salesforceCustomKnowledgeArticleTypeConfiguration_name :: Lens.Lens' SalesforceCustomKnowledgeArticleTypeConfiguration Prelude.Text
+salesforceCustomKnowledgeArticleTypeConfiguration_name = Lens.lens (\SalesforceCustomKnowledgeArticleTypeConfiguration' {name} -> name) (\s@SalesforceCustomKnowledgeArticleTypeConfiguration' {} a -> s {name = a} :: SalesforceCustomKnowledgeArticleTypeConfiguration)
+
+-- | The name of the field in the custom knowledge article that contains the
+-- document data to index.
+salesforceCustomKnowledgeArticleTypeConfiguration_documentDataFieldName :: Lens.Lens' SalesforceCustomKnowledgeArticleTypeConfiguration Prelude.Text
+salesforceCustomKnowledgeArticleTypeConfiguration_documentDataFieldName = Lens.lens (\SalesforceCustomKnowledgeArticleTypeConfiguration' {documentDataFieldName} -> documentDataFieldName) (\s@SalesforceCustomKnowledgeArticleTypeConfiguration' {} a -> s {documentDataFieldName = a} :: SalesforceCustomKnowledgeArticleTypeConfiguration)
+
+instance
+  Data.FromJSON
+    SalesforceCustomKnowledgeArticleTypeConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "SalesforceCustomKnowledgeArticleTypeConfiguration"
+      ( \x ->
+          SalesforceCustomKnowledgeArticleTypeConfiguration'
+            Prelude.<$> (x Data..:? "DocumentTitleFieldName")
+            Prelude.<*> (x Data..:? "FieldMappings")
+            Prelude.<*> (x Data..: "Name")
+            Prelude.<*> (x Data..: "DocumentDataFieldName")
+      )
+
+instance
+  Prelude.Hashable
+    SalesforceCustomKnowledgeArticleTypeConfiguration
+  where
+  hashWithSalt
+    _salt
+    SalesforceCustomKnowledgeArticleTypeConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` documentTitleFieldName
+        `Prelude.hashWithSalt` fieldMappings
+        `Prelude.hashWithSalt` name
+        `Prelude.hashWithSalt` documentDataFieldName
+
+instance
+  Prelude.NFData
+    SalesforceCustomKnowledgeArticleTypeConfiguration
+  where
+  rnf
+    SalesforceCustomKnowledgeArticleTypeConfiguration' {..} =
+      Prelude.rnf documentTitleFieldName
+        `Prelude.seq` Prelude.rnf fieldMappings
+        `Prelude.seq` Prelude.rnf name
+        `Prelude.seq` Prelude.rnf documentDataFieldName
+
+instance
+  Data.ToJSON
+    SalesforceCustomKnowledgeArticleTypeConfiguration
+  where
+  toJSON
+    SalesforceCustomKnowledgeArticleTypeConfiguration' {..} =
+      Data.object
+        ( Prelude.catMaybes
+            [ ("DocumentTitleFieldName" Data..=)
+                Prelude.<$> documentTitleFieldName,
+              ("FieldMappings" Data..=) Prelude.<$> fieldMappings,
+              Prelude.Just ("Name" Data..= name),
+              Prelude.Just
+                ( "DocumentDataFieldName"
+                    Data..= documentDataFieldName
+                )
+            ]
+        )
diff --git a/gen/Amazonka/Kendra/Types/SalesforceKnowledgeArticleConfiguration.hs b/gen/Amazonka/Kendra/Types/SalesforceKnowledgeArticleConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/SalesforceKnowledgeArticleConfiguration.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.Kendra.Types.SalesforceKnowledgeArticleConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.SalesforceKnowledgeArticleConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.SalesforceCustomKnowledgeArticleTypeConfiguration
+import Amazonka.Kendra.Types.SalesforceKnowledgeArticleState
+import Amazonka.Kendra.Types.SalesforceStandardKnowledgeArticleTypeConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information for the knowledge article types
+-- that Amazon Kendra indexes. Amazon Kendra indexes standard knowledge
+-- articles and the standard fields of knowledge articles, or the custom
+-- fields of custom knowledge articles, but not both
+--
+-- /See:/ 'newSalesforceKnowledgeArticleConfiguration' smart constructor.
+data SalesforceKnowledgeArticleConfiguration = SalesforceKnowledgeArticleConfiguration'
+  { -- | Configuration information for custom Salesforce knowledge articles.
+    customKnowledgeArticleTypeConfigurations :: Prelude.Maybe (Prelude.NonEmpty SalesforceCustomKnowledgeArticleTypeConfiguration),
+    -- | Configuration information for standard Salesforce knowledge articles.
+    standardKnowledgeArticleTypeConfiguration :: Prelude.Maybe SalesforceStandardKnowledgeArticleTypeConfiguration,
+    -- | Specifies the document states that should be included when Amazon Kendra
+    -- indexes knowledge articles. You must specify at least one state.
+    includedStates :: Prelude.NonEmpty SalesforceKnowledgeArticleState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SalesforceKnowledgeArticleConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'customKnowledgeArticleTypeConfigurations', 'salesforceKnowledgeArticleConfiguration_customKnowledgeArticleTypeConfigurations' - Configuration information for custom Salesforce knowledge articles.
+--
+-- 'standardKnowledgeArticleTypeConfiguration', 'salesforceKnowledgeArticleConfiguration_standardKnowledgeArticleTypeConfiguration' - Configuration information for standard Salesforce knowledge articles.
+--
+-- 'includedStates', 'salesforceKnowledgeArticleConfiguration_includedStates' - Specifies the document states that should be included when Amazon Kendra
+-- indexes knowledge articles. You must specify at least one state.
+newSalesforceKnowledgeArticleConfiguration ::
+  -- | 'includedStates'
+  Prelude.NonEmpty SalesforceKnowledgeArticleState ->
+  SalesforceKnowledgeArticleConfiguration
+newSalesforceKnowledgeArticleConfiguration
+  pIncludedStates_ =
+    SalesforceKnowledgeArticleConfiguration'
+      { customKnowledgeArticleTypeConfigurations =
+          Prelude.Nothing,
+        standardKnowledgeArticleTypeConfiguration =
+          Prelude.Nothing,
+        includedStates =
+          Lens.coerced
+            Lens.# pIncludedStates_
+      }
+
+-- | Configuration information for custom Salesforce knowledge articles.
+salesforceKnowledgeArticleConfiguration_customKnowledgeArticleTypeConfigurations :: Lens.Lens' SalesforceKnowledgeArticleConfiguration (Prelude.Maybe (Prelude.NonEmpty SalesforceCustomKnowledgeArticleTypeConfiguration))
+salesforceKnowledgeArticleConfiguration_customKnowledgeArticleTypeConfigurations = Lens.lens (\SalesforceKnowledgeArticleConfiguration' {customKnowledgeArticleTypeConfigurations} -> customKnowledgeArticleTypeConfigurations) (\s@SalesforceKnowledgeArticleConfiguration' {} a -> s {customKnowledgeArticleTypeConfigurations = a} :: SalesforceKnowledgeArticleConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Configuration information for standard Salesforce knowledge articles.
+salesforceKnowledgeArticleConfiguration_standardKnowledgeArticleTypeConfiguration :: Lens.Lens' SalesforceKnowledgeArticleConfiguration (Prelude.Maybe SalesforceStandardKnowledgeArticleTypeConfiguration)
+salesforceKnowledgeArticleConfiguration_standardKnowledgeArticleTypeConfiguration = Lens.lens (\SalesforceKnowledgeArticleConfiguration' {standardKnowledgeArticleTypeConfiguration} -> standardKnowledgeArticleTypeConfiguration) (\s@SalesforceKnowledgeArticleConfiguration' {} a -> s {standardKnowledgeArticleTypeConfiguration = a} :: SalesforceKnowledgeArticleConfiguration)
+
+-- | Specifies the document states that should be included when Amazon Kendra
+-- indexes knowledge articles. You must specify at least one state.
+salesforceKnowledgeArticleConfiguration_includedStates :: Lens.Lens' SalesforceKnowledgeArticleConfiguration (Prelude.NonEmpty SalesforceKnowledgeArticleState)
+salesforceKnowledgeArticleConfiguration_includedStates = Lens.lens (\SalesforceKnowledgeArticleConfiguration' {includedStates} -> includedStates) (\s@SalesforceKnowledgeArticleConfiguration' {} a -> s {includedStates = a} :: SalesforceKnowledgeArticleConfiguration) Prelude.. Lens.coerced
+
+instance
+  Data.FromJSON
+    SalesforceKnowledgeArticleConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "SalesforceKnowledgeArticleConfiguration"
+      ( \x ->
+          SalesforceKnowledgeArticleConfiguration'
+            Prelude.<$> ( x
+                            Data..:? "CustomKnowledgeArticleTypeConfigurations"
+                        )
+            Prelude.<*> ( x
+                            Data..:? "StandardKnowledgeArticleTypeConfiguration"
+                        )
+            Prelude.<*> (x Data..: "IncludedStates")
+      )
+
+instance
+  Prelude.Hashable
+    SalesforceKnowledgeArticleConfiguration
+  where
+  hashWithSalt
+    _salt
+    SalesforceKnowledgeArticleConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` customKnowledgeArticleTypeConfigurations
+        `Prelude.hashWithSalt` standardKnowledgeArticleTypeConfiguration
+        `Prelude.hashWithSalt` includedStates
+
+instance
+  Prelude.NFData
+    SalesforceKnowledgeArticleConfiguration
+  where
+  rnf SalesforceKnowledgeArticleConfiguration' {..} =
+    Prelude.rnf
+      customKnowledgeArticleTypeConfigurations
+      `Prelude.seq` Prelude.rnf standardKnowledgeArticleTypeConfiguration
+      `Prelude.seq` Prelude.rnf includedStates
+
+instance
+  Data.ToJSON
+    SalesforceKnowledgeArticleConfiguration
+  where
+  toJSON SalesforceKnowledgeArticleConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CustomKnowledgeArticleTypeConfigurations" Data..=)
+              Prelude.<$> customKnowledgeArticleTypeConfigurations,
+            ("StandardKnowledgeArticleTypeConfiguration" Data..=)
+              Prelude.<$> standardKnowledgeArticleTypeConfiguration,
+            Prelude.Just
+              ("IncludedStates" Data..= includedStates)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/SalesforceKnowledgeArticleState.hs b/gen/Amazonka/Kendra/Types/SalesforceKnowledgeArticleState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/SalesforceKnowledgeArticleState.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.Kendra.Types.SalesforceKnowledgeArticleState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.SalesforceKnowledgeArticleState
+  ( SalesforceKnowledgeArticleState
+      ( ..,
+        SalesforceKnowledgeArticleState_ARCHIVED,
+        SalesforceKnowledgeArticleState_DRAFT,
+        SalesforceKnowledgeArticleState_PUBLISHED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SalesforceKnowledgeArticleState = SalesforceKnowledgeArticleState'
+  { fromSalesforceKnowledgeArticleState ::
+      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 SalesforceKnowledgeArticleState_ARCHIVED :: SalesforceKnowledgeArticleState
+pattern SalesforceKnowledgeArticleState_ARCHIVED = SalesforceKnowledgeArticleState' "ARCHIVED"
+
+pattern SalesforceKnowledgeArticleState_DRAFT :: SalesforceKnowledgeArticleState
+pattern SalesforceKnowledgeArticleState_DRAFT = SalesforceKnowledgeArticleState' "DRAFT"
+
+pattern SalesforceKnowledgeArticleState_PUBLISHED :: SalesforceKnowledgeArticleState
+pattern SalesforceKnowledgeArticleState_PUBLISHED = SalesforceKnowledgeArticleState' "PUBLISHED"
+
+{-# COMPLETE
+  SalesforceKnowledgeArticleState_ARCHIVED,
+  SalesforceKnowledgeArticleState_DRAFT,
+  SalesforceKnowledgeArticleState_PUBLISHED,
+  SalesforceKnowledgeArticleState'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/SalesforceStandardKnowledgeArticleTypeConfiguration.hs b/gen/Amazonka/Kendra/Types/SalesforceStandardKnowledgeArticleTypeConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/SalesforceStandardKnowledgeArticleTypeConfiguration.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.Kendra.Types.SalesforceStandardKnowledgeArticleTypeConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.SalesforceStandardKnowledgeArticleTypeConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DataSourceToIndexFieldMapping
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information for standard Salesforce knowledge
+-- articles.
+--
+-- /See:/ 'newSalesforceStandardKnowledgeArticleTypeConfiguration' smart constructor.
+data SalesforceStandardKnowledgeArticleTypeConfiguration = SalesforceStandardKnowledgeArticleTypeConfiguration'
+  { -- | The name of the field that contains the document title.
+    documentTitleFieldName :: Prelude.Maybe Prelude.Text,
+    -- | Maps attributes or field names of the knowledge article to Amazon Kendra
+    -- index field names. To create custom fields, use the @UpdateIndex@ API
+    -- before you map to Salesforce fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The Salesforce data source field names must exist in your Salesforce
+    -- custom metadata.
+    fieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | The name of the field that contains the document data to index.
+    documentDataFieldName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SalesforceStandardKnowledgeArticleTypeConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'documentTitleFieldName', 'salesforceStandardKnowledgeArticleTypeConfiguration_documentTitleFieldName' - The name of the field that contains the document title.
+--
+-- 'fieldMappings', 'salesforceStandardKnowledgeArticleTypeConfiguration_fieldMappings' - Maps attributes or field names of the knowledge article to Amazon Kendra
+-- index field names. To create custom fields, use the @UpdateIndex@ API
+-- before you map to Salesforce fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Salesforce data source field names must exist in your Salesforce
+-- custom metadata.
+--
+-- 'documentDataFieldName', 'salesforceStandardKnowledgeArticleTypeConfiguration_documentDataFieldName' - The name of the field that contains the document data to index.
+newSalesforceStandardKnowledgeArticleTypeConfiguration ::
+  -- | 'documentDataFieldName'
+  Prelude.Text ->
+  SalesforceStandardKnowledgeArticleTypeConfiguration
+newSalesforceStandardKnowledgeArticleTypeConfiguration
+  pDocumentDataFieldName_ =
+    SalesforceStandardKnowledgeArticleTypeConfiguration'
+      { documentTitleFieldName =
+          Prelude.Nothing,
+        fieldMappings =
+          Prelude.Nothing,
+        documentDataFieldName =
+          pDocumentDataFieldName_
+      }
+
+-- | The name of the field that contains the document title.
+salesforceStandardKnowledgeArticleTypeConfiguration_documentTitleFieldName :: Lens.Lens' SalesforceStandardKnowledgeArticleTypeConfiguration (Prelude.Maybe Prelude.Text)
+salesforceStandardKnowledgeArticleTypeConfiguration_documentTitleFieldName = Lens.lens (\SalesforceStandardKnowledgeArticleTypeConfiguration' {documentTitleFieldName} -> documentTitleFieldName) (\s@SalesforceStandardKnowledgeArticleTypeConfiguration' {} a -> s {documentTitleFieldName = a} :: SalesforceStandardKnowledgeArticleTypeConfiguration)
+
+-- | Maps attributes or field names of the knowledge article to Amazon Kendra
+-- index field names. To create custom fields, use the @UpdateIndex@ API
+-- before you map to Salesforce fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Salesforce data source field names must exist in your Salesforce
+-- custom metadata.
+salesforceStandardKnowledgeArticleTypeConfiguration_fieldMappings :: Lens.Lens' SalesforceStandardKnowledgeArticleTypeConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+salesforceStandardKnowledgeArticleTypeConfiguration_fieldMappings = Lens.lens (\SalesforceStandardKnowledgeArticleTypeConfiguration' {fieldMappings} -> fieldMappings) (\s@SalesforceStandardKnowledgeArticleTypeConfiguration' {} a -> s {fieldMappings = a} :: SalesforceStandardKnowledgeArticleTypeConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the field that contains the document data to index.
+salesforceStandardKnowledgeArticleTypeConfiguration_documentDataFieldName :: Lens.Lens' SalesforceStandardKnowledgeArticleTypeConfiguration Prelude.Text
+salesforceStandardKnowledgeArticleTypeConfiguration_documentDataFieldName = Lens.lens (\SalesforceStandardKnowledgeArticleTypeConfiguration' {documentDataFieldName} -> documentDataFieldName) (\s@SalesforceStandardKnowledgeArticleTypeConfiguration' {} a -> s {documentDataFieldName = a} :: SalesforceStandardKnowledgeArticleTypeConfiguration)
+
+instance
+  Data.FromJSON
+    SalesforceStandardKnowledgeArticleTypeConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "SalesforceStandardKnowledgeArticleTypeConfiguration"
+      ( \x ->
+          SalesforceStandardKnowledgeArticleTypeConfiguration'
+            Prelude.<$> (x Data..:? "DocumentTitleFieldName")
+            Prelude.<*> (x Data..:? "FieldMappings")
+            Prelude.<*> (x Data..: "DocumentDataFieldName")
+      )
+
+instance
+  Prelude.Hashable
+    SalesforceStandardKnowledgeArticleTypeConfiguration
+  where
+  hashWithSalt
+    _salt
+    SalesforceStandardKnowledgeArticleTypeConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` documentTitleFieldName
+        `Prelude.hashWithSalt` fieldMappings
+        `Prelude.hashWithSalt` documentDataFieldName
+
+instance
+  Prelude.NFData
+    SalesforceStandardKnowledgeArticleTypeConfiguration
+  where
+  rnf
+    SalesforceStandardKnowledgeArticleTypeConfiguration' {..} =
+      Prelude.rnf documentTitleFieldName
+        `Prelude.seq` Prelude.rnf fieldMappings
+        `Prelude.seq` Prelude.rnf documentDataFieldName
+
+instance
+  Data.ToJSON
+    SalesforceStandardKnowledgeArticleTypeConfiguration
+  where
+  toJSON
+    SalesforceStandardKnowledgeArticleTypeConfiguration' {..} =
+      Data.object
+        ( Prelude.catMaybes
+            [ ("DocumentTitleFieldName" Data..=)
+                Prelude.<$> documentTitleFieldName,
+              ("FieldMappings" Data..=) Prelude.<$> fieldMappings,
+              Prelude.Just
+                ( "DocumentDataFieldName"
+                    Data..= documentDataFieldName
+                )
+            ]
+        )
diff --git a/gen/Amazonka/Kendra/Types/SalesforceStandardObjectAttachmentConfiguration.hs b/gen/Amazonka/Kendra/Types/SalesforceStandardObjectAttachmentConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/SalesforceStandardObjectAttachmentConfiguration.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.Kendra.Types.SalesforceStandardObjectAttachmentConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.SalesforceStandardObjectAttachmentConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DataSourceToIndexFieldMapping
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information for processing attachments to
+-- Salesforce standard objects.
+--
+-- /See:/ 'newSalesforceStandardObjectAttachmentConfiguration' smart constructor.
+data SalesforceStandardObjectAttachmentConfiguration = SalesforceStandardObjectAttachmentConfiguration'
+  { -- | The name of the field used for the document title.
+    documentTitleFieldName :: Prelude.Maybe Prelude.Text,
+    -- | One or more objects that map fields in attachments to Amazon Kendra
+    -- index fields.
+    fieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SalesforceStandardObjectAttachmentConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'documentTitleFieldName', 'salesforceStandardObjectAttachmentConfiguration_documentTitleFieldName' - The name of the field used for the document title.
+--
+-- 'fieldMappings', 'salesforceStandardObjectAttachmentConfiguration_fieldMappings' - One or more objects that map fields in attachments to Amazon Kendra
+-- index fields.
+newSalesforceStandardObjectAttachmentConfiguration ::
+  SalesforceStandardObjectAttachmentConfiguration
+newSalesforceStandardObjectAttachmentConfiguration =
+  SalesforceStandardObjectAttachmentConfiguration'
+    { documentTitleFieldName =
+        Prelude.Nothing,
+      fieldMappings =
+        Prelude.Nothing
+    }
+
+-- | The name of the field used for the document title.
+salesforceStandardObjectAttachmentConfiguration_documentTitleFieldName :: Lens.Lens' SalesforceStandardObjectAttachmentConfiguration (Prelude.Maybe Prelude.Text)
+salesforceStandardObjectAttachmentConfiguration_documentTitleFieldName = Lens.lens (\SalesforceStandardObjectAttachmentConfiguration' {documentTitleFieldName} -> documentTitleFieldName) (\s@SalesforceStandardObjectAttachmentConfiguration' {} a -> s {documentTitleFieldName = a} :: SalesforceStandardObjectAttachmentConfiguration)
+
+-- | One or more objects that map fields in attachments to Amazon Kendra
+-- index fields.
+salesforceStandardObjectAttachmentConfiguration_fieldMappings :: Lens.Lens' SalesforceStandardObjectAttachmentConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+salesforceStandardObjectAttachmentConfiguration_fieldMappings = Lens.lens (\SalesforceStandardObjectAttachmentConfiguration' {fieldMappings} -> fieldMappings) (\s@SalesforceStandardObjectAttachmentConfiguration' {} a -> s {fieldMappings = a} :: SalesforceStandardObjectAttachmentConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Data.FromJSON
+    SalesforceStandardObjectAttachmentConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "SalesforceStandardObjectAttachmentConfiguration"
+      ( \x ->
+          SalesforceStandardObjectAttachmentConfiguration'
+            Prelude.<$> (x Data..:? "DocumentTitleFieldName")
+            Prelude.<*> (x Data..:? "FieldMappings")
+      )
+
+instance
+  Prelude.Hashable
+    SalesforceStandardObjectAttachmentConfiguration
+  where
+  hashWithSalt
+    _salt
+    SalesforceStandardObjectAttachmentConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` documentTitleFieldName
+        `Prelude.hashWithSalt` fieldMappings
+
+instance
+  Prelude.NFData
+    SalesforceStandardObjectAttachmentConfiguration
+  where
+  rnf
+    SalesforceStandardObjectAttachmentConfiguration' {..} =
+      Prelude.rnf documentTitleFieldName
+        `Prelude.seq` Prelude.rnf fieldMappings
+
+instance
+  Data.ToJSON
+    SalesforceStandardObjectAttachmentConfiguration
+  where
+  toJSON
+    SalesforceStandardObjectAttachmentConfiguration' {..} =
+      Data.object
+        ( Prelude.catMaybes
+            [ ("DocumentTitleFieldName" Data..=)
+                Prelude.<$> documentTitleFieldName,
+              ("FieldMappings" Data..=) Prelude.<$> fieldMappings
+            ]
+        )
diff --git a/gen/Amazonka/Kendra/Types/SalesforceStandardObjectConfiguration.hs b/gen/Amazonka/Kendra/Types/SalesforceStandardObjectConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/SalesforceStandardObjectConfiguration.hs
@@ -0,0 +1,169 @@
+{-# 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.Kendra.Types.SalesforceStandardObjectConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.SalesforceStandardObjectConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DataSourceToIndexFieldMapping
+import Amazonka.Kendra.Types.SalesforceStandardObjectName
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information for indexing a single standard
+-- object.
+--
+-- /See:/ 'newSalesforceStandardObjectConfiguration' smart constructor.
+data SalesforceStandardObjectConfiguration = SalesforceStandardObjectConfiguration'
+  { -- | The name of the field in the standard object table that contains the
+    -- document title.
+    documentTitleFieldName :: Prelude.Maybe Prelude.Text,
+    -- | Maps attributes or field names of the standard object to Amazon Kendra
+    -- index field names. To create custom fields, use the @UpdateIndex@ API
+    -- before you map to Salesforce fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The Salesforce data source field names must exist in your Salesforce
+    -- custom metadata.
+    fieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | The name of the standard object.
+    name :: SalesforceStandardObjectName,
+    -- | The name of the field in the standard object table that contains the
+    -- document contents.
+    documentDataFieldName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SalesforceStandardObjectConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'documentTitleFieldName', 'salesforceStandardObjectConfiguration_documentTitleFieldName' - The name of the field in the standard object table that contains the
+-- document title.
+--
+-- 'fieldMappings', 'salesforceStandardObjectConfiguration_fieldMappings' - Maps attributes or field names of the standard object to Amazon Kendra
+-- index field names. To create custom fields, use the @UpdateIndex@ API
+-- before you map to Salesforce fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Salesforce data source field names must exist in your Salesforce
+-- custom metadata.
+--
+-- 'name', 'salesforceStandardObjectConfiguration_name' - The name of the standard object.
+--
+-- 'documentDataFieldName', 'salesforceStandardObjectConfiguration_documentDataFieldName' - The name of the field in the standard object table that contains the
+-- document contents.
+newSalesforceStandardObjectConfiguration ::
+  -- | 'name'
+  SalesforceStandardObjectName ->
+  -- | 'documentDataFieldName'
+  Prelude.Text ->
+  SalesforceStandardObjectConfiguration
+newSalesforceStandardObjectConfiguration
+  pName_
+  pDocumentDataFieldName_ =
+    SalesforceStandardObjectConfiguration'
+      { documentTitleFieldName =
+          Prelude.Nothing,
+        fieldMappings = Prelude.Nothing,
+        name = pName_,
+        documentDataFieldName =
+          pDocumentDataFieldName_
+      }
+
+-- | The name of the field in the standard object table that contains the
+-- document title.
+salesforceStandardObjectConfiguration_documentTitleFieldName :: Lens.Lens' SalesforceStandardObjectConfiguration (Prelude.Maybe Prelude.Text)
+salesforceStandardObjectConfiguration_documentTitleFieldName = Lens.lens (\SalesforceStandardObjectConfiguration' {documentTitleFieldName} -> documentTitleFieldName) (\s@SalesforceStandardObjectConfiguration' {} a -> s {documentTitleFieldName = a} :: SalesforceStandardObjectConfiguration)
+
+-- | Maps attributes or field names of the standard object to Amazon Kendra
+-- index field names. To create custom fields, use the @UpdateIndex@ API
+-- before you map to Salesforce fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Salesforce data source field names must exist in your Salesforce
+-- custom metadata.
+salesforceStandardObjectConfiguration_fieldMappings :: Lens.Lens' SalesforceStandardObjectConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+salesforceStandardObjectConfiguration_fieldMappings = Lens.lens (\SalesforceStandardObjectConfiguration' {fieldMappings} -> fieldMappings) (\s@SalesforceStandardObjectConfiguration' {} a -> s {fieldMappings = a} :: SalesforceStandardObjectConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the standard object.
+salesforceStandardObjectConfiguration_name :: Lens.Lens' SalesforceStandardObjectConfiguration SalesforceStandardObjectName
+salesforceStandardObjectConfiguration_name = Lens.lens (\SalesforceStandardObjectConfiguration' {name} -> name) (\s@SalesforceStandardObjectConfiguration' {} a -> s {name = a} :: SalesforceStandardObjectConfiguration)
+
+-- | The name of the field in the standard object table that contains the
+-- document contents.
+salesforceStandardObjectConfiguration_documentDataFieldName :: Lens.Lens' SalesforceStandardObjectConfiguration Prelude.Text
+salesforceStandardObjectConfiguration_documentDataFieldName = Lens.lens (\SalesforceStandardObjectConfiguration' {documentDataFieldName} -> documentDataFieldName) (\s@SalesforceStandardObjectConfiguration' {} a -> s {documentDataFieldName = a} :: SalesforceStandardObjectConfiguration)
+
+instance
+  Data.FromJSON
+    SalesforceStandardObjectConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "SalesforceStandardObjectConfiguration"
+      ( \x ->
+          SalesforceStandardObjectConfiguration'
+            Prelude.<$> (x Data..:? "DocumentTitleFieldName")
+            Prelude.<*> (x Data..:? "FieldMappings")
+            Prelude.<*> (x Data..: "Name")
+            Prelude.<*> (x Data..: "DocumentDataFieldName")
+      )
+
+instance
+  Prelude.Hashable
+    SalesforceStandardObjectConfiguration
+  where
+  hashWithSalt
+    _salt
+    SalesforceStandardObjectConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` documentTitleFieldName
+        `Prelude.hashWithSalt` fieldMappings
+        `Prelude.hashWithSalt` name
+        `Prelude.hashWithSalt` documentDataFieldName
+
+instance
+  Prelude.NFData
+    SalesforceStandardObjectConfiguration
+  where
+  rnf SalesforceStandardObjectConfiguration' {..} =
+    Prelude.rnf documentTitleFieldName
+      `Prelude.seq` Prelude.rnf fieldMappings
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf documentDataFieldName
+
+instance
+  Data.ToJSON
+    SalesforceStandardObjectConfiguration
+  where
+  toJSON SalesforceStandardObjectConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DocumentTitleFieldName" Data..=)
+              Prelude.<$> documentTitleFieldName,
+            ("FieldMappings" Data..=) Prelude.<$> fieldMappings,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just
+              ( "DocumentDataFieldName"
+                  Data..= documentDataFieldName
+              )
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/SalesforceStandardObjectName.hs b/gen/Amazonka/Kendra/Types/SalesforceStandardObjectName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/SalesforceStandardObjectName.hs
@@ -0,0 +1,146 @@
+{-# 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.Kendra.Types.SalesforceStandardObjectName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.SalesforceStandardObjectName
+  ( SalesforceStandardObjectName
+      ( ..,
+        SalesforceStandardObjectName_ACCOUNT,
+        SalesforceStandardObjectName_CAMPAIGN,
+        SalesforceStandardObjectName_CASE,
+        SalesforceStandardObjectName_CONTACT,
+        SalesforceStandardObjectName_CONTRACT,
+        SalesforceStandardObjectName_DOCUMENT,
+        SalesforceStandardObjectName_GROUP,
+        SalesforceStandardObjectName_IDEA,
+        SalesforceStandardObjectName_LEAD,
+        SalesforceStandardObjectName_OPPORTUNITY,
+        SalesforceStandardObjectName_PARTNER,
+        SalesforceStandardObjectName_PRICEBOOK,
+        SalesforceStandardObjectName_PRODUCT,
+        SalesforceStandardObjectName_PROFILE,
+        SalesforceStandardObjectName_SOLUTION,
+        SalesforceStandardObjectName_TASK,
+        SalesforceStandardObjectName_USER
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SalesforceStandardObjectName = SalesforceStandardObjectName'
+  { fromSalesforceStandardObjectName ::
+      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 SalesforceStandardObjectName_ACCOUNT :: SalesforceStandardObjectName
+pattern SalesforceStandardObjectName_ACCOUNT = SalesforceStandardObjectName' "ACCOUNT"
+
+pattern SalesforceStandardObjectName_CAMPAIGN :: SalesforceStandardObjectName
+pattern SalesforceStandardObjectName_CAMPAIGN = SalesforceStandardObjectName' "CAMPAIGN"
+
+pattern SalesforceStandardObjectName_CASE :: SalesforceStandardObjectName
+pattern SalesforceStandardObjectName_CASE = SalesforceStandardObjectName' "CASE"
+
+pattern SalesforceStandardObjectName_CONTACT :: SalesforceStandardObjectName
+pattern SalesforceStandardObjectName_CONTACT = SalesforceStandardObjectName' "CONTACT"
+
+pattern SalesforceStandardObjectName_CONTRACT :: SalesforceStandardObjectName
+pattern SalesforceStandardObjectName_CONTRACT = SalesforceStandardObjectName' "CONTRACT"
+
+pattern SalesforceStandardObjectName_DOCUMENT :: SalesforceStandardObjectName
+pattern SalesforceStandardObjectName_DOCUMENT = SalesforceStandardObjectName' "DOCUMENT"
+
+pattern SalesforceStandardObjectName_GROUP :: SalesforceStandardObjectName
+pattern SalesforceStandardObjectName_GROUP = SalesforceStandardObjectName' "GROUP"
+
+pattern SalesforceStandardObjectName_IDEA :: SalesforceStandardObjectName
+pattern SalesforceStandardObjectName_IDEA = SalesforceStandardObjectName' "IDEA"
+
+pattern SalesforceStandardObjectName_LEAD :: SalesforceStandardObjectName
+pattern SalesforceStandardObjectName_LEAD = SalesforceStandardObjectName' "LEAD"
+
+pattern SalesforceStandardObjectName_OPPORTUNITY :: SalesforceStandardObjectName
+pattern SalesforceStandardObjectName_OPPORTUNITY = SalesforceStandardObjectName' "OPPORTUNITY"
+
+pattern SalesforceStandardObjectName_PARTNER :: SalesforceStandardObjectName
+pattern SalesforceStandardObjectName_PARTNER = SalesforceStandardObjectName' "PARTNER"
+
+pattern SalesforceStandardObjectName_PRICEBOOK :: SalesforceStandardObjectName
+pattern SalesforceStandardObjectName_PRICEBOOK = SalesforceStandardObjectName' "PRICEBOOK"
+
+pattern SalesforceStandardObjectName_PRODUCT :: SalesforceStandardObjectName
+pattern SalesforceStandardObjectName_PRODUCT = SalesforceStandardObjectName' "PRODUCT"
+
+pattern SalesforceStandardObjectName_PROFILE :: SalesforceStandardObjectName
+pattern SalesforceStandardObjectName_PROFILE = SalesforceStandardObjectName' "PROFILE"
+
+pattern SalesforceStandardObjectName_SOLUTION :: SalesforceStandardObjectName
+pattern SalesforceStandardObjectName_SOLUTION = SalesforceStandardObjectName' "SOLUTION"
+
+pattern SalesforceStandardObjectName_TASK :: SalesforceStandardObjectName
+pattern SalesforceStandardObjectName_TASK = SalesforceStandardObjectName' "TASK"
+
+pattern SalesforceStandardObjectName_USER :: SalesforceStandardObjectName
+pattern SalesforceStandardObjectName_USER = SalesforceStandardObjectName' "USER"
+
+{-# COMPLETE
+  SalesforceStandardObjectName_ACCOUNT,
+  SalesforceStandardObjectName_CAMPAIGN,
+  SalesforceStandardObjectName_CASE,
+  SalesforceStandardObjectName_CONTACT,
+  SalesforceStandardObjectName_CONTRACT,
+  SalesforceStandardObjectName_DOCUMENT,
+  SalesforceStandardObjectName_GROUP,
+  SalesforceStandardObjectName_IDEA,
+  SalesforceStandardObjectName_LEAD,
+  SalesforceStandardObjectName_OPPORTUNITY,
+  SalesforceStandardObjectName_PARTNER,
+  SalesforceStandardObjectName_PRICEBOOK,
+  SalesforceStandardObjectName_PRODUCT,
+  SalesforceStandardObjectName_PROFILE,
+  SalesforceStandardObjectName_SOLUTION,
+  SalesforceStandardObjectName_TASK,
+  SalesforceStandardObjectName_USER,
+  SalesforceStandardObjectName'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/ScoreAttributes.hs b/gen/Amazonka/Kendra/Types/ScoreAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ScoreAttributes.hs
@@ -0,0 +1,71 @@
+{-# 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.Kendra.Types.ScoreAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ScoreAttributes where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.ScoreConfidence
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides a relative ranking that indicates how confident Amazon Kendra
+-- is that the response matches the query.
+--
+-- /See:/ 'newScoreAttributes' smart constructor.
+data ScoreAttributes = ScoreAttributes'
+  { -- | A relative ranking for how well the response matches the query.
+    scoreConfidence :: Prelude.Maybe ScoreConfidence
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScoreAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'scoreConfidence', 'scoreAttributes_scoreConfidence' - A relative ranking for how well the response matches the query.
+newScoreAttributes ::
+  ScoreAttributes
+newScoreAttributes =
+  ScoreAttributes' {scoreConfidence = Prelude.Nothing}
+
+-- | A relative ranking for how well the response matches the query.
+scoreAttributes_scoreConfidence :: Lens.Lens' ScoreAttributes (Prelude.Maybe ScoreConfidence)
+scoreAttributes_scoreConfidence = Lens.lens (\ScoreAttributes' {scoreConfidence} -> scoreConfidence) (\s@ScoreAttributes' {} a -> s {scoreConfidence = a} :: ScoreAttributes)
+
+instance Data.FromJSON ScoreAttributes where
+  parseJSON =
+    Data.withObject
+      "ScoreAttributes"
+      ( \x ->
+          ScoreAttributes'
+            Prelude.<$> (x Data..:? "ScoreConfidence")
+      )
+
+instance Prelude.Hashable ScoreAttributes where
+  hashWithSalt _salt ScoreAttributes' {..} =
+    _salt `Prelude.hashWithSalt` scoreConfidence
+
+instance Prelude.NFData ScoreAttributes where
+  rnf ScoreAttributes' {..} =
+    Prelude.rnf scoreConfidence
diff --git a/gen/Amazonka/Kendra/Types/ScoreConfidence.hs b/gen/Amazonka/Kendra/Types/ScoreConfidence.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ScoreConfidence.hs
@@ -0,0 +1,87 @@
+{-# 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.Kendra.Types.ScoreConfidence
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ScoreConfidence
+  ( ScoreConfidence
+      ( ..,
+        ScoreConfidence_HIGH,
+        ScoreConfidence_LOW,
+        ScoreConfidence_MEDIUM,
+        ScoreConfidence_NOT_AVAILABLE,
+        ScoreConfidence_VERY_HIGH
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Enumeration for query score confidence.
+newtype ScoreConfidence = ScoreConfidence'
+  { fromScoreConfidence ::
+      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 ScoreConfidence_HIGH :: ScoreConfidence
+pattern ScoreConfidence_HIGH = ScoreConfidence' "HIGH"
+
+pattern ScoreConfidence_LOW :: ScoreConfidence
+pattern ScoreConfidence_LOW = ScoreConfidence' "LOW"
+
+pattern ScoreConfidence_MEDIUM :: ScoreConfidence
+pattern ScoreConfidence_MEDIUM = ScoreConfidence' "MEDIUM"
+
+pattern ScoreConfidence_NOT_AVAILABLE :: ScoreConfidence
+pattern ScoreConfidence_NOT_AVAILABLE = ScoreConfidence' "NOT_AVAILABLE"
+
+pattern ScoreConfidence_VERY_HIGH :: ScoreConfidence
+pattern ScoreConfidence_VERY_HIGH = ScoreConfidence' "VERY_HIGH"
+
+{-# COMPLETE
+  ScoreConfidence_HIGH,
+  ScoreConfidence_LOW,
+  ScoreConfidence_MEDIUM,
+  ScoreConfidence_NOT_AVAILABLE,
+  ScoreConfidence_VERY_HIGH,
+  ScoreConfidence'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/Search.hs b/gen/Amazonka/Kendra/Types/Search.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/Search.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.Kendra.Types.Search
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.Search 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 how a custom index field is used during a
+-- search.
+--
+-- /See:/ 'newSearch' smart constructor.
+data Search = Search'
+  { -- | Determines whether the field is returned in the query response. The
+    -- default is @true@.
+    displayable :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates that the field can be used to create search facets, a count of
+    -- results for each value in the field. The default is @false@ .
+    facetable :: Prelude.Maybe Prelude.Bool,
+    -- | Determines whether the field is used in the search. If the @Searchable@
+    -- field is @true@, you can use relevance tuning to manually tune how
+    -- Amazon Kendra weights the field in the search. The default is @true@ for
+    -- string fields and @false@ for number and date fields.
+    searchable :: Prelude.Maybe Prelude.Bool,
+    -- | Determines whether the field can be used to sort the results of a query.
+    -- If you specify sorting on a field that does not have @Sortable@ set to
+    -- @true@, Amazon Kendra returns an exception. The default is @false@.
+    sortable :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Search' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'displayable', 'search_displayable' - Determines whether the field is returned in the query response. The
+-- default is @true@.
+--
+-- 'facetable', 'search_facetable' - Indicates that the field can be used to create search facets, a count of
+-- results for each value in the field. The default is @false@ .
+--
+-- 'searchable', 'search_searchable' - Determines whether the field is used in the search. If the @Searchable@
+-- field is @true@, you can use relevance tuning to manually tune how
+-- Amazon Kendra weights the field in the search. The default is @true@ for
+-- string fields and @false@ for number and date fields.
+--
+-- 'sortable', 'search_sortable' - Determines whether the field can be used to sort the results of a query.
+-- If you specify sorting on a field that does not have @Sortable@ set to
+-- @true@, Amazon Kendra returns an exception. The default is @false@.
+newSearch ::
+  Search
+newSearch =
+  Search'
+    { displayable = Prelude.Nothing,
+      facetable = Prelude.Nothing,
+      searchable = Prelude.Nothing,
+      sortable = Prelude.Nothing
+    }
+
+-- | Determines whether the field is returned in the query response. The
+-- default is @true@.
+search_displayable :: Lens.Lens' Search (Prelude.Maybe Prelude.Bool)
+search_displayable = Lens.lens (\Search' {displayable} -> displayable) (\s@Search' {} a -> s {displayable = a} :: Search)
+
+-- | Indicates that the field can be used to create search facets, a count of
+-- results for each value in the field. The default is @false@ .
+search_facetable :: Lens.Lens' Search (Prelude.Maybe Prelude.Bool)
+search_facetable = Lens.lens (\Search' {facetable} -> facetable) (\s@Search' {} a -> s {facetable = a} :: Search)
+
+-- | Determines whether the field is used in the search. If the @Searchable@
+-- field is @true@, you can use relevance tuning to manually tune how
+-- Amazon Kendra weights the field in the search. The default is @true@ for
+-- string fields and @false@ for number and date fields.
+search_searchable :: Lens.Lens' Search (Prelude.Maybe Prelude.Bool)
+search_searchable = Lens.lens (\Search' {searchable} -> searchable) (\s@Search' {} a -> s {searchable = a} :: Search)
+
+-- | Determines whether the field can be used to sort the results of a query.
+-- If you specify sorting on a field that does not have @Sortable@ set to
+-- @true@, Amazon Kendra returns an exception. The default is @false@.
+search_sortable :: Lens.Lens' Search (Prelude.Maybe Prelude.Bool)
+search_sortable = Lens.lens (\Search' {sortable} -> sortable) (\s@Search' {} a -> s {sortable = a} :: Search)
+
+instance Data.FromJSON Search where
+  parseJSON =
+    Data.withObject
+      "Search"
+      ( \x ->
+          Search'
+            Prelude.<$> (x Data..:? "Displayable")
+            Prelude.<*> (x Data..:? "Facetable")
+            Prelude.<*> (x Data..:? "Searchable")
+            Prelude.<*> (x Data..:? "Sortable")
+      )
+
+instance Prelude.Hashable Search where
+  hashWithSalt _salt Search' {..} =
+    _salt
+      `Prelude.hashWithSalt` displayable
+      `Prelude.hashWithSalt` facetable
+      `Prelude.hashWithSalt` searchable
+      `Prelude.hashWithSalt` sortable
+
+instance Prelude.NFData Search where
+  rnf Search' {..} =
+    Prelude.rnf displayable
+      `Prelude.seq` Prelude.rnf facetable
+      `Prelude.seq` Prelude.rnf searchable
+      `Prelude.seq` Prelude.rnf sortable
+
+instance Data.ToJSON Search where
+  toJSON Search' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Displayable" Data..=) Prelude.<$> displayable,
+            ("Facetable" Data..=) Prelude.<$> facetable,
+            ("Searchable" Data..=) Prelude.<$> searchable,
+            ("Sortable" Data..=) Prelude.<$> sortable
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/SeedUrlConfiguration.hs b/gen/Amazonka/Kendra/Types/SeedUrlConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/SeedUrlConfiguration.hs
@@ -0,0 +1,151 @@
+{-# 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.Kendra.Types.SeedUrlConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.SeedUrlConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.WebCrawlerMode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information for the seed or starting point
+-- URLs to crawl.
+--
+-- /When selecting websites to index, you must adhere to the
+-- <https://aws.amazon.com/aup/ Amazon Acceptable Use Policy> and all other
+-- Amazon terms. Remember that you must only use Amazon Kendra Web Crawler
+-- to index your own webpages, or webpages that you have authorization to
+-- index./
+--
+-- /See:/ 'newSeedUrlConfiguration' smart constructor.
+data SeedUrlConfiguration = SeedUrlConfiguration'
+  { -- | You can choose one of the following modes:
+    --
+    -- -   @HOST_ONLY@ – crawl only the website host names. For example, if the
+    --     seed URL is \"abc.example.com\", then only URLs with host name
+    --     \"abc.example.com\" are crawled.
+    --
+    -- -   @SUBDOMAINS@ – crawl the website host names with subdomains. For
+    --     example, if the seed URL is \"abc.example.com\", then
+    --     \"a.abc.example.com\" and \"b.abc.example.com\" are also crawled.
+    --
+    -- -   @EVERYTHING@ – crawl the website host names with subdomains and
+    --     other domains that the webpages link to.
+    --
+    -- The default mode is set to @HOST_ONLY@.
+    webCrawlerMode :: Prelude.Maybe WebCrawlerMode,
+    -- | The list of seed or starting point URLs of the websites you want to
+    -- crawl.
+    --
+    -- The list can include a maximum of 100 seed URLs.
+    seedUrls :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SeedUrlConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'webCrawlerMode', 'seedUrlConfiguration_webCrawlerMode' - You can choose one of the following modes:
+--
+-- -   @HOST_ONLY@ – crawl only the website host names. For example, if the
+--     seed URL is \"abc.example.com\", then only URLs with host name
+--     \"abc.example.com\" are crawled.
+--
+-- -   @SUBDOMAINS@ – crawl the website host names with subdomains. For
+--     example, if the seed URL is \"abc.example.com\", then
+--     \"a.abc.example.com\" and \"b.abc.example.com\" are also crawled.
+--
+-- -   @EVERYTHING@ – crawl the website host names with subdomains and
+--     other domains that the webpages link to.
+--
+-- The default mode is set to @HOST_ONLY@.
+--
+-- 'seedUrls', 'seedUrlConfiguration_seedUrls' - The list of seed or starting point URLs of the websites you want to
+-- crawl.
+--
+-- The list can include a maximum of 100 seed URLs.
+newSeedUrlConfiguration ::
+  SeedUrlConfiguration
+newSeedUrlConfiguration =
+  SeedUrlConfiguration'
+    { webCrawlerMode =
+        Prelude.Nothing,
+      seedUrls = Prelude.mempty
+    }
+
+-- | You can choose one of the following modes:
+--
+-- -   @HOST_ONLY@ – crawl only the website host names. For example, if the
+--     seed URL is \"abc.example.com\", then only URLs with host name
+--     \"abc.example.com\" are crawled.
+--
+-- -   @SUBDOMAINS@ – crawl the website host names with subdomains. For
+--     example, if the seed URL is \"abc.example.com\", then
+--     \"a.abc.example.com\" and \"b.abc.example.com\" are also crawled.
+--
+-- -   @EVERYTHING@ – crawl the website host names with subdomains and
+--     other domains that the webpages link to.
+--
+-- The default mode is set to @HOST_ONLY@.
+seedUrlConfiguration_webCrawlerMode :: Lens.Lens' SeedUrlConfiguration (Prelude.Maybe WebCrawlerMode)
+seedUrlConfiguration_webCrawlerMode = Lens.lens (\SeedUrlConfiguration' {webCrawlerMode} -> webCrawlerMode) (\s@SeedUrlConfiguration' {} a -> s {webCrawlerMode = a} :: SeedUrlConfiguration)
+
+-- | The list of seed or starting point URLs of the websites you want to
+-- crawl.
+--
+-- The list can include a maximum of 100 seed URLs.
+seedUrlConfiguration_seedUrls :: Lens.Lens' SeedUrlConfiguration [Prelude.Text]
+seedUrlConfiguration_seedUrls = Lens.lens (\SeedUrlConfiguration' {seedUrls} -> seedUrls) (\s@SeedUrlConfiguration' {} a -> s {seedUrls = a} :: SeedUrlConfiguration) Prelude.. Lens.coerced
+
+instance Data.FromJSON SeedUrlConfiguration where
+  parseJSON =
+    Data.withObject
+      "SeedUrlConfiguration"
+      ( \x ->
+          SeedUrlConfiguration'
+            Prelude.<$> (x Data..:? "WebCrawlerMode")
+            Prelude.<*> (x Data..:? "SeedUrls" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable SeedUrlConfiguration where
+  hashWithSalt _salt SeedUrlConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` webCrawlerMode
+      `Prelude.hashWithSalt` seedUrls
+
+instance Prelude.NFData SeedUrlConfiguration where
+  rnf SeedUrlConfiguration' {..} =
+    Prelude.rnf webCrawlerMode
+      `Prelude.seq` Prelude.rnf seedUrls
+
+instance Data.ToJSON SeedUrlConfiguration where
+  toJSON SeedUrlConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("WebCrawlerMode" Data..=)
+              Prelude.<$> webCrawlerMode,
+            Prelude.Just ("SeedUrls" Data..= seedUrls)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/ServerSideEncryptionConfiguration.hs b/gen/Amazonka/Kendra/Types/ServerSideEncryptionConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ServerSideEncryptionConfiguration.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.Kendra.Types.ServerSideEncryptionConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ServerSideEncryptionConfiguration 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 identifier of the KMS key used to encrypt data indexed by
+-- Amazon Kendra. Amazon Kendra doesn\'t support asymmetric keys.
+--
+-- /See:/ 'newServerSideEncryptionConfiguration' smart constructor.
+data ServerSideEncryptionConfiguration = ServerSideEncryptionConfiguration'
+  { -- | The identifier of the KMS key. Amazon Kendra doesn\'t support asymmetric
+    -- keys.
+    kmsKeyId :: Prelude.Maybe (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ServerSideEncryptionConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'kmsKeyId', 'serverSideEncryptionConfiguration_kmsKeyId' - The identifier of the KMS key. Amazon Kendra doesn\'t support asymmetric
+-- keys.
+newServerSideEncryptionConfiguration ::
+  ServerSideEncryptionConfiguration
+newServerSideEncryptionConfiguration =
+  ServerSideEncryptionConfiguration'
+    { kmsKeyId =
+        Prelude.Nothing
+    }
+
+-- | The identifier of the KMS key. Amazon Kendra doesn\'t support asymmetric
+-- keys.
+serverSideEncryptionConfiguration_kmsKeyId :: Lens.Lens' ServerSideEncryptionConfiguration (Prelude.Maybe Prelude.Text)
+serverSideEncryptionConfiguration_kmsKeyId = Lens.lens (\ServerSideEncryptionConfiguration' {kmsKeyId} -> kmsKeyId) (\s@ServerSideEncryptionConfiguration' {} a -> s {kmsKeyId = a} :: ServerSideEncryptionConfiguration) Prelude.. Lens.mapping Data._Sensitive
+
+instance
+  Data.FromJSON
+    ServerSideEncryptionConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "ServerSideEncryptionConfiguration"
+      ( \x ->
+          ServerSideEncryptionConfiguration'
+            Prelude.<$> (x Data..:? "KmsKeyId")
+      )
+
+instance
+  Prelude.Hashable
+    ServerSideEncryptionConfiguration
+  where
+  hashWithSalt
+    _salt
+    ServerSideEncryptionConfiguration' {..} =
+      _salt `Prelude.hashWithSalt` kmsKeyId
+
+instance
+  Prelude.NFData
+    ServerSideEncryptionConfiguration
+  where
+  rnf ServerSideEncryptionConfiguration' {..} =
+    Prelude.rnf kmsKeyId
+
+instance
+  Data.ToJSON
+    ServerSideEncryptionConfiguration
+  where
+  toJSON ServerSideEncryptionConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("KmsKeyId" Data..=) Prelude.<$> kmsKeyId]
+      )
diff --git a/gen/Amazonka/Kendra/Types/ServiceNowAuthenticationType.hs b/gen/Amazonka/Kendra/Types/ServiceNowAuthenticationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ServiceNowAuthenticationType.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.Kendra.Types.ServiceNowAuthenticationType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ServiceNowAuthenticationType
+  ( ServiceNowAuthenticationType
+      ( ..,
+        ServiceNowAuthenticationType_HTTP_BASIC,
+        ServiceNowAuthenticationType_OAUTH2
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ServiceNowAuthenticationType = ServiceNowAuthenticationType'
+  { fromServiceNowAuthenticationType ::
+      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 ServiceNowAuthenticationType_HTTP_BASIC :: ServiceNowAuthenticationType
+pattern ServiceNowAuthenticationType_HTTP_BASIC = ServiceNowAuthenticationType' "HTTP_BASIC"
+
+pattern ServiceNowAuthenticationType_OAUTH2 :: ServiceNowAuthenticationType
+pattern ServiceNowAuthenticationType_OAUTH2 = ServiceNowAuthenticationType' "OAUTH2"
+
+{-# COMPLETE
+  ServiceNowAuthenticationType_HTTP_BASIC,
+  ServiceNowAuthenticationType_OAUTH2,
+  ServiceNowAuthenticationType'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/ServiceNowBuildVersionType.hs b/gen/Amazonka/Kendra/Types/ServiceNowBuildVersionType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ServiceNowBuildVersionType.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.Kendra.Types.ServiceNowBuildVersionType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ServiceNowBuildVersionType
+  ( ServiceNowBuildVersionType
+      ( ..,
+        ServiceNowBuildVersionType_LONDON,
+        ServiceNowBuildVersionType_OTHERS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ServiceNowBuildVersionType = ServiceNowBuildVersionType'
+  { fromServiceNowBuildVersionType ::
+      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 ServiceNowBuildVersionType_LONDON :: ServiceNowBuildVersionType
+pattern ServiceNowBuildVersionType_LONDON = ServiceNowBuildVersionType' "LONDON"
+
+pattern ServiceNowBuildVersionType_OTHERS :: ServiceNowBuildVersionType
+pattern ServiceNowBuildVersionType_OTHERS = ServiceNowBuildVersionType' "OTHERS"
+
+{-# COMPLETE
+  ServiceNowBuildVersionType_LONDON,
+  ServiceNowBuildVersionType_OTHERS,
+  ServiceNowBuildVersionType'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/ServiceNowConfiguration.hs b/gen/Amazonka/Kendra/Types/ServiceNowConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ServiceNowConfiguration.hs
@@ -0,0 +1,220 @@
+{-# 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.Kendra.Types.ServiceNowConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ServiceNowConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.ServiceNowAuthenticationType
+import Amazonka.Kendra.Types.ServiceNowBuildVersionType
+import Amazonka.Kendra.Types.ServiceNowKnowledgeArticleConfiguration
+import Amazonka.Kendra.Types.ServiceNowServiceCatalogConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information to connect to ServiceNow as your
+-- data source.
+--
+-- /See:/ 'newServiceNowConfiguration' smart constructor.
+data ServiceNowConfiguration = ServiceNowConfiguration'
+  { -- | The type of authentication used to connect to the ServiceNow instance.
+    -- If you choose @HTTP_BASIC@, Amazon Kendra is authenticated using the
+    -- user name and password provided in the Secrets Manager secret in the
+    -- @SecretArn@ field. If you choose @OAUTH2@, Amazon Kendra is
+    -- authenticated using the credentials of client ID, client secret, user
+    -- name and password.
+    --
+    -- When you use @OAUTH2@ authentication, you must generate a token and a
+    -- client secret using the ServiceNow console. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/data-source-servicenow.html Using a ServiceNow data source>.
+    authenticationType :: Prelude.Maybe ServiceNowAuthenticationType,
+    -- | Configuration information for crawling knowledge articles in the
+    -- ServiceNow site.
+    knowledgeArticleConfiguration :: Prelude.Maybe ServiceNowKnowledgeArticleConfiguration,
+    -- | Configuration information for crawling service catalogs in the
+    -- ServiceNow site.
+    serviceCatalogConfiguration :: Prelude.Maybe ServiceNowServiceCatalogConfiguration,
+    -- | The ServiceNow instance that the data source connects to. The host
+    -- endpoint should look like the following: /{instance}.service-now.com./
+    hostUrl :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the Secrets Manager secret that
+    -- contains the user name and password required to connect to the
+    -- ServiceNow instance. You can also provide OAuth authentication
+    -- credentials of user name, password, client ID, and client secret. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/data-source-servicenow.html Using a ServiceNow data source>.
+    secretArn :: Prelude.Text,
+    -- | The identifier of the release that the ServiceNow host is running. If
+    -- the host is not running the @LONDON@ release, use @OTHERS@.
+    serviceNowBuildVersion :: ServiceNowBuildVersionType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ServiceNowConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'authenticationType', 'serviceNowConfiguration_authenticationType' - The type of authentication used to connect to the ServiceNow instance.
+-- If you choose @HTTP_BASIC@, Amazon Kendra is authenticated using the
+-- user name and password provided in the Secrets Manager secret in the
+-- @SecretArn@ field. If you choose @OAUTH2@, Amazon Kendra is
+-- authenticated using the credentials of client ID, client secret, user
+-- name and password.
+--
+-- When you use @OAUTH2@ authentication, you must generate a token and a
+-- client secret using the ServiceNow console. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/data-source-servicenow.html Using a ServiceNow data source>.
+--
+-- 'knowledgeArticleConfiguration', 'serviceNowConfiguration_knowledgeArticleConfiguration' - Configuration information for crawling knowledge articles in the
+-- ServiceNow site.
+--
+-- 'serviceCatalogConfiguration', 'serviceNowConfiguration_serviceCatalogConfiguration' - Configuration information for crawling service catalogs in the
+-- ServiceNow site.
+--
+-- 'hostUrl', 'serviceNowConfiguration_hostUrl' - The ServiceNow instance that the data source connects to. The host
+-- endpoint should look like the following: /{instance}.service-now.com./
+--
+-- 'secretArn', 'serviceNowConfiguration_secretArn' - The Amazon Resource Name (ARN) of the Secrets Manager secret that
+-- contains the user name and password required to connect to the
+-- ServiceNow instance. You can also provide OAuth authentication
+-- credentials of user name, password, client ID, and client secret. For
+-- more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/data-source-servicenow.html Using a ServiceNow data source>.
+--
+-- 'serviceNowBuildVersion', 'serviceNowConfiguration_serviceNowBuildVersion' - The identifier of the release that the ServiceNow host is running. If
+-- the host is not running the @LONDON@ release, use @OTHERS@.
+newServiceNowConfiguration ::
+  -- | 'hostUrl'
+  Prelude.Text ->
+  -- | 'secretArn'
+  Prelude.Text ->
+  -- | 'serviceNowBuildVersion'
+  ServiceNowBuildVersionType ->
+  ServiceNowConfiguration
+newServiceNowConfiguration
+  pHostUrl_
+  pSecretArn_
+  pServiceNowBuildVersion_ =
+    ServiceNowConfiguration'
+      { authenticationType =
+          Prelude.Nothing,
+        knowledgeArticleConfiguration = Prelude.Nothing,
+        serviceCatalogConfiguration = Prelude.Nothing,
+        hostUrl = pHostUrl_,
+        secretArn = pSecretArn_,
+        serviceNowBuildVersion = pServiceNowBuildVersion_
+      }
+
+-- | The type of authentication used to connect to the ServiceNow instance.
+-- If you choose @HTTP_BASIC@, Amazon Kendra is authenticated using the
+-- user name and password provided in the Secrets Manager secret in the
+-- @SecretArn@ field. If you choose @OAUTH2@, Amazon Kendra is
+-- authenticated using the credentials of client ID, client secret, user
+-- name and password.
+--
+-- When you use @OAUTH2@ authentication, you must generate a token and a
+-- client secret using the ServiceNow console. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/data-source-servicenow.html Using a ServiceNow data source>.
+serviceNowConfiguration_authenticationType :: Lens.Lens' ServiceNowConfiguration (Prelude.Maybe ServiceNowAuthenticationType)
+serviceNowConfiguration_authenticationType = Lens.lens (\ServiceNowConfiguration' {authenticationType} -> authenticationType) (\s@ServiceNowConfiguration' {} a -> s {authenticationType = a} :: ServiceNowConfiguration)
+
+-- | Configuration information for crawling knowledge articles in the
+-- ServiceNow site.
+serviceNowConfiguration_knowledgeArticleConfiguration :: Lens.Lens' ServiceNowConfiguration (Prelude.Maybe ServiceNowKnowledgeArticleConfiguration)
+serviceNowConfiguration_knowledgeArticleConfiguration = Lens.lens (\ServiceNowConfiguration' {knowledgeArticleConfiguration} -> knowledgeArticleConfiguration) (\s@ServiceNowConfiguration' {} a -> s {knowledgeArticleConfiguration = a} :: ServiceNowConfiguration)
+
+-- | Configuration information for crawling service catalogs in the
+-- ServiceNow site.
+serviceNowConfiguration_serviceCatalogConfiguration :: Lens.Lens' ServiceNowConfiguration (Prelude.Maybe ServiceNowServiceCatalogConfiguration)
+serviceNowConfiguration_serviceCatalogConfiguration = Lens.lens (\ServiceNowConfiguration' {serviceCatalogConfiguration} -> serviceCatalogConfiguration) (\s@ServiceNowConfiguration' {} a -> s {serviceCatalogConfiguration = a} :: ServiceNowConfiguration)
+
+-- | The ServiceNow instance that the data source connects to. The host
+-- endpoint should look like the following: /{instance}.service-now.com./
+serviceNowConfiguration_hostUrl :: Lens.Lens' ServiceNowConfiguration Prelude.Text
+serviceNowConfiguration_hostUrl = Lens.lens (\ServiceNowConfiguration' {hostUrl} -> hostUrl) (\s@ServiceNowConfiguration' {} a -> s {hostUrl = a} :: ServiceNowConfiguration)
+
+-- | The Amazon Resource Name (ARN) of the Secrets Manager secret that
+-- contains the user name and password required to connect to the
+-- ServiceNow instance. You can also provide OAuth authentication
+-- credentials of user name, password, client ID, and client secret. For
+-- more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/data-source-servicenow.html Using a ServiceNow data source>.
+serviceNowConfiguration_secretArn :: Lens.Lens' ServiceNowConfiguration Prelude.Text
+serviceNowConfiguration_secretArn = Lens.lens (\ServiceNowConfiguration' {secretArn} -> secretArn) (\s@ServiceNowConfiguration' {} a -> s {secretArn = a} :: ServiceNowConfiguration)
+
+-- | The identifier of the release that the ServiceNow host is running. If
+-- the host is not running the @LONDON@ release, use @OTHERS@.
+serviceNowConfiguration_serviceNowBuildVersion :: Lens.Lens' ServiceNowConfiguration ServiceNowBuildVersionType
+serviceNowConfiguration_serviceNowBuildVersion = Lens.lens (\ServiceNowConfiguration' {serviceNowBuildVersion} -> serviceNowBuildVersion) (\s@ServiceNowConfiguration' {} a -> s {serviceNowBuildVersion = a} :: ServiceNowConfiguration)
+
+instance Data.FromJSON ServiceNowConfiguration where
+  parseJSON =
+    Data.withObject
+      "ServiceNowConfiguration"
+      ( \x ->
+          ServiceNowConfiguration'
+            Prelude.<$> (x Data..:? "AuthenticationType")
+            Prelude.<*> (x Data..:? "KnowledgeArticleConfiguration")
+            Prelude.<*> (x Data..:? "ServiceCatalogConfiguration")
+            Prelude.<*> (x Data..: "HostUrl")
+            Prelude.<*> (x Data..: "SecretArn")
+            Prelude.<*> (x Data..: "ServiceNowBuildVersion")
+      )
+
+instance Prelude.Hashable ServiceNowConfiguration where
+  hashWithSalt _salt ServiceNowConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` authenticationType
+      `Prelude.hashWithSalt` knowledgeArticleConfiguration
+      `Prelude.hashWithSalt` serviceCatalogConfiguration
+      `Prelude.hashWithSalt` hostUrl
+      `Prelude.hashWithSalt` secretArn
+      `Prelude.hashWithSalt` serviceNowBuildVersion
+
+instance Prelude.NFData ServiceNowConfiguration where
+  rnf ServiceNowConfiguration' {..} =
+    Prelude.rnf authenticationType
+      `Prelude.seq` Prelude.rnf knowledgeArticleConfiguration
+      `Prelude.seq` Prelude.rnf serviceCatalogConfiguration
+      `Prelude.seq` Prelude.rnf hostUrl
+      `Prelude.seq` Prelude.rnf secretArn
+      `Prelude.seq` Prelude.rnf serviceNowBuildVersion
+
+instance Data.ToJSON ServiceNowConfiguration where
+  toJSON ServiceNowConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AuthenticationType" Data..=)
+              Prelude.<$> authenticationType,
+            ("KnowledgeArticleConfiguration" Data..=)
+              Prelude.<$> knowledgeArticleConfiguration,
+            ("ServiceCatalogConfiguration" Data..=)
+              Prelude.<$> serviceCatalogConfiguration,
+            Prelude.Just ("HostUrl" Data..= hostUrl),
+            Prelude.Just ("SecretArn" Data..= secretArn),
+            Prelude.Just
+              ( "ServiceNowBuildVersion"
+                  Data..= serviceNowBuildVersion
+              )
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/ServiceNowKnowledgeArticleConfiguration.hs b/gen/Amazonka/Kendra/Types/ServiceNowKnowledgeArticleConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ServiceNowKnowledgeArticleConfiguration.hs
@@ -0,0 +1,276 @@
+{-# 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.Kendra.Types.ServiceNowKnowledgeArticleConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ServiceNowKnowledgeArticleConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DataSourceToIndexFieldMapping
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information for crawling knowledge articles
+-- in the ServiceNow site.
+--
+-- /See:/ 'newServiceNowKnowledgeArticleConfiguration' smart constructor.
+data ServiceNowKnowledgeArticleConfiguration = ServiceNowKnowledgeArticleConfiguration'
+  { -- | @TRUE@ to index attachments to knowledge articles.
+    crawlAttachments :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the ServiceNow field that is mapped to the index document
+    -- title field.
+    documentTitleFieldName :: Prelude.Maybe Prelude.Text,
+    -- | A list of regular expression patterns to exclude certain attachments of
+    -- knowledge articles in your ServiceNow. Item that match the patterns are
+    -- excluded from the index. Items that don\'t match the patterns are
+    -- included in the index. If an item matches both an inclusion and
+    -- exclusion pattern, the exclusion pattern takes precedence and the item
+    -- isn\'t included in the index.
+    --
+    -- The regex is applied to the field specified in the @PatternTargetField@.
+    excludeAttachmentFilePatterns :: Prelude.Maybe [Prelude.Text],
+    -- | Maps attributes or field names of knoweldge articles to Amazon Kendra
+    -- index field names. To create custom fields, use the @UpdateIndex@ API
+    -- before you map to ServiceNow fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The ServiceNow data source field names must exist in your ServiceNow
+    -- custom metadata.
+    fieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | A query that selects the knowledge articles to index. The query can
+    -- return articles from multiple knowledge bases, and the knowledge bases
+    -- can be public or private.
+    --
+    -- The query string must be one generated by the ServiceNow console. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/servicenow-query.html Specifying documents to index with a query>.
+    filterQuery :: Prelude.Maybe Prelude.Text,
+    -- | A list of regular expression patterns to include certain attachments of
+    -- knowledge articles in your ServiceNow. Item that match the patterns are
+    -- included in the index. Items that don\'t match the patterns are excluded
+    -- from the index. If an item matches both an inclusion and exclusion
+    -- pattern, the exclusion pattern takes precedence and the item isn\'t
+    -- included in the index.
+    --
+    -- The regex is applied to the field specified in the @PatternTargetField@.
+    includeAttachmentFilePatterns :: Prelude.Maybe [Prelude.Text],
+    -- | The name of the ServiceNow field that is mapped to the index document
+    -- contents field in the Amazon Kendra index.
+    documentDataFieldName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ServiceNowKnowledgeArticleConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'crawlAttachments', 'serviceNowKnowledgeArticleConfiguration_crawlAttachments' - @TRUE@ to index attachments to knowledge articles.
+--
+-- 'documentTitleFieldName', 'serviceNowKnowledgeArticleConfiguration_documentTitleFieldName' - The name of the ServiceNow field that is mapped to the index document
+-- title field.
+--
+-- 'excludeAttachmentFilePatterns', 'serviceNowKnowledgeArticleConfiguration_excludeAttachmentFilePatterns' - A list of regular expression patterns to exclude certain attachments of
+-- knowledge articles in your ServiceNow. Item that match the patterns are
+-- excluded from the index. Items that don\'t match the patterns are
+-- included in the index. If an item matches both an inclusion and
+-- exclusion pattern, the exclusion pattern takes precedence and the item
+-- isn\'t included in the index.
+--
+-- The regex is applied to the field specified in the @PatternTargetField@.
+--
+-- 'fieldMappings', 'serviceNowKnowledgeArticleConfiguration_fieldMappings' - Maps attributes or field names of knoweldge articles to Amazon Kendra
+-- index field names. To create custom fields, use the @UpdateIndex@ API
+-- before you map to ServiceNow fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The ServiceNow data source field names must exist in your ServiceNow
+-- custom metadata.
+--
+-- 'filterQuery', 'serviceNowKnowledgeArticleConfiguration_filterQuery' - A query that selects the knowledge articles to index. The query can
+-- return articles from multiple knowledge bases, and the knowledge bases
+-- can be public or private.
+--
+-- The query string must be one generated by the ServiceNow console. For
+-- more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/servicenow-query.html Specifying documents to index with a query>.
+--
+-- 'includeAttachmentFilePatterns', 'serviceNowKnowledgeArticleConfiguration_includeAttachmentFilePatterns' - A list of regular expression patterns to include certain attachments of
+-- knowledge articles in your ServiceNow. Item that match the patterns are
+-- included in the index. Items that don\'t match the patterns are excluded
+-- from the index. If an item matches both an inclusion and exclusion
+-- pattern, the exclusion pattern takes precedence and the item isn\'t
+-- included in the index.
+--
+-- The regex is applied to the field specified in the @PatternTargetField@.
+--
+-- 'documentDataFieldName', 'serviceNowKnowledgeArticleConfiguration_documentDataFieldName' - The name of the ServiceNow field that is mapped to the index document
+-- contents field in the Amazon Kendra index.
+newServiceNowKnowledgeArticleConfiguration ::
+  -- | 'documentDataFieldName'
+  Prelude.Text ->
+  ServiceNowKnowledgeArticleConfiguration
+newServiceNowKnowledgeArticleConfiguration
+  pDocumentDataFieldName_ =
+    ServiceNowKnowledgeArticleConfiguration'
+      { crawlAttachments =
+          Prelude.Nothing,
+        documentTitleFieldName =
+          Prelude.Nothing,
+        excludeAttachmentFilePatterns =
+          Prelude.Nothing,
+        fieldMappings = Prelude.Nothing,
+        filterQuery = Prelude.Nothing,
+        includeAttachmentFilePatterns =
+          Prelude.Nothing,
+        documentDataFieldName =
+          pDocumentDataFieldName_
+      }
+
+-- | @TRUE@ to index attachments to knowledge articles.
+serviceNowKnowledgeArticleConfiguration_crawlAttachments :: Lens.Lens' ServiceNowKnowledgeArticleConfiguration (Prelude.Maybe Prelude.Bool)
+serviceNowKnowledgeArticleConfiguration_crawlAttachments = Lens.lens (\ServiceNowKnowledgeArticleConfiguration' {crawlAttachments} -> crawlAttachments) (\s@ServiceNowKnowledgeArticleConfiguration' {} a -> s {crawlAttachments = a} :: ServiceNowKnowledgeArticleConfiguration)
+
+-- | The name of the ServiceNow field that is mapped to the index document
+-- title field.
+serviceNowKnowledgeArticleConfiguration_documentTitleFieldName :: Lens.Lens' ServiceNowKnowledgeArticleConfiguration (Prelude.Maybe Prelude.Text)
+serviceNowKnowledgeArticleConfiguration_documentTitleFieldName = Lens.lens (\ServiceNowKnowledgeArticleConfiguration' {documentTitleFieldName} -> documentTitleFieldName) (\s@ServiceNowKnowledgeArticleConfiguration' {} a -> s {documentTitleFieldName = a} :: ServiceNowKnowledgeArticleConfiguration)
+
+-- | A list of regular expression patterns to exclude certain attachments of
+-- knowledge articles in your ServiceNow. Item that match the patterns are
+-- excluded from the index. Items that don\'t match the patterns are
+-- included in the index. If an item matches both an inclusion and
+-- exclusion pattern, the exclusion pattern takes precedence and the item
+-- isn\'t included in the index.
+--
+-- The regex is applied to the field specified in the @PatternTargetField@.
+serviceNowKnowledgeArticleConfiguration_excludeAttachmentFilePatterns :: Lens.Lens' ServiceNowKnowledgeArticleConfiguration (Prelude.Maybe [Prelude.Text])
+serviceNowKnowledgeArticleConfiguration_excludeAttachmentFilePatterns = Lens.lens (\ServiceNowKnowledgeArticleConfiguration' {excludeAttachmentFilePatterns} -> excludeAttachmentFilePatterns) (\s@ServiceNowKnowledgeArticleConfiguration' {} a -> s {excludeAttachmentFilePatterns = a} :: ServiceNowKnowledgeArticleConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Maps attributes or field names of knoweldge articles to Amazon Kendra
+-- index field names. To create custom fields, use the @UpdateIndex@ API
+-- before you map to ServiceNow fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The ServiceNow data source field names must exist in your ServiceNow
+-- custom metadata.
+serviceNowKnowledgeArticleConfiguration_fieldMappings :: Lens.Lens' ServiceNowKnowledgeArticleConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+serviceNowKnowledgeArticleConfiguration_fieldMappings = Lens.lens (\ServiceNowKnowledgeArticleConfiguration' {fieldMappings} -> fieldMappings) (\s@ServiceNowKnowledgeArticleConfiguration' {} a -> s {fieldMappings = a} :: ServiceNowKnowledgeArticleConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A query that selects the knowledge articles to index. The query can
+-- return articles from multiple knowledge bases, and the knowledge bases
+-- can be public or private.
+--
+-- The query string must be one generated by the ServiceNow console. For
+-- more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/servicenow-query.html Specifying documents to index with a query>.
+serviceNowKnowledgeArticleConfiguration_filterQuery :: Lens.Lens' ServiceNowKnowledgeArticleConfiguration (Prelude.Maybe Prelude.Text)
+serviceNowKnowledgeArticleConfiguration_filterQuery = Lens.lens (\ServiceNowKnowledgeArticleConfiguration' {filterQuery} -> filterQuery) (\s@ServiceNowKnowledgeArticleConfiguration' {} a -> s {filterQuery = a} :: ServiceNowKnowledgeArticleConfiguration)
+
+-- | A list of regular expression patterns to include certain attachments of
+-- knowledge articles in your ServiceNow. Item that match the patterns are
+-- included in the index. Items that don\'t match the patterns are excluded
+-- from the index. If an item matches both an inclusion and exclusion
+-- pattern, the exclusion pattern takes precedence and the item isn\'t
+-- included in the index.
+--
+-- The regex is applied to the field specified in the @PatternTargetField@.
+serviceNowKnowledgeArticleConfiguration_includeAttachmentFilePatterns :: Lens.Lens' ServiceNowKnowledgeArticleConfiguration (Prelude.Maybe [Prelude.Text])
+serviceNowKnowledgeArticleConfiguration_includeAttachmentFilePatterns = Lens.lens (\ServiceNowKnowledgeArticleConfiguration' {includeAttachmentFilePatterns} -> includeAttachmentFilePatterns) (\s@ServiceNowKnowledgeArticleConfiguration' {} a -> s {includeAttachmentFilePatterns = a} :: ServiceNowKnowledgeArticleConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the ServiceNow field that is mapped to the index document
+-- contents field in the Amazon Kendra index.
+serviceNowKnowledgeArticleConfiguration_documentDataFieldName :: Lens.Lens' ServiceNowKnowledgeArticleConfiguration Prelude.Text
+serviceNowKnowledgeArticleConfiguration_documentDataFieldName = Lens.lens (\ServiceNowKnowledgeArticleConfiguration' {documentDataFieldName} -> documentDataFieldName) (\s@ServiceNowKnowledgeArticleConfiguration' {} a -> s {documentDataFieldName = a} :: ServiceNowKnowledgeArticleConfiguration)
+
+instance
+  Data.FromJSON
+    ServiceNowKnowledgeArticleConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "ServiceNowKnowledgeArticleConfiguration"
+      ( \x ->
+          ServiceNowKnowledgeArticleConfiguration'
+            Prelude.<$> (x Data..:? "CrawlAttachments")
+            Prelude.<*> (x Data..:? "DocumentTitleFieldName")
+            Prelude.<*> ( x
+                            Data..:? "ExcludeAttachmentFilePatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "FieldMappings")
+            Prelude.<*> (x Data..:? "FilterQuery")
+            Prelude.<*> ( x
+                            Data..:? "IncludeAttachmentFilePatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "DocumentDataFieldName")
+      )
+
+instance
+  Prelude.Hashable
+    ServiceNowKnowledgeArticleConfiguration
+  where
+  hashWithSalt
+    _salt
+    ServiceNowKnowledgeArticleConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` crawlAttachments
+        `Prelude.hashWithSalt` documentTitleFieldName
+        `Prelude.hashWithSalt` excludeAttachmentFilePatterns
+        `Prelude.hashWithSalt` fieldMappings
+        `Prelude.hashWithSalt` filterQuery
+        `Prelude.hashWithSalt` includeAttachmentFilePatterns
+        `Prelude.hashWithSalt` documentDataFieldName
+
+instance
+  Prelude.NFData
+    ServiceNowKnowledgeArticleConfiguration
+  where
+  rnf ServiceNowKnowledgeArticleConfiguration' {..} =
+    Prelude.rnf crawlAttachments
+      `Prelude.seq` Prelude.rnf documentTitleFieldName
+      `Prelude.seq` Prelude.rnf excludeAttachmentFilePatterns
+      `Prelude.seq` Prelude.rnf fieldMappings
+      `Prelude.seq` Prelude.rnf filterQuery
+      `Prelude.seq` Prelude.rnf includeAttachmentFilePatterns
+      `Prelude.seq` Prelude.rnf documentDataFieldName
+
+instance
+  Data.ToJSON
+    ServiceNowKnowledgeArticleConfiguration
+  where
+  toJSON ServiceNowKnowledgeArticleConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CrawlAttachments" Data..=)
+              Prelude.<$> crawlAttachments,
+            ("DocumentTitleFieldName" Data..=)
+              Prelude.<$> documentTitleFieldName,
+            ("ExcludeAttachmentFilePatterns" Data..=)
+              Prelude.<$> excludeAttachmentFilePatterns,
+            ("FieldMappings" Data..=) Prelude.<$> fieldMappings,
+            ("FilterQuery" Data..=) Prelude.<$> filterQuery,
+            ("IncludeAttachmentFilePatterns" Data..=)
+              Prelude.<$> includeAttachmentFilePatterns,
+            Prelude.Just
+              ( "DocumentDataFieldName"
+                  Data..= documentDataFieldName
+              )
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/ServiceNowServiceCatalogConfiguration.hs b/gen/Amazonka/Kendra/Types/ServiceNowServiceCatalogConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ServiceNowServiceCatalogConfiguration.hs
@@ -0,0 +1,245 @@
+{-# 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.Kendra.Types.ServiceNowServiceCatalogConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ServiceNowServiceCatalogConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DataSourceToIndexFieldMapping
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information for crawling service catalog
+-- items in the ServiceNow site
+--
+-- /See:/ 'newServiceNowServiceCatalogConfiguration' smart constructor.
+data ServiceNowServiceCatalogConfiguration = ServiceNowServiceCatalogConfiguration'
+  { -- | @TRUE@ to index attachments to service catalog items.
+    crawlAttachments :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the ServiceNow field that is mapped to the index document
+    -- title field.
+    documentTitleFieldName :: Prelude.Maybe Prelude.Text,
+    -- | A list of regular expression patterns to exclude certain attachments of
+    -- catalogs in your ServiceNow. Item that match the patterns are excluded
+    -- from the index. Items that don\'t match the patterns are included in the
+    -- index. If an item matches both an inclusion and exclusion pattern, the
+    -- exclusion pattern takes precedence and the item isn\'t included in the
+    -- index.
+    --
+    -- The regex is applied to the file name of the attachment.
+    excludeAttachmentFilePatterns :: Prelude.Maybe [Prelude.Text],
+    -- | Maps attributes or field names of catalogs to Amazon Kendra index field
+    -- names. To create custom fields, use the @UpdateIndex@ API before you map
+    -- to ServiceNow fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The ServiceNow data source field names must exist in your ServiceNow
+    -- custom metadata.
+    fieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | A list of regular expression patterns to include certain attachments of
+    -- catalogs in your ServiceNow. Item that match the patterns are included
+    -- in the index. Items that don\'t match the patterns are excluded from the
+    -- index. If an item matches both an inclusion and exclusion pattern, the
+    -- exclusion pattern takes precedence and the item isn\'t included in the
+    -- index.
+    --
+    -- The regex is applied to the file name of the attachment.
+    includeAttachmentFilePatterns :: Prelude.Maybe [Prelude.Text],
+    -- | The name of the ServiceNow field that is mapped to the index document
+    -- contents field in the Amazon Kendra index.
+    documentDataFieldName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ServiceNowServiceCatalogConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'crawlAttachments', 'serviceNowServiceCatalogConfiguration_crawlAttachments' - @TRUE@ to index attachments to service catalog items.
+--
+-- 'documentTitleFieldName', 'serviceNowServiceCatalogConfiguration_documentTitleFieldName' - The name of the ServiceNow field that is mapped to the index document
+-- title field.
+--
+-- 'excludeAttachmentFilePatterns', 'serviceNowServiceCatalogConfiguration_excludeAttachmentFilePatterns' - A list of regular expression patterns to exclude certain attachments of
+-- catalogs in your ServiceNow. Item that match the patterns are excluded
+-- from the index. Items that don\'t match the patterns are included in the
+-- index. If an item matches both an inclusion and exclusion pattern, the
+-- exclusion pattern takes precedence and the item isn\'t included in the
+-- index.
+--
+-- The regex is applied to the file name of the attachment.
+--
+-- 'fieldMappings', 'serviceNowServiceCatalogConfiguration_fieldMappings' - Maps attributes or field names of catalogs to Amazon Kendra index field
+-- names. To create custom fields, use the @UpdateIndex@ API before you map
+-- to ServiceNow fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The ServiceNow data source field names must exist in your ServiceNow
+-- custom metadata.
+--
+-- 'includeAttachmentFilePatterns', 'serviceNowServiceCatalogConfiguration_includeAttachmentFilePatterns' - A list of regular expression patterns to include certain attachments of
+-- catalogs in your ServiceNow. Item that match the patterns are included
+-- in the index. Items that don\'t match the patterns are excluded from the
+-- index. If an item matches both an inclusion and exclusion pattern, the
+-- exclusion pattern takes precedence and the item isn\'t included in the
+-- index.
+--
+-- The regex is applied to the file name of the attachment.
+--
+-- 'documentDataFieldName', 'serviceNowServiceCatalogConfiguration_documentDataFieldName' - The name of the ServiceNow field that is mapped to the index document
+-- contents field in the Amazon Kendra index.
+newServiceNowServiceCatalogConfiguration ::
+  -- | 'documentDataFieldName'
+  Prelude.Text ->
+  ServiceNowServiceCatalogConfiguration
+newServiceNowServiceCatalogConfiguration
+  pDocumentDataFieldName_ =
+    ServiceNowServiceCatalogConfiguration'
+      { crawlAttachments =
+          Prelude.Nothing,
+        documentTitleFieldName =
+          Prelude.Nothing,
+        excludeAttachmentFilePatterns =
+          Prelude.Nothing,
+        fieldMappings = Prelude.Nothing,
+        includeAttachmentFilePatterns =
+          Prelude.Nothing,
+        documentDataFieldName =
+          pDocumentDataFieldName_
+      }
+
+-- | @TRUE@ to index attachments to service catalog items.
+serviceNowServiceCatalogConfiguration_crawlAttachments :: Lens.Lens' ServiceNowServiceCatalogConfiguration (Prelude.Maybe Prelude.Bool)
+serviceNowServiceCatalogConfiguration_crawlAttachments = Lens.lens (\ServiceNowServiceCatalogConfiguration' {crawlAttachments} -> crawlAttachments) (\s@ServiceNowServiceCatalogConfiguration' {} a -> s {crawlAttachments = a} :: ServiceNowServiceCatalogConfiguration)
+
+-- | The name of the ServiceNow field that is mapped to the index document
+-- title field.
+serviceNowServiceCatalogConfiguration_documentTitleFieldName :: Lens.Lens' ServiceNowServiceCatalogConfiguration (Prelude.Maybe Prelude.Text)
+serviceNowServiceCatalogConfiguration_documentTitleFieldName = Lens.lens (\ServiceNowServiceCatalogConfiguration' {documentTitleFieldName} -> documentTitleFieldName) (\s@ServiceNowServiceCatalogConfiguration' {} a -> s {documentTitleFieldName = a} :: ServiceNowServiceCatalogConfiguration)
+
+-- | A list of regular expression patterns to exclude certain attachments of
+-- catalogs in your ServiceNow. Item that match the patterns are excluded
+-- from the index. Items that don\'t match the patterns are included in the
+-- index. If an item matches both an inclusion and exclusion pattern, the
+-- exclusion pattern takes precedence and the item isn\'t included in the
+-- index.
+--
+-- The regex is applied to the file name of the attachment.
+serviceNowServiceCatalogConfiguration_excludeAttachmentFilePatterns :: Lens.Lens' ServiceNowServiceCatalogConfiguration (Prelude.Maybe [Prelude.Text])
+serviceNowServiceCatalogConfiguration_excludeAttachmentFilePatterns = Lens.lens (\ServiceNowServiceCatalogConfiguration' {excludeAttachmentFilePatterns} -> excludeAttachmentFilePatterns) (\s@ServiceNowServiceCatalogConfiguration' {} a -> s {excludeAttachmentFilePatterns = a} :: ServiceNowServiceCatalogConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Maps attributes or field names of catalogs to Amazon Kendra index field
+-- names. To create custom fields, use the @UpdateIndex@ API before you map
+-- to ServiceNow fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The ServiceNow data source field names must exist in your ServiceNow
+-- custom metadata.
+serviceNowServiceCatalogConfiguration_fieldMappings :: Lens.Lens' ServiceNowServiceCatalogConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+serviceNowServiceCatalogConfiguration_fieldMappings = Lens.lens (\ServiceNowServiceCatalogConfiguration' {fieldMappings} -> fieldMappings) (\s@ServiceNowServiceCatalogConfiguration' {} a -> s {fieldMappings = a} :: ServiceNowServiceCatalogConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of regular expression patterns to include certain attachments of
+-- catalogs in your ServiceNow. Item that match the patterns are included
+-- in the index. Items that don\'t match the patterns are excluded from the
+-- index. If an item matches both an inclusion and exclusion pattern, the
+-- exclusion pattern takes precedence and the item isn\'t included in the
+-- index.
+--
+-- The regex is applied to the file name of the attachment.
+serviceNowServiceCatalogConfiguration_includeAttachmentFilePatterns :: Lens.Lens' ServiceNowServiceCatalogConfiguration (Prelude.Maybe [Prelude.Text])
+serviceNowServiceCatalogConfiguration_includeAttachmentFilePatterns = Lens.lens (\ServiceNowServiceCatalogConfiguration' {includeAttachmentFilePatterns} -> includeAttachmentFilePatterns) (\s@ServiceNowServiceCatalogConfiguration' {} a -> s {includeAttachmentFilePatterns = a} :: ServiceNowServiceCatalogConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the ServiceNow field that is mapped to the index document
+-- contents field in the Amazon Kendra index.
+serviceNowServiceCatalogConfiguration_documentDataFieldName :: Lens.Lens' ServiceNowServiceCatalogConfiguration Prelude.Text
+serviceNowServiceCatalogConfiguration_documentDataFieldName = Lens.lens (\ServiceNowServiceCatalogConfiguration' {documentDataFieldName} -> documentDataFieldName) (\s@ServiceNowServiceCatalogConfiguration' {} a -> s {documentDataFieldName = a} :: ServiceNowServiceCatalogConfiguration)
+
+instance
+  Data.FromJSON
+    ServiceNowServiceCatalogConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "ServiceNowServiceCatalogConfiguration"
+      ( \x ->
+          ServiceNowServiceCatalogConfiguration'
+            Prelude.<$> (x Data..:? "CrawlAttachments")
+            Prelude.<*> (x Data..:? "DocumentTitleFieldName")
+            Prelude.<*> ( x
+                            Data..:? "ExcludeAttachmentFilePatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "FieldMappings")
+            Prelude.<*> ( x
+                            Data..:? "IncludeAttachmentFilePatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "DocumentDataFieldName")
+      )
+
+instance
+  Prelude.Hashable
+    ServiceNowServiceCatalogConfiguration
+  where
+  hashWithSalt
+    _salt
+    ServiceNowServiceCatalogConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` crawlAttachments
+        `Prelude.hashWithSalt` documentTitleFieldName
+        `Prelude.hashWithSalt` excludeAttachmentFilePatterns
+        `Prelude.hashWithSalt` fieldMappings
+        `Prelude.hashWithSalt` includeAttachmentFilePatterns
+        `Prelude.hashWithSalt` documentDataFieldName
+
+instance
+  Prelude.NFData
+    ServiceNowServiceCatalogConfiguration
+  where
+  rnf ServiceNowServiceCatalogConfiguration' {..} =
+    Prelude.rnf crawlAttachments
+      `Prelude.seq` Prelude.rnf documentTitleFieldName
+      `Prelude.seq` Prelude.rnf excludeAttachmentFilePatterns
+      `Prelude.seq` Prelude.rnf fieldMappings
+      `Prelude.seq` Prelude.rnf includeAttachmentFilePatterns
+      `Prelude.seq` Prelude.rnf documentDataFieldName
+
+instance
+  Data.ToJSON
+    ServiceNowServiceCatalogConfiguration
+  where
+  toJSON ServiceNowServiceCatalogConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CrawlAttachments" Data..=)
+              Prelude.<$> crawlAttachments,
+            ("DocumentTitleFieldName" Data..=)
+              Prelude.<$> documentTitleFieldName,
+            ("ExcludeAttachmentFilePatterns" Data..=)
+              Prelude.<$> excludeAttachmentFilePatterns,
+            ("FieldMappings" Data..=) Prelude.<$> fieldMappings,
+            ("IncludeAttachmentFilePatterns" Data..=)
+              Prelude.<$> includeAttachmentFilePatterns,
+            Prelude.Just
+              ( "DocumentDataFieldName"
+                  Data..= documentDataFieldName
+              )
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/SharePointConfiguration.hs b/gen/Amazonka/Kendra/Types/SharePointConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/SharePointConfiguration.hs
@@ -0,0 +1,474 @@
+{-# 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.Kendra.Types.SharePointConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.SharePointConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DataSourceToIndexFieldMapping
+import Amazonka.Kendra.Types.DataSourceVpcConfiguration
+import Amazonka.Kendra.Types.ProxyConfiguration
+import Amazonka.Kendra.Types.S3Path
+import Amazonka.Kendra.Types.SharePointOnlineAuthenticationType
+import Amazonka.Kendra.Types.SharePointVersion
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information to connect to Microsoft
+-- SharePoint as your data source.
+--
+-- /See:/ 'newSharePointConfiguration' smart constructor.
+data SharePointConfiguration = SharePointConfiguration'
+  { -- | Whether you want to connect to SharePoint using basic authentication of
+    -- user name and password, or OAuth authentication of user name, password,
+    -- client ID, and client secret. You can use OAuth authentication for
+    -- SharePoint Online.
+    authenticationType :: Prelude.Maybe SharePointOnlineAuthenticationType,
+    -- | @TRUE@ to index document attachments.
+    crawlAttachments :: Prelude.Maybe Prelude.Bool,
+    -- | @TRUE@ to disable local groups information.
+    disableLocalGroups :: Prelude.Maybe Prelude.Bool,
+    -- | The Microsoft SharePoint attribute field that contains the title of the
+    -- document.
+    documentTitleFieldName :: Prelude.Maybe Prelude.Text,
+    -- | A list of regular expression patterns to exclude certain documents in
+    -- your SharePoint. Documents that match the patterns are excluded from the
+    -- index. Documents that don\'t match the patterns are included in the
+    -- index. If a document matches both an inclusion and exclusion pattern,
+    -- the exclusion pattern takes precedence and the document isn\'t included
+    -- in the index.
+    --
+    -- The regex applies to the display URL of the SharePoint document.
+    exclusionPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | A list of @DataSourceToIndexFieldMapping@ objects that map SharePoint
+    -- data source attributes or field names to Amazon Kendra index field
+    -- names. To create custom fields, use the @UpdateIndex@ API before you map
+    -- to SharePoint fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The SharePoint data source field names must exist in your SharePoint
+    -- custom metadata.
+    fieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | A list of regular expression patterns to include certain documents in
+    -- your SharePoint. Documents that match the patterns are included in the
+    -- index. Documents that don\'t match the patterns are excluded from the
+    -- index. If a document matches both an inclusion and exclusion pattern,
+    -- the exclusion pattern takes precedence and the document isn\'t included
+    -- in the index.
+    --
+    -- The regex applies to the display URL of the SharePoint document.
+    inclusionPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | Configuration information to connect to your Microsoft SharePoint site
+    -- URLs via instance via a web proxy. You can use this option for
+    -- SharePoint Server.
+    --
+    -- You must provide the website host name and port number. For example, the
+    -- host name of /https:\/\/a.example.com\/page1.html/ is \"a.example.com\"
+    -- and the port is 443, the standard port for HTTPS.
+    --
+    -- Web proxy credentials are optional and you can use them to connect to a
+    -- web proxy server that requires basic authentication of user name and
+    -- password. To store web proxy credentials, you use a secret in Secrets
+    -- Manager.
+    --
+    -- It is recommended that you follow best security practices when
+    -- configuring your web proxy. This includes setting up throttling, setting
+    -- up logging and monitoring, and applying security patches on a regular
+    -- basis. If you use your web proxy with multiple data sources, sync jobs
+    -- that occur at the same time could strain the load on your proxy. It is
+    -- recommended you prepare your proxy beforehand for any security and load
+    -- requirements.
+    proxyConfiguration :: Prelude.Maybe ProxyConfiguration,
+    -- | The path to the SSL certificate stored in an Amazon S3 bucket. You use
+    -- this to connect to SharePoint Server if you require a secure SSL
+    -- connection.
+    --
+    -- You can simply generate a self-signed X509 certificate on any computer
+    -- using OpenSSL. For an example of using OpenSSL to create an X509
+    -- certificate, see
+    -- <https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/configuring-https-ssl.html Create and sign an X509 certificate>.
+    sslCertificateS3Path :: Prelude.Maybe S3Path,
+    -- | @TRUE@ to use the SharePoint change log to determine which documents
+    -- require updating in the index. Depending on the change log\'s size, it
+    -- may take longer for Amazon Kendra to use the change log than to scan all
+    -- of your documents in SharePoint.
+    useChangeLog :: Prelude.Maybe Prelude.Bool,
+    -- | Configuration information for an Amazon Virtual Private Cloud to connect
+    -- to your Microsoft SharePoint. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+    vpcConfiguration :: Prelude.Maybe DataSourceVpcConfiguration,
+    -- | The version of Microsoft SharePoint that you use.
+    sharePointVersion :: SharePointVersion,
+    -- | The Microsoft SharePoint site URLs for the documents you want to index.
+    urls :: Prelude.NonEmpty Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of an Secrets Manager secret that
+    -- contains the user name and password required to connect to the
+    -- SharePoint instance. If you use SharePoint Server, you also need to
+    -- provide the sever domain name as part of the credentials. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/data-source-sharepoint.html Using a Microsoft SharePoint Data Source>.
+    --
+    -- You can also provide OAuth authentication credentials of user name,
+    -- password, client ID, and client secret. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/data-source-sharepoint.html Using a SharePoint data source>.
+    secretArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SharePointConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'authenticationType', 'sharePointConfiguration_authenticationType' - Whether you want to connect to SharePoint using basic authentication of
+-- user name and password, or OAuth authentication of user name, password,
+-- client ID, and client secret. You can use OAuth authentication for
+-- SharePoint Online.
+--
+-- 'crawlAttachments', 'sharePointConfiguration_crawlAttachments' - @TRUE@ to index document attachments.
+--
+-- 'disableLocalGroups', 'sharePointConfiguration_disableLocalGroups' - @TRUE@ to disable local groups information.
+--
+-- 'documentTitleFieldName', 'sharePointConfiguration_documentTitleFieldName' - The Microsoft SharePoint attribute field that contains the title of the
+-- document.
+--
+-- 'exclusionPatterns', 'sharePointConfiguration_exclusionPatterns' - A list of regular expression patterns to exclude certain documents in
+-- your SharePoint. Documents that match the patterns are excluded from the
+-- index. Documents that don\'t match the patterns are included in the
+-- index. If a document matches both an inclusion and exclusion pattern,
+-- the exclusion pattern takes precedence and the document isn\'t included
+-- in the index.
+--
+-- The regex applies to the display URL of the SharePoint document.
+--
+-- 'fieldMappings', 'sharePointConfiguration_fieldMappings' - A list of @DataSourceToIndexFieldMapping@ objects that map SharePoint
+-- data source attributes or field names to Amazon Kendra index field
+-- names. To create custom fields, use the @UpdateIndex@ API before you map
+-- to SharePoint fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The SharePoint data source field names must exist in your SharePoint
+-- custom metadata.
+--
+-- 'inclusionPatterns', 'sharePointConfiguration_inclusionPatterns' - A list of regular expression patterns to include certain documents in
+-- your SharePoint. Documents that match the patterns are included in the
+-- index. Documents that don\'t match the patterns are excluded from the
+-- index. If a document matches both an inclusion and exclusion pattern,
+-- the exclusion pattern takes precedence and the document isn\'t included
+-- in the index.
+--
+-- The regex applies to the display URL of the SharePoint document.
+--
+-- 'proxyConfiguration', 'sharePointConfiguration_proxyConfiguration' - Configuration information to connect to your Microsoft SharePoint site
+-- URLs via instance via a web proxy. You can use this option for
+-- SharePoint Server.
+--
+-- You must provide the website host name and port number. For example, the
+-- host name of /https:\/\/a.example.com\/page1.html/ is \"a.example.com\"
+-- and the port is 443, the standard port for HTTPS.
+--
+-- Web proxy credentials are optional and you can use them to connect to a
+-- web proxy server that requires basic authentication of user name and
+-- password. To store web proxy credentials, you use a secret in Secrets
+-- Manager.
+--
+-- It is recommended that you follow best security practices when
+-- configuring your web proxy. This includes setting up throttling, setting
+-- up logging and monitoring, and applying security patches on a regular
+-- basis. If you use your web proxy with multiple data sources, sync jobs
+-- that occur at the same time could strain the load on your proxy. It is
+-- recommended you prepare your proxy beforehand for any security and load
+-- requirements.
+--
+-- 'sslCertificateS3Path', 'sharePointConfiguration_sslCertificateS3Path' - The path to the SSL certificate stored in an Amazon S3 bucket. You use
+-- this to connect to SharePoint Server if you require a secure SSL
+-- connection.
+--
+-- You can simply generate a self-signed X509 certificate on any computer
+-- using OpenSSL. For an example of using OpenSSL to create an X509
+-- certificate, see
+-- <https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/configuring-https-ssl.html Create and sign an X509 certificate>.
+--
+-- 'useChangeLog', 'sharePointConfiguration_useChangeLog' - @TRUE@ to use the SharePoint change log to determine which documents
+-- require updating in the index. Depending on the change log\'s size, it
+-- may take longer for Amazon Kendra to use the change log than to scan all
+-- of your documents in SharePoint.
+--
+-- 'vpcConfiguration', 'sharePointConfiguration_vpcConfiguration' - Configuration information for an Amazon Virtual Private Cloud to connect
+-- to your Microsoft SharePoint. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+--
+-- 'sharePointVersion', 'sharePointConfiguration_sharePointVersion' - The version of Microsoft SharePoint that you use.
+--
+-- 'urls', 'sharePointConfiguration_urls' - The Microsoft SharePoint site URLs for the documents you want to index.
+--
+-- 'secretArn', 'sharePointConfiguration_secretArn' - The Amazon Resource Name (ARN) of an Secrets Manager secret that
+-- contains the user name and password required to connect to the
+-- SharePoint instance. If you use SharePoint Server, you also need to
+-- provide the sever domain name as part of the credentials. For more
+-- information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/data-source-sharepoint.html Using a Microsoft SharePoint Data Source>.
+--
+-- You can also provide OAuth authentication credentials of user name,
+-- password, client ID, and client secret. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/data-source-sharepoint.html Using a SharePoint data source>.
+newSharePointConfiguration ::
+  -- | 'sharePointVersion'
+  SharePointVersion ->
+  -- | 'urls'
+  Prelude.NonEmpty Prelude.Text ->
+  -- | 'secretArn'
+  Prelude.Text ->
+  SharePointConfiguration
+newSharePointConfiguration
+  pSharePointVersion_
+  pUrls_
+  pSecretArn_ =
+    SharePointConfiguration'
+      { authenticationType =
+          Prelude.Nothing,
+        crawlAttachments = Prelude.Nothing,
+        disableLocalGroups = Prelude.Nothing,
+        documentTitleFieldName = Prelude.Nothing,
+        exclusionPatterns = Prelude.Nothing,
+        fieldMappings = Prelude.Nothing,
+        inclusionPatterns = Prelude.Nothing,
+        proxyConfiguration = Prelude.Nothing,
+        sslCertificateS3Path = Prelude.Nothing,
+        useChangeLog = Prelude.Nothing,
+        vpcConfiguration = Prelude.Nothing,
+        sharePointVersion = pSharePointVersion_,
+        urls = Lens.coerced Lens.# pUrls_,
+        secretArn = pSecretArn_
+      }
+
+-- | Whether you want to connect to SharePoint using basic authentication of
+-- user name and password, or OAuth authentication of user name, password,
+-- client ID, and client secret. You can use OAuth authentication for
+-- SharePoint Online.
+sharePointConfiguration_authenticationType :: Lens.Lens' SharePointConfiguration (Prelude.Maybe SharePointOnlineAuthenticationType)
+sharePointConfiguration_authenticationType = Lens.lens (\SharePointConfiguration' {authenticationType} -> authenticationType) (\s@SharePointConfiguration' {} a -> s {authenticationType = a} :: SharePointConfiguration)
+
+-- | @TRUE@ to index document attachments.
+sharePointConfiguration_crawlAttachments :: Lens.Lens' SharePointConfiguration (Prelude.Maybe Prelude.Bool)
+sharePointConfiguration_crawlAttachments = Lens.lens (\SharePointConfiguration' {crawlAttachments} -> crawlAttachments) (\s@SharePointConfiguration' {} a -> s {crawlAttachments = a} :: SharePointConfiguration)
+
+-- | @TRUE@ to disable local groups information.
+sharePointConfiguration_disableLocalGroups :: Lens.Lens' SharePointConfiguration (Prelude.Maybe Prelude.Bool)
+sharePointConfiguration_disableLocalGroups = Lens.lens (\SharePointConfiguration' {disableLocalGroups} -> disableLocalGroups) (\s@SharePointConfiguration' {} a -> s {disableLocalGroups = a} :: SharePointConfiguration)
+
+-- | The Microsoft SharePoint attribute field that contains the title of the
+-- document.
+sharePointConfiguration_documentTitleFieldName :: Lens.Lens' SharePointConfiguration (Prelude.Maybe Prelude.Text)
+sharePointConfiguration_documentTitleFieldName = Lens.lens (\SharePointConfiguration' {documentTitleFieldName} -> documentTitleFieldName) (\s@SharePointConfiguration' {} a -> s {documentTitleFieldName = a} :: SharePointConfiguration)
+
+-- | A list of regular expression patterns to exclude certain documents in
+-- your SharePoint. Documents that match the patterns are excluded from the
+-- index. Documents that don\'t match the patterns are included in the
+-- index. If a document matches both an inclusion and exclusion pattern,
+-- the exclusion pattern takes precedence and the document isn\'t included
+-- in the index.
+--
+-- The regex applies to the display URL of the SharePoint document.
+sharePointConfiguration_exclusionPatterns :: Lens.Lens' SharePointConfiguration (Prelude.Maybe [Prelude.Text])
+sharePointConfiguration_exclusionPatterns = Lens.lens (\SharePointConfiguration' {exclusionPatterns} -> exclusionPatterns) (\s@SharePointConfiguration' {} a -> s {exclusionPatterns = a} :: SharePointConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of @DataSourceToIndexFieldMapping@ objects that map SharePoint
+-- data source attributes or field names to Amazon Kendra index field
+-- names. To create custom fields, use the @UpdateIndex@ API before you map
+-- to SharePoint fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The SharePoint data source field names must exist in your SharePoint
+-- custom metadata.
+sharePointConfiguration_fieldMappings :: Lens.Lens' SharePointConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+sharePointConfiguration_fieldMappings = Lens.lens (\SharePointConfiguration' {fieldMappings} -> fieldMappings) (\s@SharePointConfiguration' {} a -> s {fieldMappings = a} :: SharePointConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of regular expression patterns to include certain documents in
+-- your SharePoint. Documents that match the patterns are included in the
+-- index. Documents that don\'t match the patterns are excluded from the
+-- index. If a document matches both an inclusion and exclusion pattern,
+-- the exclusion pattern takes precedence and the document isn\'t included
+-- in the index.
+--
+-- The regex applies to the display URL of the SharePoint document.
+sharePointConfiguration_inclusionPatterns :: Lens.Lens' SharePointConfiguration (Prelude.Maybe [Prelude.Text])
+sharePointConfiguration_inclusionPatterns = Lens.lens (\SharePointConfiguration' {inclusionPatterns} -> inclusionPatterns) (\s@SharePointConfiguration' {} a -> s {inclusionPatterns = a} :: SharePointConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Configuration information to connect to your Microsoft SharePoint site
+-- URLs via instance via a web proxy. You can use this option for
+-- SharePoint Server.
+--
+-- You must provide the website host name and port number. For example, the
+-- host name of /https:\/\/a.example.com\/page1.html/ is \"a.example.com\"
+-- and the port is 443, the standard port for HTTPS.
+--
+-- Web proxy credentials are optional and you can use them to connect to a
+-- web proxy server that requires basic authentication of user name and
+-- password. To store web proxy credentials, you use a secret in Secrets
+-- Manager.
+--
+-- It is recommended that you follow best security practices when
+-- configuring your web proxy. This includes setting up throttling, setting
+-- up logging and monitoring, and applying security patches on a regular
+-- basis. If you use your web proxy with multiple data sources, sync jobs
+-- that occur at the same time could strain the load on your proxy. It is
+-- recommended you prepare your proxy beforehand for any security and load
+-- requirements.
+sharePointConfiguration_proxyConfiguration :: Lens.Lens' SharePointConfiguration (Prelude.Maybe ProxyConfiguration)
+sharePointConfiguration_proxyConfiguration = Lens.lens (\SharePointConfiguration' {proxyConfiguration} -> proxyConfiguration) (\s@SharePointConfiguration' {} a -> s {proxyConfiguration = a} :: SharePointConfiguration)
+
+-- | The path to the SSL certificate stored in an Amazon S3 bucket. You use
+-- this to connect to SharePoint Server if you require a secure SSL
+-- connection.
+--
+-- You can simply generate a self-signed X509 certificate on any computer
+-- using OpenSSL. For an example of using OpenSSL to create an X509
+-- certificate, see
+-- <https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/configuring-https-ssl.html Create and sign an X509 certificate>.
+sharePointConfiguration_sslCertificateS3Path :: Lens.Lens' SharePointConfiguration (Prelude.Maybe S3Path)
+sharePointConfiguration_sslCertificateS3Path = Lens.lens (\SharePointConfiguration' {sslCertificateS3Path} -> sslCertificateS3Path) (\s@SharePointConfiguration' {} a -> s {sslCertificateS3Path = a} :: SharePointConfiguration)
+
+-- | @TRUE@ to use the SharePoint change log to determine which documents
+-- require updating in the index. Depending on the change log\'s size, it
+-- may take longer for Amazon Kendra to use the change log than to scan all
+-- of your documents in SharePoint.
+sharePointConfiguration_useChangeLog :: Lens.Lens' SharePointConfiguration (Prelude.Maybe Prelude.Bool)
+sharePointConfiguration_useChangeLog = Lens.lens (\SharePointConfiguration' {useChangeLog} -> useChangeLog) (\s@SharePointConfiguration' {} a -> s {useChangeLog = a} :: SharePointConfiguration)
+
+-- | Configuration information for an Amazon Virtual Private Cloud to connect
+-- to your Microsoft SharePoint. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+sharePointConfiguration_vpcConfiguration :: Lens.Lens' SharePointConfiguration (Prelude.Maybe DataSourceVpcConfiguration)
+sharePointConfiguration_vpcConfiguration = Lens.lens (\SharePointConfiguration' {vpcConfiguration} -> vpcConfiguration) (\s@SharePointConfiguration' {} a -> s {vpcConfiguration = a} :: SharePointConfiguration)
+
+-- | The version of Microsoft SharePoint that you use.
+sharePointConfiguration_sharePointVersion :: Lens.Lens' SharePointConfiguration SharePointVersion
+sharePointConfiguration_sharePointVersion = Lens.lens (\SharePointConfiguration' {sharePointVersion} -> sharePointVersion) (\s@SharePointConfiguration' {} a -> s {sharePointVersion = a} :: SharePointConfiguration)
+
+-- | The Microsoft SharePoint site URLs for the documents you want to index.
+sharePointConfiguration_urls :: Lens.Lens' SharePointConfiguration (Prelude.NonEmpty Prelude.Text)
+sharePointConfiguration_urls = Lens.lens (\SharePointConfiguration' {urls} -> urls) (\s@SharePointConfiguration' {} a -> s {urls = a} :: SharePointConfiguration) Prelude.. Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of an Secrets Manager secret that
+-- contains the user name and password required to connect to the
+-- SharePoint instance. If you use SharePoint Server, you also need to
+-- provide the sever domain name as part of the credentials. For more
+-- information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/data-source-sharepoint.html Using a Microsoft SharePoint Data Source>.
+--
+-- You can also provide OAuth authentication credentials of user name,
+-- password, client ID, and client secret. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/data-source-sharepoint.html Using a SharePoint data source>.
+sharePointConfiguration_secretArn :: Lens.Lens' SharePointConfiguration Prelude.Text
+sharePointConfiguration_secretArn = Lens.lens (\SharePointConfiguration' {secretArn} -> secretArn) (\s@SharePointConfiguration' {} a -> s {secretArn = a} :: SharePointConfiguration)
+
+instance Data.FromJSON SharePointConfiguration where
+  parseJSON =
+    Data.withObject
+      "SharePointConfiguration"
+      ( \x ->
+          SharePointConfiguration'
+            Prelude.<$> (x Data..:? "AuthenticationType")
+            Prelude.<*> (x Data..:? "CrawlAttachments")
+            Prelude.<*> (x Data..:? "DisableLocalGroups")
+            Prelude.<*> (x Data..:? "DocumentTitleFieldName")
+            Prelude.<*> ( x
+                            Data..:? "ExclusionPatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "FieldMappings")
+            Prelude.<*> ( x
+                            Data..:? "InclusionPatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "ProxyConfiguration")
+            Prelude.<*> (x Data..:? "SslCertificateS3Path")
+            Prelude.<*> (x Data..:? "UseChangeLog")
+            Prelude.<*> (x Data..:? "VpcConfiguration")
+            Prelude.<*> (x Data..: "SharePointVersion")
+            Prelude.<*> (x Data..: "Urls")
+            Prelude.<*> (x Data..: "SecretArn")
+      )
+
+instance Prelude.Hashable SharePointConfiguration where
+  hashWithSalt _salt SharePointConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` authenticationType
+      `Prelude.hashWithSalt` crawlAttachments
+      `Prelude.hashWithSalt` disableLocalGroups
+      `Prelude.hashWithSalt` documentTitleFieldName
+      `Prelude.hashWithSalt` exclusionPatterns
+      `Prelude.hashWithSalt` fieldMappings
+      `Prelude.hashWithSalt` inclusionPatterns
+      `Prelude.hashWithSalt` proxyConfiguration
+      `Prelude.hashWithSalt` sslCertificateS3Path
+      `Prelude.hashWithSalt` useChangeLog
+      `Prelude.hashWithSalt` vpcConfiguration
+      `Prelude.hashWithSalt` sharePointVersion
+      `Prelude.hashWithSalt` urls
+      `Prelude.hashWithSalt` secretArn
+
+instance Prelude.NFData SharePointConfiguration where
+  rnf SharePointConfiguration' {..} =
+    Prelude.rnf authenticationType
+      `Prelude.seq` Prelude.rnf crawlAttachments
+      `Prelude.seq` Prelude.rnf disableLocalGroups
+      `Prelude.seq` Prelude.rnf documentTitleFieldName
+      `Prelude.seq` Prelude.rnf exclusionPatterns
+      `Prelude.seq` Prelude.rnf fieldMappings
+      `Prelude.seq` Prelude.rnf inclusionPatterns
+      `Prelude.seq` Prelude.rnf proxyConfiguration
+      `Prelude.seq` Prelude.rnf sslCertificateS3Path
+      `Prelude.seq` Prelude.rnf useChangeLog
+      `Prelude.seq` Prelude.rnf vpcConfiguration
+      `Prelude.seq` Prelude.rnf sharePointVersion
+      `Prelude.seq` Prelude.rnf urls
+      `Prelude.seq` Prelude.rnf secretArn
+
+instance Data.ToJSON SharePointConfiguration where
+  toJSON SharePointConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AuthenticationType" Data..=)
+              Prelude.<$> authenticationType,
+            ("CrawlAttachments" Data..=)
+              Prelude.<$> crawlAttachments,
+            ("DisableLocalGroups" Data..=)
+              Prelude.<$> disableLocalGroups,
+            ("DocumentTitleFieldName" Data..=)
+              Prelude.<$> documentTitleFieldName,
+            ("ExclusionPatterns" Data..=)
+              Prelude.<$> exclusionPatterns,
+            ("FieldMappings" Data..=) Prelude.<$> fieldMappings,
+            ("InclusionPatterns" Data..=)
+              Prelude.<$> inclusionPatterns,
+            ("ProxyConfiguration" Data..=)
+              Prelude.<$> proxyConfiguration,
+            ("SslCertificateS3Path" Data..=)
+              Prelude.<$> sslCertificateS3Path,
+            ("UseChangeLog" Data..=) Prelude.<$> useChangeLog,
+            ("VpcConfiguration" Data..=)
+              Prelude.<$> vpcConfiguration,
+            Prelude.Just
+              ("SharePointVersion" Data..= sharePointVersion),
+            Prelude.Just ("Urls" Data..= urls),
+            Prelude.Just ("SecretArn" Data..= secretArn)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/SharePointOnlineAuthenticationType.hs b/gen/Amazonka/Kendra/Types/SharePointOnlineAuthenticationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/SharePointOnlineAuthenticationType.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.Kendra.Types.SharePointOnlineAuthenticationType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.SharePointOnlineAuthenticationType
+  ( SharePointOnlineAuthenticationType
+      ( ..,
+        SharePointOnlineAuthenticationType_HTTP_BASIC,
+        SharePointOnlineAuthenticationType_OAUTH2
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SharePointOnlineAuthenticationType = SharePointOnlineAuthenticationType'
+  { fromSharePointOnlineAuthenticationType ::
+      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 SharePointOnlineAuthenticationType_HTTP_BASIC :: SharePointOnlineAuthenticationType
+pattern SharePointOnlineAuthenticationType_HTTP_BASIC = SharePointOnlineAuthenticationType' "HTTP_BASIC"
+
+pattern SharePointOnlineAuthenticationType_OAUTH2 :: SharePointOnlineAuthenticationType
+pattern SharePointOnlineAuthenticationType_OAUTH2 = SharePointOnlineAuthenticationType' "OAUTH2"
+
+{-# COMPLETE
+  SharePointOnlineAuthenticationType_HTTP_BASIC,
+  SharePointOnlineAuthenticationType_OAUTH2,
+  SharePointOnlineAuthenticationType'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/SharePointVersion.hs b/gen/Amazonka/Kendra/Types/SharePointVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/SharePointVersion.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.Kendra.Types.SharePointVersion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.SharePointVersion
+  ( SharePointVersion
+      ( ..,
+        SharePointVersion_SHAREPOINT_2013,
+        SharePointVersion_SHAREPOINT_2016,
+        SharePointVersion_SHAREPOINT_2019,
+        SharePointVersion_SHAREPOINT_ONLINE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SharePointVersion = SharePointVersion'
+  { fromSharePointVersion ::
+      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 SharePointVersion_SHAREPOINT_2013 :: SharePointVersion
+pattern SharePointVersion_SHAREPOINT_2013 = SharePointVersion' "SHAREPOINT_2013"
+
+pattern SharePointVersion_SHAREPOINT_2016 :: SharePointVersion
+pattern SharePointVersion_SHAREPOINT_2016 = SharePointVersion' "SHAREPOINT_2016"
+
+pattern SharePointVersion_SHAREPOINT_2019 :: SharePointVersion
+pattern SharePointVersion_SHAREPOINT_2019 = SharePointVersion' "SHAREPOINT_2019"
+
+pattern SharePointVersion_SHAREPOINT_ONLINE :: SharePointVersion
+pattern SharePointVersion_SHAREPOINT_ONLINE = SharePointVersion' "SHAREPOINT_ONLINE"
+
+{-# COMPLETE
+  SharePointVersion_SHAREPOINT_2013,
+  SharePointVersion_SHAREPOINT_2016,
+  SharePointVersion_SHAREPOINT_2019,
+  SharePointVersion_SHAREPOINT_ONLINE,
+  SharePointVersion'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/SiteMapsConfiguration.hs b/gen/Amazonka/Kendra/Types/SiteMapsConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/SiteMapsConfiguration.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.Kendra.Types.SiteMapsConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.SiteMapsConfiguration 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 configuration information for the sitemap URLs to crawl.
+--
+-- /When selecting websites to index, you must adhere to the
+-- <https://aws.amazon.com/aup/ Amazon Acceptable Use Policy> and all other
+-- Amazon terms. Remember that you must only use Amazon Kendra Web Crawler
+-- to index your own webpages, or webpages that you have authorization to
+-- index./
+--
+-- /See:/ 'newSiteMapsConfiguration' smart constructor.
+data SiteMapsConfiguration = SiteMapsConfiguration'
+  { -- | The list of sitemap URLs of the websites you want to crawl.
+    --
+    -- The list can include a maximum of three sitemap URLs.
+    siteMaps :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SiteMapsConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'siteMaps', 'siteMapsConfiguration_siteMaps' - The list of sitemap URLs of the websites you want to crawl.
+--
+-- The list can include a maximum of three sitemap URLs.
+newSiteMapsConfiguration ::
+  SiteMapsConfiguration
+newSiteMapsConfiguration =
+  SiteMapsConfiguration' {siteMaps = Prelude.mempty}
+
+-- | The list of sitemap URLs of the websites you want to crawl.
+--
+-- The list can include a maximum of three sitemap URLs.
+siteMapsConfiguration_siteMaps :: Lens.Lens' SiteMapsConfiguration [Prelude.Text]
+siteMapsConfiguration_siteMaps = Lens.lens (\SiteMapsConfiguration' {siteMaps} -> siteMaps) (\s@SiteMapsConfiguration' {} a -> s {siteMaps = a} :: SiteMapsConfiguration) Prelude.. Lens.coerced
+
+instance Data.FromJSON SiteMapsConfiguration where
+  parseJSON =
+    Data.withObject
+      "SiteMapsConfiguration"
+      ( \x ->
+          SiteMapsConfiguration'
+            Prelude.<$> (x Data..:? "SiteMaps" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable SiteMapsConfiguration where
+  hashWithSalt _salt SiteMapsConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` siteMaps
+
+instance Prelude.NFData SiteMapsConfiguration where
+  rnf SiteMapsConfiguration' {..} = Prelude.rnf siteMaps
+
+instance Data.ToJSON SiteMapsConfiguration where
+  toJSON SiteMapsConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("SiteMaps" Data..= siteMaps)]
+      )
diff --git a/gen/Amazonka/Kendra/Types/SlackConfiguration.hs b/gen/Amazonka/Kendra/Types/SlackConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/SlackConfiguration.hs
@@ -0,0 +1,439 @@
+{-# 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.Kendra.Types.SlackConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.SlackConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DataSourceToIndexFieldMapping
+import Amazonka.Kendra.Types.DataSourceVpcConfiguration
+import Amazonka.Kendra.Types.SlackEntity
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information to connect to Slack as your data
+-- source.
+--
+-- /See:/ 'newSlackConfiguration' smart constructor.
+data SlackConfiguration = SlackConfiguration'
+  { -- | @TRUE@ to index bot messages from your Slack workspace team.
+    crawlBotMessage :: Prelude.Maybe Prelude.Bool,
+    -- | @TRUE@ to exclude archived messages to index from your Slack workspace
+    -- team.
+    excludeArchived :: Prelude.Maybe Prelude.Bool,
+    -- | A list of regular expression patterns to exclude certain attached files
+    -- in your Slack workspace team. Files that match the patterns are excluded
+    -- from the index. Files that don’t match the patterns are included in the
+    -- index. If a file matches both an inclusion and exclusion pattern, the
+    -- exclusion pattern takes precedence and the file isn\'t included in the
+    -- index.
+    exclusionPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | A list of @DataSourceToIndexFieldMapping@ objects that map Slack data
+    -- source attributes or field names to Amazon Kendra index field names. To
+    -- create custom fields, use the @UpdateIndex@ API before you map to Slack
+    -- fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The Slack data source field names must exist in your Slack custom
+    -- metadata.
+    fieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | A list of regular expression patterns to include certain attached files
+    -- in your Slack workspace team. Files that match the patterns are included
+    -- in the index. Files that don\'t match the patterns are excluded from the
+    -- index. If a file matches both an inclusion and exclusion pattern, the
+    -- exclusion pattern takes precedence and the file isn\'t included in the
+    -- index.
+    inclusionPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | The number of hours for change log to look back from when you last
+    -- synchronized your data. You can look back up to 7 days or 168 hours.
+    --
+    -- Change log updates your index only if new content was added since you
+    -- last synced your data. Updated or deleted content from before you last
+    -- synced does not get updated in your index. To capture updated or deleted
+    -- content before you last synced, set the @LookBackPeriod@ to the number
+    -- of hours you want change log to look back.
+    lookBackPeriod :: Prelude.Maybe Prelude.Natural,
+    -- | The list of private channel names from your Slack workspace team. You
+    -- use this if you want to index specific private channels, not all private
+    -- channels. You can also use regular expression patterns to filter private
+    -- channels.
+    privateChannelFilter :: Prelude.Maybe [Prelude.Text],
+    -- | The list of public channel names to index from your Slack workspace
+    -- team. You use this if you want to index specific public channels, not
+    -- all public channels. You can also use regular expression patterns to
+    -- filter public channels.
+    publicChannelFilter :: Prelude.Maybe [Prelude.Text],
+    -- | @TRUE@ to use the Slack change log to determine which documents require
+    -- updating in the index. Depending on the Slack change log\'s size, it may
+    -- take longer for Amazon Kendra to use the change log than to scan all of
+    -- your documents in Slack.
+    useChangeLog :: Prelude.Maybe Prelude.Bool,
+    -- | Configuration information for an Amazon Virtual Private Cloud to connect
+    -- to your Slack. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+    vpcConfiguration :: Prelude.Maybe DataSourceVpcConfiguration,
+    -- | The identifier of the team in the Slack workspace. For example,
+    -- /T0123456789/.
+    --
+    -- You can find your team ID in the URL of the main page of your Slack
+    -- workspace. When you log in to Slack via a browser, you are directed to
+    -- the URL of the main page. For example,
+    -- /https:\/\/app.slack.com\/client\/__T0123456789__\/.../.
+    teamId :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of an Secrets Manager secret that
+    -- contains the key-value pairs required to connect to your Slack workspace
+    -- team. The secret must contain a JSON structure with the following keys:
+    --
+    -- -   slackToken—The user or bot token created in Slack. For more
+    --     information on creating a token in Slack, see
+    --     <https://docs.aws.amazon.com/kendra/latest/dg/data-source-slack.html#slack-authentication Authentication for a Slack data source>.
+    secretArn :: Prelude.Text,
+    -- | Specify whether to index public channels, private channels, group
+    -- messages, and direct messages. You can specify one or more of these
+    -- options.
+    slackEntityList :: Prelude.NonEmpty SlackEntity,
+    -- | The date to start crawling your data from your Slack workspace team. The
+    -- date must follow this format: @yyyy-mm-dd@.
+    sinceCrawlDate :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SlackConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'crawlBotMessage', 'slackConfiguration_crawlBotMessage' - @TRUE@ to index bot messages from your Slack workspace team.
+--
+-- 'excludeArchived', 'slackConfiguration_excludeArchived' - @TRUE@ to exclude archived messages to index from your Slack workspace
+-- team.
+--
+-- 'exclusionPatterns', 'slackConfiguration_exclusionPatterns' - A list of regular expression patterns to exclude certain attached files
+-- in your Slack workspace team. Files that match the patterns are excluded
+-- from the index. Files that don’t match the patterns are included in the
+-- index. If a file matches both an inclusion and exclusion pattern, the
+-- exclusion pattern takes precedence and the file isn\'t included in the
+-- index.
+--
+-- 'fieldMappings', 'slackConfiguration_fieldMappings' - A list of @DataSourceToIndexFieldMapping@ objects that map Slack data
+-- source attributes or field names to Amazon Kendra index field names. To
+-- create custom fields, use the @UpdateIndex@ API before you map to Slack
+-- fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Slack data source field names must exist in your Slack custom
+-- metadata.
+--
+-- 'inclusionPatterns', 'slackConfiguration_inclusionPatterns' - A list of regular expression patterns to include certain attached files
+-- in your Slack workspace team. Files that match the patterns are included
+-- in the index. Files that don\'t match the patterns are excluded from the
+-- index. If a file matches both an inclusion and exclusion pattern, the
+-- exclusion pattern takes precedence and the file isn\'t included in the
+-- index.
+--
+-- 'lookBackPeriod', 'slackConfiguration_lookBackPeriod' - The number of hours for change log to look back from when you last
+-- synchronized your data. You can look back up to 7 days or 168 hours.
+--
+-- Change log updates your index only if new content was added since you
+-- last synced your data. Updated or deleted content from before you last
+-- synced does not get updated in your index. To capture updated or deleted
+-- content before you last synced, set the @LookBackPeriod@ to the number
+-- of hours you want change log to look back.
+--
+-- 'privateChannelFilter', 'slackConfiguration_privateChannelFilter' - The list of private channel names from your Slack workspace team. You
+-- use this if you want to index specific private channels, not all private
+-- channels. You can also use regular expression patterns to filter private
+-- channels.
+--
+-- 'publicChannelFilter', 'slackConfiguration_publicChannelFilter' - The list of public channel names to index from your Slack workspace
+-- team. You use this if you want to index specific public channels, not
+-- all public channels. You can also use regular expression patterns to
+-- filter public channels.
+--
+-- 'useChangeLog', 'slackConfiguration_useChangeLog' - @TRUE@ to use the Slack change log to determine which documents require
+-- updating in the index. Depending on the Slack change log\'s size, it may
+-- take longer for Amazon Kendra to use the change log than to scan all of
+-- your documents in Slack.
+--
+-- 'vpcConfiguration', 'slackConfiguration_vpcConfiguration' - Configuration information for an Amazon Virtual Private Cloud to connect
+-- to your Slack. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+--
+-- 'teamId', 'slackConfiguration_teamId' - The identifier of the team in the Slack workspace. For example,
+-- /T0123456789/.
+--
+-- You can find your team ID in the URL of the main page of your Slack
+-- workspace. When you log in to Slack via a browser, you are directed to
+-- the URL of the main page. For example,
+-- /https:\/\/app.slack.com\/client\/__T0123456789__\/.../.
+--
+-- 'secretArn', 'slackConfiguration_secretArn' - The Amazon Resource Name (ARN) of an Secrets Manager secret that
+-- contains the key-value pairs required to connect to your Slack workspace
+-- team. The secret must contain a JSON structure with the following keys:
+--
+-- -   slackToken—The user or bot token created in Slack. For more
+--     information on creating a token in Slack, see
+--     <https://docs.aws.amazon.com/kendra/latest/dg/data-source-slack.html#slack-authentication Authentication for a Slack data source>.
+--
+-- 'slackEntityList', 'slackConfiguration_slackEntityList' - Specify whether to index public channels, private channels, group
+-- messages, and direct messages. You can specify one or more of these
+-- options.
+--
+-- 'sinceCrawlDate', 'slackConfiguration_sinceCrawlDate' - The date to start crawling your data from your Slack workspace team. The
+-- date must follow this format: @yyyy-mm-dd@.
+newSlackConfiguration ::
+  -- | 'teamId'
+  Prelude.Text ->
+  -- | 'secretArn'
+  Prelude.Text ->
+  -- | 'slackEntityList'
+  Prelude.NonEmpty SlackEntity ->
+  -- | 'sinceCrawlDate'
+  Prelude.Text ->
+  SlackConfiguration
+newSlackConfiguration
+  pTeamId_
+  pSecretArn_
+  pSlackEntityList_
+  pSinceCrawlDate_ =
+    SlackConfiguration'
+      { crawlBotMessage =
+          Prelude.Nothing,
+        excludeArchived = Prelude.Nothing,
+        exclusionPatterns = Prelude.Nothing,
+        fieldMappings = Prelude.Nothing,
+        inclusionPatterns = Prelude.Nothing,
+        lookBackPeriod = Prelude.Nothing,
+        privateChannelFilter = Prelude.Nothing,
+        publicChannelFilter = Prelude.Nothing,
+        useChangeLog = Prelude.Nothing,
+        vpcConfiguration = Prelude.Nothing,
+        teamId = pTeamId_,
+        secretArn = pSecretArn_,
+        slackEntityList =
+          Lens.coerced Lens.# pSlackEntityList_,
+        sinceCrawlDate = pSinceCrawlDate_
+      }
+
+-- | @TRUE@ to index bot messages from your Slack workspace team.
+slackConfiguration_crawlBotMessage :: Lens.Lens' SlackConfiguration (Prelude.Maybe Prelude.Bool)
+slackConfiguration_crawlBotMessage = Lens.lens (\SlackConfiguration' {crawlBotMessage} -> crawlBotMessage) (\s@SlackConfiguration' {} a -> s {crawlBotMessage = a} :: SlackConfiguration)
+
+-- | @TRUE@ to exclude archived messages to index from your Slack workspace
+-- team.
+slackConfiguration_excludeArchived :: Lens.Lens' SlackConfiguration (Prelude.Maybe Prelude.Bool)
+slackConfiguration_excludeArchived = Lens.lens (\SlackConfiguration' {excludeArchived} -> excludeArchived) (\s@SlackConfiguration' {} a -> s {excludeArchived = a} :: SlackConfiguration)
+
+-- | A list of regular expression patterns to exclude certain attached files
+-- in your Slack workspace team. Files that match the patterns are excluded
+-- from the index. Files that don’t match the patterns are included in the
+-- index. If a file matches both an inclusion and exclusion pattern, the
+-- exclusion pattern takes precedence and the file isn\'t included in the
+-- index.
+slackConfiguration_exclusionPatterns :: Lens.Lens' SlackConfiguration (Prelude.Maybe [Prelude.Text])
+slackConfiguration_exclusionPatterns = Lens.lens (\SlackConfiguration' {exclusionPatterns} -> exclusionPatterns) (\s@SlackConfiguration' {} a -> s {exclusionPatterns = a} :: SlackConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of @DataSourceToIndexFieldMapping@ objects that map Slack data
+-- source attributes or field names to Amazon Kendra index field names. To
+-- create custom fields, use the @UpdateIndex@ API before you map to Slack
+-- fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Slack data source field names must exist in your Slack custom
+-- metadata.
+slackConfiguration_fieldMappings :: Lens.Lens' SlackConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+slackConfiguration_fieldMappings = Lens.lens (\SlackConfiguration' {fieldMappings} -> fieldMappings) (\s@SlackConfiguration' {} a -> s {fieldMappings = a} :: SlackConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of regular expression patterns to include certain attached files
+-- in your Slack workspace team. Files that match the patterns are included
+-- in the index. Files that don\'t match the patterns are excluded from the
+-- index. If a file matches both an inclusion and exclusion pattern, the
+-- exclusion pattern takes precedence and the file isn\'t included in the
+-- index.
+slackConfiguration_inclusionPatterns :: Lens.Lens' SlackConfiguration (Prelude.Maybe [Prelude.Text])
+slackConfiguration_inclusionPatterns = Lens.lens (\SlackConfiguration' {inclusionPatterns} -> inclusionPatterns) (\s@SlackConfiguration' {} a -> s {inclusionPatterns = a} :: SlackConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of hours for change log to look back from when you last
+-- synchronized your data. You can look back up to 7 days or 168 hours.
+--
+-- Change log updates your index only if new content was added since you
+-- last synced your data. Updated or deleted content from before you last
+-- synced does not get updated in your index. To capture updated or deleted
+-- content before you last synced, set the @LookBackPeriod@ to the number
+-- of hours you want change log to look back.
+slackConfiguration_lookBackPeriod :: Lens.Lens' SlackConfiguration (Prelude.Maybe Prelude.Natural)
+slackConfiguration_lookBackPeriod = Lens.lens (\SlackConfiguration' {lookBackPeriod} -> lookBackPeriod) (\s@SlackConfiguration' {} a -> s {lookBackPeriod = a} :: SlackConfiguration)
+
+-- | The list of private channel names from your Slack workspace team. You
+-- use this if you want to index specific private channels, not all private
+-- channels. You can also use regular expression patterns to filter private
+-- channels.
+slackConfiguration_privateChannelFilter :: Lens.Lens' SlackConfiguration (Prelude.Maybe [Prelude.Text])
+slackConfiguration_privateChannelFilter = Lens.lens (\SlackConfiguration' {privateChannelFilter} -> privateChannelFilter) (\s@SlackConfiguration' {} a -> s {privateChannelFilter = a} :: SlackConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The list of public channel names to index from your Slack workspace
+-- team. You use this if you want to index specific public channels, not
+-- all public channels. You can also use regular expression patterns to
+-- filter public channels.
+slackConfiguration_publicChannelFilter :: Lens.Lens' SlackConfiguration (Prelude.Maybe [Prelude.Text])
+slackConfiguration_publicChannelFilter = Lens.lens (\SlackConfiguration' {publicChannelFilter} -> publicChannelFilter) (\s@SlackConfiguration' {} a -> s {publicChannelFilter = a} :: SlackConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | @TRUE@ to use the Slack change log to determine which documents require
+-- updating in the index. Depending on the Slack change log\'s size, it may
+-- take longer for Amazon Kendra to use the change log than to scan all of
+-- your documents in Slack.
+slackConfiguration_useChangeLog :: Lens.Lens' SlackConfiguration (Prelude.Maybe Prelude.Bool)
+slackConfiguration_useChangeLog = Lens.lens (\SlackConfiguration' {useChangeLog} -> useChangeLog) (\s@SlackConfiguration' {} a -> s {useChangeLog = a} :: SlackConfiguration)
+
+-- | Configuration information for an Amazon Virtual Private Cloud to connect
+-- to your Slack. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+slackConfiguration_vpcConfiguration :: Lens.Lens' SlackConfiguration (Prelude.Maybe DataSourceVpcConfiguration)
+slackConfiguration_vpcConfiguration = Lens.lens (\SlackConfiguration' {vpcConfiguration} -> vpcConfiguration) (\s@SlackConfiguration' {} a -> s {vpcConfiguration = a} :: SlackConfiguration)
+
+-- | The identifier of the team in the Slack workspace. For example,
+-- /T0123456789/.
+--
+-- You can find your team ID in the URL of the main page of your Slack
+-- workspace. When you log in to Slack via a browser, you are directed to
+-- the URL of the main page. For example,
+-- /https:\/\/app.slack.com\/client\/__T0123456789__\/.../.
+slackConfiguration_teamId :: Lens.Lens' SlackConfiguration Prelude.Text
+slackConfiguration_teamId = Lens.lens (\SlackConfiguration' {teamId} -> teamId) (\s@SlackConfiguration' {} a -> s {teamId = a} :: SlackConfiguration)
+
+-- | The Amazon Resource Name (ARN) of an Secrets Manager secret that
+-- contains the key-value pairs required to connect to your Slack workspace
+-- team. The secret must contain a JSON structure with the following keys:
+--
+-- -   slackToken—The user or bot token created in Slack. For more
+--     information on creating a token in Slack, see
+--     <https://docs.aws.amazon.com/kendra/latest/dg/data-source-slack.html#slack-authentication Authentication for a Slack data source>.
+slackConfiguration_secretArn :: Lens.Lens' SlackConfiguration Prelude.Text
+slackConfiguration_secretArn = Lens.lens (\SlackConfiguration' {secretArn} -> secretArn) (\s@SlackConfiguration' {} a -> s {secretArn = a} :: SlackConfiguration)
+
+-- | Specify whether to index public channels, private channels, group
+-- messages, and direct messages. You can specify one or more of these
+-- options.
+slackConfiguration_slackEntityList :: Lens.Lens' SlackConfiguration (Prelude.NonEmpty SlackEntity)
+slackConfiguration_slackEntityList = Lens.lens (\SlackConfiguration' {slackEntityList} -> slackEntityList) (\s@SlackConfiguration' {} a -> s {slackEntityList = a} :: SlackConfiguration) Prelude.. Lens.coerced
+
+-- | The date to start crawling your data from your Slack workspace team. The
+-- date must follow this format: @yyyy-mm-dd@.
+slackConfiguration_sinceCrawlDate :: Lens.Lens' SlackConfiguration Prelude.Text
+slackConfiguration_sinceCrawlDate = Lens.lens (\SlackConfiguration' {sinceCrawlDate} -> sinceCrawlDate) (\s@SlackConfiguration' {} a -> s {sinceCrawlDate = a} :: SlackConfiguration)
+
+instance Data.FromJSON SlackConfiguration where
+  parseJSON =
+    Data.withObject
+      "SlackConfiguration"
+      ( \x ->
+          SlackConfiguration'
+            Prelude.<$> (x Data..:? "CrawlBotMessage")
+            Prelude.<*> (x Data..:? "ExcludeArchived")
+            Prelude.<*> ( x
+                            Data..:? "ExclusionPatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "FieldMappings")
+            Prelude.<*> ( x
+                            Data..:? "InclusionPatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "LookBackPeriod")
+            Prelude.<*> ( x
+                            Data..:? "PrivateChannelFilter"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "PublicChannelFilter"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "UseChangeLog")
+            Prelude.<*> (x Data..:? "VpcConfiguration")
+            Prelude.<*> (x Data..: "TeamId")
+            Prelude.<*> (x Data..: "SecretArn")
+            Prelude.<*> (x Data..: "SlackEntityList")
+            Prelude.<*> (x Data..: "SinceCrawlDate")
+      )
+
+instance Prelude.Hashable SlackConfiguration where
+  hashWithSalt _salt SlackConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` crawlBotMessage
+      `Prelude.hashWithSalt` excludeArchived
+      `Prelude.hashWithSalt` exclusionPatterns
+      `Prelude.hashWithSalt` fieldMappings
+      `Prelude.hashWithSalt` inclusionPatterns
+      `Prelude.hashWithSalt` lookBackPeriod
+      `Prelude.hashWithSalt` privateChannelFilter
+      `Prelude.hashWithSalt` publicChannelFilter
+      `Prelude.hashWithSalt` useChangeLog
+      `Prelude.hashWithSalt` vpcConfiguration
+      `Prelude.hashWithSalt` teamId
+      `Prelude.hashWithSalt` secretArn
+      `Prelude.hashWithSalt` slackEntityList
+      `Prelude.hashWithSalt` sinceCrawlDate
+
+instance Prelude.NFData SlackConfiguration where
+  rnf SlackConfiguration' {..} =
+    Prelude.rnf crawlBotMessage
+      `Prelude.seq` Prelude.rnf excludeArchived
+      `Prelude.seq` Prelude.rnf exclusionPatterns
+      `Prelude.seq` Prelude.rnf fieldMappings
+      `Prelude.seq` Prelude.rnf inclusionPatterns
+      `Prelude.seq` Prelude.rnf lookBackPeriod
+      `Prelude.seq` Prelude.rnf privateChannelFilter
+      `Prelude.seq` Prelude.rnf publicChannelFilter
+      `Prelude.seq` Prelude.rnf useChangeLog
+      `Prelude.seq` Prelude.rnf vpcConfiguration
+      `Prelude.seq` Prelude.rnf teamId
+      `Prelude.seq` Prelude.rnf secretArn
+      `Prelude.seq` Prelude.rnf slackEntityList
+      `Prelude.seq` Prelude.rnf sinceCrawlDate
+
+instance Data.ToJSON SlackConfiguration where
+  toJSON SlackConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CrawlBotMessage" Data..=)
+              Prelude.<$> crawlBotMessage,
+            ("ExcludeArchived" Data..=)
+              Prelude.<$> excludeArchived,
+            ("ExclusionPatterns" Data..=)
+              Prelude.<$> exclusionPatterns,
+            ("FieldMappings" Data..=) Prelude.<$> fieldMappings,
+            ("InclusionPatterns" Data..=)
+              Prelude.<$> inclusionPatterns,
+            ("LookBackPeriod" Data..=)
+              Prelude.<$> lookBackPeriod,
+            ("PrivateChannelFilter" Data..=)
+              Prelude.<$> privateChannelFilter,
+            ("PublicChannelFilter" Data..=)
+              Prelude.<$> publicChannelFilter,
+            ("UseChangeLog" Data..=) Prelude.<$> useChangeLog,
+            ("VpcConfiguration" Data..=)
+              Prelude.<$> vpcConfiguration,
+            Prelude.Just ("TeamId" Data..= teamId),
+            Prelude.Just ("SecretArn" Data..= secretArn),
+            Prelude.Just
+              ("SlackEntityList" Data..= slackEntityList),
+            Prelude.Just
+              ("SinceCrawlDate" Data..= sinceCrawlDate)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/SlackEntity.hs b/gen/Amazonka/Kendra/Types/SlackEntity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/SlackEntity.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.Kendra.Types.SlackEntity
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.SlackEntity
+  ( SlackEntity
+      ( ..,
+        SlackEntity_DIRECT_MESSAGE,
+        SlackEntity_GROUP_MESSAGE,
+        SlackEntity_PRIVATE_CHANNEL,
+        SlackEntity_PUBLIC_CHANNEL
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SlackEntity = SlackEntity'
+  { fromSlackEntity ::
+      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 SlackEntity_DIRECT_MESSAGE :: SlackEntity
+pattern SlackEntity_DIRECT_MESSAGE = SlackEntity' "DIRECT_MESSAGE"
+
+pattern SlackEntity_GROUP_MESSAGE :: SlackEntity
+pattern SlackEntity_GROUP_MESSAGE = SlackEntity' "GROUP_MESSAGE"
+
+pattern SlackEntity_PRIVATE_CHANNEL :: SlackEntity
+pattern SlackEntity_PRIVATE_CHANNEL = SlackEntity' "PRIVATE_CHANNEL"
+
+pattern SlackEntity_PUBLIC_CHANNEL :: SlackEntity
+pattern SlackEntity_PUBLIC_CHANNEL = SlackEntity' "PUBLIC_CHANNEL"
+
+{-# COMPLETE
+  SlackEntity_DIRECT_MESSAGE,
+  SlackEntity_GROUP_MESSAGE,
+  SlackEntity_PRIVATE_CHANNEL,
+  SlackEntity_PUBLIC_CHANNEL,
+  SlackEntity'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/SortOrder.hs b/gen/Amazonka/Kendra/Types/SortOrder.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/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.Kendra.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.Kendra.Types.SortOrder
+  ( SortOrder
+      ( ..,
+        SortOrder_ASC,
+        SortOrder_DESC
+      ),
+  )
+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_ASC :: SortOrder
+pattern SortOrder_ASC = SortOrder' "ASC"
+
+pattern SortOrder_DESC :: SortOrder
+pattern SortOrder_DESC = SortOrder' "DESC"
+
+{-# COMPLETE
+  SortOrder_ASC,
+  SortOrder_DESC,
+  SortOrder'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/SortingConfiguration.hs b/gen/Amazonka/Kendra/Types/SortingConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/SortingConfiguration.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.Kendra.Types.SortingConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.SortingConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.SortOrder
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the document attribute to use to sort the response to a Amazon
+-- Kendra query. You can specify a single attribute for sorting. The
+-- attribute must have the @Sortable@ flag set to @true@, otherwise Amazon
+-- Kendra returns an exception.
+--
+-- You can sort attributes of the following types.
+--
+-- -   Date value
+--
+-- -   Long value
+--
+-- -   String value
+--
+-- You can\'t sort attributes of the following type.
+--
+-- -   String list value
+--
+-- /See:/ 'newSortingConfiguration' smart constructor.
+data SortingConfiguration = SortingConfiguration'
+  { -- | The name of the document attribute used to sort the response. You can
+    -- use any field that has the @Sortable@ flag set to true.
+    --
+    -- You can also sort by any of the following built-in attributes:
+    --
+    -- -   _category
+    --
+    -- -   _created_at
+    --
+    -- -   _last_updated_at
+    --
+    -- -   _version
+    --
+    -- -   _view_count
+    documentAttributeKey :: Prelude.Text,
+    -- | The order that the results should be returned in. In case of ties, the
+    -- relevance assigned to the result by Amazon Kendra is used as the
+    -- tie-breaker.
+    sortOrder :: SortOrder
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SortingConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'documentAttributeKey', 'sortingConfiguration_documentAttributeKey' - The name of the document attribute used to sort the response. You can
+-- use any field that has the @Sortable@ flag set to true.
+--
+-- You can also sort by any of the following built-in attributes:
+--
+-- -   _category
+--
+-- -   _created_at
+--
+-- -   _last_updated_at
+--
+-- -   _version
+--
+-- -   _view_count
+--
+-- 'sortOrder', 'sortingConfiguration_sortOrder' - The order that the results should be returned in. In case of ties, the
+-- relevance assigned to the result by Amazon Kendra is used as the
+-- tie-breaker.
+newSortingConfiguration ::
+  -- | 'documentAttributeKey'
+  Prelude.Text ->
+  -- | 'sortOrder'
+  SortOrder ->
+  SortingConfiguration
+newSortingConfiguration
+  pDocumentAttributeKey_
+  pSortOrder_ =
+    SortingConfiguration'
+      { documentAttributeKey =
+          pDocumentAttributeKey_,
+        sortOrder = pSortOrder_
+      }
+
+-- | The name of the document attribute used to sort the response. You can
+-- use any field that has the @Sortable@ flag set to true.
+--
+-- You can also sort by any of the following built-in attributes:
+--
+-- -   _category
+--
+-- -   _created_at
+--
+-- -   _last_updated_at
+--
+-- -   _version
+--
+-- -   _view_count
+sortingConfiguration_documentAttributeKey :: Lens.Lens' SortingConfiguration Prelude.Text
+sortingConfiguration_documentAttributeKey = Lens.lens (\SortingConfiguration' {documentAttributeKey} -> documentAttributeKey) (\s@SortingConfiguration' {} a -> s {documentAttributeKey = a} :: SortingConfiguration)
+
+-- | The order that the results should be returned in. In case of ties, the
+-- relevance assigned to the result by Amazon Kendra is used as the
+-- tie-breaker.
+sortingConfiguration_sortOrder :: Lens.Lens' SortingConfiguration SortOrder
+sortingConfiguration_sortOrder = Lens.lens (\SortingConfiguration' {sortOrder} -> sortOrder) (\s@SortingConfiguration' {} a -> s {sortOrder = a} :: SortingConfiguration)
+
+instance Prelude.Hashable SortingConfiguration where
+  hashWithSalt _salt SortingConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` documentAttributeKey
+      `Prelude.hashWithSalt` sortOrder
+
+instance Prelude.NFData SortingConfiguration where
+  rnf SortingConfiguration' {..} =
+    Prelude.rnf documentAttributeKey
+      `Prelude.seq` Prelude.rnf sortOrder
+
+instance Data.ToJSON SortingConfiguration where
+  toJSON SortingConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "DocumentAttributeKey"
+                  Data..= documentAttributeKey
+              ),
+            Prelude.Just ("SortOrder" Data..= sortOrder)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/SpellCorrectedQuery.hs b/gen/Amazonka/Kendra/Types/SpellCorrectedQuery.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/SpellCorrectedQuery.hs
@@ -0,0 +1,85 @@
+{-# 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.Kendra.Types.SpellCorrectedQuery
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.SpellCorrectedQuery where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.Correction
+import qualified Amazonka.Prelude as Prelude
+
+-- | A query with suggested spell corrections.
+--
+-- /See:/ 'newSpellCorrectedQuery' smart constructor.
+data SpellCorrectedQuery = SpellCorrectedQuery'
+  { -- | The corrected misspelled word or words in a query.
+    corrections :: Prelude.Maybe [Correction],
+    -- | The query with the suggested spell corrections.
+    suggestedQueryText :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SpellCorrectedQuery' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'corrections', 'spellCorrectedQuery_corrections' - The corrected misspelled word or words in a query.
+--
+-- 'suggestedQueryText', 'spellCorrectedQuery_suggestedQueryText' - The query with the suggested spell corrections.
+newSpellCorrectedQuery ::
+  SpellCorrectedQuery
+newSpellCorrectedQuery =
+  SpellCorrectedQuery'
+    { corrections = Prelude.Nothing,
+      suggestedQueryText = Prelude.Nothing
+    }
+
+-- | The corrected misspelled word or words in a query.
+spellCorrectedQuery_corrections :: Lens.Lens' SpellCorrectedQuery (Prelude.Maybe [Correction])
+spellCorrectedQuery_corrections = Lens.lens (\SpellCorrectedQuery' {corrections} -> corrections) (\s@SpellCorrectedQuery' {} a -> s {corrections = a} :: SpellCorrectedQuery) Prelude.. Lens.mapping Lens.coerced
+
+-- | The query with the suggested spell corrections.
+spellCorrectedQuery_suggestedQueryText :: Lens.Lens' SpellCorrectedQuery (Prelude.Maybe Prelude.Text)
+spellCorrectedQuery_suggestedQueryText = Lens.lens (\SpellCorrectedQuery' {suggestedQueryText} -> suggestedQueryText) (\s@SpellCorrectedQuery' {} a -> s {suggestedQueryText = a} :: SpellCorrectedQuery)
+
+instance Data.FromJSON SpellCorrectedQuery where
+  parseJSON =
+    Data.withObject
+      "SpellCorrectedQuery"
+      ( \x ->
+          SpellCorrectedQuery'
+            Prelude.<$> (x Data..:? "Corrections" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "SuggestedQueryText")
+      )
+
+instance Prelude.Hashable SpellCorrectedQuery where
+  hashWithSalt _salt SpellCorrectedQuery' {..} =
+    _salt
+      `Prelude.hashWithSalt` corrections
+      `Prelude.hashWithSalt` suggestedQueryText
+
+instance Prelude.NFData SpellCorrectedQuery where
+  rnf SpellCorrectedQuery' {..} =
+    Prelude.rnf corrections
+      `Prelude.seq` Prelude.rnf suggestedQueryText
diff --git a/gen/Amazonka/Kendra/Types/SpellCorrectionConfiguration.hs b/gen/Amazonka/Kendra/Types/SpellCorrectionConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/SpellCorrectionConfiguration.hs
@@ -0,0 +1,91 @@
+{-# 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.Kendra.Types.SpellCorrectionConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.SpellCorrectionConfiguration 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 configuration information for suggested query spell
+-- corrections.
+--
+-- Suggested spell corrections are based on words that appear in your
+-- indexed documents and how closely a corrected word matches a misspelled
+-- word.
+--
+-- This feature is designed with certain defaults or limits. For
+-- information on the current limits and how to request more support for
+-- some limits, see the
+-- <https://docs.aws.amazon.com/kendra/latest/dg/query-spell-check.html Spell Checker documentation>.
+--
+-- /See:/ 'newSpellCorrectionConfiguration' smart constructor.
+data SpellCorrectionConfiguration = SpellCorrectionConfiguration'
+  { -- | @TRUE@ to suggest spell corrections for queries.
+    includeQuerySpellCheckSuggestions :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SpellCorrectionConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'includeQuerySpellCheckSuggestions', 'spellCorrectionConfiguration_includeQuerySpellCheckSuggestions' - @TRUE@ to suggest spell corrections for queries.
+newSpellCorrectionConfiguration ::
+  -- | 'includeQuerySpellCheckSuggestions'
+  Prelude.Bool ->
+  SpellCorrectionConfiguration
+newSpellCorrectionConfiguration
+  pIncludeQuerySpellCheckSuggestions_ =
+    SpellCorrectionConfiguration'
+      { includeQuerySpellCheckSuggestions =
+          pIncludeQuerySpellCheckSuggestions_
+      }
+
+-- | @TRUE@ to suggest spell corrections for queries.
+spellCorrectionConfiguration_includeQuerySpellCheckSuggestions :: Lens.Lens' SpellCorrectionConfiguration Prelude.Bool
+spellCorrectionConfiguration_includeQuerySpellCheckSuggestions = Lens.lens (\SpellCorrectionConfiguration' {includeQuerySpellCheckSuggestions} -> includeQuerySpellCheckSuggestions) (\s@SpellCorrectionConfiguration' {} a -> s {includeQuerySpellCheckSuggestions = a} :: SpellCorrectionConfiguration)
+
+instance
+  Prelude.Hashable
+    SpellCorrectionConfiguration
+  where
+  hashWithSalt _salt SpellCorrectionConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` includeQuerySpellCheckSuggestions
+
+instance Prelude.NFData SpellCorrectionConfiguration where
+  rnf SpellCorrectionConfiguration' {..} =
+    Prelude.rnf includeQuerySpellCheckSuggestions
+
+instance Data.ToJSON SpellCorrectionConfiguration where
+  toJSON SpellCorrectionConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "IncludeQuerySpellCheckSuggestions"
+                  Data..= includeQuerySpellCheckSuggestions
+              )
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/SqlConfiguration.hs b/gen/Amazonka/Kendra/Types/SqlConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/SqlConfiguration.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.Kendra.Types.SqlConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.SqlConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.QueryIdentifiersEnclosingOption
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information to use a SQL database.
+--
+-- /See:/ 'newSqlConfiguration' smart constructor.
+data SqlConfiguration = SqlConfiguration'
+  { -- | Determines whether Amazon Kendra encloses SQL identifiers for tables and
+    -- column names in double quotes (\") when making a database query.
+    --
+    -- By default, Amazon Kendra passes SQL identifiers the way that they are
+    -- entered into the data source configuration. It does not change the case
+    -- of identifiers or enclose them in quotes.
+    --
+    -- PostgreSQL internally converts uppercase characters to lower case
+    -- characters in identifiers unless they are quoted. Choosing this option
+    -- encloses identifiers in quotes so that PostgreSQL does not convert the
+    -- character\'s case.
+    --
+    -- For MySQL databases, you must enable the @ansi_quotes@ option when you
+    -- set this field to @DOUBLE_QUOTES@.
+    queryIdentifiersEnclosingOption :: Prelude.Maybe QueryIdentifiersEnclosingOption
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SqlConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'queryIdentifiersEnclosingOption', 'sqlConfiguration_queryIdentifiersEnclosingOption' - Determines whether Amazon Kendra encloses SQL identifiers for tables and
+-- column names in double quotes (\") when making a database query.
+--
+-- By default, Amazon Kendra passes SQL identifiers the way that they are
+-- entered into the data source configuration. It does not change the case
+-- of identifiers or enclose them in quotes.
+--
+-- PostgreSQL internally converts uppercase characters to lower case
+-- characters in identifiers unless they are quoted. Choosing this option
+-- encloses identifiers in quotes so that PostgreSQL does not convert the
+-- character\'s case.
+--
+-- For MySQL databases, you must enable the @ansi_quotes@ option when you
+-- set this field to @DOUBLE_QUOTES@.
+newSqlConfiguration ::
+  SqlConfiguration
+newSqlConfiguration =
+  SqlConfiguration'
+    { queryIdentifiersEnclosingOption =
+        Prelude.Nothing
+    }
+
+-- | Determines whether Amazon Kendra encloses SQL identifiers for tables and
+-- column names in double quotes (\") when making a database query.
+--
+-- By default, Amazon Kendra passes SQL identifiers the way that they are
+-- entered into the data source configuration. It does not change the case
+-- of identifiers or enclose them in quotes.
+--
+-- PostgreSQL internally converts uppercase characters to lower case
+-- characters in identifiers unless they are quoted. Choosing this option
+-- encloses identifiers in quotes so that PostgreSQL does not convert the
+-- character\'s case.
+--
+-- For MySQL databases, you must enable the @ansi_quotes@ option when you
+-- set this field to @DOUBLE_QUOTES@.
+sqlConfiguration_queryIdentifiersEnclosingOption :: Lens.Lens' SqlConfiguration (Prelude.Maybe QueryIdentifiersEnclosingOption)
+sqlConfiguration_queryIdentifiersEnclosingOption = Lens.lens (\SqlConfiguration' {queryIdentifiersEnclosingOption} -> queryIdentifiersEnclosingOption) (\s@SqlConfiguration' {} a -> s {queryIdentifiersEnclosingOption = a} :: SqlConfiguration)
+
+instance Data.FromJSON SqlConfiguration where
+  parseJSON =
+    Data.withObject
+      "SqlConfiguration"
+      ( \x ->
+          SqlConfiguration'
+            Prelude.<$> (x Data..:? "QueryIdentifiersEnclosingOption")
+      )
+
+instance Prelude.Hashable SqlConfiguration where
+  hashWithSalt _salt SqlConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` queryIdentifiersEnclosingOption
+
+instance Prelude.NFData SqlConfiguration where
+  rnf SqlConfiguration' {..} =
+    Prelude.rnf queryIdentifiersEnclosingOption
+
+instance Data.ToJSON SqlConfiguration where
+  toJSON SqlConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("QueryIdentifiersEnclosingOption" Data..=)
+              Prelude.<$> queryIdentifiersEnclosingOption
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/Status.hs b/gen/Amazonka/Kendra/Types/Status.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/Status.hs
@@ -0,0 +1,125 @@
+{-# 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.Kendra.Types.Status
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.Status where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DocumentStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about the status of documents submitted for
+-- indexing.
+--
+-- /See:/ 'newStatus' smart constructor.
+data Status = Status'
+  { -- | The identifier of the document.
+    documentId :: Prelude.Maybe Prelude.Text,
+    -- | The current status of a document.
+    --
+    -- If the document was submitted for deletion, the status is @NOT_FOUND@
+    -- after the document is deleted.
+    documentStatus :: Prelude.Maybe DocumentStatus,
+    -- | Indicates the source of the error.
+    failureCode :: Prelude.Maybe Prelude.Text,
+    -- | Provides detailed information about why the document couldn\'t be
+    -- indexed. Use this information to correct the error before you resubmit
+    -- the document for indexing.
+    failureReason :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Status' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'documentId', 'status_documentId' - The identifier of the document.
+--
+-- 'documentStatus', 'status_documentStatus' - The current status of a document.
+--
+-- If the document was submitted for deletion, the status is @NOT_FOUND@
+-- after the document is deleted.
+--
+-- 'failureCode', 'status_failureCode' - Indicates the source of the error.
+--
+-- 'failureReason', 'status_failureReason' - Provides detailed information about why the document couldn\'t be
+-- indexed. Use this information to correct the error before you resubmit
+-- the document for indexing.
+newStatus ::
+  Status
+newStatus =
+  Status'
+    { documentId = Prelude.Nothing,
+      documentStatus = Prelude.Nothing,
+      failureCode = Prelude.Nothing,
+      failureReason = Prelude.Nothing
+    }
+
+-- | The identifier of the document.
+status_documentId :: Lens.Lens' Status (Prelude.Maybe Prelude.Text)
+status_documentId = Lens.lens (\Status' {documentId} -> documentId) (\s@Status' {} a -> s {documentId = a} :: Status)
+
+-- | The current status of a document.
+--
+-- If the document was submitted for deletion, the status is @NOT_FOUND@
+-- after the document is deleted.
+status_documentStatus :: Lens.Lens' Status (Prelude.Maybe DocumentStatus)
+status_documentStatus = Lens.lens (\Status' {documentStatus} -> documentStatus) (\s@Status' {} a -> s {documentStatus = a} :: Status)
+
+-- | Indicates the source of the error.
+status_failureCode :: Lens.Lens' Status (Prelude.Maybe Prelude.Text)
+status_failureCode = Lens.lens (\Status' {failureCode} -> failureCode) (\s@Status' {} a -> s {failureCode = a} :: Status)
+
+-- | Provides detailed information about why the document couldn\'t be
+-- indexed. Use this information to correct the error before you resubmit
+-- the document for indexing.
+status_failureReason :: Lens.Lens' Status (Prelude.Maybe Prelude.Text)
+status_failureReason = Lens.lens (\Status' {failureReason} -> failureReason) (\s@Status' {} a -> s {failureReason = a} :: Status)
+
+instance Data.FromJSON Status where
+  parseJSON =
+    Data.withObject
+      "Status"
+      ( \x ->
+          Status'
+            Prelude.<$> (x Data..:? "DocumentId")
+            Prelude.<*> (x Data..:? "DocumentStatus")
+            Prelude.<*> (x Data..:? "FailureCode")
+            Prelude.<*> (x Data..:? "FailureReason")
+      )
+
+instance Prelude.Hashable Status where
+  hashWithSalt _salt Status' {..} =
+    _salt
+      `Prelude.hashWithSalt` documentId
+      `Prelude.hashWithSalt` documentStatus
+      `Prelude.hashWithSalt` failureCode
+      `Prelude.hashWithSalt` failureReason
+
+instance Prelude.NFData Status where
+  rnf Status' {..} =
+    Prelude.rnf documentId
+      `Prelude.seq` Prelude.rnf documentStatus
+      `Prelude.seq` Prelude.rnf failureCode
+      `Prelude.seq` Prelude.rnf failureReason
diff --git a/gen/Amazonka/Kendra/Types/Suggestion.hs b/gen/Amazonka/Kendra/Types/Suggestion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/Suggestion.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.Kendra.Types.Suggestion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.Suggestion where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.SuggestionValue
+import qualified Amazonka.Prelude as Prelude
+
+-- | A single query suggestion.
+--
+-- /See:/ 'newSuggestion' smart constructor.
+data Suggestion = Suggestion'
+  { -- | The UUID (universally unique identifier) of a single query suggestion.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The value for the UUID (universally unique identifier) of a single query
+    -- suggestion.
+    --
+    -- The value is the text string of a suggestion.
+    value :: Prelude.Maybe SuggestionValue
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Suggestion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'suggestion_id' - The UUID (universally unique identifier) of a single query suggestion.
+--
+-- 'value', 'suggestion_value' - The value for the UUID (universally unique identifier) of a single query
+-- suggestion.
+--
+-- The value is the text string of a suggestion.
+newSuggestion ::
+  Suggestion
+newSuggestion =
+  Suggestion'
+    { id = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | The UUID (universally unique identifier) of a single query suggestion.
+suggestion_id :: Lens.Lens' Suggestion (Prelude.Maybe Prelude.Text)
+suggestion_id = Lens.lens (\Suggestion' {id} -> id) (\s@Suggestion' {} a -> s {id = a} :: Suggestion)
+
+-- | The value for the UUID (universally unique identifier) of a single query
+-- suggestion.
+--
+-- The value is the text string of a suggestion.
+suggestion_value :: Lens.Lens' Suggestion (Prelude.Maybe SuggestionValue)
+suggestion_value = Lens.lens (\Suggestion' {value} -> value) (\s@Suggestion' {} a -> s {value = a} :: Suggestion)
+
+instance Data.FromJSON Suggestion where
+  parseJSON =
+    Data.withObject
+      "Suggestion"
+      ( \x ->
+          Suggestion'
+            Prelude.<$> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "Value")
+      )
+
+instance Prelude.Hashable Suggestion where
+  hashWithSalt _salt Suggestion' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData Suggestion where
+  rnf Suggestion' {..} =
+    Prelude.rnf id `Prelude.seq` Prelude.rnf value
diff --git a/gen/Amazonka/Kendra/Types/SuggestionHighlight.hs b/gen/Amazonka/Kendra/Types/SuggestionHighlight.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/SuggestionHighlight.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.Kendra.Types.SuggestionHighlight
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.SuggestionHighlight 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 text highlights for a single query suggestion.
+--
+-- /See:/ 'newSuggestionHighlight' smart constructor.
+data SuggestionHighlight = SuggestionHighlight'
+  { -- | The zero-based location in the response string where the highlight
+    -- starts.
+    beginOffset :: Prelude.Maybe Prelude.Int,
+    -- | The zero-based location in the response string where the highlight ends.
+    endOffset :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SuggestionHighlight' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'beginOffset', 'suggestionHighlight_beginOffset' - The zero-based location in the response string where the highlight
+-- starts.
+--
+-- 'endOffset', 'suggestionHighlight_endOffset' - The zero-based location in the response string where the highlight ends.
+newSuggestionHighlight ::
+  SuggestionHighlight
+newSuggestionHighlight =
+  SuggestionHighlight'
+    { beginOffset = Prelude.Nothing,
+      endOffset = Prelude.Nothing
+    }
+
+-- | The zero-based location in the response string where the highlight
+-- starts.
+suggestionHighlight_beginOffset :: Lens.Lens' SuggestionHighlight (Prelude.Maybe Prelude.Int)
+suggestionHighlight_beginOffset = Lens.lens (\SuggestionHighlight' {beginOffset} -> beginOffset) (\s@SuggestionHighlight' {} a -> s {beginOffset = a} :: SuggestionHighlight)
+
+-- | The zero-based location in the response string where the highlight ends.
+suggestionHighlight_endOffset :: Lens.Lens' SuggestionHighlight (Prelude.Maybe Prelude.Int)
+suggestionHighlight_endOffset = Lens.lens (\SuggestionHighlight' {endOffset} -> endOffset) (\s@SuggestionHighlight' {} a -> s {endOffset = a} :: SuggestionHighlight)
+
+instance Data.FromJSON SuggestionHighlight where
+  parseJSON =
+    Data.withObject
+      "SuggestionHighlight"
+      ( \x ->
+          SuggestionHighlight'
+            Prelude.<$> (x Data..:? "BeginOffset")
+            Prelude.<*> (x Data..:? "EndOffset")
+      )
+
+instance Prelude.Hashable SuggestionHighlight where
+  hashWithSalt _salt SuggestionHighlight' {..} =
+    _salt
+      `Prelude.hashWithSalt` beginOffset
+      `Prelude.hashWithSalt` endOffset
+
+instance Prelude.NFData SuggestionHighlight where
+  rnf SuggestionHighlight' {..} =
+    Prelude.rnf beginOffset
+      `Prelude.seq` Prelude.rnf endOffset
diff --git a/gen/Amazonka/Kendra/Types/SuggestionTextWithHighlights.hs b/gen/Amazonka/Kendra/Types/SuggestionTextWithHighlights.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/SuggestionTextWithHighlights.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.Kendra.Types.SuggestionTextWithHighlights
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.SuggestionTextWithHighlights where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.SuggestionHighlight
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides text and information about where to highlight the query
+-- suggestion text.
+--
+-- /See:/ 'newSuggestionTextWithHighlights' smart constructor.
+data SuggestionTextWithHighlights = SuggestionTextWithHighlights'
+  { -- | The beginning and end of the query suggestion text that should be
+    -- highlighted.
+    highlights :: Prelude.Maybe [SuggestionHighlight],
+    -- | The query suggestion text to display to the user.
+    text :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SuggestionTextWithHighlights' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'highlights', 'suggestionTextWithHighlights_highlights' - The beginning and end of the query suggestion text that should be
+-- highlighted.
+--
+-- 'text', 'suggestionTextWithHighlights_text' - The query suggestion text to display to the user.
+newSuggestionTextWithHighlights ::
+  SuggestionTextWithHighlights
+newSuggestionTextWithHighlights =
+  SuggestionTextWithHighlights'
+    { highlights =
+        Prelude.Nothing,
+      text = Prelude.Nothing
+    }
+
+-- | The beginning and end of the query suggestion text that should be
+-- highlighted.
+suggestionTextWithHighlights_highlights :: Lens.Lens' SuggestionTextWithHighlights (Prelude.Maybe [SuggestionHighlight])
+suggestionTextWithHighlights_highlights = Lens.lens (\SuggestionTextWithHighlights' {highlights} -> highlights) (\s@SuggestionTextWithHighlights' {} a -> s {highlights = a} :: SuggestionTextWithHighlights) Prelude.. Lens.mapping Lens.coerced
+
+-- | The query suggestion text to display to the user.
+suggestionTextWithHighlights_text :: Lens.Lens' SuggestionTextWithHighlights (Prelude.Maybe Prelude.Text)
+suggestionTextWithHighlights_text = Lens.lens (\SuggestionTextWithHighlights' {text} -> text) (\s@SuggestionTextWithHighlights' {} a -> s {text = a} :: SuggestionTextWithHighlights)
+
+instance Data.FromJSON SuggestionTextWithHighlights where
+  parseJSON =
+    Data.withObject
+      "SuggestionTextWithHighlights"
+      ( \x ->
+          SuggestionTextWithHighlights'
+            Prelude.<$> (x Data..:? "Highlights" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Text")
+      )
+
+instance
+  Prelude.Hashable
+    SuggestionTextWithHighlights
+  where
+  hashWithSalt _salt SuggestionTextWithHighlights' {..} =
+    _salt
+      `Prelude.hashWithSalt` highlights
+      `Prelude.hashWithSalt` text
+
+instance Prelude.NFData SuggestionTextWithHighlights where
+  rnf SuggestionTextWithHighlights' {..} =
+    Prelude.rnf highlights
+      `Prelude.seq` Prelude.rnf text
diff --git a/gen/Amazonka/Kendra/Types/SuggestionValue.hs b/gen/Amazonka/Kendra/Types/SuggestionValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/SuggestionValue.hs
@@ -0,0 +1,71 @@
+{-# 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.Kendra.Types.SuggestionValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.SuggestionValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.SuggestionTextWithHighlights
+import qualified Amazonka.Prelude as Prelude
+
+-- | The @SuggestionTextWithHighlights@ structure information.
+--
+-- /See:/ 'newSuggestionValue' smart constructor.
+data SuggestionValue = SuggestionValue'
+  { -- | The @SuggestionTextWithHighlights@ structure that contains the query
+    -- suggestion text and highlights.
+    text :: Prelude.Maybe SuggestionTextWithHighlights
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SuggestionValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'suggestionValue_text' - The @SuggestionTextWithHighlights@ structure that contains the query
+-- suggestion text and highlights.
+newSuggestionValue ::
+  SuggestionValue
+newSuggestionValue =
+  SuggestionValue' {text = Prelude.Nothing}
+
+-- | The @SuggestionTextWithHighlights@ structure that contains the query
+-- suggestion text and highlights.
+suggestionValue_text :: Lens.Lens' SuggestionValue (Prelude.Maybe SuggestionTextWithHighlights)
+suggestionValue_text = Lens.lens (\SuggestionValue' {text} -> text) (\s@SuggestionValue' {} a -> s {text = a} :: SuggestionValue)
+
+instance Data.FromJSON SuggestionValue where
+  parseJSON =
+    Data.withObject
+      "SuggestionValue"
+      ( \x ->
+          SuggestionValue' Prelude.<$> (x Data..:? "Text")
+      )
+
+instance Prelude.Hashable SuggestionValue where
+  hashWithSalt _salt SuggestionValue' {..} =
+    _salt `Prelude.hashWithSalt` text
+
+instance Prelude.NFData SuggestionValue where
+  rnf SuggestionValue' {..} = Prelude.rnf text
diff --git a/gen/Amazonka/Kendra/Types/TableCell.hs b/gen/Amazonka/Kendra/Types/TableCell.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/TableCell.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.Kendra.Types.TableCell
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.TableCell 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 a table cell in a table excerpt.
+--
+-- /See:/ 'newTableCell' smart constructor.
+data TableCell = TableCell'
+  { -- | @TRUE@ means that the table cell should be treated as a header.
+    header :: Prelude.Maybe Prelude.Bool,
+    -- | @TRUE@ means that the table cell has a high enough confidence and is
+    -- relevant to the query, so the value or content should be highlighted.
+    highlighted :: Prelude.Maybe Prelude.Bool,
+    -- | @TRUE@ if the response of the table cell is the top answer. This is the
+    -- cell value or content with the highest confidence score or is the most
+    -- relevant to the query.
+    topAnswer :: Prelude.Maybe Prelude.Bool,
+    -- | The actual value or content within a table cell. A table cell could
+    -- contain a date value of a year, or a string value of text, for example.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TableCell' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'header', 'tableCell_header' - @TRUE@ means that the table cell should be treated as a header.
+--
+-- 'highlighted', 'tableCell_highlighted' - @TRUE@ means that the table cell has a high enough confidence and is
+-- relevant to the query, so the value or content should be highlighted.
+--
+-- 'topAnswer', 'tableCell_topAnswer' - @TRUE@ if the response of the table cell is the top answer. This is the
+-- cell value or content with the highest confidence score or is the most
+-- relevant to the query.
+--
+-- 'value', 'tableCell_value' - The actual value or content within a table cell. A table cell could
+-- contain a date value of a year, or a string value of text, for example.
+newTableCell ::
+  TableCell
+newTableCell =
+  TableCell'
+    { header = Prelude.Nothing,
+      highlighted = Prelude.Nothing,
+      topAnswer = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | @TRUE@ means that the table cell should be treated as a header.
+tableCell_header :: Lens.Lens' TableCell (Prelude.Maybe Prelude.Bool)
+tableCell_header = Lens.lens (\TableCell' {header} -> header) (\s@TableCell' {} a -> s {header = a} :: TableCell)
+
+-- | @TRUE@ means that the table cell has a high enough confidence and is
+-- relevant to the query, so the value or content should be highlighted.
+tableCell_highlighted :: Lens.Lens' TableCell (Prelude.Maybe Prelude.Bool)
+tableCell_highlighted = Lens.lens (\TableCell' {highlighted} -> highlighted) (\s@TableCell' {} a -> s {highlighted = a} :: TableCell)
+
+-- | @TRUE@ if the response of the table cell is the top answer. This is the
+-- cell value or content with the highest confidence score or is the most
+-- relevant to the query.
+tableCell_topAnswer :: Lens.Lens' TableCell (Prelude.Maybe Prelude.Bool)
+tableCell_topAnswer = Lens.lens (\TableCell' {topAnswer} -> topAnswer) (\s@TableCell' {} a -> s {topAnswer = a} :: TableCell)
+
+-- | The actual value or content within a table cell. A table cell could
+-- contain a date value of a year, or a string value of text, for example.
+tableCell_value :: Lens.Lens' TableCell (Prelude.Maybe Prelude.Text)
+tableCell_value = Lens.lens (\TableCell' {value} -> value) (\s@TableCell' {} a -> s {value = a} :: TableCell)
+
+instance Data.FromJSON TableCell where
+  parseJSON =
+    Data.withObject
+      "TableCell"
+      ( \x ->
+          TableCell'
+            Prelude.<$> (x Data..:? "Header")
+            Prelude.<*> (x Data..:? "Highlighted")
+            Prelude.<*> (x Data..:? "TopAnswer")
+            Prelude.<*> (x Data..:? "Value")
+      )
+
+instance Prelude.Hashable TableCell where
+  hashWithSalt _salt TableCell' {..} =
+    _salt
+      `Prelude.hashWithSalt` header
+      `Prelude.hashWithSalt` highlighted
+      `Prelude.hashWithSalt` topAnswer
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData TableCell where
+  rnf TableCell' {..} =
+    Prelude.rnf header
+      `Prelude.seq` Prelude.rnf highlighted
+      `Prelude.seq` Prelude.rnf topAnswer
+      `Prelude.seq` Prelude.rnf value
diff --git a/gen/Amazonka/Kendra/Types/TableExcerpt.hs b/gen/Amazonka/Kendra/Types/TableExcerpt.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/TableExcerpt.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.Kendra.Types.TableExcerpt
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.TableExcerpt where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.TableRow
+import qualified Amazonka.Prelude as Prelude
+
+-- | An excerpt from a table within a document. The table excerpt displays up
+-- to five columns and three rows, depending on how many table cells are
+-- relevant to the query and how many columns are available in the original
+-- table. The top most relevant cell is displayed in the table excerpt,
+-- along with the next most relevant cells.
+--
+-- /See:/ 'newTableExcerpt' smart constructor.
+data TableExcerpt = TableExcerpt'
+  { -- | A list of rows in the table excerpt.
+    rows :: Prelude.Maybe [TableRow],
+    -- | A count of the number of rows in the original table within the document.
+    totalNumberOfRows :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TableExcerpt' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'rows', 'tableExcerpt_rows' - A list of rows in the table excerpt.
+--
+-- 'totalNumberOfRows', 'tableExcerpt_totalNumberOfRows' - A count of the number of rows in the original table within the document.
+newTableExcerpt ::
+  TableExcerpt
+newTableExcerpt =
+  TableExcerpt'
+    { rows = Prelude.Nothing,
+      totalNumberOfRows = Prelude.Nothing
+    }
+
+-- | A list of rows in the table excerpt.
+tableExcerpt_rows :: Lens.Lens' TableExcerpt (Prelude.Maybe [TableRow])
+tableExcerpt_rows = Lens.lens (\TableExcerpt' {rows} -> rows) (\s@TableExcerpt' {} a -> s {rows = a} :: TableExcerpt) Prelude.. Lens.mapping Lens.coerced
+
+-- | A count of the number of rows in the original table within the document.
+tableExcerpt_totalNumberOfRows :: Lens.Lens' TableExcerpt (Prelude.Maybe Prelude.Int)
+tableExcerpt_totalNumberOfRows = Lens.lens (\TableExcerpt' {totalNumberOfRows} -> totalNumberOfRows) (\s@TableExcerpt' {} a -> s {totalNumberOfRows = a} :: TableExcerpt)
+
+instance Data.FromJSON TableExcerpt where
+  parseJSON =
+    Data.withObject
+      "TableExcerpt"
+      ( \x ->
+          TableExcerpt'
+            Prelude.<$> (x Data..:? "Rows" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "TotalNumberOfRows")
+      )
+
+instance Prelude.Hashable TableExcerpt where
+  hashWithSalt _salt TableExcerpt' {..} =
+    _salt
+      `Prelude.hashWithSalt` rows
+      `Prelude.hashWithSalt` totalNumberOfRows
+
+instance Prelude.NFData TableExcerpt where
+  rnf TableExcerpt' {..} =
+    Prelude.rnf rows
+      `Prelude.seq` Prelude.rnf totalNumberOfRows
diff --git a/gen/Amazonka/Kendra/Types/TableRow.hs b/gen/Amazonka/Kendra/Types/TableRow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/TableRow.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.Kendra.Types.TableRow
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.TableRow where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.TableCell
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a row in a table excerpt.
+--
+-- /See:/ 'newTableRow' smart constructor.
+data TableRow = TableRow'
+  { -- | A list of table cells in a row.
+    cells :: Prelude.Maybe [TableCell]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TableRow' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cells', 'tableRow_cells' - A list of table cells in a row.
+newTableRow ::
+  TableRow
+newTableRow = TableRow' {cells = Prelude.Nothing}
+
+-- | A list of table cells in a row.
+tableRow_cells :: Lens.Lens' TableRow (Prelude.Maybe [TableCell])
+tableRow_cells = Lens.lens (\TableRow' {cells} -> cells) (\s@TableRow' {} a -> s {cells = a} :: TableRow) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON TableRow where
+  parseJSON =
+    Data.withObject
+      "TableRow"
+      ( \x ->
+          TableRow'
+            Prelude.<$> (x Data..:? "Cells" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable TableRow where
+  hashWithSalt _salt TableRow' {..} =
+    _salt `Prelude.hashWithSalt` cells
+
+instance Prelude.NFData TableRow where
+  rnf TableRow' {..} = Prelude.rnf cells
diff --git a/gen/Amazonka/Kendra/Types/Tag.hs b/gen/Amazonka/Kendra/Types/Tag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/Tag.hs
@@ -0,0 +1,101 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.Types.Tag
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.Tag where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A list of key\/value pairs that identify an index, FAQ, or data source.
+-- Tag keys and values can consist of Unicode letters, digits, white space,
+-- and any of the following symbols: _ . : \/ = + - \@.
+--
+-- /See:/ 'newTag' smart constructor.
+data Tag = Tag'
+  { -- | The key for the tag. Keys are not case sensitive and must be unique for
+    -- the index, FAQ, or data source.
+    key :: Prelude.Text,
+    -- | The value associated with the tag. The value may be an empty string but
+    -- it can\'t be null.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Tag' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'key', 'tag_key' - The key for the tag. Keys are not case sensitive and must be unique for
+-- the index, FAQ, or data source.
+--
+-- 'value', 'tag_value' - The value associated with the tag. The value may be an empty string but
+-- it can\'t be null.
+newTag ::
+  -- | 'key'
+  Prelude.Text ->
+  -- | 'value'
+  Prelude.Text ->
+  Tag
+newTag pKey_ pValue_ =
+  Tag' {key = pKey_, value = pValue_}
+
+-- | The key for the tag. Keys are not case sensitive and must be unique for
+-- the index, FAQ, or data source.
+tag_key :: Lens.Lens' Tag Prelude.Text
+tag_key = Lens.lens (\Tag' {key} -> key) (\s@Tag' {} a -> s {key = a} :: Tag)
+
+-- | The value associated with the tag. The value may be an empty string but
+-- it can\'t be null.
+tag_value :: Lens.Lens' Tag Prelude.Text
+tag_value = Lens.lens (\Tag' {value} -> value) (\s@Tag' {} a -> s {value = a} :: Tag)
+
+instance Data.FromJSON Tag where
+  parseJSON =
+    Data.withObject
+      "Tag"
+      ( \x ->
+          Tag'
+            Prelude.<$> (x Data..: "Key")
+            Prelude.<*> (x Data..: "Value")
+      )
+
+instance Prelude.Hashable Tag where
+  hashWithSalt _salt Tag' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData Tag where
+  rnf Tag' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON Tag where
+  toJSON Tag' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Key" Data..= key),
+            Prelude.Just ("Value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/Template.hs b/gen/Amazonka/Kendra/Types/Template.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/Template.hs
@@ -0,0 +1,61 @@
+{-# 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.Kendra.Types.Template
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.Template 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 template schema used for the data source, where templates schemas
+-- are supported.
+--
+-- See
+-- <https://docs.aws.amazon.com/kendra/latest/dg/ds-schemas.html Data source template schemas>.
+--
+-- /See:/ 'newTemplate' smart constructor.
+data Template = Template'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Template' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newTemplate ::
+  Template
+newTemplate = Template'
+
+instance Data.FromJSON Template where
+  parseJSON =
+    Data.withObject
+      "Template"
+      (\x -> Prelude.pure Template')
+
+instance Prelude.Hashable Template where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData Template where
+  rnf _ = ()
+
+instance Data.ToJSON Template where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
diff --git a/gen/Amazonka/Kendra/Types/TemplateConfiguration.hs b/gen/Amazonka/Kendra/Types/TemplateConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/TemplateConfiguration.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.Kendra.Types.TemplateConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.TemplateConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.Template
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides a template for the configuration information to connect to your
+-- data source.
+--
+-- /See:/ 'newTemplateConfiguration' smart constructor.
+data TemplateConfiguration = TemplateConfiguration'
+  { -- | The template schema used for the data source, where templates schemas
+    -- are supported.
+    --
+    -- See
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/ds-schemas.html Data source template schemas>.
+    template :: Prelude.Maybe Template
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TemplateConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'template', 'templateConfiguration_template' - The template schema used for the data source, where templates schemas
+-- are supported.
+--
+-- See
+-- <https://docs.aws.amazon.com/kendra/latest/dg/ds-schemas.html Data source template schemas>.
+newTemplateConfiguration ::
+  TemplateConfiguration
+newTemplateConfiguration =
+  TemplateConfiguration' {template = Prelude.Nothing}
+
+-- | The template schema used for the data source, where templates schemas
+-- are supported.
+--
+-- See
+-- <https://docs.aws.amazon.com/kendra/latest/dg/ds-schemas.html Data source template schemas>.
+templateConfiguration_template :: Lens.Lens' TemplateConfiguration (Prelude.Maybe Template)
+templateConfiguration_template = Lens.lens (\TemplateConfiguration' {template} -> template) (\s@TemplateConfiguration' {} a -> s {template = a} :: TemplateConfiguration)
+
+instance Data.FromJSON TemplateConfiguration where
+  parseJSON =
+    Data.withObject
+      "TemplateConfiguration"
+      ( \x ->
+          TemplateConfiguration'
+            Prelude.<$> (x Data..:? "Template")
+      )
+
+instance Prelude.Hashable TemplateConfiguration where
+  hashWithSalt _salt TemplateConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` template
+
+instance Prelude.NFData TemplateConfiguration where
+  rnf TemplateConfiguration' {..} = Prelude.rnf template
+
+instance Data.ToJSON TemplateConfiguration where
+  toJSON TemplateConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("Template" Data..=) Prelude.<$> template]
+      )
diff --git a/gen/Amazonka/Kendra/Types/TextDocumentStatistics.hs b/gen/Amazonka/Kendra/Types/TextDocumentStatistics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/TextDocumentStatistics.hs
@@ -0,0 +1,91 @@
+{-# 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.Kendra.Types.TextDocumentStatistics
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.TextDocumentStatistics 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 text documents indexed in an index.
+--
+-- /See:/ 'newTextDocumentStatistics' smart constructor.
+data TextDocumentStatistics = TextDocumentStatistics'
+  { -- | The number of text documents indexed.
+    indexedTextDocumentsCount :: Prelude.Natural,
+    -- | The total size, in bytes, of the indexed documents.
+    indexedTextBytes :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TextDocumentStatistics' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'indexedTextDocumentsCount', 'textDocumentStatistics_indexedTextDocumentsCount' - The number of text documents indexed.
+--
+-- 'indexedTextBytes', 'textDocumentStatistics_indexedTextBytes' - The total size, in bytes, of the indexed documents.
+newTextDocumentStatistics ::
+  -- | 'indexedTextDocumentsCount'
+  Prelude.Natural ->
+  -- | 'indexedTextBytes'
+  Prelude.Natural ->
+  TextDocumentStatistics
+newTextDocumentStatistics
+  pIndexedTextDocumentsCount_
+  pIndexedTextBytes_ =
+    TextDocumentStatistics'
+      { indexedTextDocumentsCount =
+          pIndexedTextDocumentsCount_,
+        indexedTextBytes = pIndexedTextBytes_
+      }
+
+-- | The number of text documents indexed.
+textDocumentStatistics_indexedTextDocumentsCount :: Lens.Lens' TextDocumentStatistics Prelude.Natural
+textDocumentStatistics_indexedTextDocumentsCount = Lens.lens (\TextDocumentStatistics' {indexedTextDocumentsCount} -> indexedTextDocumentsCount) (\s@TextDocumentStatistics' {} a -> s {indexedTextDocumentsCount = a} :: TextDocumentStatistics)
+
+-- | The total size, in bytes, of the indexed documents.
+textDocumentStatistics_indexedTextBytes :: Lens.Lens' TextDocumentStatistics Prelude.Natural
+textDocumentStatistics_indexedTextBytes = Lens.lens (\TextDocumentStatistics' {indexedTextBytes} -> indexedTextBytes) (\s@TextDocumentStatistics' {} a -> s {indexedTextBytes = a} :: TextDocumentStatistics)
+
+instance Data.FromJSON TextDocumentStatistics where
+  parseJSON =
+    Data.withObject
+      "TextDocumentStatistics"
+      ( \x ->
+          TextDocumentStatistics'
+            Prelude.<$> (x Data..: "IndexedTextDocumentsCount")
+            Prelude.<*> (x Data..: "IndexedTextBytes")
+      )
+
+instance Prelude.Hashable TextDocumentStatistics where
+  hashWithSalt _salt TextDocumentStatistics' {..} =
+    _salt
+      `Prelude.hashWithSalt` indexedTextDocumentsCount
+      `Prelude.hashWithSalt` indexedTextBytes
+
+instance Prelude.NFData TextDocumentStatistics where
+  rnf TextDocumentStatistics' {..} =
+    Prelude.rnf indexedTextDocumentsCount
+      `Prelude.seq` Prelude.rnf indexedTextBytes
diff --git a/gen/Amazonka/Kendra/Types/TextWithHighlights.hs b/gen/Amazonka/Kendra/Types/TextWithHighlights.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/TextWithHighlights.hs
@@ -0,0 +1,85 @@
+{-# 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.Kendra.Types.TextWithHighlights
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.TextWithHighlights where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.Highlight
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides text and information about where to highlight the text.
+--
+-- /See:/ 'newTextWithHighlights' smart constructor.
+data TextWithHighlights = TextWithHighlights'
+  { -- | The beginning and end of the text that should be highlighted.
+    highlights :: Prelude.Maybe [Highlight],
+    -- | The text to display to the user.
+    text :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TextWithHighlights' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'highlights', 'textWithHighlights_highlights' - The beginning and end of the text that should be highlighted.
+--
+-- 'text', 'textWithHighlights_text' - The text to display to the user.
+newTextWithHighlights ::
+  TextWithHighlights
+newTextWithHighlights =
+  TextWithHighlights'
+    { highlights = Prelude.Nothing,
+      text = Prelude.Nothing
+    }
+
+-- | The beginning and end of the text that should be highlighted.
+textWithHighlights_highlights :: Lens.Lens' TextWithHighlights (Prelude.Maybe [Highlight])
+textWithHighlights_highlights = Lens.lens (\TextWithHighlights' {highlights} -> highlights) (\s@TextWithHighlights' {} a -> s {highlights = a} :: TextWithHighlights) Prelude.. Lens.mapping Lens.coerced
+
+-- | The text to display to the user.
+textWithHighlights_text :: Lens.Lens' TextWithHighlights (Prelude.Maybe Prelude.Text)
+textWithHighlights_text = Lens.lens (\TextWithHighlights' {text} -> text) (\s@TextWithHighlights' {} a -> s {text = a} :: TextWithHighlights)
+
+instance Data.FromJSON TextWithHighlights where
+  parseJSON =
+    Data.withObject
+      "TextWithHighlights"
+      ( \x ->
+          TextWithHighlights'
+            Prelude.<$> (x Data..:? "Highlights" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Text")
+      )
+
+instance Prelude.Hashable TextWithHighlights where
+  hashWithSalt _salt TextWithHighlights' {..} =
+    _salt
+      `Prelude.hashWithSalt` highlights
+      `Prelude.hashWithSalt` text
+
+instance Prelude.NFData TextWithHighlights where
+  rnf TextWithHighlights' {..} =
+    Prelude.rnf highlights
+      `Prelude.seq` Prelude.rnf text
diff --git a/gen/Amazonka/Kendra/Types/ThesaurusStatus.hs b/gen/Amazonka/Kendra/Types/ThesaurusStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ThesaurusStatus.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.Types.ThesaurusStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ThesaurusStatus
+  ( ThesaurusStatus
+      ( ..,
+        ThesaurusStatus_ACTIVE,
+        ThesaurusStatus_ACTIVE_BUT_UPDATE_FAILED,
+        ThesaurusStatus_CREATING,
+        ThesaurusStatus_DELETING,
+        ThesaurusStatus_FAILED,
+        ThesaurusStatus_UPDATING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ThesaurusStatus = ThesaurusStatus'
+  { fromThesaurusStatus ::
+      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 ThesaurusStatus_ACTIVE :: ThesaurusStatus
+pattern ThesaurusStatus_ACTIVE = ThesaurusStatus' "ACTIVE"
+
+pattern ThesaurusStatus_ACTIVE_BUT_UPDATE_FAILED :: ThesaurusStatus
+pattern ThesaurusStatus_ACTIVE_BUT_UPDATE_FAILED = ThesaurusStatus' "ACTIVE_BUT_UPDATE_FAILED"
+
+pattern ThesaurusStatus_CREATING :: ThesaurusStatus
+pattern ThesaurusStatus_CREATING = ThesaurusStatus' "CREATING"
+
+pattern ThesaurusStatus_DELETING :: ThesaurusStatus
+pattern ThesaurusStatus_DELETING = ThesaurusStatus' "DELETING"
+
+pattern ThesaurusStatus_FAILED :: ThesaurusStatus
+pattern ThesaurusStatus_FAILED = ThesaurusStatus' "FAILED"
+
+pattern ThesaurusStatus_UPDATING :: ThesaurusStatus
+pattern ThesaurusStatus_UPDATING = ThesaurusStatus' "UPDATING"
+
+{-# COMPLETE
+  ThesaurusStatus_ACTIVE,
+  ThesaurusStatus_ACTIVE_BUT_UPDATE_FAILED,
+  ThesaurusStatus_CREATING,
+  ThesaurusStatus_DELETING,
+  ThesaurusStatus_FAILED,
+  ThesaurusStatus_UPDATING,
+  ThesaurusStatus'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/ThesaurusSummary.hs b/gen/Amazonka/Kendra/Types/ThesaurusSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/ThesaurusSummary.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.Kendra.Types.ThesaurusSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.ThesaurusSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.ThesaurusStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | An array of summary information for a thesaurus or multiple thesauri.
+--
+-- /See:/ 'newThesaurusSummary' smart constructor.
+data ThesaurusSummary = ThesaurusSummary'
+  { -- | The Unix datetime that the thesaurus was created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The identifier of the thesaurus.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the thesaurus.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The status of the thesaurus.
+    status :: Prelude.Maybe ThesaurusStatus,
+    -- | The Unix datetime that the thesaurus was last updated.
+    updatedAt :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ThesaurusSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdAt', 'thesaurusSummary_createdAt' - The Unix datetime that the thesaurus was created.
+--
+-- 'id', 'thesaurusSummary_id' - The identifier of the thesaurus.
+--
+-- 'name', 'thesaurusSummary_name' - The name of the thesaurus.
+--
+-- 'status', 'thesaurusSummary_status' - The status of the thesaurus.
+--
+-- 'updatedAt', 'thesaurusSummary_updatedAt' - The Unix datetime that the thesaurus was last updated.
+newThesaurusSummary ::
+  ThesaurusSummary
+newThesaurusSummary =
+  ThesaurusSummary'
+    { createdAt = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing,
+      updatedAt = Prelude.Nothing
+    }
+
+-- | The Unix datetime that the thesaurus was created.
+thesaurusSummary_createdAt :: Lens.Lens' ThesaurusSummary (Prelude.Maybe Prelude.UTCTime)
+thesaurusSummary_createdAt = Lens.lens (\ThesaurusSummary' {createdAt} -> createdAt) (\s@ThesaurusSummary' {} a -> s {createdAt = a} :: ThesaurusSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The identifier of the thesaurus.
+thesaurusSummary_id :: Lens.Lens' ThesaurusSummary (Prelude.Maybe Prelude.Text)
+thesaurusSummary_id = Lens.lens (\ThesaurusSummary' {id} -> id) (\s@ThesaurusSummary' {} a -> s {id = a} :: ThesaurusSummary)
+
+-- | The name of the thesaurus.
+thesaurusSummary_name :: Lens.Lens' ThesaurusSummary (Prelude.Maybe Prelude.Text)
+thesaurusSummary_name = Lens.lens (\ThesaurusSummary' {name} -> name) (\s@ThesaurusSummary' {} a -> s {name = a} :: ThesaurusSummary)
+
+-- | The status of the thesaurus.
+thesaurusSummary_status :: Lens.Lens' ThesaurusSummary (Prelude.Maybe ThesaurusStatus)
+thesaurusSummary_status = Lens.lens (\ThesaurusSummary' {status} -> status) (\s@ThesaurusSummary' {} a -> s {status = a} :: ThesaurusSummary)
+
+-- | The Unix datetime that the thesaurus was last updated.
+thesaurusSummary_updatedAt :: Lens.Lens' ThesaurusSummary (Prelude.Maybe Prelude.UTCTime)
+thesaurusSummary_updatedAt = Lens.lens (\ThesaurusSummary' {updatedAt} -> updatedAt) (\s@ThesaurusSummary' {} a -> s {updatedAt = a} :: ThesaurusSummary) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON ThesaurusSummary where
+  parseJSON =
+    Data.withObject
+      "ThesaurusSummary"
+      ( \x ->
+          ThesaurusSummary'
+            Prelude.<$> (x Data..:? "CreatedAt")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "UpdatedAt")
+      )
+
+instance Prelude.Hashable ThesaurusSummary where
+  hashWithSalt _salt ThesaurusSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` updatedAt
+
+instance Prelude.NFData ThesaurusSummary where
+  rnf ThesaurusSummary' {..} =
+    Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf updatedAt
diff --git a/gen/Amazonka/Kendra/Types/TimeRange.hs b/gen/Amazonka/Kendra/Types/TimeRange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/TimeRange.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.Kendra.Types.TimeRange
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.TimeRange 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 range of time.
+--
+-- /See:/ 'newTimeRange' smart constructor.
+data TimeRange = TimeRange'
+  { -- | The UNIX datetime of the end of the time range.
+    endTime :: Prelude.Maybe Data.POSIX,
+    -- | The UNIX datetime of the beginning of the time range.
+    startTime :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TimeRange' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endTime', 'timeRange_endTime' - The UNIX datetime of the end of the time range.
+--
+-- 'startTime', 'timeRange_startTime' - The UNIX datetime of the beginning of the time range.
+newTimeRange ::
+  TimeRange
+newTimeRange =
+  TimeRange'
+    { endTime = Prelude.Nothing,
+      startTime = Prelude.Nothing
+    }
+
+-- | The UNIX datetime of the end of the time range.
+timeRange_endTime :: Lens.Lens' TimeRange (Prelude.Maybe Prelude.UTCTime)
+timeRange_endTime = Lens.lens (\TimeRange' {endTime} -> endTime) (\s@TimeRange' {} a -> s {endTime = a} :: TimeRange) Prelude.. Lens.mapping Data._Time
+
+-- | The UNIX datetime of the beginning of the time range.
+timeRange_startTime :: Lens.Lens' TimeRange (Prelude.Maybe Prelude.UTCTime)
+timeRange_startTime = Lens.lens (\TimeRange' {startTime} -> startTime) (\s@TimeRange' {} a -> s {startTime = a} :: TimeRange) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON TimeRange where
+  parseJSON =
+    Data.withObject
+      "TimeRange"
+      ( \x ->
+          TimeRange'
+            Prelude.<$> (x Data..:? "EndTime")
+            Prelude.<*> (x Data..:? "StartTime")
+      )
+
+instance Prelude.Hashable TimeRange where
+  hashWithSalt _salt TimeRange' {..} =
+    _salt
+      `Prelude.hashWithSalt` endTime
+      `Prelude.hashWithSalt` startTime
+
+instance Prelude.NFData TimeRange where
+  rnf TimeRange' {..} =
+    Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf startTime
+
+instance Data.ToJSON TimeRange where
+  toJSON TimeRange' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("EndTime" Data..=) Prelude.<$> endTime,
+            ("StartTime" Data..=) Prelude.<$> startTime
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/Type.hs b/gen/Amazonka/Kendra/Types/Type.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/Type.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.Kendra.Types.Type
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.Type
+  ( Type
+      ( ..,
+        Type_ON_PREMISE,
+        Type_SAAS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Type = Type' {fromType :: 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 Type_ON_PREMISE :: Type
+pattern Type_ON_PREMISE = Type' "ON_PREMISE"
+
+pattern Type_SAAS :: Type
+pattern Type_SAAS = Type' "SAAS"
+
+{-# COMPLETE
+  Type_ON_PREMISE,
+  Type_SAAS,
+  Type'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/Urls.hs b/gen/Amazonka/Kendra/Types/Urls.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/Urls.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.Kendra.Types.Urls
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.Urls where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.SeedUrlConfiguration
+import Amazonka.Kendra.Types.SiteMapsConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information of the URLs to crawl.
+--
+-- You can only crawl websites that use the secure communication protocol,
+-- Hypertext Transfer Protocol Secure (HTTPS). If you receive an error when
+-- crawling a website, it could be that the website is blocked from
+-- crawling.
+--
+-- /When selecting websites to index, you must adhere to the
+-- <https://aws.amazon.com/aup/ Amazon Acceptable Use Policy> and all other
+-- Amazon terms. Remember that you must only use Amazon Kendra Web Crawler
+-- to index your own webpages, or webpages that you have authorization to
+-- index./
+--
+-- /See:/ 'newUrls' smart constructor.
+data Urls = Urls'
+  { -- | Configuration of the seed or starting point URLs of the websites you
+    -- want to crawl.
+    --
+    -- You can choose to crawl only the website host names, or the website host
+    -- names with subdomains, or the website host names with subdomains and
+    -- other domains that the webpages link to.
+    --
+    -- You can list up to 100 seed URLs.
+    seedUrlConfiguration :: Prelude.Maybe SeedUrlConfiguration,
+    -- | Configuration of the sitemap URLs of the websites you want to crawl.
+    --
+    -- Only URLs belonging to the same website host names are crawled. You can
+    -- list up to three sitemap URLs.
+    siteMapsConfiguration :: Prelude.Maybe SiteMapsConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Urls' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'seedUrlConfiguration', 'urls_seedUrlConfiguration' - Configuration of the seed or starting point URLs of the websites you
+-- want to crawl.
+--
+-- You can choose to crawl only the website host names, or the website host
+-- names with subdomains, or the website host names with subdomains and
+-- other domains that the webpages link to.
+--
+-- You can list up to 100 seed URLs.
+--
+-- 'siteMapsConfiguration', 'urls_siteMapsConfiguration' - Configuration of the sitemap URLs of the websites you want to crawl.
+--
+-- Only URLs belonging to the same website host names are crawled. You can
+-- list up to three sitemap URLs.
+newUrls ::
+  Urls
+newUrls =
+  Urls'
+    { seedUrlConfiguration = Prelude.Nothing,
+      siteMapsConfiguration = Prelude.Nothing
+    }
+
+-- | Configuration of the seed or starting point URLs of the websites you
+-- want to crawl.
+--
+-- You can choose to crawl only the website host names, or the website host
+-- names with subdomains, or the website host names with subdomains and
+-- other domains that the webpages link to.
+--
+-- You can list up to 100 seed URLs.
+urls_seedUrlConfiguration :: Lens.Lens' Urls (Prelude.Maybe SeedUrlConfiguration)
+urls_seedUrlConfiguration = Lens.lens (\Urls' {seedUrlConfiguration} -> seedUrlConfiguration) (\s@Urls' {} a -> s {seedUrlConfiguration = a} :: Urls)
+
+-- | Configuration of the sitemap URLs of the websites you want to crawl.
+--
+-- Only URLs belonging to the same website host names are crawled. You can
+-- list up to three sitemap URLs.
+urls_siteMapsConfiguration :: Lens.Lens' Urls (Prelude.Maybe SiteMapsConfiguration)
+urls_siteMapsConfiguration = Lens.lens (\Urls' {siteMapsConfiguration} -> siteMapsConfiguration) (\s@Urls' {} a -> s {siteMapsConfiguration = a} :: Urls)
+
+instance Data.FromJSON Urls where
+  parseJSON =
+    Data.withObject
+      "Urls"
+      ( \x ->
+          Urls'
+            Prelude.<$> (x Data..:? "SeedUrlConfiguration")
+            Prelude.<*> (x Data..:? "SiteMapsConfiguration")
+      )
+
+instance Prelude.Hashable Urls where
+  hashWithSalt _salt Urls' {..} =
+    _salt
+      `Prelude.hashWithSalt` seedUrlConfiguration
+      `Prelude.hashWithSalt` siteMapsConfiguration
+
+instance Prelude.NFData Urls where
+  rnf Urls' {..} =
+    Prelude.rnf seedUrlConfiguration
+      `Prelude.seq` Prelude.rnf siteMapsConfiguration
+
+instance Data.ToJSON Urls where
+  toJSON Urls' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SeedUrlConfiguration" Data..=)
+              Prelude.<$> seedUrlConfiguration,
+            ("SiteMapsConfiguration" Data..=)
+              Prelude.<$> siteMapsConfiguration
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/UserContext.hs b/gen/Amazonka/Kendra/Types/UserContext.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/UserContext.hs
@@ -0,0 +1,137 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.Types.UserContext
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.UserContext where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DataSourceGroup
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about the user context for an Amazon Kendra index.
+--
+-- User context filtering is a kind of personalized search with the benefit
+-- of controlling access to documents. For example, not all teams that
+-- search the company portal for information should access top-secret
+-- company documents, nor are these documents relevant to all users. Only
+-- specific users or groups of teams given access to top-secret documents
+-- should see these documents in their search results.
+--
+-- You provide one of the following:
+--
+-- -   User token
+--
+-- -   User ID, the groups the user belongs to, and any data sources the
+--     groups can access.
+--
+-- If you provide both, an exception is thrown.
+--
+-- /See:/ 'newUserContext' smart constructor.
+data UserContext = UserContext'
+  { -- | The list of data source groups you want to filter search results based
+    -- on groups\' access to documents in that data source.
+    dataSourceGroups :: Prelude.Maybe (Prelude.NonEmpty DataSourceGroup),
+    -- | The list of groups you want to filter search results based on the
+    -- groups\' access to documents.
+    groups :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The user context token for filtering search results for a user. It must
+    -- be a JWT or a JSON token.
+    token :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the user you want to filter search results based on
+    -- their access to documents.
+    userId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UserContext' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSourceGroups', 'userContext_dataSourceGroups' - The list of data source groups you want to filter search results based
+-- on groups\' access to documents in that data source.
+--
+-- 'groups', 'userContext_groups' - The list of groups you want to filter search results based on the
+-- groups\' access to documents.
+--
+-- 'token', 'userContext_token' - The user context token for filtering search results for a user. It must
+-- be a JWT or a JSON token.
+--
+-- 'userId', 'userContext_userId' - The identifier of the user you want to filter search results based on
+-- their access to documents.
+newUserContext ::
+  UserContext
+newUserContext =
+  UserContext'
+    { dataSourceGroups = Prelude.Nothing,
+      groups = Prelude.Nothing,
+      token = Prelude.Nothing,
+      userId = Prelude.Nothing
+    }
+
+-- | The list of data source groups you want to filter search results based
+-- on groups\' access to documents in that data source.
+userContext_dataSourceGroups :: Lens.Lens' UserContext (Prelude.Maybe (Prelude.NonEmpty DataSourceGroup))
+userContext_dataSourceGroups = Lens.lens (\UserContext' {dataSourceGroups} -> dataSourceGroups) (\s@UserContext' {} a -> s {dataSourceGroups = a} :: UserContext) Prelude.. Lens.mapping Lens.coerced
+
+-- | The list of groups you want to filter search results based on the
+-- groups\' access to documents.
+userContext_groups :: Lens.Lens' UserContext (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+userContext_groups = Lens.lens (\UserContext' {groups} -> groups) (\s@UserContext' {} a -> s {groups = a} :: UserContext) Prelude.. Lens.mapping Lens.coerced
+
+-- | The user context token for filtering search results for a user. It must
+-- be a JWT or a JSON token.
+userContext_token :: Lens.Lens' UserContext (Prelude.Maybe Prelude.Text)
+userContext_token = Lens.lens (\UserContext' {token} -> token) (\s@UserContext' {} a -> s {token = a} :: UserContext)
+
+-- | The identifier of the user you want to filter search results based on
+-- their access to documents.
+userContext_userId :: Lens.Lens' UserContext (Prelude.Maybe Prelude.Text)
+userContext_userId = Lens.lens (\UserContext' {userId} -> userId) (\s@UserContext' {} a -> s {userId = a} :: UserContext)
+
+instance Prelude.Hashable UserContext where
+  hashWithSalt _salt UserContext' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataSourceGroups
+      `Prelude.hashWithSalt` groups
+      `Prelude.hashWithSalt` token
+      `Prelude.hashWithSalt` userId
+
+instance Prelude.NFData UserContext where
+  rnf UserContext' {..} =
+    Prelude.rnf dataSourceGroups
+      `Prelude.seq` Prelude.rnf groups
+      `Prelude.seq` Prelude.rnf token
+      `Prelude.seq` Prelude.rnf userId
+
+instance Data.ToJSON UserContext where
+  toJSON UserContext' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DataSourceGroups" Data..=)
+              Prelude.<$> dataSourceGroups,
+            ("Groups" Data..=) Prelude.<$> groups,
+            ("Token" Data..=) Prelude.<$> token,
+            ("UserId" Data..=) Prelude.<$> userId
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/UserContextPolicy.hs b/gen/Amazonka/Kendra/Types/UserContextPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/UserContextPolicy.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.Kendra.Types.UserContextPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.UserContextPolicy
+  ( UserContextPolicy
+      ( ..,
+        UserContextPolicy_ATTRIBUTE_FILTER,
+        UserContextPolicy_USER_TOKEN
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype UserContextPolicy = UserContextPolicy'
+  { fromUserContextPolicy ::
+      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 UserContextPolicy_ATTRIBUTE_FILTER :: UserContextPolicy
+pattern UserContextPolicy_ATTRIBUTE_FILTER = UserContextPolicy' "ATTRIBUTE_FILTER"
+
+pattern UserContextPolicy_USER_TOKEN :: UserContextPolicy
+pattern UserContextPolicy_USER_TOKEN = UserContextPolicy' "USER_TOKEN"
+
+{-# COMPLETE
+  UserContextPolicy_ATTRIBUTE_FILTER,
+  UserContextPolicy_USER_TOKEN,
+  UserContextPolicy'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/UserGroupResolutionConfiguration.hs b/gen/Amazonka/Kendra/Types/UserGroupResolutionConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/UserGroupResolutionConfiguration.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.Kendra.Types.UserGroupResolutionConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.UserGroupResolutionConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.UserGroupResolutionMode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information to fetch access levels of groups
+-- and users from an IAM Identity Center (successor to Single Sign-On)
+-- identity source. This is useful for user context filtering, where search
+-- results are filtered based on the user or their group access to
+-- documents. You can also use the
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_PutPrincipalMapping.html PutPrincipalMapping>
+-- API to map users to their groups so that you only need to provide the
+-- user ID when you issue the query.
+--
+-- To set up an IAM Identity Center identity source in the console to use
+-- with Amazon Kendra, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/getting-started-aws-sso.html Getting started with an IAM Identity Center identity source>.
+-- You must also grant the required permissions to use IAM Identity Center
+-- with Amazon Kendra. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html#iam-roles-aws-sso IAM roles for IAM Identity Center>.
+--
+-- Amazon Kendra currently does not support using
+-- @UserGroupResolutionConfiguration@ with an Amazon Web Services
+-- organization member account for your IAM Identity Center identify
+-- source. You must create your index in the management account for the
+-- organization in order to use @UserGroupResolutionConfiguration@.
+--
+-- /See:/ 'newUserGroupResolutionConfiguration' smart constructor.
+data UserGroupResolutionConfiguration = UserGroupResolutionConfiguration'
+  { -- | The identity store provider (mode) you want to use to fetch access
+    -- levels of groups and users. IAM Identity Center (successor to Single
+    -- Sign-On) is currently the only available mode. Your users and groups
+    -- must exist in an IAM Identity Center identity source in order to use
+    -- this mode.
+    userGroupResolutionMode :: UserGroupResolutionMode
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UserGroupResolutionConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'userGroupResolutionMode', 'userGroupResolutionConfiguration_userGroupResolutionMode' - The identity store provider (mode) you want to use to fetch access
+-- levels of groups and users. IAM Identity Center (successor to Single
+-- Sign-On) is currently the only available mode. Your users and groups
+-- must exist in an IAM Identity Center identity source in order to use
+-- this mode.
+newUserGroupResolutionConfiguration ::
+  -- | 'userGroupResolutionMode'
+  UserGroupResolutionMode ->
+  UserGroupResolutionConfiguration
+newUserGroupResolutionConfiguration
+  pUserGroupResolutionMode_ =
+    UserGroupResolutionConfiguration'
+      { userGroupResolutionMode =
+          pUserGroupResolutionMode_
+      }
+
+-- | The identity store provider (mode) you want to use to fetch access
+-- levels of groups and users. IAM Identity Center (successor to Single
+-- Sign-On) is currently the only available mode. Your users and groups
+-- must exist in an IAM Identity Center identity source in order to use
+-- this mode.
+userGroupResolutionConfiguration_userGroupResolutionMode :: Lens.Lens' UserGroupResolutionConfiguration UserGroupResolutionMode
+userGroupResolutionConfiguration_userGroupResolutionMode = Lens.lens (\UserGroupResolutionConfiguration' {userGroupResolutionMode} -> userGroupResolutionMode) (\s@UserGroupResolutionConfiguration' {} a -> s {userGroupResolutionMode = a} :: UserGroupResolutionConfiguration)
+
+instance
+  Data.FromJSON
+    UserGroupResolutionConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "UserGroupResolutionConfiguration"
+      ( \x ->
+          UserGroupResolutionConfiguration'
+            Prelude.<$> (x Data..: "UserGroupResolutionMode")
+      )
+
+instance
+  Prelude.Hashable
+    UserGroupResolutionConfiguration
+  where
+  hashWithSalt
+    _salt
+    UserGroupResolutionConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` userGroupResolutionMode
+
+instance
+  Prelude.NFData
+    UserGroupResolutionConfiguration
+  where
+  rnf UserGroupResolutionConfiguration' {..} =
+    Prelude.rnf userGroupResolutionMode
+
+instance Data.ToJSON UserGroupResolutionConfiguration where
+  toJSON UserGroupResolutionConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "UserGroupResolutionMode"
+                  Data..= userGroupResolutionMode
+              )
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/UserGroupResolutionMode.hs b/gen/Amazonka/Kendra/Types/UserGroupResolutionMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/UserGroupResolutionMode.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.Kendra.Types.UserGroupResolutionMode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.UserGroupResolutionMode
+  ( UserGroupResolutionMode
+      ( ..,
+        UserGroupResolutionMode_AWS_SSO,
+        UserGroupResolutionMode_NONE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype UserGroupResolutionMode = UserGroupResolutionMode'
+  { fromUserGroupResolutionMode ::
+      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 UserGroupResolutionMode_AWS_SSO :: UserGroupResolutionMode
+pattern UserGroupResolutionMode_AWS_SSO = UserGroupResolutionMode' "AWS_SSO"
+
+pattern UserGroupResolutionMode_NONE :: UserGroupResolutionMode
+pattern UserGroupResolutionMode_NONE = UserGroupResolutionMode' "NONE"
+
+{-# COMPLETE
+  UserGroupResolutionMode_AWS_SSO,
+  UserGroupResolutionMode_NONE,
+  UserGroupResolutionMode'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/UserIdentityConfiguration.hs b/gen/Amazonka/Kendra/Types/UserIdentityConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/UserIdentityConfiguration.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.Kendra.Types.UserIdentityConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.UserIdentityConfiguration 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 configuration information for the identifiers of your
+-- users.
+--
+-- /See:/ 'newUserIdentityConfiguration' smart constructor.
+data UserIdentityConfiguration = UserIdentityConfiguration'
+  { -- | The IAM Identity Center field name that contains the identifiers of your
+    -- users, such as their emails. This is used for
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/user-context-filter.html user context filtering>
+    -- and for granting access to your Amazon Kendra experience. You must set
+    -- up IAM Identity Center with Amazon Kendra. You must include your users
+    -- and groups in your Access Control List when you ingest documents into
+    -- your index. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/getting-started-aws-sso.html Getting started with an IAM Identity Center identity source>.
+    identityAttributeName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UserIdentityConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'identityAttributeName', 'userIdentityConfiguration_identityAttributeName' - The IAM Identity Center field name that contains the identifiers of your
+-- users, such as their emails. This is used for
+-- <https://docs.aws.amazon.com/kendra/latest/dg/user-context-filter.html user context filtering>
+-- and for granting access to your Amazon Kendra experience. You must set
+-- up IAM Identity Center with Amazon Kendra. You must include your users
+-- and groups in your Access Control List when you ingest documents into
+-- your index. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/getting-started-aws-sso.html Getting started with an IAM Identity Center identity source>.
+newUserIdentityConfiguration ::
+  UserIdentityConfiguration
+newUserIdentityConfiguration =
+  UserIdentityConfiguration'
+    { identityAttributeName =
+        Prelude.Nothing
+    }
+
+-- | The IAM Identity Center field name that contains the identifiers of your
+-- users, such as their emails. This is used for
+-- <https://docs.aws.amazon.com/kendra/latest/dg/user-context-filter.html user context filtering>
+-- and for granting access to your Amazon Kendra experience. You must set
+-- up IAM Identity Center with Amazon Kendra. You must include your users
+-- and groups in your Access Control List when you ingest documents into
+-- your index. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/getting-started-aws-sso.html Getting started with an IAM Identity Center identity source>.
+userIdentityConfiguration_identityAttributeName :: Lens.Lens' UserIdentityConfiguration (Prelude.Maybe Prelude.Text)
+userIdentityConfiguration_identityAttributeName = Lens.lens (\UserIdentityConfiguration' {identityAttributeName} -> identityAttributeName) (\s@UserIdentityConfiguration' {} a -> s {identityAttributeName = a} :: UserIdentityConfiguration)
+
+instance Data.FromJSON UserIdentityConfiguration where
+  parseJSON =
+    Data.withObject
+      "UserIdentityConfiguration"
+      ( \x ->
+          UserIdentityConfiguration'
+            Prelude.<$> (x Data..:? "IdentityAttributeName")
+      )
+
+instance Prelude.Hashable UserIdentityConfiguration where
+  hashWithSalt _salt UserIdentityConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` identityAttributeName
+
+instance Prelude.NFData UserIdentityConfiguration where
+  rnf UserIdentityConfiguration' {..} =
+    Prelude.rnf identityAttributeName
+
+instance Data.ToJSON UserIdentityConfiguration where
+  toJSON UserIdentityConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("IdentityAttributeName" Data..=)
+              Prelude.<$> identityAttributeName
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/UserTokenConfiguration.hs b/gen/Amazonka/Kendra/Types/UserTokenConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/UserTokenConfiguration.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.Kendra.Types.UserTokenConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.UserTokenConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.JsonTokenTypeConfiguration
+import Amazonka.Kendra.Types.JwtTokenTypeConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information for a token.
+--
+-- /See:/ 'newUserTokenConfiguration' smart constructor.
+data UserTokenConfiguration = UserTokenConfiguration'
+  { -- | Information about the JSON token type configuration.
+    jsonTokenTypeConfiguration :: Prelude.Maybe JsonTokenTypeConfiguration,
+    -- | Information about the JWT token type configuration.
+    jwtTokenTypeConfiguration :: Prelude.Maybe JwtTokenTypeConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UserTokenConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jsonTokenTypeConfiguration', 'userTokenConfiguration_jsonTokenTypeConfiguration' - Information about the JSON token type configuration.
+--
+-- 'jwtTokenTypeConfiguration', 'userTokenConfiguration_jwtTokenTypeConfiguration' - Information about the JWT token type configuration.
+newUserTokenConfiguration ::
+  UserTokenConfiguration
+newUserTokenConfiguration =
+  UserTokenConfiguration'
+    { jsonTokenTypeConfiguration =
+        Prelude.Nothing,
+      jwtTokenTypeConfiguration = Prelude.Nothing
+    }
+
+-- | Information about the JSON token type configuration.
+userTokenConfiguration_jsonTokenTypeConfiguration :: Lens.Lens' UserTokenConfiguration (Prelude.Maybe JsonTokenTypeConfiguration)
+userTokenConfiguration_jsonTokenTypeConfiguration = Lens.lens (\UserTokenConfiguration' {jsonTokenTypeConfiguration} -> jsonTokenTypeConfiguration) (\s@UserTokenConfiguration' {} a -> s {jsonTokenTypeConfiguration = a} :: UserTokenConfiguration)
+
+-- | Information about the JWT token type configuration.
+userTokenConfiguration_jwtTokenTypeConfiguration :: Lens.Lens' UserTokenConfiguration (Prelude.Maybe JwtTokenTypeConfiguration)
+userTokenConfiguration_jwtTokenTypeConfiguration = Lens.lens (\UserTokenConfiguration' {jwtTokenTypeConfiguration} -> jwtTokenTypeConfiguration) (\s@UserTokenConfiguration' {} a -> s {jwtTokenTypeConfiguration = a} :: UserTokenConfiguration)
+
+instance Data.FromJSON UserTokenConfiguration where
+  parseJSON =
+    Data.withObject
+      "UserTokenConfiguration"
+      ( \x ->
+          UserTokenConfiguration'
+            Prelude.<$> (x Data..:? "JsonTokenTypeConfiguration")
+            Prelude.<*> (x Data..:? "JwtTokenTypeConfiguration")
+      )
+
+instance Prelude.Hashable UserTokenConfiguration where
+  hashWithSalt _salt UserTokenConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` jsonTokenTypeConfiguration
+      `Prelude.hashWithSalt` jwtTokenTypeConfiguration
+
+instance Prelude.NFData UserTokenConfiguration where
+  rnf UserTokenConfiguration' {..} =
+    Prelude.rnf jsonTokenTypeConfiguration
+      `Prelude.seq` Prelude.rnf jwtTokenTypeConfiguration
+
+instance Data.ToJSON UserTokenConfiguration where
+  toJSON UserTokenConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("JsonTokenTypeConfiguration" Data..=)
+              Prelude.<$> jsonTokenTypeConfiguration,
+            ("JwtTokenTypeConfiguration" Data..=)
+              Prelude.<$> jwtTokenTypeConfiguration
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/Warning.hs b/gen/Amazonka/Kendra/Types/Warning.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/Warning.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.Kendra.Types.Warning
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.Warning where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.WarningCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | The warning code and message that explains a problem with a query.
+--
+-- /See:/ 'newWarning' smart constructor.
+data Warning = Warning'
+  { -- | The code used to show the type of warning for the query.
+    code :: Prelude.Maybe WarningCode,
+    -- | The message that explains the problem with the query.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Warning' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'warning_code' - The code used to show the type of warning for the query.
+--
+-- 'message', 'warning_message' - The message that explains the problem with the query.
+newWarning ::
+  Warning
+newWarning =
+  Warning'
+    { code = Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The code used to show the type of warning for the query.
+warning_code :: Lens.Lens' Warning (Prelude.Maybe WarningCode)
+warning_code = Lens.lens (\Warning' {code} -> code) (\s@Warning' {} a -> s {code = a} :: Warning)
+
+-- | The message that explains the problem with the query.
+warning_message :: Lens.Lens' Warning (Prelude.Maybe Prelude.Text)
+warning_message = Lens.lens (\Warning' {message} -> message) (\s@Warning' {} a -> s {message = a} :: Warning)
+
+instance Data.FromJSON Warning where
+  parseJSON =
+    Data.withObject
+      "Warning"
+      ( \x ->
+          Warning'
+            Prelude.<$> (x Data..:? "Code")
+            Prelude.<*> (x Data..:? "Message")
+      )
+
+instance Prelude.Hashable Warning where
+  hashWithSalt _salt Warning' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+
+instance Prelude.NFData Warning where
+  rnf Warning' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/Kendra/Types/WarningCode.hs b/gen/Amazonka/Kendra/Types/WarningCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/WarningCode.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.Kendra.Types.WarningCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.WarningCode
+  ( WarningCode
+      ( ..,
+        WarningCode_QUERY_LANGUAGE_INVALID_SYNTAX
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype WarningCode = WarningCode'
+  { fromWarningCode ::
+      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 WarningCode_QUERY_LANGUAGE_INVALID_SYNTAX :: WarningCode
+pattern WarningCode_QUERY_LANGUAGE_INVALID_SYNTAX = WarningCode' "QUERY_LANGUAGE_INVALID_SYNTAX"
+
+{-# COMPLETE
+  WarningCode_QUERY_LANGUAGE_INVALID_SYNTAX,
+  WarningCode'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/WebCrawlerConfiguration.hs b/gen/Amazonka/Kendra/Types/WebCrawlerConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/WebCrawlerConfiguration.hs
@@ -0,0 +1,402 @@
+{-# 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.Kendra.Types.WebCrawlerConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.WebCrawlerConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.AuthenticationConfiguration
+import Amazonka.Kendra.Types.ProxyConfiguration
+import Amazonka.Kendra.Types.Urls
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information required for Amazon Kendra Web
+-- Crawler.
+--
+-- /See:/ 'newWebCrawlerConfiguration' smart constructor.
+data WebCrawlerConfiguration = WebCrawlerConfiguration'
+  { -- | Configuration information required to connect to websites using
+    -- authentication.
+    --
+    -- You can connect to websites using basic authentication of user name and
+    -- password. You use a secret in
+    -- <https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html Secrets Manager>
+    -- to store your authentication credentials.
+    --
+    -- You must provide the website host name and port number. For example, the
+    -- host name of https:\/\/a.example.com\/page1.html is \"a.example.com\"
+    -- and the port is 443, the standard port for HTTPS.
+    authenticationConfiguration :: Prelude.Maybe AuthenticationConfiguration,
+    -- | Specifies the number of levels in a website that you want to crawl.
+    --
+    -- The first level begins from the website seed or starting point URL. For
+    -- example, if a website has 3 levels – index level (i.e. seed in this
+    -- example), sections level, and subsections level – and you are only
+    -- interested in crawling information up to the sections level (i.e. levels
+    -- 0-1), you can set your depth to 1.
+    --
+    -- The default crawl depth is set to 2.
+    crawlDepth :: Prelude.Maybe Prelude.Natural,
+    -- | The maximum size (in MB) of a webpage or attachment to crawl.
+    --
+    -- Files larger than this size (in MB) are skipped\/not crawled.
+    --
+    -- The default maximum size of a webpage or attachment is set to 50 MB.
+    maxContentSizePerPageInMegaBytes :: Prelude.Maybe Prelude.Double,
+    -- | The maximum number of URLs on a webpage to include when crawling a
+    -- website. This number is per webpage.
+    --
+    -- As a website’s webpages are crawled, any URLs the webpages link to are
+    -- also crawled. URLs on a webpage are crawled in order of appearance.
+    --
+    -- The default maximum links per page is 100.
+    maxLinksPerPage :: Prelude.Maybe Prelude.Natural,
+    -- | The maximum number of URLs crawled per website host per minute.
+    --
+    -- A minimum of one URL is required.
+    --
+    -- The default maximum number of URLs crawled per website host per minute
+    -- is 300.
+    maxUrlsPerMinuteCrawlRate :: Prelude.Maybe Prelude.Natural,
+    -- | Configuration information required to connect to your internal websites
+    -- via a web proxy.
+    --
+    -- You must provide the website host name and port number. For example, the
+    -- host name of https:\/\/a.example.com\/page1.html is \"a.example.com\"
+    -- and the port is 443, the standard port for HTTPS.
+    --
+    -- Web proxy credentials are optional and you can use them to connect to a
+    -- web proxy server that requires basic authentication. To store web proxy
+    -- credentials, you use a secret in
+    -- <https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html Secrets Manager>.
+    proxyConfiguration :: Prelude.Maybe ProxyConfiguration,
+    -- | A list of regular expression patterns to exclude certain URLs to crawl.
+    -- URLs that match the patterns are excluded from the index. URLs that
+    -- don\'t match the patterns are included in the index. If a URL matches
+    -- both an inclusion and exclusion pattern, the exclusion pattern takes
+    -- precedence and the URL file isn\'t included in the index.
+    urlExclusionPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | A list of regular expression patterns to include certain URLs to crawl.
+    -- URLs that match the patterns are included in the index. URLs that don\'t
+    -- match the patterns are excluded from the index. If a URL matches both an
+    -- inclusion and exclusion pattern, the exclusion pattern takes precedence
+    -- and the URL file isn\'t included in the index.
+    urlInclusionPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | Specifies the seed or starting point URLs of the websites or the sitemap
+    -- URLs of the websites you want to crawl.
+    --
+    -- You can include website subdomains. You can list up to 100 seed URLs and
+    -- up to three sitemap URLs.
+    --
+    -- You can only crawl websites that use the secure communication protocol,
+    -- Hypertext Transfer Protocol Secure (HTTPS). If you receive an error when
+    -- crawling a website, it could be that the website is blocked from
+    -- crawling.
+    --
+    -- /When selecting websites to index, you must adhere to the
+    -- <https://aws.amazon.com/aup/ Amazon Acceptable Use Policy> and all other
+    -- Amazon terms. Remember that you must only use Amazon Kendra Web Crawler
+    -- to index your own webpages, or webpages that you have authorization to
+    -- index./
+    urls :: Urls
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WebCrawlerConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'authenticationConfiguration', 'webCrawlerConfiguration_authenticationConfiguration' - Configuration information required to connect to websites using
+-- authentication.
+--
+-- You can connect to websites using basic authentication of user name and
+-- password. You use a secret in
+-- <https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html Secrets Manager>
+-- to store your authentication credentials.
+--
+-- You must provide the website host name and port number. For example, the
+-- host name of https:\/\/a.example.com\/page1.html is \"a.example.com\"
+-- and the port is 443, the standard port for HTTPS.
+--
+-- 'crawlDepth', 'webCrawlerConfiguration_crawlDepth' - Specifies the number of levels in a website that you want to crawl.
+--
+-- The first level begins from the website seed or starting point URL. For
+-- example, if a website has 3 levels – index level (i.e. seed in this
+-- example), sections level, and subsections level – and you are only
+-- interested in crawling information up to the sections level (i.e. levels
+-- 0-1), you can set your depth to 1.
+--
+-- The default crawl depth is set to 2.
+--
+-- 'maxContentSizePerPageInMegaBytes', 'webCrawlerConfiguration_maxContentSizePerPageInMegaBytes' - The maximum size (in MB) of a webpage or attachment to crawl.
+--
+-- Files larger than this size (in MB) are skipped\/not crawled.
+--
+-- The default maximum size of a webpage or attachment is set to 50 MB.
+--
+-- 'maxLinksPerPage', 'webCrawlerConfiguration_maxLinksPerPage' - The maximum number of URLs on a webpage to include when crawling a
+-- website. This number is per webpage.
+--
+-- As a website’s webpages are crawled, any URLs the webpages link to are
+-- also crawled. URLs on a webpage are crawled in order of appearance.
+--
+-- The default maximum links per page is 100.
+--
+-- 'maxUrlsPerMinuteCrawlRate', 'webCrawlerConfiguration_maxUrlsPerMinuteCrawlRate' - The maximum number of URLs crawled per website host per minute.
+--
+-- A minimum of one URL is required.
+--
+-- The default maximum number of URLs crawled per website host per minute
+-- is 300.
+--
+-- 'proxyConfiguration', 'webCrawlerConfiguration_proxyConfiguration' - Configuration information required to connect to your internal websites
+-- via a web proxy.
+--
+-- You must provide the website host name and port number. For example, the
+-- host name of https:\/\/a.example.com\/page1.html is \"a.example.com\"
+-- and the port is 443, the standard port for HTTPS.
+--
+-- Web proxy credentials are optional and you can use them to connect to a
+-- web proxy server that requires basic authentication. To store web proxy
+-- credentials, you use a secret in
+-- <https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html Secrets Manager>.
+--
+-- 'urlExclusionPatterns', 'webCrawlerConfiguration_urlExclusionPatterns' - A list of regular expression patterns to exclude certain URLs to crawl.
+-- URLs that match the patterns are excluded from the index. URLs that
+-- don\'t match the patterns are included in the index. If a URL matches
+-- both an inclusion and exclusion pattern, the exclusion pattern takes
+-- precedence and the URL file isn\'t included in the index.
+--
+-- 'urlInclusionPatterns', 'webCrawlerConfiguration_urlInclusionPatterns' - A list of regular expression patterns to include certain URLs to crawl.
+-- URLs that match the patterns are included in the index. URLs that don\'t
+-- match the patterns are excluded from the index. If a URL matches both an
+-- inclusion and exclusion pattern, the exclusion pattern takes precedence
+-- and the URL file isn\'t included in the index.
+--
+-- 'urls', 'webCrawlerConfiguration_urls' - Specifies the seed or starting point URLs of the websites or the sitemap
+-- URLs of the websites you want to crawl.
+--
+-- You can include website subdomains. You can list up to 100 seed URLs and
+-- up to three sitemap URLs.
+--
+-- You can only crawl websites that use the secure communication protocol,
+-- Hypertext Transfer Protocol Secure (HTTPS). If you receive an error when
+-- crawling a website, it could be that the website is blocked from
+-- crawling.
+--
+-- /When selecting websites to index, you must adhere to the
+-- <https://aws.amazon.com/aup/ Amazon Acceptable Use Policy> and all other
+-- Amazon terms. Remember that you must only use Amazon Kendra Web Crawler
+-- to index your own webpages, or webpages that you have authorization to
+-- index./
+newWebCrawlerConfiguration ::
+  -- | 'urls'
+  Urls ->
+  WebCrawlerConfiguration
+newWebCrawlerConfiguration pUrls_ =
+  WebCrawlerConfiguration'
+    { authenticationConfiguration =
+        Prelude.Nothing,
+      crawlDepth = Prelude.Nothing,
+      maxContentSizePerPageInMegaBytes = Prelude.Nothing,
+      maxLinksPerPage = Prelude.Nothing,
+      maxUrlsPerMinuteCrawlRate = Prelude.Nothing,
+      proxyConfiguration = Prelude.Nothing,
+      urlExclusionPatterns = Prelude.Nothing,
+      urlInclusionPatterns = Prelude.Nothing,
+      urls = pUrls_
+    }
+
+-- | Configuration information required to connect to websites using
+-- authentication.
+--
+-- You can connect to websites using basic authentication of user name and
+-- password. You use a secret in
+-- <https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html Secrets Manager>
+-- to store your authentication credentials.
+--
+-- You must provide the website host name and port number. For example, the
+-- host name of https:\/\/a.example.com\/page1.html is \"a.example.com\"
+-- and the port is 443, the standard port for HTTPS.
+webCrawlerConfiguration_authenticationConfiguration :: Lens.Lens' WebCrawlerConfiguration (Prelude.Maybe AuthenticationConfiguration)
+webCrawlerConfiguration_authenticationConfiguration = Lens.lens (\WebCrawlerConfiguration' {authenticationConfiguration} -> authenticationConfiguration) (\s@WebCrawlerConfiguration' {} a -> s {authenticationConfiguration = a} :: WebCrawlerConfiguration)
+
+-- | Specifies the number of levels in a website that you want to crawl.
+--
+-- The first level begins from the website seed or starting point URL. For
+-- example, if a website has 3 levels – index level (i.e. seed in this
+-- example), sections level, and subsections level – and you are only
+-- interested in crawling information up to the sections level (i.e. levels
+-- 0-1), you can set your depth to 1.
+--
+-- The default crawl depth is set to 2.
+webCrawlerConfiguration_crawlDepth :: Lens.Lens' WebCrawlerConfiguration (Prelude.Maybe Prelude.Natural)
+webCrawlerConfiguration_crawlDepth = Lens.lens (\WebCrawlerConfiguration' {crawlDepth} -> crawlDepth) (\s@WebCrawlerConfiguration' {} a -> s {crawlDepth = a} :: WebCrawlerConfiguration)
+
+-- | The maximum size (in MB) of a webpage or attachment to crawl.
+--
+-- Files larger than this size (in MB) are skipped\/not crawled.
+--
+-- The default maximum size of a webpage or attachment is set to 50 MB.
+webCrawlerConfiguration_maxContentSizePerPageInMegaBytes :: Lens.Lens' WebCrawlerConfiguration (Prelude.Maybe Prelude.Double)
+webCrawlerConfiguration_maxContentSizePerPageInMegaBytes = Lens.lens (\WebCrawlerConfiguration' {maxContentSizePerPageInMegaBytes} -> maxContentSizePerPageInMegaBytes) (\s@WebCrawlerConfiguration' {} a -> s {maxContentSizePerPageInMegaBytes = a} :: WebCrawlerConfiguration)
+
+-- | The maximum number of URLs on a webpage to include when crawling a
+-- website. This number is per webpage.
+--
+-- As a website’s webpages are crawled, any URLs the webpages link to are
+-- also crawled. URLs on a webpage are crawled in order of appearance.
+--
+-- The default maximum links per page is 100.
+webCrawlerConfiguration_maxLinksPerPage :: Lens.Lens' WebCrawlerConfiguration (Prelude.Maybe Prelude.Natural)
+webCrawlerConfiguration_maxLinksPerPage = Lens.lens (\WebCrawlerConfiguration' {maxLinksPerPage} -> maxLinksPerPage) (\s@WebCrawlerConfiguration' {} a -> s {maxLinksPerPage = a} :: WebCrawlerConfiguration)
+
+-- | The maximum number of URLs crawled per website host per minute.
+--
+-- A minimum of one URL is required.
+--
+-- The default maximum number of URLs crawled per website host per minute
+-- is 300.
+webCrawlerConfiguration_maxUrlsPerMinuteCrawlRate :: Lens.Lens' WebCrawlerConfiguration (Prelude.Maybe Prelude.Natural)
+webCrawlerConfiguration_maxUrlsPerMinuteCrawlRate = Lens.lens (\WebCrawlerConfiguration' {maxUrlsPerMinuteCrawlRate} -> maxUrlsPerMinuteCrawlRate) (\s@WebCrawlerConfiguration' {} a -> s {maxUrlsPerMinuteCrawlRate = a} :: WebCrawlerConfiguration)
+
+-- | Configuration information required to connect to your internal websites
+-- via a web proxy.
+--
+-- You must provide the website host name and port number. For example, the
+-- host name of https:\/\/a.example.com\/page1.html is \"a.example.com\"
+-- and the port is 443, the standard port for HTTPS.
+--
+-- Web proxy credentials are optional and you can use them to connect to a
+-- web proxy server that requires basic authentication. To store web proxy
+-- credentials, you use a secret in
+-- <https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html Secrets Manager>.
+webCrawlerConfiguration_proxyConfiguration :: Lens.Lens' WebCrawlerConfiguration (Prelude.Maybe ProxyConfiguration)
+webCrawlerConfiguration_proxyConfiguration = Lens.lens (\WebCrawlerConfiguration' {proxyConfiguration} -> proxyConfiguration) (\s@WebCrawlerConfiguration' {} a -> s {proxyConfiguration = a} :: WebCrawlerConfiguration)
+
+-- | A list of regular expression patterns to exclude certain URLs to crawl.
+-- URLs that match the patterns are excluded from the index. URLs that
+-- don\'t match the patterns are included in the index. If a URL matches
+-- both an inclusion and exclusion pattern, the exclusion pattern takes
+-- precedence and the URL file isn\'t included in the index.
+webCrawlerConfiguration_urlExclusionPatterns :: Lens.Lens' WebCrawlerConfiguration (Prelude.Maybe [Prelude.Text])
+webCrawlerConfiguration_urlExclusionPatterns = Lens.lens (\WebCrawlerConfiguration' {urlExclusionPatterns} -> urlExclusionPatterns) (\s@WebCrawlerConfiguration' {} a -> s {urlExclusionPatterns = a} :: WebCrawlerConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of regular expression patterns to include certain URLs to crawl.
+-- URLs that match the patterns are included in the index. URLs that don\'t
+-- match the patterns are excluded from the index. If a URL matches both an
+-- inclusion and exclusion pattern, the exclusion pattern takes precedence
+-- and the URL file isn\'t included in the index.
+webCrawlerConfiguration_urlInclusionPatterns :: Lens.Lens' WebCrawlerConfiguration (Prelude.Maybe [Prelude.Text])
+webCrawlerConfiguration_urlInclusionPatterns = Lens.lens (\WebCrawlerConfiguration' {urlInclusionPatterns} -> urlInclusionPatterns) (\s@WebCrawlerConfiguration' {} a -> s {urlInclusionPatterns = a} :: WebCrawlerConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies the seed or starting point URLs of the websites or the sitemap
+-- URLs of the websites you want to crawl.
+--
+-- You can include website subdomains. You can list up to 100 seed URLs and
+-- up to three sitemap URLs.
+--
+-- You can only crawl websites that use the secure communication protocol,
+-- Hypertext Transfer Protocol Secure (HTTPS). If you receive an error when
+-- crawling a website, it could be that the website is blocked from
+-- crawling.
+--
+-- /When selecting websites to index, you must adhere to the
+-- <https://aws.amazon.com/aup/ Amazon Acceptable Use Policy> and all other
+-- Amazon terms. Remember that you must only use Amazon Kendra Web Crawler
+-- to index your own webpages, or webpages that you have authorization to
+-- index./
+webCrawlerConfiguration_urls :: Lens.Lens' WebCrawlerConfiguration Urls
+webCrawlerConfiguration_urls = Lens.lens (\WebCrawlerConfiguration' {urls} -> urls) (\s@WebCrawlerConfiguration' {} a -> s {urls = a} :: WebCrawlerConfiguration)
+
+instance Data.FromJSON WebCrawlerConfiguration where
+  parseJSON =
+    Data.withObject
+      "WebCrawlerConfiguration"
+      ( \x ->
+          WebCrawlerConfiguration'
+            Prelude.<$> (x Data..:? "AuthenticationConfiguration")
+            Prelude.<*> (x Data..:? "CrawlDepth")
+            Prelude.<*> (x Data..:? "MaxContentSizePerPageInMegaBytes")
+            Prelude.<*> (x Data..:? "MaxLinksPerPage")
+            Prelude.<*> (x Data..:? "MaxUrlsPerMinuteCrawlRate")
+            Prelude.<*> (x Data..:? "ProxyConfiguration")
+            Prelude.<*> ( x
+                            Data..:? "UrlExclusionPatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "UrlInclusionPatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "Urls")
+      )
+
+instance Prelude.Hashable WebCrawlerConfiguration where
+  hashWithSalt _salt WebCrawlerConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` authenticationConfiguration
+      `Prelude.hashWithSalt` crawlDepth
+      `Prelude.hashWithSalt` maxContentSizePerPageInMegaBytes
+      `Prelude.hashWithSalt` maxLinksPerPage
+      `Prelude.hashWithSalt` maxUrlsPerMinuteCrawlRate
+      `Prelude.hashWithSalt` proxyConfiguration
+      `Prelude.hashWithSalt` urlExclusionPatterns
+      `Prelude.hashWithSalt` urlInclusionPatterns
+      `Prelude.hashWithSalt` urls
+
+instance Prelude.NFData WebCrawlerConfiguration where
+  rnf WebCrawlerConfiguration' {..} =
+    Prelude.rnf authenticationConfiguration
+      `Prelude.seq` Prelude.rnf crawlDepth
+      `Prelude.seq` Prelude.rnf maxContentSizePerPageInMegaBytes
+      `Prelude.seq` Prelude.rnf maxLinksPerPage
+      `Prelude.seq` Prelude.rnf maxUrlsPerMinuteCrawlRate
+      `Prelude.seq` Prelude.rnf proxyConfiguration
+      `Prelude.seq` Prelude.rnf urlExclusionPatterns
+      `Prelude.seq` Prelude.rnf urlInclusionPatterns
+      `Prelude.seq` Prelude.rnf urls
+
+instance Data.ToJSON WebCrawlerConfiguration where
+  toJSON WebCrawlerConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AuthenticationConfiguration" Data..=)
+              Prelude.<$> authenticationConfiguration,
+            ("CrawlDepth" Data..=) Prelude.<$> crawlDepth,
+            ("MaxContentSizePerPageInMegaBytes" Data..=)
+              Prelude.<$> maxContentSizePerPageInMegaBytes,
+            ("MaxLinksPerPage" Data..=)
+              Prelude.<$> maxLinksPerPage,
+            ("MaxUrlsPerMinuteCrawlRate" Data..=)
+              Prelude.<$> maxUrlsPerMinuteCrawlRate,
+            ("ProxyConfiguration" Data..=)
+              Prelude.<$> proxyConfiguration,
+            ("UrlExclusionPatterns" Data..=)
+              Prelude.<$> urlExclusionPatterns,
+            ("UrlInclusionPatterns" Data..=)
+              Prelude.<$> urlInclusionPatterns,
+            Prelude.Just ("Urls" Data..= urls)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/Types/WebCrawlerMode.hs b/gen/Amazonka/Kendra/Types/WebCrawlerMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/WebCrawlerMode.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.Kendra.Types.WebCrawlerMode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.WebCrawlerMode
+  ( WebCrawlerMode
+      ( ..,
+        WebCrawlerMode_EVERYTHING,
+        WebCrawlerMode_HOST_ONLY,
+        WebCrawlerMode_SUBDOMAINS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype WebCrawlerMode = WebCrawlerMode'
+  { fromWebCrawlerMode ::
+      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 WebCrawlerMode_EVERYTHING :: WebCrawlerMode
+pattern WebCrawlerMode_EVERYTHING = WebCrawlerMode' "EVERYTHING"
+
+pattern WebCrawlerMode_HOST_ONLY :: WebCrawlerMode
+pattern WebCrawlerMode_HOST_ONLY = WebCrawlerMode' "HOST_ONLY"
+
+pattern WebCrawlerMode_SUBDOMAINS :: WebCrawlerMode
+pattern WebCrawlerMode_SUBDOMAINS = WebCrawlerMode' "SUBDOMAINS"
+
+{-# COMPLETE
+  WebCrawlerMode_EVERYTHING,
+  WebCrawlerMode_HOST_ONLY,
+  WebCrawlerMode_SUBDOMAINS,
+  WebCrawlerMode'
+  #-}
diff --git a/gen/Amazonka/Kendra/Types/WorkDocsConfiguration.hs b/gen/Amazonka/Kendra/Types/WorkDocsConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Types/WorkDocsConfiguration.hs
@@ -0,0 +1,258 @@
+{-# 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.Kendra.Types.WorkDocsConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Kendra.Types.WorkDocsConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types.DataSourceToIndexFieldMapping
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the configuration information to connect to Amazon WorkDocs as
+-- your data source.
+--
+-- Amazon WorkDocs connector is available in Oregon, North Virginia,
+-- Sydney, Singapore and Ireland regions.
+--
+-- /See:/ 'newWorkDocsConfiguration' smart constructor.
+data WorkDocsConfiguration = WorkDocsConfiguration'
+  { -- | @TRUE@ to include comments on documents in your index. Including
+    -- comments in your index means each comment is a document that can be
+    -- searched on.
+    --
+    -- The default is set to @FALSE@.
+    crawlComments :: Prelude.Maybe Prelude.Bool,
+    -- | A list of regular expression patterns to exclude certain files in your
+    -- Amazon WorkDocs site repository. Files that match the patterns are
+    -- excluded from the index. Files that don’t match the patterns are
+    -- included in the index. If a file matches both an inclusion and exclusion
+    -- pattern, the exclusion pattern takes precedence and the file isn\'t
+    -- included in the index.
+    exclusionPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | A list of @DataSourceToIndexFieldMapping@ objects that map Amazon
+    -- WorkDocs data source attributes or field names to Amazon Kendra index
+    -- field names. To create custom fields, use the @UpdateIndex@ API before
+    -- you map to Amazon WorkDocs fields. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+    -- The Amazon WorkDocs data source field names must exist in your Amazon
+    -- WorkDocs custom metadata.
+    fieldMappings :: Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping),
+    -- | A list of regular expression patterns to include certain files in your
+    -- Amazon WorkDocs site repository. Files that match the patterns are
+    -- included in the index. Files that don\'t match the patterns are excluded
+    -- from the index. If a file matches both an inclusion and exclusion
+    -- pattern, the exclusion pattern takes precedence and the file isn\'t
+    -- included in the index.
+    inclusionPatterns :: Prelude.Maybe [Prelude.Text],
+    -- | @TRUE@ to use the Amazon WorkDocs change log to determine which
+    -- documents require updating in the index. Depending on the change log\'s
+    -- size, it may take longer for Amazon Kendra to use the change log than to
+    -- scan all of your documents in Amazon WorkDocs.
+    useChangeLog :: Prelude.Maybe Prelude.Bool,
+    -- | The identifier of the directory corresponding to your Amazon WorkDocs
+    -- site repository.
+    --
+    -- You can find the organization ID in the
+    -- <https://console.aws.amazon.com/directoryservicev2/ Directory Service>
+    -- by going to __Active Directory__, then __Directories__. Your Amazon
+    -- WorkDocs site directory has an ID, which is the organization ID. You can
+    -- also set up a new Amazon WorkDocs directory in the Directory Service
+    -- console and enable a Amazon WorkDocs site for the directory in the
+    -- Amazon WorkDocs console.
+    organizationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkDocsConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'crawlComments', 'workDocsConfiguration_crawlComments' - @TRUE@ to include comments on documents in your index. Including
+-- comments in your index means each comment is a document that can be
+-- searched on.
+--
+-- The default is set to @FALSE@.
+--
+-- 'exclusionPatterns', 'workDocsConfiguration_exclusionPatterns' - A list of regular expression patterns to exclude certain files in your
+-- Amazon WorkDocs site repository. Files that match the patterns are
+-- excluded from the index. Files that don’t match the patterns are
+-- included in the index. If a file matches both an inclusion and exclusion
+-- pattern, the exclusion pattern takes precedence and the file isn\'t
+-- included in the index.
+--
+-- 'fieldMappings', 'workDocsConfiguration_fieldMappings' - A list of @DataSourceToIndexFieldMapping@ objects that map Amazon
+-- WorkDocs data source attributes or field names to Amazon Kendra index
+-- field names. To create custom fields, use the @UpdateIndex@ API before
+-- you map to Amazon WorkDocs fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Amazon WorkDocs data source field names must exist in your Amazon
+-- WorkDocs custom metadata.
+--
+-- 'inclusionPatterns', 'workDocsConfiguration_inclusionPatterns' - A list of regular expression patterns to include certain files in your
+-- Amazon WorkDocs site repository. Files that match the patterns are
+-- included in the index. Files that don\'t match the patterns are excluded
+-- from the index. If a file matches both an inclusion and exclusion
+-- pattern, the exclusion pattern takes precedence and the file isn\'t
+-- included in the index.
+--
+-- 'useChangeLog', 'workDocsConfiguration_useChangeLog' - @TRUE@ to use the Amazon WorkDocs change log to determine which
+-- documents require updating in the index. Depending on the change log\'s
+-- size, it may take longer for Amazon Kendra to use the change log than to
+-- scan all of your documents in Amazon WorkDocs.
+--
+-- 'organizationId', 'workDocsConfiguration_organizationId' - The identifier of the directory corresponding to your Amazon WorkDocs
+-- site repository.
+--
+-- You can find the organization ID in the
+-- <https://console.aws.amazon.com/directoryservicev2/ Directory Service>
+-- by going to __Active Directory__, then __Directories__. Your Amazon
+-- WorkDocs site directory has an ID, which is the organization ID. You can
+-- also set up a new Amazon WorkDocs directory in the Directory Service
+-- console and enable a Amazon WorkDocs site for the directory in the
+-- Amazon WorkDocs console.
+newWorkDocsConfiguration ::
+  -- | 'organizationId'
+  Prelude.Text ->
+  WorkDocsConfiguration
+newWorkDocsConfiguration pOrganizationId_ =
+  WorkDocsConfiguration'
+    { crawlComments =
+        Prelude.Nothing,
+      exclusionPatterns = Prelude.Nothing,
+      fieldMappings = Prelude.Nothing,
+      inclusionPatterns = Prelude.Nothing,
+      useChangeLog = Prelude.Nothing,
+      organizationId = pOrganizationId_
+    }
+
+-- | @TRUE@ to include comments on documents in your index. Including
+-- comments in your index means each comment is a document that can be
+-- searched on.
+--
+-- The default is set to @FALSE@.
+workDocsConfiguration_crawlComments :: Lens.Lens' WorkDocsConfiguration (Prelude.Maybe Prelude.Bool)
+workDocsConfiguration_crawlComments = Lens.lens (\WorkDocsConfiguration' {crawlComments} -> crawlComments) (\s@WorkDocsConfiguration' {} a -> s {crawlComments = a} :: WorkDocsConfiguration)
+
+-- | A list of regular expression patterns to exclude certain files in your
+-- Amazon WorkDocs site repository. Files that match the patterns are
+-- excluded from the index. Files that don’t match the patterns are
+-- included in the index. If a file matches both an inclusion and exclusion
+-- pattern, the exclusion pattern takes precedence and the file isn\'t
+-- included in the index.
+workDocsConfiguration_exclusionPatterns :: Lens.Lens' WorkDocsConfiguration (Prelude.Maybe [Prelude.Text])
+workDocsConfiguration_exclusionPatterns = Lens.lens (\WorkDocsConfiguration' {exclusionPatterns} -> exclusionPatterns) (\s@WorkDocsConfiguration' {} a -> s {exclusionPatterns = a} :: WorkDocsConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of @DataSourceToIndexFieldMapping@ objects that map Amazon
+-- WorkDocs data source attributes or field names to Amazon Kendra index
+-- field names. To create custom fields, use the @UpdateIndex@ API before
+-- you map to Amazon WorkDocs fields. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html Mapping data source fields>.
+-- The Amazon WorkDocs data source field names must exist in your Amazon
+-- WorkDocs custom metadata.
+workDocsConfiguration_fieldMappings :: Lens.Lens' WorkDocsConfiguration (Prelude.Maybe (Prelude.NonEmpty DataSourceToIndexFieldMapping))
+workDocsConfiguration_fieldMappings = Lens.lens (\WorkDocsConfiguration' {fieldMappings} -> fieldMappings) (\s@WorkDocsConfiguration' {} a -> s {fieldMappings = a} :: WorkDocsConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of regular expression patterns to include certain files in your
+-- Amazon WorkDocs site repository. Files that match the patterns are
+-- included in the index. Files that don\'t match the patterns are excluded
+-- from the index. If a file matches both an inclusion and exclusion
+-- pattern, the exclusion pattern takes precedence and the file isn\'t
+-- included in the index.
+workDocsConfiguration_inclusionPatterns :: Lens.Lens' WorkDocsConfiguration (Prelude.Maybe [Prelude.Text])
+workDocsConfiguration_inclusionPatterns = Lens.lens (\WorkDocsConfiguration' {inclusionPatterns} -> inclusionPatterns) (\s@WorkDocsConfiguration' {} a -> s {inclusionPatterns = a} :: WorkDocsConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | @TRUE@ to use the Amazon WorkDocs change log to determine which
+-- documents require updating in the index. Depending on the change log\'s
+-- size, it may take longer for Amazon Kendra to use the change log than to
+-- scan all of your documents in Amazon WorkDocs.
+workDocsConfiguration_useChangeLog :: Lens.Lens' WorkDocsConfiguration (Prelude.Maybe Prelude.Bool)
+workDocsConfiguration_useChangeLog = Lens.lens (\WorkDocsConfiguration' {useChangeLog} -> useChangeLog) (\s@WorkDocsConfiguration' {} a -> s {useChangeLog = a} :: WorkDocsConfiguration)
+
+-- | The identifier of the directory corresponding to your Amazon WorkDocs
+-- site repository.
+--
+-- You can find the organization ID in the
+-- <https://console.aws.amazon.com/directoryservicev2/ Directory Service>
+-- by going to __Active Directory__, then __Directories__. Your Amazon
+-- WorkDocs site directory has an ID, which is the organization ID. You can
+-- also set up a new Amazon WorkDocs directory in the Directory Service
+-- console and enable a Amazon WorkDocs site for the directory in the
+-- Amazon WorkDocs console.
+workDocsConfiguration_organizationId :: Lens.Lens' WorkDocsConfiguration Prelude.Text
+workDocsConfiguration_organizationId = Lens.lens (\WorkDocsConfiguration' {organizationId} -> organizationId) (\s@WorkDocsConfiguration' {} a -> s {organizationId = a} :: WorkDocsConfiguration)
+
+instance Data.FromJSON WorkDocsConfiguration where
+  parseJSON =
+    Data.withObject
+      "WorkDocsConfiguration"
+      ( \x ->
+          WorkDocsConfiguration'
+            Prelude.<$> (x Data..:? "CrawlComments")
+            Prelude.<*> ( x
+                            Data..:? "ExclusionPatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "FieldMappings")
+            Prelude.<*> ( x
+                            Data..:? "InclusionPatterns"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "UseChangeLog")
+            Prelude.<*> (x Data..: "OrganizationId")
+      )
+
+instance Prelude.Hashable WorkDocsConfiguration where
+  hashWithSalt _salt WorkDocsConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` crawlComments
+      `Prelude.hashWithSalt` exclusionPatterns
+      `Prelude.hashWithSalt` fieldMappings
+      `Prelude.hashWithSalt` inclusionPatterns
+      `Prelude.hashWithSalt` useChangeLog
+      `Prelude.hashWithSalt` organizationId
+
+instance Prelude.NFData WorkDocsConfiguration where
+  rnf WorkDocsConfiguration' {..} =
+    Prelude.rnf crawlComments
+      `Prelude.seq` Prelude.rnf exclusionPatterns
+      `Prelude.seq` Prelude.rnf fieldMappings
+      `Prelude.seq` Prelude.rnf inclusionPatterns
+      `Prelude.seq` Prelude.rnf useChangeLog
+      `Prelude.seq` Prelude.rnf organizationId
+
+instance Data.ToJSON WorkDocsConfiguration where
+  toJSON WorkDocsConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CrawlComments" Data..=) Prelude.<$> crawlComments,
+            ("ExclusionPatterns" Data..=)
+              Prelude.<$> exclusionPatterns,
+            ("FieldMappings" Data..=) Prelude.<$> fieldMappings,
+            ("InclusionPatterns" Data..=)
+              Prelude.<$> inclusionPatterns,
+            ("UseChangeLog" Data..=) Prelude.<$> useChangeLog,
+            Prelude.Just
+              ("OrganizationId" Data..= organizationId)
+          ]
+      )
diff --git a/gen/Amazonka/Kendra/UntagResource.hs b/gen/Amazonka/Kendra/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/UntagResource.hs
@@ -0,0 +1,177 @@
+{-# 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.Kendra.UntagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes a tag from an index, FAQ, or a data source.
+module Amazonka.Kendra.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.Kendra.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 index, FAQ, or data source to
+    -- remove the tag from.
+    resourceARN :: Prelude.Text,
+    -- | A list of tag keys to remove from the index, FAQ, or data source. 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 index, FAQ, or data source to
+-- remove the tag from.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - A list of tag keys to remove from the index, FAQ, or data source. 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 index, FAQ, or data source to
+-- remove the tag from.
+untagResource_resourceARN :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceARN = Lens.lens (\UntagResource' {resourceARN} -> resourceARN) (\s@UntagResource' {} a -> s {resourceARN = a} :: UntagResource)
+
+-- | A list of tag keys to remove from the index, FAQ, or data source. 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.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceARN
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceARN
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.UntagResource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UntagResource where
+  toJSON UntagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResourceARN" Data..= resourceARN),
+            Prelude.Just ("TagKeys" Data..= tagKeys)
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UntagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'untagResourceResponse_httpStatus' - The response's http status code.
+newUntagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourceResponse
+newUntagResourceResponse pHttpStatus_ =
+  UntagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int
+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf UntagResourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/UpdateAccessControlConfiguration.hs b/gen/Amazonka/Kendra/UpdateAccessControlConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/UpdateAccessControlConfiguration.hs
@@ -0,0 +1,295 @@
+{-# 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.Kendra.UpdateAccessControlConfiguration
+-- 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 access control configuration for your documents in an index.
+-- This includes user and group access information for your documents. This
+-- is useful for user context filtering, where search results are filtered
+-- based on the user or their group access to documents.
+--
+-- You can update an access control configuration you created without
+-- indexing all of your documents again. For example, your index contains
+-- top-secret company documents that only certain employees or users should
+-- access. You created an \'allow\' access control configuration for one
+-- user who recently joined the \'top-secret\' team, switching from a team
+-- with \'deny\' access to top-secret documents. However, the user suddenly
+-- returns to their previous team and should no longer have access to top
+-- secret documents. You can update the access control configuration to
+-- re-configure access control for your documents as circumstances change.
+--
+-- You call the
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_BatchPutDocument.html BatchPutDocument>
+-- API to apply the updated access control configuration, with the
+-- @AccessControlConfigurationId@ included in the
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_Document.html Document>
+-- object. If you use an S3 bucket as a data source, you synchronize your
+-- data source to apply the @AccessControlConfigurationId@ in the
+-- @.metadata.json@ file. Amazon Kendra currently only supports access
+-- control configuration for S3 data sources and documents indexed using
+-- the @BatchPutDocument@ API.
+module Amazonka.Kendra.UpdateAccessControlConfiguration
+  ( -- * Creating a Request
+    UpdateAccessControlConfiguration (..),
+    newUpdateAccessControlConfiguration,
+
+    -- * Request Lenses
+    updateAccessControlConfiguration_accessControlList,
+    updateAccessControlConfiguration_description,
+    updateAccessControlConfiguration_hierarchicalAccessControlList,
+    updateAccessControlConfiguration_name,
+    updateAccessControlConfiguration_indexId,
+    updateAccessControlConfiguration_id,
+
+    -- * Destructuring the Response
+    UpdateAccessControlConfigurationResponse (..),
+    newUpdateAccessControlConfigurationResponse,
+
+    -- * Response Lenses
+    updateAccessControlConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateAccessControlConfiguration' smart constructor.
+data UpdateAccessControlConfiguration = UpdateAccessControlConfiguration'
+  { -- | Information you want to update on principals (users and\/or groups) and
+    -- which documents they should have access to. This is useful for user
+    -- context filtering, where search results are filtered based on the user
+    -- or their group access to documents.
+    accessControlList :: Prelude.Maybe [Principal],
+    -- | A new description for the access control configuration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The updated list of
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/API_Principal.html principal>
+    -- lists that define the hierarchy for which documents users should have
+    -- access to.
+    hierarchicalAccessControlList :: Prelude.Maybe (Prelude.NonEmpty HierarchicalPrincipal),
+    -- | A new name for the access control configuration.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the index for an access control configuration.
+    indexId :: Prelude.Text,
+    -- | The identifier of the access control configuration you want to update.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAccessControlConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessControlList', 'updateAccessControlConfiguration_accessControlList' - Information you want to update on principals (users and\/or groups) and
+-- which documents they should have access to. This is useful for user
+-- context filtering, where search results are filtered based on the user
+-- or their group access to documents.
+--
+-- 'description', 'updateAccessControlConfiguration_description' - A new description for the access control configuration.
+--
+-- 'hierarchicalAccessControlList', 'updateAccessControlConfiguration_hierarchicalAccessControlList' - The updated list of
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_Principal.html principal>
+-- lists that define the hierarchy for which documents users should have
+-- access to.
+--
+-- 'name', 'updateAccessControlConfiguration_name' - A new name for the access control configuration.
+--
+-- 'indexId', 'updateAccessControlConfiguration_indexId' - The identifier of the index for an access control configuration.
+--
+-- 'id', 'updateAccessControlConfiguration_id' - The identifier of the access control configuration you want to update.
+newUpdateAccessControlConfiguration ::
+  -- | 'indexId'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  UpdateAccessControlConfiguration
+newUpdateAccessControlConfiguration pIndexId_ pId_ =
+  UpdateAccessControlConfiguration'
+    { accessControlList =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      hierarchicalAccessControlList =
+        Prelude.Nothing,
+      name = Prelude.Nothing,
+      indexId = pIndexId_,
+      id = pId_
+    }
+
+-- | Information you want to update on principals (users and\/or groups) and
+-- which documents they should have access to. This is useful for user
+-- context filtering, where search results are filtered based on the user
+-- or their group access to documents.
+updateAccessControlConfiguration_accessControlList :: Lens.Lens' UpdateAccessControlConfiguration (Prelude.Maybe [Principal])
+updateAccessControlConfiguration_accessControlList = Lens.lens (\UpdateAccessControlConfiguration' {accessControlList} -> accessControlList) (\s@UpdateAccessControlConfiguration' {} a -> s {accessControlList = a} :: UpdateAccessControlConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A new description for the access control configuration.
+updateAccessControlConfiguration_description :: Lens.Lens' UpdateAccessControlConfiguration (Prelude.Maybe Prelude.Text)
+updateAccessControlConfiguration_description = Lens.lens (\UpdateAccessControlConfiguration' {description} -> description) (\s@UpdateAccessControlConfiguration' {} a -> s {description = a} :: UpdateAccessControlConfiguration)
+
+-- | The updated list of
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_Principal.html principal>
+-- lists that define the hierarchy for which documents users should have
+-- access to.
+updateAccessControlConfiguration_hierarchicalAccessControlList :: Lens.Lens' UpdateAccessControlConfiguration (Prelude.Maybe (Prelude.NonEmpty HierarchicalPrincipal))
+updateAccessControlConfiguration_hierarchicalAccessControlList = Lens.lens (\UpdateAccessControlConfiguration' {hierarchicalAccessControlList} -> hierarchicalAccessControlList) (\s@UpdateAccessControlConfiguration' {} a -> s {hierarchicalAccessControlList = a} :: UpdateAccessControlConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A new name for the access control configuration.
+updateAccessControlConfiguration_name :: Lens.Lens' UpdateAccessControlConfiguration (Prelude.Maybe Prelude.Text)
+updateAccessControlConfiguration_name = Lens.lens (\UpdateAccessControlConfiguration' {name} -> name) (\s@UpdateAccessControlConfiguration' {} a -> s {name = a} :: UpdateAccessControlConfiguration)
+
+-- | The identifier of the index for an access control configuration.
+updateAccessControlConfiguration_indexId :: Lens.Lens' UpdateAccessControlConfiguration Prelude.Text
+updateAccessControlConfiguration_indexId = Lens.lens (\UpdateAccessControlConfiguration' {indexId} -> indexId) (\s@UpdateAccessControlConfiguration' {} a -> s {indexId = a} :: UpdateAccessControlConfiguration)
+
+-- | The identifier of the access control configuration you want to update.
+updateAccessControlConfiguration_id :: Lens.Lens' UpdateAccessControlConfiguration Prelude.Text
+updateAccessControlConfiguration_id = Lens.lens (\UpdateAccessControlConfiguration' {id} -> id) (\s@UpdateAccessControlConfiguration' {} a -> s {id = a} :: UpdateAccessControlConfiguration)
+
+instance
+  Core.AWSRequest
+    UpdateAccessControlConfiguration
+  where
+  type
+    AWSResponse UpdateAccessControlConfiguration =
+      UpdateAccessControlConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateAccessControlConfigurationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    UpdateAccessControlConfiguration
+  where
+  hashWithSalt
+    _salt
+    UpdateAccessControlConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` accessControlList
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` hierarchicalAccessControlList
+        `Prelude.hashWithSalt` name
+        `Prelude.hashWithSalt` indexId
+        `Prelude.hashWithSalt` id
+
+instance
+  Prelude.NFData
+    UpdateAccessControlConfiguration
+  where
+  rnf UpdateAccessControlConfiguration' {..} =
+    Prelude.rnf accessControlList
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf hierarchicalAccessControlList
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf indexId
+      `Prelude.seq` Prelude.rnf id
+
+instance
+  Data.ToHeaders
+    UpdateAccessControlConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.UpdateAccessControlConfiguration" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateAccessControlConfiguration where
+  toJSON UpdateAccessControlConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AccessControlList" Data..=)
+              Prelude.<$> accessControlList,
+            ("Description" Data..=) Prelude.<$> description,
+            ("HierarchicalAccessControlList" Data..=)
+              Prelude.<$> hierarchicalAccessControlList,
+            ("Name" Data..=) Prelude.<$> name,
+            Prelude.Just ("IndexId" Data..= indexId),
+            Prelude.Just ("Id" Data..= id)
+          ]
+      )
+
+instance Data.ToPath UpdateAccessControlConfiguration where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    UpdateAccessControlConfiguration
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateAccessControlConfigurationResponse' smart constructor.
+data UpdateAccessControlConfigurationResponse = UpdateAccessControlConfigurationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAccessControlConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateAccessControlConfigurationResponse_httpStatus' - The response's http status code.
+newUpdateAccessControlConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateAccessControlConfigurationResponse
+newUpdateAccessControlConfigurationResponse
+  pHttpStatus_ =
+    UpdateAccessControlConfigurationResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+updateAccessControlConfigurationResponse_httpStatus :: Lens.Lens' UpdateAccessControlConfigurationResponse Prelude.Int
+updateAccessControlConfigurationResponse_httpStatus = Lens.lens (\UpdateAccessControlConfigurationResponse' {httpStatus} -> httpStatus) (\s@UpdateAccessControlConfigurationResponse' {} a -> s {httpStatus = a} :: UpdateAccessControlConfigurationResponse)
+
+instance
+  Prelude.NFData
+    UpdateAccessControlConfigurationResponse
+  where
+  rnf UpdateAccessControlConfigurationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Kendra/UpdateDataSource.hs b/gen/Amazonka/Kendra/UpdateDataSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/UpdateDataSource.hs
@@ -0,0 +1,305 @@
+{-# 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.Kendra.UpdateDataSource
+-- 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 Amazon Kendra data source connector.
+module Amazonka.Kendra.UpdateDataSource
+  ( -- * Creating a Request
+    UpdateDataSource (..),
+    newUpdateDataSource,
+
+    -- * Request Lenses
+    updateDataSource_configuration,
+    updateDataSource_customDocumentEnrichmentConfiguration,
+    updateDataSource_description,
+    updateDataSource_languageCode,
+    updateDataSource_name,
+    updateDataSource_roleArn,
+    updateDataSource_schedule,
+    updateDataSource_vpcConfiguration,
+    updateDataSource_id,
+    updateDataSource_indexId,
+
+    -- * Destructuring the Response
+    UpdateDataSourceResponse (..),
+    newUpdateDataSourceResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateDataSource' smart constructor.
+data UpdateDataSource = UpdateDataSource'
+  { -- | Configuration information you want to update for the data source
+    -- connector.
+    configuration :: Prelude.Maybe DataSourceConfiguration,
+    -- | Configuration information you want to update for altering document
+    -- metadata and content during the document ingestion process.
+    --
+    -- For more information on how to create, modify and delete document
+    -- metadata, or make other content alterations when you ingest documents
+    -- into Amazon Kendra, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/custom-document-enrichment.html Customizing document metadata during the ingestion process>.
+    customDocumentEnrichmentConfiguration :: Prelude.Maybe CustomDocumentEnrichmentConfiguration,
+    -- | A new description for the data source connector.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The code for a language you want to update for the data source
+    -- connector. This allows you to support a language for all documents when
+    -- updating the data source. English is supported by default. For more
+    -- information on supported languages, including their codes, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/in-adding-languages.html Adding documents in languages other than English>.
+    languageCode :: Prelude.Maybe Prelude.Text,
+    -- | A new name for the data source connector.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of a role with permission to access the
+    -- data source and required resources. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html IAM roles for Amazon Kendra>.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | The sync schedule you want to update for the data source connector.
+    schedule :: Prelude.Maybe Prelude.Text,
+    -- | Configuration information for an Amazon Virtual Private Cloud to connect
+    -- to your data source. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+    vpcConfiguration :: Prelude.Maybe DataSourceVpcConfiguration,
+    -- | The identifier of the data source connector you want to update.
+    id :: Prelude.Text,
+    -- | The identifier of the index used with the data source connector.
+    indexId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDataSource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configuration', 'updateDataSource_configuration' - Configuration information you want to update for the data source
+-- connector.
+--
+-- 'customDocumentEnrichmentConfiguration', 'updateDataSource_customDocumentEnrichmentConfiguration' - Configuration information you want to update for altering document
+-- metadata and content during the document ingestion process.
+--
+-- For more information on how to create, modify and delete document
+-- metadata, or make other content alterations when you ingest documents
+-- into Amazon Kendra, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/custom-document-enrichment.html Customizing document metadata during the ingestion process>.
+--
+-- 'description', 'updateDataSource_description' - A new description for the data source connector.
+--
+-- 'languageCode', 'updateDataSource_languageCode' - The code for a language you want to update for the data source
+-- connector. This allows you to support a language for all documents when
+-- updating the data source. English is supported by default. For more
+-- information on supported languages, including their codes, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/in-adding-languages.html Adding documents in languages other than English>.
+--
+-- 'name', 'updateDataSource_name' - A new name for the data source connector.
+--
+-- 'roleArn', 'updateDataSource_roleArn' - The Amazon Resource Name (ARN) of a role with permission to access the
+-- data source and required resources. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html IAM roles for Amazon Kendra>.
+--
+-- 'schedule', 'updateDataSource_schedule' - The sync schedule you want to update for the data source connector.
+--
+-- 'vpcConfiguration', 'updateDataSource_vpcConfiguration' - Configuration information for an Amazon Virtual Private Cloud to connect
+-- to your data source. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+--
+-- 'id', 'updateDataSource_id' - The identifier of the data source connector you want to update.
+--
+-- 'indexId', 'updateDataSource_indexId' - The identifier of the index used with the data source connector.
+newUpdateDataSource ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'indexId'
+  Prelude.Text ->
+  UpdateDataSource
+newUpdateDataSource pId_ pIndexId_ =
+  UpdateDataSource'
+    { configuration = Prelude.Nothing,
+      customDocumentEnrichmentConfiguration =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      languageCode = Prelude.Nothing,
+      name = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      schedule = Prelude.Nothing,
+      vpcConfiguration = Prelude.Nothing,
+      id = pId_,
+      indexId = pIndexId_
+    }
+
+-- | Configuration information you want to update for the data source
+-- connector.
+updateDataSource_configuration :: Lens.Lens' UpdateDataSource (Prelude.Maybe DataSourceConfiguration)
+updateDataSource_configuration = Lens.lens (\UpdateDataSource' {configuration} -> configuration) (\s@UpdateDataSource' {} a -> s {configuration = a} :: UpdateDataSource)
+
+-- | Configuration information you want to update for altering document
+-- metadata and content during the document ingestion process.
+--
+-- For more information on how to create, modify and delete document
+-- metadata, or make other content alterations when you ingest documents
+-- into Amazon Kendra, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/custom-document-enrichment.html Customizing document metadata during the ingestion process>.
+updateDataSource_customDocumentEnrichmentConfiguration :: Lens.Lens' UpdateDataSource (Prelude.Maybe CustomDocumentEnrichmentConfiguration)
+updateDataSource_customDocumentEnrichmentConfiguration = Lens.lens (\UpdateDataSource' {customDocumentEnrichmentConfiguration} -> customDocumentEnrichmentConfiguration) (\s@UpdateDataSource' {} a -> s {customDocumentEnrichmentConfiguration = a} :: UpdateDataSource)
+
+-- | A new description for the data source connector.
+updateDataSource_description :: Lens.Lens' UpdateDataSource (Prelude.Maybe Prelude.Text)
+updateDataSource_description = Lens.lens (\UpdateDataSource' {description} -> description) (\s@UpdateDataSource' {} a -> s {description = a} :: UpdateDataSource)
+
+-- | The code for a language you want to update for the data source
+-- connector. This allows you to support a language for all documents when
+-- updating the data source. English is supported by default. For more
+-- information on supported languages, including their codes, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/in-adding-languages.html Adding documents in languages other than English>.
+updateDataSource_languageCode :: Lens.Lens' UpdateDataSource (Prelude.Maybe Prelude.Text)
+updateDataSource_languageCode = Lens.lens (\UpdateDataSource' {languageCode} -> languageCode) (\s@UpdateDataSource' {} a -> s {languageCode = a} :: UpdateDataSource)
+
+-- | A new name for the data source connector.
+updateDataSource_name :: Lens.Lens' UpdateDataSource (Prelude.Maybe Prelude.Text)
+updateDataSource_name = Lens.lens (\UpdateDataSource' {name} -> name) (\s@UpdateDataSource' {} a -> s {name = a} :: UpdateDataSource)
+
+-- | The Amazon Resource Name (ARN) of a role with permission to access the
+-- data source and required resources. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html IAM roles for Amazon Kendra>.
+updateDataSource_roleArn :: Lens.Lens' UpdateDataSource (Prelude.Maybe Prelude.Text)
+updateDataSource_roleArn = Lens.lens (\UpdateDataSource' {roleArn} -> roleArn) (\s@UpdateDataSource' {} a -> s {roleArn = a} :: UpdateDataSource)
+
+-- | The sync schedule you want to update for the data source connector.
+updateDataSource_schedule :: Lens.Lens' UpdateDataSource (Prelude.Maybe Prelude.Text)
+updateDataSource_schedule = Lens.lens (\UpdateDataSource' {schedule} -> schedule) (\s@UpdateDataSource' {} a -> s {schedule = a} :: UpdateDataSource)
+
+-- | Configuration information for an Amazon Virtual Private Cloud to connect
+-- to your data source. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/vpc-configuration.html Configuring a VPC>.
+updateDataSource_vpcConfiguration :: Lens.Lens' UpdateDataSource (Prelude.Maybe DataSourceVpcConfiguration)
+updateDataSource_vpcConfiguration = Lens.lens (\UpdateDataSource' {vpcConfiguration} -> vpcConfiguration) (\s@UpdateDataSource' {} a -> s {vpcConfiguration = a} :: UpdateDataSource)
+
+-- | The identifier of the data source connector you want to update.
+updateDataSource_id :: Lens.Lens' UpdateDataSource Prelude.Text
+updateDataSource_id = Lens.lens (\UpdateDataSource' {id} -> id) (\s@UpdateDataSource' {} a -> s {id = a} :: UpdateDataSource)
+
+-- | The identifier of the index used with the data source connector.
+updateDataSource_indexId :: Lens.Lens' UpdateDataSource Prelude.Text
+updateDataSource_indexId = Lens.lens (\UpdateDataSource' {indexId} -> indexId) (\s@UpdateDataSource' {} a -> s {indexId = a} :: UpdateDataSource)
+
+instance Core.AWSRequest UpdateDataSource where
+  type
+    AWSResponse UpdateDataSource =
+      UpdateDataSourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull UpdateDataSourceResponse'
+
+instance Prelude.Hashable UpdateDataSource where
+  hashWithSalt _salt UpdateDataSource' {..} =
+    _salt
+      `Prelude.hashWithSalt` configuration
+      `Prelude.hashWithSalt` customDocumentEnrichmentConfiguration
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` languageCode
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` schedule
+      `Prelude.hashWithSalt` vpcConfiguration
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` indexId
+
+instance Prelude.NFData UpdateDataSource where
+  rnf UpdateDataSource' {..} =
+    Prelude.rnf configuration
+      `Prelude.seq` Prelude.rnf customDocumentEnrichmentConfiguration
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf languageCode
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf schedule
+      `Prelude.seq` Prelude.rnf vpcConfiguration
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf indexId
+
+instance Data.ToHeaders UpdateDataSource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.UpdateDataSource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateDataSource where
+  toJSON UpdateDataSource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Configuration" Data..=) Prelude.<$> configuration,
+            ("CustomDocumentEnrichmentConfiguration" Data..=)
+              Prelude.<$> customDocumentEnrichmentConfiguration,
+            ("Description" Data..=) Prelude.<$> description,
+            ("LanguageCode" Data..=) Prelude.<$> languageCode,
+            ("Name" Data..=) Prelude.<$> name,
+            ("RoleArn" Data..=) Prelude.<$> roleArn,
+            ("Schedule" Data..=) Prelude.<$> schedule,
+            ("VpcConfiguration" Data..=)
+              Prelude.<$> vpcConfiguration,
+            Prelude.Just ("Id" Data..= id),
+            Prelude.Just ("IndexId" Data..= indexId)
+          ]
+      )
+
+instance Data.ToPath UpdateDataSource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateDataSource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateDataSourceResponse' smart constructor.
+data UpdateDataSourceResponse = UpdateDataSourceResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDataSourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newUpdateDataSourceResponse ::
+  UpdateDataSourceResponse
+newUpdateDataSourceResponse =
+  UpdateDataSourceResponse'
+
+instance Prelude.NFData UpdateDataSourceResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Kendra/UpdateExperience.hs b/gen/Amazonka/Kendra/UpdateExperience.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/UpdateExperience.hs
@@ -0,0 +1,222 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.UpdateExperience
+-- 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 your Amazon Kendra experience such as a search application. For
+-- more information on creating a search application experience, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/deploying-search-experience-no-code.html Building a search experience with no code>.
+module Amazonka.Kendra.UpdateExperience
+  ( -- * Creating a Request
+    UpdateExperience (..),
+    newUpdateExperience,
+
+    -- * Request Lenses
+    updateExperience_configuration,
+    updateExperience_description,
+    updateExperience_name,
+    updateExperience_roleArn,
+    updateExperience_id,
+    updateExperience_indexId,
+
+    -- * Destructuring the Response
+    UpdateExperienceResponse (..),
+    newUpdateExperienceResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateExperience' smart constructor.
+data UpdateExperience = UpdateExperience'
+  { -- | Configuration information you want to update for your Amazon Kendra
+    -- experience.
+    configuration :: Prelude.Maybe ExperienceConfiguration,
+    -- | A new description for your Amazon Kendra experience.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A new name for your Amazon Kendra experience.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of a role with permission to access
+    -- @Query@ API, @QuerySuggestions@ API, @SubmitFeedback@ API, and IAM
+    -- Identity Center that stores your user and group information. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html IAM roles for Amazon Kendra>.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of your Amazon Kendra experience you want to update.
+    id :: Prelude.Text,
+    -- | The identifier of the index for your Amazon Kendra experience.
+    indexId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateExperience' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configuration', 'updateExperience_configuration' - Configuration information you want to update for your Amazon Kendra
+-- experience.
+--
+-- 'description', 'updateExperience_description' - A new description for your Amazon Kendra experience.
+--
+-- 'name', 'updateExperience_name' - A new name for your Amazon Kendra experience.
+--
+-- 'roleArn', 'updateExperience_roleArn' - The Amazon Resource Name (ARN) of a role with permission to access
+-- @Query@ API, @QuerySuggestions@ API, @SubmitFeedback@ API, and IAM
+-- Identity Center that stores your user and group information. For more
+-- information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html IAM roles for Amazon Kendra>.
+--
+-- 'id', 'updateExperience_id' - The identifier of your Amazon Kendra experience you want to update.
+--
+-- 'indexId', 'updateExperience_indexId' - The identifier of the index for your Amazon Kendra experience.
+newUpdateExperience ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'indexId'
+  Prelude.Text ->
+  UpdateExperience
+newUpdateExperience pId_ pIndexId_ =
+  UpdateExperience'
+    { configuration = Prelude.Nothing,
+      description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      id = pId_,
+      indexId = pIndexId_
+    }
+
+-- | Configuration information you want to update for your Amazon Kendra
+-- experience.
+updateExperience_configuration :: Lens.Lens' UpdateExperience (Prelude.Maybe ExperienceConfiguration)
+updateExperience_configuration = Lens.lens (\UpdateExperience' {configuration} -> configuration) (\s@UpdateExperience' {} a -> s {configuration = a} :: UpdateExperience)
+
+-- | A new description for your Amazon Kendra experience.
+updateExperience_description :: Lens.Lens' UpdateExperience (Prelude.Maybe Prelude.Text)
+updateExperience_description = Lens.lens (\UpdateExperience' {description} -> description) (\s@UpdateExperience' {} a -> s {description = a} :: UpdateExperience)
+
+-- | A new name for your Amazon Kendra experience.
+updateExperience_name :: Lens.Lens' UpdateExperience (Prelude.Maybe Prelude.Text)
+updateExperience_name = Lens.lens (\UpdateExperience' {name} -> name) (\s@UpdateExperience' {} a -> s {name = a} :: UpdateExperience)
+
+-- | The Amazon Resource Name (ARN) of a role with permission to access
+-- @Query@ API, @QuerySuggestions@ API, @SubmitFeedback@ API, and IAM
+-- Identity Center that stores your user and group information. For more
+-- information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html IAM roles for Amazon Kendra>.
+updateExperience_roleArn :: Lens.Lens' UpdateExperience (Prelude.Maybe Prelude.Text)
+updateExperience_roleArn = Lens.lens (\UpdateExperience' {roleArn} -> roleArn) (\s@UpdateExperience' {} a -> s {roleArn = a} :: UpdateExperience)
+
+-- | The identifier of your Amazon Kendra experience you want to update.
+updateExperience_id :: Lens.Lens' UpdateExperience Prelude.Text
+updateExperience_id = Lens.lens (\UpdateExperience' {id} -> id) (\s@UpdateExperience' {} a -> s {id = a} :: UpdateExperience)
+
+-- | The identifier of the index for your Amazon Kendra experience.
+updateExperience_indexId :: Lens.Lens' UpdateExperience Prelude.Text
+updateExperience_indexId = Lens.lens (\UpdateExperience' {indexId} -> indexId) (\s@UpdateExperience' {} a -> s {indexId = a} :: UpdateExperience)
+
+instance Core.AWSRequest UpdateExperience where
+  type
+    AWSResponse UpdateExperience =
+      UpdateExperienceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull UpdateExperienceResponse'
+
+instance Prelude.Hashable UpdateExperience where
+  hashWithSalt _salt UpdateExperience' {..} =
+    _salt
+      `Prelude.hashWithSalt` configuration
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` indexId
+
+instance Prelude.NFData UpdateExperience where
+  rnf UpdateExperience' {..} =
+    Prelude.rnf configuration
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf indexId
+
+instance Data.ToHeaders UpdateExperience where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.UpdateExperience" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateExperience where
+  toJSON UpdateExperience' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Configuration" Data..=) Prelude.<$> configuration,
+            ("Description" Data..=) Prelude.<$> description,
+            ("Name" Data..=) Prelude.<$> name,
+            ("RoleArn" Data..=) Prelude.<$> roleArn,
+            Prelude.Just ("Id" Data..= id),
+            Prelude.Just ("IndexId" Data..= indexId)
+          ]
+      )
+
+instance Data.ToPath UpdateExperience where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateExperience where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateExperienceResponse' smart constructor.
+data UpdateExperienceResponse = UpdateExperienceResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateExperienceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newUpdateExperienceResponse ::
+  UpdateExperienceResponse
+newUpdateExperienceResponse =
+  UpdateExperienceResponse'
+
+instance Prelude.NFData UpdateExperienceResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Kendra/UpdateIndex.hs b/gen/Amazonka/Kendra/UpdateIndex.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/UpdateIndex.hs
@@ -0,0 +1,282 @@
+{-# 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.Kendra.UpdateIndex
+-- 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 Amazon Kendra index.
+module Amazonka.Kendra.UpdateIndex
+  ( -- * Creating a Request
+    UpdateIndex (..),
+    newUpdateIndex,
+
+    -- * Request Lenses
+    updateIndex_capacityUnits,
+    updateIndex_description,
+    updateIndex_documentMetadataConfigurationUpdates,
+    updateIndex_name,
+    updateIndex_roleArn,
+    updateIndex_userContextPolicy,
+    updateIndex_userGroupResolutionConfiguration,
+    updateIndex_userTokenConfigurations,
+    updateIndex_id,
+
+    -- * Destructuring the Response
+    UpdateIndexResponse (..),
+    newUpdateIndexResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateIndex' smart constructor.
+data UpdateIndex = UpdateIndex'
+  { -- | Sets the number of additional document storage and query capacity units
+    -- that should be used by the index. You can change the capacity of the
+    -- index up to 5 times per day, or make 5 API calls.
+    --
+    -- If you are using extra storage units, you can\'t reduce the storage
+    -- capacity below what is required to meet the storage needs for your
+    -- index.
+    capacityUnits :: Prelude.Maybe CapacityUnitsConfiguration,
+    -- | A new description for the index.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The document metadata configuration you want to update for the index.
+    -- Document metadata are fields or attributes associated with your
+    -- documents. For example, the company department name associated with each
+    -- document.
+    documentMetadataConfigurationUpdates :: Prelude.Maybe [DocumentMetadataConfiguration],
+    -- | The name of the index you want to update.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | An Identity and Access Management (IAM) role that gives Amazon Kendra
+    -- permission to access Amazon CloudWatch logs and metrics.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | The user context policy.
+    userContextPolicy :: Prelude.Maybe UserContextPolicy,
+    -- | Enables fetching access levels of groups and users from an IAM Identity
+    -- Center (successor to Single Sign-On) identity source. To configure this,
+    -- see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/API_UserGroupResolutionConfiguration.html UserGroupResolutionConfiguration>.
+    userGroupResolutionConfiguration :: Prelude.Maybe UserGroupResolutionConfiguration,
+    -- | The user token configuration.
+    userTokenConfigurations :: Prelude.Maybe [UserTokenConfiguration],
+    -- | The identifier of the index you want to update.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateIndex' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'capacityUnits', 'updateIndex_capacityUnits' - Sets the number of additional document storage and query capacity units
+-- that should be used by the index. You can change the capacity of the
+-- index up to 5 times per day, or make 5 API calls.
+--
+-- If you are using extra storage units, you can\'t reduce the storage
+-- capacity below what is required to meet the storage needs for your
+-- index.
+--
+-- 'description', 'updateIndex_description' - A new description for the index.
+--
+-- 'documentMetadataConfigurationUpdates', 'updateIndex_documentMetadataConfigurationUpdates' - The document metadata configuration you want to update for the index.
+-- Document metadata are fields or attributes associated with your
+-- documents. For example, the company department name associated with each
+-- document.
+--
+-- 'name', 'updateIndex_name' - The name of the index you want to update.
+--
+-- 'roleArn', 'updateIndex_roleArn' - An Identity and Access Management (IAM) role that gives Amazon Kendra
+-- permission to access Amazon CloudWatch logs and metrics.
+--
+-- 'userContextPolicy', 'updateIndex_userContextPolicy' - The user context policy.
+--
+-- 'userGroupResolutionConfiguration', 'updateIndex_userGroupResolutionConfiguration' - Enables fetching access levels of groups and users from an IAM Identity
+-- Center (successor to Single Sign-On) identity source. To configure this,
+-- see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_UserGroupResolutionConfiguration.html UserGroupResolutionConfiguration>.
+--
+-- 'userTokenConfigurations', 'updateIndex_userTokenConfigurations' - The user token configuration.
+--
+-- 'id', 'updateIndex_id' - The identifier of the index you want to update.
+newUpdateIndex ::
+  -- | 'id'
+  Prelude.Text ->
+  UpdateIndex
+newUpdateIndex pId_ =
+  UpdateIndex'
+    { capacityUnits = Prelude.Nothing,
+      description = Prelude.Nothing,
+      documentMetadataConfigurationUpdates =
+        Prelude.Nothing,
+      name = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      userContextPolicy = Prelude.Nothing,
+      userGroupResolutionConfiguration = Prelude.Nothing,
+      userTokenConfigurations = Prelude.Nothing,
+      id = pId_
+    }
+
+-- | Sets the number of additional document storage and query capacity units
+-- that should be used by the index. You can change the capacity of the
+-- index up to 5 times per day, or make 5 API calls.
+--
+-- If you are using extra storage units, you can\'t reduce the storage
+-- capacity below what is required to meet the storage needs for your
+-- index.
+updateIndex_capacityUnits :: Lens.Lens' UpdateIndex (Prelude.Maybe CapacityUnitsConfiguration)
+updateIndex_capacityUnits = Lens.lens (\UpdateIndex' {capacityUnits} -> capacityUnits) (\s@UpdateIndex' {} a -> s {capacityUnits = a} :: UpdateIndex)
+
+-- | A new description for the index.
+updateIndex_description :: Lens.Lens' UpdateIndex (Prelude.Maybe Prelude.Text)
+updateIndex_description = Lens.lens (\UpdateIndex' {description} -> description) (\s@UpdateIndex' {} a -> s {description = a} :: UpdateIndex)
+
+-- | The document metadata configuration you want to update for the index.
+-- Document metadata are fields or attributes associated with your
+-- documents. For example, the company department name associated with each
+-- document.
+updateIndex_documentMetadataConfigurationUpdates :: Lens.Lens' UpdateIndex (Prelude.Maybe [DocumentMetadataConfiguration])
+updateIndex_documentMetadataConfigurationUpdates = Lens.lens (\UpdateIndex' {documentMetadataConfigurationUpdates} -> documentMetadataConfigurationUpdates) (\s@UpdateIndex' {} a -> s {documentMetadataConfigurationUpdates = a} :: UpdateIndex) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the index you want to update.
+updateIndex_name :: Lens.Lens' UpdateIndex (Prelude.Maybe Prelude.Text)
+updateIndex_name = Lens.lens (\UpdateIndex' {name} -> name) (\s@UpdateIndex' {} a -> s {name = a} :: UpdateIndex)
+
+-- | An Identity and Access Management (IAM) role that gives Amazon Kendra
+-- permission to access Amazon CloudWatch logs and metrics.
+updateIndex_roleArn :: Lens.Lens' UpdateIndex (Prelude.Maybe Prelude.Text)
+updateIndex_roleArn = Lens.lens (\UpdateIndex' {roleArn} -> roleArn) (\s@UpdateIndex' {} a -> s {roleArn = a} :: UpdateIndex)
+
+-- | The user context policy.
+updateIndex_userContextPolicy :: Lens.Lens' UpdateIndex (Prelude.Maybe UserContextPolicy)
+updateIndex_userContextPolicy = Lens.lens (\UpdateIndex' {userContextPolicy} -> userContextPolicy) (\s@UpdateIndex' {} a -> s {userContextPolicy = a} :: UpdateIndex)
+
+-- | Enables fetching access levels of groups and users from an IAM Identity
+-- Center (successor to Single Sign-On) identity source. To configure this,
+-- see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/API_UserGroupResolutionConfiguration.html UserGroupResolutionConfiguration>.
+updateIndex_userGroupResolutionConfiguration :: Lens.Lens' UpdateIndex (Prelude.Maybe UserGroupResolutionConfiguration)
+updateIndex_userGroupResolutionConfiguration = Lens.lens (\UpdateIndex' {userGroupResolutionConfiguration} -> userGroupResolutionConfiguration) (\s@UpdateIndex' {} a -> s {userGroupResolutionConfiguration = a} :: UpdateIndex)
+
+-- | The user token configuration.
+updateIndex_userTokenConfigurations :: Lens.Lens' UpdateIndex (Prelude.Maybe [UserTokenConfiguration])
+updateIndex_userTokenConfigurations = Lens.lens (\UpdateIndex' {userTokenConfigurations} -> userTokenConfigurations) (\s@UpdateIndex' {} a -> s {userTokenConfigurations = a} :: UpdateIndex) Prelude.. Lens.mapping Lens.coerced
+
+-- | The identifier of the index you want to update.
+updateIndex_id :: Lens.Lens' UpdateIndex Prelude.Text
+updateIndex_id = Lens.lens (\UpdateIndex' {id} -> id) (\s@UpdateIndex' {} a -> s {id = a} :: UpdateIndex)
+
+instance Core.AWSRequest UpdateIndex where
+  type AWSResponse UpdateIndex = UpdateIndexResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response = Response.receiveNull UpdateIndexResponse'
+
+instance Prelude.Hashable UpdateIndex where
+  hashWithSalt _salt UpdateIndex' {..} =
+    _salt
+      `Prelude.hashWithSalt` capacityUnits
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` documentMetadataConfigurationUpdates
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` userContextPolicy
+      `Prelude.hashWithSalt` userGroupResolutionConfiguration
+      `Prelude.hashWithSalt` userTokenConfigurations
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData UpdateIndex where
+  rnf UpdateIndex' {..} =
+    Prelude.rnf capacityUnits
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf documentMetadataConfigurationUpdates
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf userContextPolicy
+      `Prelude.seq` Prelude.rnf userGroupResolutionConfiguration
+      `Prelude.seq` Prelude.rnf userTokenConfigurations
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders UpdateIndex where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.UpdateIndex" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateIndex where
+  toJSON UpdateIndex' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CapacityUnits" Data..=) Prelude.<$> capacityUnits,
+            ("Description" Data..=) Prelude.<$> description,
+            ("DocumentMetadataConfigurationUpdates" Data..=)
+              Prelude.<$> documentMetadataConfigurationUpdates,
+            ("Name" Data..=) Prelude.<$> name,
+            ("RoleArn" Data..=) Prelude.<$> roleArn,
+            ("UserContextPolicy" Data..=)
+              Prelude.<$> userContextPolicy,
+            ("UserGroupResolutionConfiguration" Data..=)
+              Prelude.<$> userGroupResolutionConfiguration,
+            ("UserTokenConfigurations" Data..=)
+              Prelude.<$> userTokenConfigurations,
+            Prelude.Just ("Id" Data..= id)
+          ]
+      )
+
+instance Data.ToPath UpdateIndex where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateIndex where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateIndexResponse' smart constructor.
+data UpdateIndexResponse = UpdateIndexResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateIndexResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newUpdateIndexResponse ::
+  UpdateIndexResponse
+newUpdateIndexResponse = UpdateIndexResponse'
+
+instance Prelude.NFData UpdateIndexResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Kendra/UpdateQuerySuggestionsBlockList.hs b/gen/Amazonka/Kendra/UpdateQuerySuggestionsBlockList.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/UpdateQuerySuggestionsBlockList.hs
@@ -0,0 +1,271 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.UpdateQuerySuggestionsBlockList
+-- 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 a block list used for query suggestions for an index.
+--
+-- Updates to a block list might not take effect right away. Amazon Kendra
+-- needs to refresh the entire suggestions list to apply any updates to the
+-- block list. Other changes not related to the block list apply
+-- immediately.
+--
+-- If a block list is updating, then you need to wait for the first update
+-- to finish before submitting another update.
+--
+-- Amazon Kendra supports partial updates, so you only need to provide the
+-- fields you want to update.
+--
+-- @UpdateQuerySuggestionsBlockList@ is currently not supported in the
+-- Amazon Web Services GovCloud (US-West) region.
+module Amazonka.Kendra.UpdateQuerySuggestionsBlockList
+  ( -- * Creating a Request
+    UpdateQuerySuggestionsBlockList (..),
+    newUpdateQuerySuggestionsBlockList,
+
+    -- * Request Lenses
+    updateQuerySuggestionsBlockList_description,
+    updateQuerySuggestionsBlockList_name,
+    updateQuerySuggestionsBlockList_roleArn,
+    updateQuerySuggestionsBlockList_sourceS3Path,
+    updateQuerySuggestionsBlockList_indexId,
+    updateQuerySuggestionsBlockList_id,
+
+    -- * Destructuring the Response
+    UpdateQuerySuggestionsBlockListResponse (..),
+    newUpdateQuerySuggestionsBlockListResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateQuerySuggestionsBlockList' smart constructor.
+data UpdateQuerySuggestionsBlockList = UpdateQuerySuggestionsBlockList'
+  { -- | A new description for the block list.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A new name for the block list.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The IAM (Identity and Access Management) role used to access the block
+    -- list text file in S3.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | The S3 path where your block list text file sits in S3.
+    --
+    -- If you update your block list and provide the same path to the block
+    -- list text file in S3, then Amazon Kendra reloads the file to refresh the
+    -- block list. Amazon Kendra does not automatically refresh your block
+    -- list. You need to call the @UpdateQuerySuggestionsBlockList@ API to
+    -- refresh you block list.
+    --
+    -- If you update your block list, then Amazon Kendra asynchronously
+    -- refreshes all query suggestions with the latest content in the S3 file.
+    -- This means changes might not take effect immediately.
+    sourceS3Path :: Prelude.Maybe S3Path,
+    -- | The identifier of the index for the block list.
+    indexId :: Prelude.Text,
+    -- | The identifier of the block list you want to update.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateQuerySuggestionsBlockList' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateQuerySuggestionsBlockList_description' - A new description for the block list.
+--
+-- 'name', 'updateQuerySuggestionsBlockList_name' - A new name for the block list.
+--
+-- 'roleArn', 'updateQuerySuggestionsBlockList_roleArn' - The IAM (Identity and Access Management) role used to access the block
+-- list text file in S3.
+--
+-- 'sourceS3Path', 'updateQuerySuggestionsBlockList_sourceS3Path' - The S3 path where your block list text file sits in S3.
+--
+-- If you update your block list and provide the same path to the block
+-- list text file in S3, then Amazon Kendra reloads the file to refresh the
+-- block list. Amazon Kendra does not automatically refresh your block
+-- list. You need to call the @UpdateQuerySuggestionsBlockList@ API to
+-- refresh you block list.
+--
+-- If you update your block list, then Amazon Kendra asynchronously
+-- refreshes all query suggestions with the latest content in the S3 file.
+-- This means changes might not take effect immediately.
+--
+-- 'indexId', 'updateQuerySuggestionsBlockList_indexId' - The identifier of the index for the block list.
+--
+-- 'id', 'updateQuerySuggestionsBlockList_id' - The identifier of the block list you want to update.
+newUpdateQuerySuggestionsBlockList ::
+  -- | 'indexId'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  UpdateQuerySuggestionsBlockList
+newUpdateQuerySuggestionsBlockList pIndexId_ pId_ =
+  UpdateQuerySuggestionsBlockList'
+    { description =
+        Prelude.Nothing,
+      name = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      sourceS3Path = Prelude.Nothing,
+      indexId = pIndexId_,
+      id = pId_
+    }
+
+-- | A new description for the block list.
+updateQuerySuggestionsBlockList_description :: Lens.Lens' UpdateQuerySuggestionsBlockList (Prelude.Maybe Prelude.Text)
+updateQuerySuggestionsBlockList_description = Lens.lens (\UpdateQuerySuggestionsBlockList' {description} -> description) (\s@UpdateQuerySuggestionsBlockList' {} a -> s {description = a} :: UpdateQuerySuggestionsBlockList)
+
+-- | A new name for the block list.
+updateQuerySuggestionsBlockList_name :: Lens.Lens' UpdateQuerySuggestionsBlockList (Prelude.Maybe Prelude.Text)
+updateQuerySuggestionsBlockList_name = Lens.lens (\UpdateQuerySuggestionsBlockList' {name} -> name) (\s@UpdateQuerySuggestionsBlockList' {} a -> s {name = a} :: UpdateQuerySuggestionsBlockList)
+
+-- | The IAM (Identity and Access Management) role used to access the block
+-- list text file in S3.
+updateQuerySuggestionsBlockList_roleArn :: Lens.Lens' UpdateQuerySuggestionsBlockList (Prelude.Maybe Prelude.Text)
+updateQuerySuggestionsBlockList_roleArn = Lens.lens (\UpdateQuerySuggestionsBlockList' {roleArn} -> roleArn) (\s@UpdateQuerySuggestionsBlockList' {} a -> s {roleArn = a} :: UpdateQuerySuggestionsBlockList)
+
+-- | The S3 path where your block list text file sits in S3.
+--
+-- If you update your block list and provide the same path to the block
+-- list text file in S3, then Amazon Kendra reloads the file to refresh the
+-- block list. Amazon Kendra does not automatically refresh your block
+-- list. You need to call the @UpdateQuerySuggestionsBlockList@ API to
+-- refresh you block list.
+--
+-- If you update your block list, then Amazon Kendra asynchronously
+-- refreshes all query suggestions with the latest content in the S3 file.
+-- This means changes might not take effect immediately.
+updateQuerySuggestionsBlockList_sourceS3Path :: Lens.Lens' UpdateQuerySuggestionsBlockList (Prelude.Maybe S3Path)
+updateQuerySuggestionsBlockList_sourceS3Path = Lens.lens (\UpdateQuerySuggestionsBlockList' {sourceS3Path} -> sourceS3Path) (\s@UpdateQuerySuggestionsBlockList' {} a -> s {sourceS3Path = a} :: UpdateQuerySuggestionsBlockList)
+
+-- | The identifier of the index for the block list.
+updateQuerySuggestionsBlockList_indexId :: Lens.Lens' UpdateQuerySuggestionsBlockList Prelude.Text
+updateQuerySuggestionsBlockList_indexId = Lens.lens (\UpdateQuerySuggestionsBlockList' {indexId} -> indexId) (\s@UpdateQuerySuggestionsBlockList' {} a -> s {indexId = a} :: UpdateQuerySuggestionsBlockList)
+
+-- | The identifier of the block list you want to update.
+updateQuerySuggestionsBlockList_id :: Lens.Lens' UpdateQuerySuggestionsBlockList Prelude.Text
+updateQuerySuggestionsBlockList_id = Lens.lens (\UpdateQuerySuggestionsBlockList' {id} -> id) (\s@UpdateQuerySuggestionsBlockList' {} a -> s {id = a} :: UpdateQuerySuggestionsBlockList)
+
+instance
+  Core.AWSRequest
+    UpdateQuerySuggestionsBlockList
+  where
+  type
+    AWSResponse UpdateQuerySuggestionsBlockList =
+      UpdateQuerySuggestionsBlockListResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull
+      UpdateQuerySuggestionsBlockListResponse'
+
+instance
+  Prelude.Hashable
+    UpdateQuerySuggestionsBlockList
+  where
+  hashWithSalt
+    _salt
+    UpdateQuerySuggestionsBlockList' {..} =
+      _salt
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` name
+        `Prelude.hashWithSalt` roleArn
+        `Prelude.hashWithSalt` sourceS3Path
+        `Prelude.hashWithSalt` indexId
+        `Prelude.hashWithSalt` id
+
+instance
+  Prelude.NFData
+    UpdateQuerySuggestionsBlockList
+  where
+  rnf UpdateQuerySuggestionsBlockList' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf sourceS3Path
+      `Prelude.seq` Prelude.rnf indexId
+      `Prelude.seq` Prelude.rnf id
+
+instance
+  Data.ToHeaders
+    UpdateQuerySuggestionsBlockList
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.UpdateQuerySuggestionsBlockList" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateQuerySuggestionsBlockList where
+  toJSON UpdateQuerySuggestionsBlockList' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("Name" Data..=) Prelude.<$> name,
+            ("RoleArn" Data..=) Prelude.<$> roleArn,
+            ("SourceS3Path" Data..=) Prelude.<$> sourceS3Path,
+            Prelude.Just ("IndexId" Data..= indexId),
+            Prelude.Just ("Id" Data..= id)
+          ]
+      )
+
+instance Data.ToPath UpdateQuerySuggestionsBlockList where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateQuerySuggestionsBlockList where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateQuerySuggestionsBlockListResponse' smart constructor.
+data UpdateQuerySuggestionsBlockListResponse = UpdateQuerySuggestionsBlockListResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateQuerySuggestionsBlockListResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newUpdateQuerySuggestionsBlockListResponse ::
+  UpdateQuerySuggestionsBlockListResponse
+newUpdateQuerySuggestionsBlockListResponse =
+  UpdateQuerySuggestionsBlockListResponse'
+
+instance
+  Prelude.NFData
+    UpdateQuerySuggestionsBlockListResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/Kendra/UpdateQuerySuggestionsConfig.hs b/gen/Amazonka/Kendra/UpdateQuerySuggestionsConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/UpdateQuerySuggestionsConfig.hs
@@ -0,0 +1,349 @@
+{-# 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.Kendra.UpdateQuerySuggestionsConfig
+-- 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 of query suggestions for an index.
+--
+-- Amazon Kendra supports partial updates, so you only need to provide the
+-- fields you want to update.
+--
+-- If an update is currently processing (i.e. \'happening\'), you need to
+-- wait for the update to finish before making another update.
+--
+-- Updates to query suggestions settings might not take effect right away.
+-- The time for your updated settings to take effect depends on the updates
+-- made and the number of search queries in your index.
+--
+-- You can still enable\/disable query suggestions at any time.
+--
+-- @UpdateQuerySuggestionsConfig@ is currently not supported in the Amazon
+-- Web Services GovCloud (US-West) region.
+module Amazonka.Kendra.UpdateQuerySuggestionsConfig
+  ( -- * Creating a Request
+    UpdateQuerySuggestionsConfig (..),
+    newUpdateQuerySuggestionsConfig,
+
+    -- * Request Lenses
+    updateQuerySuggestionsConfig_includeQueriesWithoutUserInformation,
+    updateQuerySuggestionsConfig_minimumNumberOfQueryingUsers,
+    updateQuerySuggestionsConfig_minimumQueryCount,
+    updateQuerySuggestionsConfig_mode,
+    updateQuerySuggestionsConfig_queryLogLookBackWindowInDays,
+    updateQuerySuggestionsConfig_indexId,
+
+    -- * Destructuring the Response
+    UpdateQuerySuggestionsConfigResponse (..),
+    newUpdateQuerySuggestionsConfigResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateQuerySuggestionsConfig' smart constructor.
+data UpdateQuerySuggestionsConfig = UpdateQuerySuggestionsConfig'
+  { -- | @TRUE@ to include queries without user information (i.e. all queries,
+    -- irrespective of the user), otherwise @FALSE@ to only include queries
+    -- with user information.
+    --
+    -- If you pass user information to Amazon Kendra along with the queries,
+    -- you can set this flag to @FALSE@ and instruct Amazon Kendra to only
+    -- consider queries with user information.
+    --
+    -- If you set to @FALSE@, Amazon Kendra only considers queries searched at
+    -- least @MinimumQueryCount@ times across @MinimumNumberOfQueryingUsers@
+    -- unique users for suggestions.
+    --
+    -- If you set to @TRUE@, Amazon Kendra ignores all user information and
+    -- learns from all queries.
+    includeQueriesWithoutUserInformation :: Prelude.Maybe Prelude.Bool,
+    -- | The minimum number of unique users who must search a query in order for
+    -- the query to be eligible to suggest to your users.
+    --
+    -- Increasing this number might decrease the number of suggestions.
+    -- However, this ensures a query is searched by many users and is truly
+    -- popular to suggest to users.
+    --
+    -- How you tune this setting depends on your specific needs.
+    minimumNumberOfQueryingUsers :: Prelude.Maybe Prelude.Natural,
+    -- | The the minimum number of times a query must be searched in order to be
+    -- eligible to suggest to your users.
+    --
+    -- Decreasing this number increases the number of suggestions. However,
+    -- this affects the quality of suggestions as it sets a low bar for a query
+    -- to be considered popular to suggest to users.
+    --
+    -- How you tune this setting depends on your specific needs.
+    minimumQueryCount :: Prelude.Maybe Prelude.Natural,
+    -- | Set the mode to @ENABLED@ or @LEARN_ONLY@.
+    --
+    -- By default, Amazon Kendra enables query suggestions. @LEARN_ONLY@ mode
+    -- allows you to turn off query suggestions. You can to update this at any
+    -- time.
+    --
+    -- In @LEARN_ONLY@ mode, Amazon Kendra continues to learn from new queries
+    -- to keep suggestions up to date for when you are ready to switch to
+    -- ENABLED mode again.
+    mode :: Prelude.Maybe Mode,
+    -- | How recent your queries are in your query log time window.
+    --
+    -- The time window is the number of days from current day to past days.
+    --
+    -- By default, Amazon Kendra sets this to 180.
+    queryLogLookBackWindowInDays :: Prelude.Maybe Prelude.Int,
+    -- | The identifier of the index with query suggestions you want to update.
+    indexId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateQuerySuggestionsConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'includeQueriesWithoutUserInformation', 'updateQuerySuggestionsConfig_includeQueriesWithoutUserInformation' - @TRUE@ to include queries without user information (i.e. all queries,
+-- irrespective of the user), otherwise @FALSE@ to only include queries
+-- with user information.
+--
+-- If you pass user information to Amazon Kendra along with the queries,
+-- you can set this flag to @FALSE@ and instruct Amazon Kendra to only
+-- consider queries with user information.
+--
+-- If you set to @FALSE@, Amazon Kendra only considers queries searched at
+-- least @MinimumQueryCount@ times across @MinimumNumberOfQueryingUsers@
+-- unique users for suggestions.
+--
+-- If you set to @TRUE@, Amazon Kendra ignores all user information and
+-- learns from all queries.
+--
+-- 'minimumNumberOfQueryingUsers', 'updateQuerySuggestionsConfig_minimumNumberOfQueryingUsers' - The minimum number of unique users who must search a query in order for
+-- the query to be eligible to suggest to your users.
+--
+-- Increasing this number might decrease the number of suggestions.
+-- However, this ensures a query is searched by many users and is truly
+-- popular to suggest to users.
+--
+-- How you tune this setting depends on your specific needs.
+--
+-- 'minimumQueryCount', 'updateQuerySuggestionsConfig_minimumQueryCount' - The the minimum number of times a query must be searched in order to be
+-- eligible to suggest to your users.
+--
+-- Decreasing this number increases the number of suggestions. However,
+-- this affects the quality of suggestions as it sets a low bar for a query
+-- to be considered popular to suggest to users.
+--
+-- How you tune this setting depends on your specific needs.
+--
+-- 'mode', 'updateQuerySuggestionsConfig_mode' - Set the mode to @ENABLED@ or @LEARN_ONLY@.
+--
+-- By default, Amazon Kendra enables query suggestions. @LEARN_ONLY@ mode
+-- allows you to turn off query suggestions. You can to update this at any
+-- time.
+--
+-- In @LEARN_ONLY@ mode, Amazon Kendra continues to learn from new queries
+-- to keep suggestions up to date for when you are ready to switch to
+-- ENABLED mode again.
+--
+-- 'queryLogLookBackWindowInDays', 'updateQuerySuggestionsConfig_queryLogLookBackWindowInDays' - How recent your queries are in your query log time window.
+--
+-- The time window is the number of days from current day to past days.
+--
+-- By default, Amazon Kendra sets this to 180.
+--
+-- 'indexId', 'updateQuerySuggestionsConfig_indexId' - The identifier of the index with query suggestions you want to update.
+newUpdateQuerySuggestionsConfig ::
+  -- | 'indexId'
+  Prelude.Text ->
+  UpdateQuerySuggestionsConfig
+newUpdateQuerySuggestionsConfig pIndexId_ =
+  UpdateQuerySuggestionsConfig'
+    { includeQueriesWithoutUserInformation =
+        Prelude.Nothing,
+      minimumNumberOfQueryingUsers =
+        Prelude.Nothing,
+      minimumQueryCount = Prelude.Nothing,
+      mode = Prelude.Nothing,
+      queryLogLookBackWindowInDays =
+        Prelude.Nothing,
+      indexId = pIndexId_
+    }
+
+-- | @TRUE@ to include queries without user information (i.e. all queries,
+-- irrespective of the user), otherwise @FALSE@ to only include queries
+-- with user information.
+--
+-- If you pass user information to Amazon Kendra along with the queries,
+-- you can set this flag to @FALSE@ and instruct Amazon Kendra to only
+-- consider queries with user information.
+--
+-- If you set to @FALSE@, Amazon Kendra only considers queries searched at
+-- least @MinimumQueryCount@ times across @MinimumNumberOfQueryingUsers@
+-- unique users for suggestions.
+--
+-- If you set to @TRUE@, Amazon Kendra ignores all user information and
+-- learns from all queries.
+updateQuerySuggestionsConfig_includeQueriesWithoutUserInformation :: Lens.Lens' UpdateQuerySuggestionsConfig (Prelude.Maybe Prelude.Bool)
+updateQuerySuggestionsConfig_includeQueriesWithoutUserInformation = Lens.lens (\UpdateQuerySuggestionsConfig' {includeQueriesWithoutUserInformation} -> includeQueriesWithoutUserInformation) (\s@UpdateQuerySuggestionsConfig' {} a -> s {includeQueriesWithoutUserInformation = a} :: UpdateQuerySuggestionsConfig)
+
+-- | The minimum number of unique users who must search a query in order for
+-- the query to be eligible to suggest to your users.
+--
+-- Increasing this number might decrease the number of suggestions.
+-- However, this ensures a query is searched by many users and is truly
+-- popular to suggest to users.
+--
+-- How you tune this setting depends on your specific needs.
+updateQuerySuggestionsConfig_minimumNumberOfQueryingUsers :: Lens.Lens' UpdateQuerySuggestionsConfig (Prelude.Maybe Prelude.Natural)
+updateQuerySuggestionsConfig_minimumNumberOfQueryingUsers = Lens.lens (\UpdateQuerySuggestionsConfig' {minimumNumberOfQueryingUsers} -> minimumNumberOfQueryingUsers) (\s@UpdateQuerySuggestionsConfig' {} a -> s {minimumNumberOfQueryingUsers = a} :: UpdateQuerySuggestionsConfig)
+
+-- | The the minimum number of times a query must be searched in order to be
+-- eligible to suggest to your users.
+--
+-- Decreasing this number increases the number of suggestions. However,
+-- this affects the quality of suggestions as it sets a low bar for a query
+-- to be considered popular to suggest to users.
+--
+-- How you tune this setting depends on your specific needs.
+updateQuerySuggestionsConfig_minimumQueryCount :: Lens.Lens' UpdateQuerySuggestionsConfig (Prelude.Maybe Prelude.Natural)
+updateQuerySuggestionsConfig_minimumQueryCount = Lens.lens (\UpdateQuerySuggestionsConfig' {minimumQueryCount} -> minimumQueryCount) (\s@UpdateQuerySuggestionsConfig' {} a -> s {minimumQueryCount = a} :: UpdateQuerySuggestionsConfig)
+
+-- | Set the mode to @ENABLED@ or @LEARN_ONLY@.
+--
+-- By default, Amazon Kendra enables query suggestions. @LEARN_ONLY@ mode
+-- allows you to turn off query suggestions. You can to update this at any
+-- time.
+--
+-- In @LEARN_ONLY@ mode, Amazon Kendra continues to learn from new queries
+-- to keep suggestions up to date for when you are ready to switch to
+-- ENABLED mode again.
+updateQuerySuggestionsConfig_mode :: Lens.Lens' UpdateQuerySuggestionsConfig (Prelude.Maybe Mode)
+updateQuerySuggestionsConfig_mode = Lens.lens (\UpdateQuerySuggestionsConfig' {mode} -> mode) (\s@UpdateQuerySuggestionsConfig' {} a -> s {mode = a} :: UpdateQuerySuggestionsConfig)
+
+-- | How recent your queries are in your query log time window.
+--
+-- The time window is the number of days from current day to past days.
+--
+-- By default, Amazon Kendra sets this to 180.
+updateQuerySuggestionsConfig_queryLogLookBackWindowInDays :: Lens.Lens' UpdateQuerySuggestionsConfig (Prelude.Maybe Prelude.Int)
+updateQuerySuggestionsConfig_queryLogLookBackWindowInDays = Lens.lens (\UpdateQuerySuggestionsConfig' {queryLogLookBackWindowInDays} -> queryLogLookBackWindowInDays) (\s@UpdateQuerySuggestionsConfig' {} a -> s {queryLogLookBackWindowInDays = a} :: UpdateQuerySuggestionsConfig)
+
+-- | The identifier of the index with query suggestions you want to update.
+updateQuerySuggestionsConfig_indexId :: Lens.Lens' UpdateQuerySuggestionsConfig Prelude.Text
+updateQuerySuggestionsConfig_indexId = Lens.lens (\UpdateQuerySuggestionsConfig' {indexId} -> indexId) (\s@UpdateQuerySuggestionsConfig' {} a -> s {indexId = a} :: UpdateQuerySuggestionsConfig)
+
+instance Core.AWSRequest UpdateQuerySuggestionsConfig where
+  type
+    AWSResponse UpdateQuerySuggestionsConfig =
+      UpdateQuerySuggestionsConfigResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull
+      UpdateQuerySuggestionsConfigResponse'
+
+instance
+  Prelude.Hashable
+    UpdateQuerySuggestionsConfig
+  where
+  hashWithSalt _salt UpdateQuerySuggestionsConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` includeQueriesWithoutUserInformation
+      `Prelude.hashWithSalt` minimumNumberOfQueryingUsers
+      `Prelude.hashWithSalt` minimumQueryCount
+      `Prelude.hashWithSalt` mode
+      `Prelude.hashWithSalt` queryLogLookBackWindowInDays
+      `Prelude.hashWithSalt` indexId
+
+instance Prelude.NFData UpdateQuerySuggestionsConfig where
+  rnf UpdateQuerySuggestionsConfig' {..} =
+    Prelude.rnf includeQueriesWithoutUserInformation
+      `Prelude.seq` Prelude.rnf minimumNumberOfQueryingUsers
+      `Prelude.seq` Prelude.rnf minimumQueryCount
+      `Prelude.seq` Prelude.rnf mode
+      `Prelude.seq` Prelude.rnf queryLogLookBackWindowInDays
+      `Prelude.seq` Prelude.rnf indexId
+
+instance Data.ToHeaders UpdateQuerySuggestionsConfig where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.UpdateQuerySuggestionsConfig" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateQuerySuggestionsConfig where
+  toJSON UpdateQuerySuggestionsConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("IncludeQueriesWithoutUserInformation" Data..=)
+              Prelude.<$> includeQueriesWithoutUserInformation,
+            ("MinimumNumberOfQueryingUsers" Data..=)
+              Prelude.<$> minimumNumberOfQueryingUsers,
+            ("MinimumQueryCount" Data..=)
+              Prelude.<$> minimumQueryCount,
+            ("Mode" Data..=) Prelude.<$> mode,
+            ("QueryLogLookBackWindowInDays" Data..=)
+              Prelude.<$> queryLogLookBackWindowInDays,
+            Prelude.Just ("IndexId" Data..= indexId)
+          ]
+      )
+
+instance Data.ToPath UpdateQuerySuggestionsConfig where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateQuerySuggestionsConfig where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateQuerySuggestionsConfigResponse' smart constructor.
+data UpdateQuerySuggestionsConfigResponse = UpdateQuerySuggestionsConfigResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateQuerySuggestionsConfigResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newUpdateQuerySuggestionsConfigResponse ::
+  UpdateQuerySuggestionsConfigResponse
+newUpdateQuerySuggestionsConfigResponse =
+  UpdateQuerySuggestionsConfigResponse'
+
+instance
+  Prelude.NFData
+    UpdateQuerySuggestionsConfigResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/Kendra/UpdateThesaurus.hs b/gen/Amazonka/Kendra/UpdateThesaurus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/UpdateThesaurus.hs
@@ -0,0 +1,206 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.UpdateThesaurus
+-- 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 a thesaurus for an index.
+module Amazonka.Kendra.UpdateThesaurus
+  ( -- * Creating a Request
+    UpdateThesaurus (..),
+    newUpdateThesaurus,
+
+    -- * Request Lenses
+    updateThesaurus_description,
+    updateThesaurus_name,
+    updateThesaurus_roleArn,
+    updateThesaurus_sourceS3Path,
+    updateThesaurus_id,
+    updateThesaurus_indexId,
+
+    -- * Destructuring the Response
+    UpdateThesaurusResponse (..),
+    newUpdateThesaurusResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateThesaurus' smart constructor.
+data UpdateThesaurus = UpdateThesaurus'
+  { -- | A new description for the thesaurus.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A new name for the thesaurus.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | An IAM role that gives Amazon Kendra permissions to access thesaurus
+    -- file specified in @SourceS3Path@.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    sourceS3Path :: Prelude.Maybe S3Path,
+    -- | The identifier of the thesaurus you want to update.
+    id :: Prelude.Text,
+    -- | The identifier of the index for the thesaurus.
+    indexId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateThesaurus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateThesaurus_description' - A new description for the thesaurus.
+--
+-- 'name', 'updateThesaurus_name' - A new name for the thesaurus.
+--
+-- 'roleArn', 'updateThesaurus_roleArn' - An IAM role that gives Amazon Kendra permissions to access thesaurus
+-- file specified in @SourceS3Path@.
+--
+-- 'sourceS3Path', 'updateThesaurus_sourceS3Path' - Undocumented member.
+--
+-- 'id', 'updateThesaurus_id' - The identifier of the thesaurus you want to update.
+--
+-- 'indexId', 'updateThesaurus_indexId' - The identifier of the index for the thesaurus.
+newUpdateThesaurus ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'indexId'
+  Prelude.Text ->
+  UpdateThesaurus
+newUpdateThesaurus pId_ pIndexId_ =
+  UpdateThesaurus'
+    { description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      sourceS3Path = Prelude.Nothing,
+      id = pId_,
+      indexId = pIndexId_
+    }
+
+-- | A new description for the thesaurus.
+updateThesaurus_description :: Lens.Lens' UpdateThesaurus (Prelude.Maybe Prelude.Text)
+updateThesaurus_description = Lens.lens (\UpdateThesaurus' {description} -> description) (\s@UpdateThesaurus' {} a -> s {description = a} :: UpdateThesaurus)
+
+-- | A new name for the thesaurus.
+updateThesaurus_name :: Lens.Lens' UpdateThesaurus (Prelude.Maybe Prelude.Text)
+updateThesaurus_name = Lens.lens (\UpdateThesaurus' {name} -> name) (\s@UpdateThesaurus' {} a -> s {name = a} :: UpdateThesaurus)
+
+-- | An IAM role that gives Amazon Kendra permissions to access thesaurus
+-- file specified in @SourceS3Path@.
+updateThesaurus_roleArn :: Lens.Lens' UpdateThesaurus (Prelude.Maybe Prelude.Text)
+updateThesaurus_roleArn = Lens.lens (\UpdateThesaurus' {roleArn} -> roleArn) (\s@UpdateThesaurus' {} a -> s {roleArn = a} :: UpdateThesaurus)
+
+-- | Undocumented member.
+updateThesaurus_sourceS3Path :: Lens.Lens' UpdateThesaurus (Prelude.Maybe S3Path)
+updateThesaurus_sourceS3Path = Lens.lens (\UpdateThesaurus' {sourceS3Path} -> sourceS3Path) (\s@UpdateThesaurus' {} a -> s {sourceS3Path = a} :: UpdateThesaurus)
+
+-- | The identifier of the thesaurus you want to update.
+updateThesaurus_id :: Lens.Lens' UpdateThesaurus Prelude.Text
+updateThesaurus_id = Lens.lens (\UpdateThesaurus' {id} -> id) (\s@UpdateThesaurus' {} a -> s {id = a} :: UpdateThesaurus)
+
+-- | The identifier of the index for the thesaurus.
+updateThesaurus_indexId :: Lens.Lens' UpdateThesaurus Prelude.Text
+updateThesaurus_indexId = Lens.lens (\UpdateThesaurus' {indexId} -> indexId) (\s@UpdateThesaurus' {} a -> s {indexId = a} :: UpdateThesaurus)
+
+instance Core.AWSRequest UpdateThesaurus where
+  type
+    AWSResponse UpdateThesaurus =
+      UpdateThesaurusResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull UpdateThesaurusResponse'
+
+instance Prelude.Hashable UpdateThesaurus where
+  hashWithSalt _salt UpdateThesaurus' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` sourceS3Path
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` indexId
+
+instance Prelude.NFData UpdateThesaurus where
+  rnf UpdateThesaurus' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf sourceS3Path
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf indexId
+
+instance Data.ToHeaders UpdateThesaurus where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSKendraFrontendService.UpdateThesaurus" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateThesaurus where
+  toJSON UpdateThesaurus' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("Name" Data..=) Prelude.<$> name,
+            ("RoleArn" Data..=) Prelude.<$> roleArn,
+            ("SourceS3Path" Data..=) Prelude.<$> sourceS3Path,
+            Prelude.Just ("Id" Data..= id),
+            Prelude.Just ("IndexId" Data..= indexId)
+          ]
+      )
+
+instance Data.ToPath UpdateThesaurus where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateThesaurus where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateThesaurusResponse' smart constructor.
+data UpdateThesaurusResponse = UpdateThesaurusResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateThesaurusResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newUpdateThesaurusResponse ::
+  UpdateThesaurusResponse
+newUpdateThesaurusResponse = UpdateThesaurusResponse'
+
+instance Prelude.NFData UpdateThesaurusResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Kendra/Waiters.hs b/gen/Amazonka/Kendra/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Kendra/Waiters.hs
@@ -0,0 +1,24 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Kendra.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.Kendra.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Kendra.Lens
+import Amazonka.Kendra.Types
+import qualified Amazonka.Prelude as Prelude
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,23 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Main (main) where
+
+import Test.Amazonka.Kendra
+import Test.Amazonka.Kendra.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "Kendra"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/Kendra.hs b/test/Test/Amazonka/Gen/Kendra.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/Kendra.hs
@@ -0,0 +1,1238 @@
+{-# 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.Kendra
+-- Copyright   : (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.Kendra where
+
+import Amazonka.Kendra
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.Kendra.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"
+--         [ requestAssociateEntitiesToExperience $
+--             newAssociateEntitiesToExperience
+--
+--         , requestAssociatePersonasToEntities $
+--             newAssociatePersonasToEntities
+--
+--         , requestBatchDeleteDocument $
+--             newBatchDeleteDocument
+--
+--         , requestBatchGetDocumentStatus $
+--             newBatchGetDocumentStatus
+--
+--         , requestBatchPutDocument $
+--             newBatchPutDocument
+--
+--         , requestClearQuerySuggestions $
+--             newClearQuerySuggestions
+--
+--         , requestCreateAccessControlConfiguration $
+--             newCreateAccessControlConfiguration
+--
+--         , requestCreateDataSource $
+--             newCreateDataSource
+--
+--         , requestCreateExperience $
+--             newCreateExperience
+--
+--         , requestCreateFaq $
+--             newCreateFaq
+--
+--         , requestCreateIndex $
+--             newCreateIndex
+--
+--         , requestCreateQuerySuggestionsBlockList $
+--             newCreateQuerySuggestionsBlockList
+--
+--         , requestCreateThesaurus $
+--             newCreateThesaurus
+--
+--         , requestDeleteAccessControlConfiguration $
+--             newDeleteAccessControlConfiguration
+--
+--         , requestDeleteDataSource $
+--             newDeleteDataSource
+--
+--         , requestDeleteExperience $
+--             newDeleteExperience
+--
+--         , requestDeleteFaq $
+--             newDeleteFaq
+--
+--         , requestDeleteIndex $
+--             newDeleteIndex
+--
+--         , requestDeletePrincipalMapping $
+--             newDeletePrincipalMapping
+--
+--         , requestDeleteQuerySuggestionsBlockList $
+--             newDeleteQuerySuggestionsBlockList
+--
+--         , requestDeleteThesaurus $
+--             newDeleteThesaurus
+--
+--         , requestDescribeAccessControlConfiguration $
+--             newDescribeAccessControlConfiguration
+--
+--         , requestDescribeDataSource $
+--             newDescribeDataSource
+--
+--         , requestDescribeExperience $
+--             newDescribeExperience
+--
+--         , requestDescribeFaq $
+--             newDescribeFaq
+--
+--         , requestDescribeIndex $
+--             newDescribeIndex
+--
+--         , requestDescribePrincipalMapping $
+--             newDescribePrincipalMapping
+--
+--         , requestDescribeQuerySuggestionsBlockList $
+--             newDescribeQuerySuggestionsBlockList
+--
+--         , requestDescribeQuerySuggestionsConfig $
+--             newDescribeQuerySuggestionsConfig
+--
+--         , requestDescribeThesaurus $
+--             newDescribeThesaurus
+--
+--         , requestDisassociateEntitiesFromExperience $
+--             newDisassociateEntitiesFromExperience
+--
+--         , requestDisassociatePersonasFromEntities $
+--             newDisassociatePersonasFromEntities
+--
+--         , requestGetQuerySuggestions $
+--             newGetQuerySuggestions
+--
+--         , requestGetSnapshots $
+--             newGetSnapshots
+--
+--         , requestListAccessControlConfigurations $
+--             newListAccessControlConfigurations
+--
+--         , requestListDataSourceSyncJobs $
+--             newListDataSourceSyncJobs
+--
+--         , requestListDataSources $
+--             newListDataSources
+--
+--         , requestListEntityPersonas $
+--             newListEntityPersonas
+--
+--         , requestListExperienceEntities $
+--             newListExperienceEntities
+--
+--         , requestListExperiences $
+--             newListExperiences
+--
+--         , requestListFaqs $
+--             newListFaqs
+--
+--         , requestListGroupsOlderThanOrderingId $
+--             newListGroupsOlderThanOrderingId
+--
+--         , requestListIndices $
+--             newListIndices
+--
+--         , requestListQuerySuggestionsBlockLists $
+--             newListQuerySuggestionsBlockLists
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestListThesauri $
+--             newListThesauri
+--
+--         , requestPutPrincipalMapping $
+--             newPutPrincipalMapping
+--
+--         , requestQuery $
+--             newQuery
+--
+--         , requestStartDataSourceSyncJob $
+--             newStartDataSourceSyncJob
+--
+--         , requestStopDataSourceSyncJob $
+--             newStopDataSourceSyncJob
+--
+--         , requestSubmitFeedback $
+--             newSubmitFeedback
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateAccessControlConfiguration $
+--             newUpdateAccessControlConfiguration
+--
+--         , requestUpdateDataSource $
+--             newUpdateDataSource
+--
+--         , requestUpdateExperience $
+--             newUpdateExperience
+--
+--         , requestUpdateIndex $
+--             newUpdateIndex
+--
+--         , requestUpdateQuerySuggestionsBlockList $
+--             newUpdateQuerySuggestionsBlockList
+--
+--         , requestUpdateQuerySuggestionsConfig $
+--             newUpdateQuerySuggestionsConfig
+--
+--         , requestUpdateThesaurus $
+--             newUpdateThesaurus
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseAssociateEntitiesToExperience $
+--             newAssociateEntitiesToExperienceResponse
+--
+--         , responseAssociatePersonasToEntities $
+--             newAssociatePersonasToEntitiesResponse
+--
+--         , responseBatchDeleteDocument $
+--             newBatchDeleteDocumentResponse
+--
+--         , responseBatchGetDocumentStatus $
+--             newBatchGetDocumentStatusResponse
+--
+--         , responseBatchPutDocument $
+--             newBatchPutDocumentResponse
+--
+--         , responseClearQuerySuggestions $
+--             newClearQuerySuggestionsResponse
+--
+--         , responseCreateAccessControlConfiguration $
+--             newCreateAccessControlConfigurationResponse
+--
+--         , responseCreateDataSource $
+--             newCreateDataSourceResponse
+--
+--         , responseCreateExperience $
+--             newCreateExperienceResponse
+--
+--         , responseCreateFaq $
+--             newCreateFaqResponse
+--
+--         , responseCreateIndex $
+--             newCreateIndexResponse
+--
+--         , responseCreateQuerySuggestionsBlockList $
+--             newCreateQuerySuggestionsBlockListResponse
+--
+--         , responseCreateThesaurus $
+--             newCreateThesaurusResponse
+--
+--         , responseDeleteAccessControlConfiguration $
+--             newDeleteAccessControlConfigurationResponse
+--
+--         , responseDeleteDataSource $
+--             newDeleteDataSourceResponse
+--
+--         , responseDeleteExperience $
+--             newDeleteExperienceResponse
+--
+--         , responseDeleteFaq $
+--             newDeleteFaqResponse
+--
+--         , responseDeleteIndex $
+--             newDeleteIndexResponse
+--
+--         , responseDeletePrincipalMapping $
+--             newDeletePrincipalMappingResponse
+--
+--         , responseDeleteQuerySuggestionsBlockList $
+--             newDeleteQuerySuggestionsBlockListResponse
+--
+--         , responseDeleteThesaurus $
+--             newDeleteThesaurusResponse
+--
+--         , responseDescribeAccessControlConfiguration $
+--             newDescribeAccessControlConfigurationResponse
+--
+--         , responseDescribeDataSource $
+--             newDescribeDataSourceResponse
+--
+--         , responseDescribeExperience $
+--             newDescribeExperienceResponse
+--
+--         , responseDescribeFaq $
+--             newDescribeFaqResponse
+--
+--         , responseDescribeIndex $
+--             newDescribeIndexResponse
+--
+--         , responseDescribePrincipalMapping $
+--             newDescribePrincipalMappingResponse
+--
+--         , responseDescribeQuerySuggestionsBlockList $
+--             newDescribeQuerySuggestionsBlockListResponse
+--
+--         , responseDescribeQuerySuggestionsConfig $
+--             newDescribeQuerySuggestionsConfigResponse
+--
+--         , responseDescribeThesaurus $
+--             newDescribeThesaurusResponse
+--
+--         , responseDisassociateEntitiesFromExperience $
+--             newDisassociateEntitiesFromExperienceResponse
+--
+--         , responseDisassociatePersonasFromEntities $
+--             newDisassociatePersonasFromEntitiesResponse
+--
+--         , responseGetQuerySuggestions $
+--             newGetQuerySuggestionsResponse
+--
+--         , responseGetSnapshots $
+--             newGetSnapshotsResponse
+--
+--         , responseListAccessControlConfigurations $
+--             newListAccessControlConfigurationsResponse
+--
+--         , responseListDataSourceSyncJobs $
+--             newListDataSourceSyncJobsResponse
+--
+--         , responseListDataSources $
+--             newListDataSourcesResponse
+--
+--         , responseListEntityPersonas $
+--             newListEntityPersonasResponse
+--
+--         , responseListExperienceEntities $
+--             newListExperienceEntitiesResponse
+--
+--         , responseListExperiences $
+--             newListExperiencesResponse
+--
+--         , responseListFaqs $
+--             newListFaqsResponse
+--
+--         , responseListGroupsOlderThanOrderingId $
+--             newListGroupsOlderThanOrderingIdResponse
+--
+--         , responseListIndices $
+--             newListIndicesResponse
+--
+--         , responseListQuerySuggestionsBlockLists $
+--             newListQuerySuggestionsBlockListsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseListThesauri $
+--             newListThesauriResponse
+--
+--         , responsePutPrincipalMapping $
+--             newPutPrincipalMappingResponse
+--
+--         , responseQuery $
+--             newQueryResponse
+--
+--         , responseStartDataSourceSyncJob $
+--             newStartDataSourceSyncJobResponse
+--
+--         , responseStopDataSourceSyncJob $
+--             newStopDataSourceSyncJobResponse
+--
+--         , responseSubmitFeedback $
+--             newSubmitFeedbackResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateAccessControlConfiguration $
+--             newUpdateAccessControlConfigurationResponse
+--
+--         , responseUpdateDataSource $
+--             newUpdateDataSourceResponse
+--
+--         , responseUpdateExperience $
+--             newUpdateExperienceResponse
+--
+--         , responseUpdateIndex $
+--             newUpdateIndexResponse
+--
+--         , responseUpdateQuerySuggestionsBlockList $
+--             newUpdateQuerySuggestionsBlockListResponse
+--
+--         , responseUpdateQuerySuggestionsConfig $
+--             newUpdateQuerySuggestionsConfigResponse
+--
+--         , responseUpdateThesaurus $
+--             newUpdateThesaurusResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestAssociateEntitiesToExperience :: AssociateEntitiesToExperience -> TestTree
+requestAssociateEntitiesToExperience =
+  req
+    "AssociateEntitiesToExperience"
+    "fixture/AssociateEntitiesToExperience.yaml"
+
+requestAssociatePersonasToEntities :: AssociatePersonasToEntities -> TestTree
+requestAssociatePersonasToEntities =
+  req
+    "AssociatePersonasToEntities"
+    "fixture/AssociatePersonasToEntities.yaml"
+
+requestBatchDeleteDocument :: BatchDeleteDocument -> TestTree
+requestBatchDeleteDocument =
+  req
+    "BatchDeleteDocument"
+    "fixture/BatchDeleteDocument.yaml"
+
+requestBatchGetDocumentStatus :: BatchGetDocumentStatus -> TestTree
+requestBatchGetDocumentStatus =
+  req
+    "BatchGetDocumentStatus"
+    "fixture/BatchGetDocumentStatus.yaml"
+
+requestBatchPutDocument :: BatchPutDocument -> TestTree
+requestBatchPutDocument =
+  req
+    "BatchPutDocument"
+    "fixture/BatchPutDocument.yaml"
+
+requestClearQuerySuggestions :: ClearQuerySuggestions -> TestTree
+requestClearQuerySuggestions =
+  req
+    "ClearQuerySuggestions"
+    "fixture/ClearQuerySuggestions.yaml"
+
+requestCreateAccessControlConfiguration :: CreateAccessControlConfiguration -> TestTree
+requestCreateAccessControlConfiguration =
+  req
+    "CreateAccessControlConfiguration"
+    "fixture/CreateAccessControlConfiguration.yaml"
+
+requestCreateDataSource :: CreateDataSource -> TestTree
+requestCreateDataSource =
+  req
+    "CreateDataSource"
+    "fixture/CreateDataSource.yaml"
+
+requestCreateExperience :: CreateExperience -> TestTree
+requestCreateExperience =
+  req
+    "CreateExperience"
+    "fixture/CreateExperience.yaml"
+
+requestCreateFaq :: CreateFaq -> TestTree
+requestCreateFaq =
+  req
+    "CreateFaq"
+    "fixture/CreateFaq.yaml"
+
+requestCreateIndex :: CreateIndex -> TestTree
+requestCreateIndex =
+  req
+    "CreateIndex"
+    "fixture/CreateIndex.yaml"
+
+requestCreateQuerySuggestionsBlockList :: CreateQuerySuggestionsBlockList -> TestTree
+requestCreateQuerySuggestionsBlockList =
+  req
+    "CreateQuerySuggestionsBlockList"
+    "fixture/CreateQuerySuggestionsBlockList.yaml"
+
+requestCreateThesaurus :: CreateThesaurus -> TestTree
+requestCreateThesaurus =
+  req
+    "CreateThesaurus"
+    "fixture/CreateThesaurus.yaml"
+
+requestDeleteAccessControlConfiguration :: DeleteAccessControlConfiguration -> TestTree
+requestDeleteAccessControlConfiguration =
+  req
+    "DeleteAccessControlConfiguration"
+    "fixture/DeleteAccessControlConfiguration.yaml"
+
+requestDeleteDataSource :: DeleteDataSource -> TestTree
+requestDeleteDataSource =
+  req
+    "DeleteDataSource"
+    "fixture/DeleteDataSource.yaml"
+
+requestDeleteExperience :: DeleteExperience -> TestTree
+requestDeleteExperience =
+  req
+    "DeleteExperience"
+    "fixture/DeleteExperience.yaml"
+
+requestDeleteFaq :: DeleteFaq -> TestTree
+requestDeleteFaq =
+  req
+    "DeleteFaq"
+    "fixture/DeleteFaq.yaml"
+
+requestDeleteIndex :: DeleteIndex -> TestTree
+requestDeleteIndex =
+  req
+    "DeleteIndex"
+    "fixture/DeleteIndex.yaml"
+
+requestDeletePrincipalMapping :: DeletePrincipalMapping -> TestTree
+requestDeletePrincipalMapping =
+  req
+    "DeletePrincipalMapping"
+    "fixture/DeletePrincipalMapping.yaml"
+
+requestDeleteQuerySuggestionsBlockList :: DeleteQuerySuggestionsBlockList -> TestTree
+requestDeleteQuerySuggestionsBlockList =
+  req
+    "DeleteQuerySuggestionsBlockList"
+    "fixture/DeleteQuerySuggestionsBlockList.yaml"
+
+requestDeleteThesaurus :: DeleteThesaurus -> TestTree
+requestDeleteThesaurus =
+  req
+    "DeleteThesaurus"
+    "fixture/DeleteThesaurus.yaml"
+
+requestDescribeAccessControlConfiguration :: DescribeAccessControlConfiguration -> TestTree
+requestDescribeAccessControlConfiguration =
+  req
+    "DescribeAccessControlConfiguration"
+    "fixture/DescribeAccessControlConfiguration.yaml"
+
+requestDescribeDataSource :: DescribeDataSource -> TestTree
+requestDescribeDataSource =
+  req
+    "DescribeDataSource"
+    "fixture/DescribeDataSource.yaml"
+
+requestDescribeExperience :: DescribeExperience -> TestTree
+requestDescribeExperience =
+  req
+    "DescribeExperience"
+    "fixture/DescribeExperience.yaml"
+
+requestDescribeFaq :: DescribeFaq -> TestTree
+requestDescribeFaq =
+  req
+    "DescribeFaq"
+    "fixture/DescribeFaq.yaml"
+
+requestDescribeIndex :: DescribeIndex -> TestTree
+requestDescribeIndex =
+  req
+    "DescribeIndex"
+    "fixture/DescribeIndex.yaml"
+
+requestDescribePrincipalMapping :: DescribePrincipalMapping -> TestTree
+requestDescribePrincipalMapping =
+  req
+    "DescribePrincipalMapping"
+    "fixture/DescribePrincipalMapping.yaml"
+
+requestDescribeQuerySuggestionsBlockList :: DescribeQuerySuggestionsBlockList -> TestTree
+requestDescribeQuerySuggestionsBlockList =
+  req
+    "DescribeQuerySuggestionsBlockList"
+    "fixture/DescribeQuerySuggestionsBlockList.yaml"
+
+requestDescribeQuerySuggestionsConfig :: DescribeQuerySuggestionsConfig -> TestTree
+requestDescribeQuerySuggestionsConfig =
+  req
+    "DescribeQuerySuggestionsConfig"
+    "fixture/DescribeQuerySuggestionsConfig.yaml"
+
+requestDescribeThesaurus :: DescribeThesaurus -> TestTree
+requestDescribeThesaurus =
+  req
+    "DescribeThesaurus"
+    "fixture/DescribeThesaurus.yaml"
+
+requestDisassociateEntitiesFromExperience :: DisassociateEntitiesFromExperience -> TestTree
+requestDisassociateEntitiesFromExperience =
+  req
+    "DisassociateEntitiesFromExperience"
+    "fixture/DisassociateEntitiesFromExperience.yaml"
+
+requestDisassociatePersonasFromEntities :: DisassociatePersonasFromEntities -> TestTree
+requestDisassociatePersonasFromEntities =
+  req
+    "DisassociatePersonasFromEntities"
+    "fixture/DisassociatePersonasFromEntities.yaml"
+
+requestGetQuerySuggestions :: GetQuerySuggestions -> TestTree
+requestGetQuerySuggestions =
+  req
+    "GetQuerySuggestions"
+    "fixture/GetQuerySuggestions.yaml"
+
+requestGetSnapshots :: GetSnapshots -> TestTree
+requestGetSnapshots =
+  req
+    "GetSnapshots"
+    "fixture/GetSnapshots.yaml"
+
+requestListAccessControlConfigurations :: ListAccessControlConfigurations -> TestTree
+requestListAccessControlConfigurations =
+  req
+    "ListAccessControlConfigurations"
+    "fixture/ListAccessControlConfigurations.yaml"
+
+requestListDataSourceSyncJobs :: ListDataSourceSyncJobs -> TestTree
+requestListDataSourceSyncJobs =
+  req
+    "ListDataSourceSyncJobs"
+    "fixture/ListDataSourceSyncJobs.yaml"
+
+requestListDataSources :: ListDataSources -> TestTree
+requestListDataSources =
+  req
+    "ListDataSources"
+    "fixture/ListDataSources.yaml"
+
+requestListEntityPersonas :: ListEntityPersonas -> TestTree
+requestListEntityPersonas =
+  req
+    "ListEntityPersonas"
+    "fixture/ListEntityPersonas.yaml"
+
+requestListExperienceEntities :: ListExperienceEntities -> TestTree
+requestListExperienceEntities =
+  req
+    "ListExperienceEntities"
+    "fixture/ListExperienceEntities.yaml"
+
+requestListExperiences :: ListExperiences -> TestTree
+requestListExperiences =
+  req
+    "ListExperiences"
+    "fixture/ListExperiences.yaml"
+
+requestListFaqs :: ListFaqs -> TestTree
+requestListFaqs =
+  req
+    "ListFaqs"
+    "fixture/ListFaqs.yaml"
+
+requestListGroupsOlderThanOrderingId :: ListGroupsOlderThanOrderingId -> TestTree
+requestListGroupsOlderThanOrderingId =
+  req
+    "ListGroupsOlderThanOrderingId"
+    "fixture/ListGroupsOlderThanOrderingId.yaml"
+
+requestListIndices :: ListIndices -> TestTree
+requestListIndices =
+  req
+    "ListIndices"
+    "fixture/ListIndices.yaml"
+
+requestListQuerySuggestionsBlockLists :: ListQuerySuggestionsBlockLists -> TestTree
+requestListQuerySuggestionsBlockLists =
+  req
+    "ListQuerySuggestionsBlockLists"
+    "fixture/ListQuerySuggestionsBlockLists.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestListThesauri :: ListThesauri -> TestTree
+requestListThesauri =
+  req
+    "ListThesauri"
+    "fixture/ListThesauri.yaml"
+
+requestPutPrincipalMapping :: PutPrincipalMapping -> TestTree
+requestPutPrincipalMapping =
+  req
+    "PutPrincipalMapping"
+    "fixture/PutPrincipalMapping.yaml"
+
+requestQuery :: Query -> TestTree
+requestQuery =
+  req
+    "Query"
+    "fixture/Query.yaml"
+
+requestStartDataSourceSyncJob :: StartDataSourceSyncJob -> TestTree
+requestStartDataSourceSyncJob =
+  req
+    "StartDataSourceSyncJob"
+    "fixture/StartDataSourceSyncJob.yaml"
+
+requestStopDataSourceSyncJob :: StopDataSourceSyncJob -> TestTree
+requestStopDataSourceSyncJob =
+  req
+    "StopDataSourceSyncJob"
+    "fixture/StopDataSourceSyncJob.yaml"
+
+requestSubmitFeedback :: SubmitFeedback -> TestTree
+requestSubmitFeedback =
+  req
+    "SubmitFeedback"
+    "fixture/SubmitFeedback.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateAccessControlConfiguration :: UpdateAccessControlConfiguration -> TestTree
+requestUpdateAccessControlConfiguration =
+  req
+    "UpdateAccessControlConfiguration"
+    "fixture/UpdateAccessControlConfiguration.yaml"
+
+requestUpdateDataSource :: UpdateDataSource -> TestTree
+requestUpdateDataSource =
+  req
+    "UpdateDataSource"
+    "fixture/UpdateDataSource.yaml"
+
+requestUpdateExperience :: UpdateExperience -> TestTree
+requestUpdateExperience =
+  req
+    "UpdateExperience"
+    "fixture/UpdateExperience.yaml"
+
+requestUpdateIndex :: UpdateIndex -> TestTree
+requestUpdateIndex =
+  req
+    "UpdateIndex"
+    "fixture/UpdateIndex.yaml"
+
+requestUpdateQuerySuggestionsBlockList :: UpdateQuerySuggestionsBlockList -> TestTree
+requestUpdateQuerySuggestionsBlockList =
+  req
+    "UpdateQuerySuggestionsBlockList"
+    "fixture/UpdateQuerySuggestionsBlockList.yaml"
+
+requestUpdateQuerySuggestionsConfig :: UpdateQuerySuggestionsConfig -> TestTree
+requestUpdateQuerySuggestionsConfig =
+  req
+    "UpdateQuerySuggestionsConfig"
+    "fixture/UpdateQuerySuggestionsConfig.yaml"
+
+requestUpdateThesaurus :: UpdateThesaurus -> TestTree
+requestUpdateThesaurus =
+  req
+    "UpdateThesaurus"
+    "fixture/UpdateThesaurus.yaml"
+
+-- Responses
+
+responseAssociateEntitiesToExperience :: AssociateEntitiesToExperienceResponse -> TestTree
+responseAssociateEntitiesToExperience =
+  res
+    "AssociateEntitiesToExperienceResponse"
+    "fixture/AssociateEntitiesToExperienceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateEntitiesToExperience)
+
+responseAssociatePersonasToEntities :: AssociatePersonasToEntitiesResponse -> TestTree
+responseAssociatePersonasToEntities =
+  res
+    "AssociatePersonasToEntitiesResponse"
+    "fixture/AssociatePersonasToEntitiesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociatePersonasToEntities)
+
+responseBatchDeleteDocument :: BatchDeleteDocumentResponse -> TestTree
+responseBatchDeleteDocument =
+  res
+    "BatchDeleteDocumentResponse"
+    "fixture/BatchDeleteDocumentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchDeleteDocument)
+
+responseBatchGetDocumentStatus :: BatchGetDocumentStatusResponse -> TestTree
+responseBatchGetDocumentStatus =
+  res
+    "BatchGetDocumentStatusResponse"
+    "fixture/BatchGetDocumentStatusResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchGetDocumentStatus)
+
+responseBatchPutDocument :: BatchPutDocumentResponse -> TestTree
+responseBatchPutDocument =
+  res
+    "BatchPutDocumentResponse"
+    "fixture/BatchPutDocumentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchPutDocument)
+
+responseClearQuerySuggestions :: ClearQuerySuggestionsResponse -> TestTree
+responseClearQuerySuggestions =
+  res
+    "ClearQuerySuggestionsResponse"
+    "fixture/ClearQuerySuggestionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ClearQuerySuggestions)
+
+responseCreateAccessControlConfiguration :: CreateAccessControlConfigurationResponse -> TestTree
+responseCreateAccessControlConfiguration =
+  res
+    "CreateAccessControlConfigurationResponse"
+    "fixture/CreateAccessControlConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateAccessControlConfiguration)
+
+responseCreateDataSource :: CreateDataSourceResponse -> TestTree
+responseCreateDataSource =
+  res
+    "CreateDataSourceResponse"
+    "fixture/CreateDataSourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDataSource)
+
+responseCreateExperience :: CreateExperienceResponse -> TestTree
+responseCreateExperience =
+  res
+    "CreateExperienceResponse"
+    "fixture/CreateExperienceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateExperience)
+
+responseCreateFaq :: CreateFaqResponse -> TestTree
+responseCreateFaq =
+  res
+    "CreateFaqResponse"
+    "fixture/CreateFaqResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateFaq)
+
+responseCreateIndex :: CreateIndexResponse -> TestTree
+responseCreateIndex =
+  res
+    "CreateIndexResponse"
+    "fixture/CreateIndexResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateIndex)
+
+responseCreateQuerySuggestionsBlockList :: CreateQuerySuggestionsBlockListResponse -> TestTree
+responseCreateQuerySuggestionsBlockList =
+  res
+    "CreateQuerySuggestionsBlockListResponse"
+    "fixture/CreateQuerySuggestionsBlockListResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateQuerySuggestionsBlockList)
+
+responseCreateThesaurus :: CreateThesaurusResponse -> TestTree
+responseCreateThesaurus =
+  res
+    "CreateThesaurusResponse"
+    "fixture/CreateThesaurusResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateThesaurus)
+
+responseDeleteAccessControlConfiguration :: DeleteAccessControlConfigurationResponse -> TestTree
+responseDeleteAccessControlConfiguration =
+  res
+    "DeleteAccessControlConfigurationResponse"
+    "fixture/DeleteAccessControlConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAccessControlConfiguration)
+
+responseDeleteDataSource :: DeleteDataSourceResponse -> TestTree
+responseDeleteDataSource =
+  res
+    "DeleteDataSourceResponse"
+    "fixture/DeleteDataSourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDataSource)
+
+responseDeleteExperience :: DeleteExperienceResponse -> TestTree
+responseDeleteExperience =
+  res
+    "DeleteExperienceResponse"
+    "fixture/DeleteExperienceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteExperience)
+
+responseDeleteFaq :: DeleteFaqResponse -> TestTree
+responseDeleteFaq =
+  res
+    "DeleteFaqResponse"
+    "fixture/DeleteFaqResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteFaq)
+
+responseDeleteIndex :: DeleteIndexResponse -> TestTree
+responseDeleteIndex =
+  res
+    "DeleteIndexResponse"
+    "fixture/DeleteIndexResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteIndex)
+
+responseDeletePrincipalMapping :: DeletePrincipalMappingResponse -> TestTree
+responseDeletePrincipalMapping =
+  res
+    "DeletePrincipalMappingResponse"
+    "fixture/DeletePrincipalMappingResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeletePrincipalMapping)
+
+responseDeleteQuerySuggestionsBlockList :: DeleteQuerySuggestionsBlockListResponse -> TestTree
+responseDeleteQuerySuggestionsBlockList =
+  res
+    "DeleteQuerySuggestionsBlockListResponse"
+    "fixture/DeleteQuerySuggestionsBlockListResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteQuerySuggestionsBlockList)
+
+responseDeleteThesaurus :: DeleteThesaurusResponse -> TestTree
+responseDeleteThesaurus =
+  res
+    "DeleteThesaurusResponse"
+    "fixture/DeleteThesaurusResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteThesaurus)
+
+responseDescribeAccessControlConfiguration :: DescribeAccessControlConfigurationResponse -> TestTree
+responseDescribeAccessControlConfiguration =
+  res
+    "DescribeAccessControlConfigurationResponse"
+    "fixture/DescribeAccessControlConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAccessControlConfiguration)
+
+responseDescribeDataSource :: DescribeDataSourceResponse -> TestTree
+responseDescribeDataSource =
+  res
+    "DescribeDataSourceResponse"
+    "fixture/DescribeDataSourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeDataSource)
+
+responseDescribeExperience :: DescribeExperienceResponse -> TestTree
+responseDescribeExperience =
+  res
+    "DescribeExperienceResponse"
+    "fixture/DescribeExperienceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeExperience)
+
+responseDescribeFaq :: DescribeFaqResponse -> TestTree
+responseDescribeFaq =
+  res
+    "DescribeFaqResponse"
+    "fixture/DescribeFaqResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeFaq)
+
+responseDescribeIndex :: DescribeIndexResponse -> TestTree
+responseDescribeIndex =
+  res
+    "DescribeIndexResponse"
+    "fixture/DescribeIndexResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeIndex)
+
+responseDescribePrincipalMapping :: DescribePrincipalMappingResponse -> TestTree
+responseDescribePrincipalMapping =
+  res
+    "DescribePrincipalMappingResponse"
+    "fixture/DescribePrincipalMappingResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribePrincipalMapping)
+
+responseDescribeQuerySuggestionsBlockList :: DescribeQuerySuggestionsBlockListResponse -> TestTree
+responseDescribeQuerySuggestionsBlockList =
+  res
+    "DescribeQuerySuggestionsBlockListResponse"
+    "fixture/DescribeQuerySuggestionsBlockListResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeQuerySuggestionsBlockList)
+
+responseDescribeQuerySuggestionsConfig :: DescribeQuerySuggestionsConfigResponse -> TestTree
+responseDescribeQuerySuggestionsConfig =
+  res
+    "DescribeQuerySuggestionsConfigResponse"
+    "fixture/DescribeQuerySuggestionsConfigResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeQuerySuggestionsConfig)
+
+responseDescribeThesaurus :: DescribeThesaurusResponse -> TestTree
+responseDescribeThesaurus =
+  res
+    "DescribeThesaurusResponse"
+    "fixture/DescribeThesaurusResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeThesaurus)
+
+responseDisassociateEntitiesFromExperience :: DisassociateEntitiesFromExperienceResponse -> TestTree
+responseDisassociateEntitiesFromExperience =
+  res
+    "DisassociateEntitiesFromExperienceResponse"
+    "fixture/DisassociateEntitiesFromExperienceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateEntitiesFromExperience)
+
+responseDisassociatePersonasFromEntities :: DisassociatePersonasFromEntitiesResponse -> TestTree
+responseDisassociatePersonasFromEntities =
+  res
+    "DisassociatePersonasFromEntitiesResponse"
+    "fixture/DisassociatePersonasFromEntitiesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociatePersonasFromEntities)
+
+responseGetQuerySuggestions :: GetQuerySuggestionsResponse -> TestTree
+responseGetQuerySuggestions =
+  res
+    "GetQuerySuggestionsResponse"
+    "fixture/GetQuerySuggestionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetQuerySuggestions)
+
+responseGetSnapshots :: GetSnapshotsResponse -> TestTree
+responseGetSnapshots =
+  res
+    "GetSnapshotsResponse"
+    "fixture/GetSnapshotsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetSnapshots)
+
+responseListAccessControlConfigurations :: ListAccessControlConfigurationsResponse -> TestTree
+responseListAccessControlConfigurations =
+  res
+    "ListAccessControlConfigurationsResponse"
+    "fixture/ListAccessControlConfigurationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAccessControlConfigurations)
+
+responseListDataSourceSyncJobs :: ListDataSourceSyncJobsResponse -> TestTree
+responseListDataSourceSyncJobs =
+  res
+    "ListDataSourceSyncJobsResponse"
+    "fixture/ListDataSourceSyncJobsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDataSourceSyncJobs)
+
+responseListDataSources :: ListDataSourcesResponse -> TestTree
+responseListDataSources =
+  res
+    "ListDataSourcesResponse"
+    "fixture/ListDataSourcesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDataSources)
+
+responseListEntityPersonas :: ListEntityPersonasResponse -> TestTree
+responseListEntityPersonas =
+  res
+    "ListEntityPersonasResponse"
+    "fixture/ListEntityPersonasResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListEntityPersonas)
+
+responseListExperienceEntities :: ListExperienceEntitiesResponse -> TestTree
+responseListExperienceEntities =
+  res
+    "ListExperienceEntitiesResponse"
+    "fixture/ListExperienceEntitiesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListExperienceEntities)
+
+responseListExperiences :: ListExperiencesResponse -> TestTree
+responseListExperiences =
+  res
+    "ListExperiencesResponse"
+    "fixture/ListExperiencesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListExperiences)
+
+responseListFaqs :: ListFaqsResponse -> TestTree
+responseListFaqs =
+  res
+    "ListFaqsResponse"
+    "fixture/ListFaqsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListFaqs)
+
+responseListGroupsOlderThanOrderingId :: ListGroupsOlderThanOrderingIdResponse -> TestTree
+responseListGroupsOlderThanOrderingId =
+  res
+    "ListGroupsOlderThanOrderingIdResponse"
+    "fixture/ListGroupsOlderThanOrderingIdResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListGroupsOlderThanOrderingId)
+
+responseListIndices :: ListIndicesResponse -> TestTree
+responseListIndices =
+  res
+    "ListIndicesResponse"
+    "fixture/ListIndicesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListIndices)
+
+responseListQuerySuggestionsBlockLists :: ListQuerySuggestionsBlockListsResponse -> TestTree
+responseListQuerySuggestionsBlockLists =
+  res
+    "ListQuerySuggestionsBlockListsResponse"
+    "fixture/ListQuerySuggestionsBlockListsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListQuerySuggestionsBlockLists)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseListThesauri :: ListThesauriResponse -> TestTree
+responseListThesauri =
+  res
+    "ListThesauriResponse"
+    "fixture/ListThesauriResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListThesauri)
+
+responsePutPrincipalMapping :: PutPrincipalMappingResponse -> TestTree
+responsePutPrincipalMapping =
+  res
+    "PutPrincipalMappingResponse"
+    "fixture/PutPrincipalMappingResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutPrincipalMapping)
+
+responseQuery :: QueryResponse -> TestTree
+responseQuery =
+  res
+    "QueryResponse"
+    "fixture/QueryResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy Query)
+
+responseStartDataSourceSyncJob :: StartDataSourceSyncJobResponse -> TestTree
+responseStartDataSourceSyncJob =
+  res
+    "StartDataSourceSyncJobResponse"
+    "fixture/StartDataSourceSyncJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartDataSourceSyncJob)
+
+responseStopDataSourceSyncJob :: StopDataSourceSyncJobResponse -> TestTree
+responseStopDataSourceSyncJob =
+  res
+    "StopDataSourceSyncJobResponse"
+    "fixture/StopDataSourceSyncJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StopDataSourceSyncJob)
+
+responseSubmitFeedback :: SubmitFeedbackResponse -> TestTree
+responseSubmitFeedback =
+  res
+    "SubmitFeedbackResponse"
+    "fixture/SubmitFeedbackResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SubmitFeedback)
+
+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)
+
+responseUpdateAccessControlConfiguration :: UpdateAccessControlConfigurationResponse -> TestTree
+responseUpdateAccessControlConfiguration =
+  res
+    "UpdateAccessControlConfigurationResponse"
+    "fixture/UpdateAccessControlConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateAccessControlConfiguration)
+
+responseUpdateDataSource :: UpdateDataSourceResponse -> TestTree
+responseUpdateDataSource =
+  res
+    "UpdateDataSourceResponse"
+    "fixture/UpdateDataSourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateDataSource)
+
+responseUpdateExperience :: UpdateExperienceResponse -> TestTree
+responseUpdateExperience =
+  res
+    "UpdateExperienceResponse"
+    "fixture/UpdateExperienceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateExperience)
+
+responseUpdateIndex :: UpdateIndexResponse -> TestTree
+responseUpdateIndex =
+  res
+    "UpdateIndexResponse"
+    "fixture/UpdateIndexResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateIndex)
+
+responseUpdateQuerySuggestionsBlockList :: UpdateQuerySuggestionsBlockListResponse -> TestTree
+responseUpdateQuerySuggestionsBlockList =
+  res
+    "UpdateQuerySuggestionsBlockListResponse"
+    "fixture/UpdateQuerySuggestionsBlockListResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateQuerySuggestionsBlockList)
+
+responseUpdateQuerySuggestionsConfig :: UpdateQuerySuggestionsConfigResponse -> TestTree
+responseUpdateQuerySuggestionsConfig =
+  res
+    "UpdateQuerySuggestionsConfigResponse"
+    "fixture/UpdateQuerySuggestionsConfigResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateQuerySuggestionsConfig)
+
+responseUpdateThesaurus :: UpdateThesaurusResponse -> TestTree
+responseUpdateThesaurus =
+  res
+    "UpdateThesaurusResponse"
+    "fixture/UpdateThesaurusResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateThesaurus)
diff --git a/test/Test/Amazonka/Kendra.hs b/test/Test/Amazonka/Kendra.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Kendra.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.Kendra
+-- Copyright   : (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.Kendra
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/Kendra/Internal.hs b/test/Test/Amazonka/Kendra/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Kendra/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.Kendra.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.Kendra.Internal where
