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 Connect Wisdom Service SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2020-10-19@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-wisdom)
+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.Wisdom](http://hackage.haskell.org/package/amazonka-wisdom/docs/Amazonka-Wisdom.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-wisdom` 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-wisdom.cabal b/amazonka-wisdom.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-wisdom.cabal
@@ -0,0 +1,155 @@
+cabal-version:      2.2
+name:               amazonka-wisdom
+version:            2.0
+synopsis:           Amazon Connect Wisdom Service SDK.
+homepage:           https://github.com/brendanhay/amazonka
+bug-reports:        https://github.com/brendanhay/amazonka/issues
+license:            MPL-2.0
+license-file:       LICENSE
+author:             Brendan Hay
+maintainer:
+  Brendan Hay <brendan.g.hay+amazonka@gmail.com>, Jack Kelly <jack@jackkelly.name>
+
+copyright:          Copyright (c) 2013-2023 Brendan Hay
+category:           AWS
+build-type:         Simple
+extra-source-files:
+  fixture/*.proto
+  fixture/*.yaml
+  README.md
+  src/.gitkeep
+
+description:
+  Derived from API version @2020-10-19@ 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.Wisdom.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.Wisdom" 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-wisdom
+
+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.Wisdom
+    Amazonka.Wisdom.CreateAssistant
+    Amazonka.Wisdom.CreateAssistantAssociation
+    Amazonka.Wisdom.CreateContent
+    Amazonka.Wisdom.CreateKnowledgeBase
+    Amazonka.Wisdom.CreateSession
+    Amazonka.Wisdom.DeleteAssistant
+    Amazonka.Wisdom.DeleteAssistantAssociation
+    Amazonka.Wisdom.DeleteContent
+    Amazonka.Wisdom.DeleteKnowledgeBase
+    Amazonka.Wisdom.GetAssistant
+    Amazonka.Wisdom.GetAssistantAssociation
+    Amazonka.Wisdom.GetContent
+    Amazonka.Wisdom.GetContentSummary
+    Amazonka.Wisdom.GetKnowledgeBase
+    Amazonka.Wisdom.GetRecommendations
+    Amazonka.Wisdom.GetSession
+    Amazonka.Wisdom.Lens
+    Amazonka.Wisdom.ListAssistantAssociations
+    Amazonka.Wisdom.ListAssistants
+    Amazonka.Wisdom.ListContents
+    Amazonka.Wisdom.ListKnowledgeBases
+    Amazonka.Wisdom.ListTagsForResource
+    Amazonka.Wisdom.NotifyRecommendationsReceived
+    Amazonka.Wisdom.QueryAssistant
+    Amazonka.Wisdom.RemoveKnowledgeBaseTemplateUri
+    Amazonka.Wisdom.SearchContent
+    Amazonka.Wisdom.SearchSessions
+    Amazonka.Wisdom.StartContentUpload
+    Amazonka.Wisdom.TagResource
+    Amazonka.Wisdom.Types
+    Amazonka.Wisdom.Types.AppIntegrationsConfiguration
+    Amazonka.Wisdom.Types.AssistantAssociationData
+    Amazonka.Wisdom.Types.AssistantAssociationInputData
+    Amazonka.Wisdom.Types.AssistantAssociationOutputData
+    Amazonka.Wisdom.Types.AssistantAssociationSummary
+    Amazonka.Wisdom.Types.AssistantData
+    Amazonka.Wisdom.Types.AssistantStatus
+    Amazonka.Wisdom.Types.AssistantSummary
+    Amazonka.Wisdom.Types.AssistantType
+    Amazonka.Wisdom.Types.AssociationType
+    Amazonka.Wisdom.Types.ContentData
+    Amazonka.Wisdom.Types.ContentReference
+    Amazonka.Wisdom.Types.ContentStatus
+    Amazonka.Wisdom.Types.ContentSummary
+    Amazonka.Wisdom.Types.Document
+    Amazonka.Wisdom.Types.DocumentText
+    Amazonka.Wisdom.Types.Filter
+    Amazonka.Wisdom.Types.FilterField
+    Amazonka.Wisdom.Types.FilterOperator
+    Amazonka.Wisdom.Types.Highlight
+    Amazonka.Wisdom.Types.KnowledgeBaseAssociationData
+    Amazonka.Wisdom.Types.KnowledgeBaseData
+    Amazonka.Wisdom.Types.KnowledgeBaseStatus
+    Amazonka.Wisdom.Types.KnowledgeBaseSummary
+    Amazonka.Wisdom.Types.KnowledgeBaseType
+    Amazonka.Wisdom.Types.NotifyRecommendationsReceivedError
+    Amazonka.Wisdom.Types.QueryRecommendationTriggerData
+    Amazonka.Wisdom.Types.RecommendationData
+    Amazonka.Wisdom.Types.RecommendationSourceType
+    Amazonka.Wisdom.Types.RecommendationTrigger
+    Amazonka.Wisdom.Types.RecommendationTriggerData
+    Amazonka.Wisdom.Types.RecommendationTriggerType
+    Amazonka.Wisdom.Types.RecommendationType
+    Amazonka.Wisdom.Types.RelevanceLevel
+    Amazonka.Wisdom.Types.RenderingConfiguration
+    Amazonka.Wisdom.Types.ResultData
+    Amazonka.Wisdom.Types.SearchExpression
+    Amazonka.Wisdom.Types.ServerSideEncryptionConfiguration
+    Amazonka.Wisdom.Types.SessionData
+    Amazonka.Wisdom.Types.SessionSummary
+    Amazonka.Wisdom.Types.SourceConfiguration
+    Amazonka.Wisdom.UntagResource
+    Amazonka.Wisdom.UpdateContent
+    Amazonka.Wisdom.UpdateKnowledgeBaseTemplateUri
+    Amazonka.Wisdom.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-wisdom-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.Wisdom
+    Test.Amazonka.Wisdom
+    Test.Amazonka.Wisdom.Internal
+
+  build-depends:
+    , amazonka-core         >=2.0 && <2.1
+    , amazonka-test         >=2.0 && <2.1
+    , amazonka-wisdom
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/CreateAssistant.yaml b/fixture/CreateAssistant.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAssistant.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/CreateAssistantAssociation.yaml b/fixture/CreateAssistantAssociation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAssistantAssociation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/CreateAssistantAssociationResponse.proto b/fixture/CreateAssistantAssociationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAssistantAssociationResponse.proto
diff --git a/fixture/CreateAssistantResponse.proto b/fixture/CreateAssistantResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAssistantResponse.proto
diff --git a/fixture/CreateContent.yaml b/fixture/CreateContent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateContent.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/CreateContentResponse.proto b/fixture/CreateContentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateContentResponse.proto
diff --git a/fixture/CreateKnowledgeBase.yaml b/fixture/CreateKnowledgeBase.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateKnowledgeBase.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/CreateKnowledgeBaseResponse.proto b/fixture/CreateKnowledgeBaseResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateKnowledgeBaseResponse.proto
diff --git a/fixture/CreateSession.yaml b/fixture/CreateSession.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSession.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/CreateSessionResponse.proto b/fixture/CreateSessionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSessionResponse.proto
diff --git a/fixture/DeleteAssistant.yaml b/fixture/DeleteAssistant.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAssistant.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/DeleteAssistantAssociation.yaml b/fixture/DeleteAssistantAssociation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAssistantAssociation.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/DeleteAssistantAssociationResponse.proto b/fixture/DeleteAssistantAssociationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAssistantAssociationResponse.proto
diff --git a/fixture/DeleteAssistantResponse.proto b/fixture/DeleteAssistantResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAssistantResponse.proto
diff --git a/fixture/DeleteContent.yaml b/fixture/DeleteContent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteContent.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/DeleteContentResponse.proto b/fixture/DeleteContentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteContentResponse.proto
diff --git a/fixture/DeleteKnowledgeBase.yaml b/fixture/DeleteKnowledgeBase.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteKnowledgeBase.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/DeleteKnowledgeBaseResponse.proto b/fixture/DeleteKnowledgeBaseResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteKnowledgeBaseResponse.proto
diff --git a/fixture/GetAssistant.yaml b/fixture/GetAssistant.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetAssistant.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/GetAssistantAssociation.yaml b/fixture/GetAssistantAssociation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetAssistantAssociation.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/GetAssistantAssociationResponse.proto b/fixture/GetAssistantAssociationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAssistantAssociationResponse.proto
diff --git a/fixture/GetAssistantResponse.proto b/fixture/GetAssistantResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAssistantResponse.proto
diff --git a/fixture/GetContent.yaml b/fixture/GetContent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetContent.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/GetContentResponse.proto b/fixture/GetContentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetContentResponse.proto
diff --git a/fixture/GetContentSummary.yaml b/fixture/GetContentSummary.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetContentSummary.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/GetContentSummaryResponse.proto b/fixture/GetContentSummaryResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetContentSummaryResponse.proto
diff --git a/fixture/GetKnowledgeBase.yaml b/fixture/GetKnowledgeBase.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetKnowledgeBase.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/GetKnowledgeBaseResponse.proto b/fixture/GetKnowledgeBaseResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetKnowledgeBaseResponse.proto
diff --git a/fixture/GetRecommendations.yaml b/fixture/GetRecommendations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetRecommendations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/GetRecommendationsResponse.proto b/fixture/GetRecommendationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetRecommendationsResponse.proto
diff --git a/fixture/GetSession.yaml b/fixture/GetSession.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetSession.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/GetSessionResponse.proto b/fixture/GetSessionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetSessionResponse.proto
diff --git a/fixture/ListAssistantAssociations.yaml b/fixture/ListAssistantAssociations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAssistantAssociations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/ListAssistantAssociationsResponse.proto b/fixture/ListAssistantAssociationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAssistantAssociationsResponse.proto
diff --git a/fixture/ListAssistants.yaml b/fixture/ListAssistants.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAssistants.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/ListAssistantsResponse.proto b/fixture/ListAssistantsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAssistantsResponse.proto
diff --git a/fixture/ListContents.yaml b/fixture/ListContents.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListContents.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/ListContentsResponse.proto b/fixture/ListContentsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListContentsResponse.proto
diff --git a/fixture/ListKnowledgeBases.yaml b/fixture/ListKnowledgeBases.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListKnowledgeBases.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/ListKnowledgeBasesResponse.proto b/fixture/ListKnowledgeBasesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListKnowledgeBasesResponse.proto
diff --git a/fixture/ListTagsForResource.yaml b/fixture/ListTagsForResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResource.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/NotifyRecommendationsReceived.yaml b/fixture/NotifyRecommendationsReceived.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/NotifyRecommendationsReceived.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/NotifyRecommendationsReceivedResponse.proto b/fixture/NotifyRecommendationsReceivedResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/NotifyRecommendationsReceivedResponse.proto
diff --git a/fixture/PutFeedback.yaml b/fixture/PutFeedback.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutFeedback.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/PutFeedbackResponse.proto b/fixture/PutFeedbackResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutFeedbackResponse.proto
diff --git a/fixture/QueryAssistant.yaml b/fixture/QueryAssistant.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/QueryAssistant.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/QueryAssistantResponse.proto b/fixture/QueryAssistantResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/QueryAssistantResponse.proto
diff --git a/fixture/RemoveKnowledgeBaseTemplateUri.yaml b/fixture/RemoveKnowledgeBaseTemplateUri.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveKnowledgeBaseTemplateUri.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/RemoveKnowledgeBaseTemplateUriResponse.proto b/fixture/RemoveKnowledgeBaseTemplateUriResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveKnowledgeBaseTemplateUriResponse.proto
diff --git a/fixture/SearchContent.yaml b/fixture/SearchContent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SearchContent.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/SearchContentResponse.proto b/fixture/SearchContentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SearchContentResponse.proto
diff --git a/fixture/SearchSessions.yaml b/fixture/SearchSessions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SearchSessions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/SearchSessionsResponse.proto b/fixture/SearchSessionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SearchSessionsResponse.proto
diff --git a/fixture/StartContentUpload.yaml b/fixture/StartContentUpload.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartContentUpload.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/StartContentUploadResponse.proto b/fixture/StartContentUploadResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartContentUploadResponse.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/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/TagResourceResponse.proto b/fixture/TagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TagResourceResponse.proto
diff --git a/fixture/UntagResource.yaml b/fixture/UntagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/UpdateContent.yaml b/fixture/UpdateContent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateContent.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/UpdateContentResponse.proto b/fixture/UpdateContentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateContentResponse.proto
diff --git a/fixture/UpdateKnowledgeBaseTemplateUri.yaml b/fixture/UpdateKnowledgeBaseTemplateUri.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateKnowledgeBaseTemplateUri.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/wisdom/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  wisdom.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/UpdateKnowledgeBaseTemplateUriResponse.proto b/fixture/UpdateKnowledgeBaseTemplateUriResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateKnowledgeBaseTemplateUriResponse.proto
diff --git a/gen/Amazonka/Wisdom.hs b/gen/Amazonka/Wisdom.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom.hs
@@ -0,0 +1,456 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.Wisdom
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from API version @2020-10-19@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Amazon Connect Wisdom delivers agents the information they need to solve
+-- customer issues as they\'re actively speaking with customers. Agents can
+-- search across connected repositories from within their agent desktop to
+-- find answers quickly. Use the Amazon Connect Wisdom APIs to create an
+-- assistant and a knowledge base, for example, or manage content by
+-- uploading custom files.
+module Amazonka.Wisdom
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** PreconditionFailedException
+    _PreconditionFailedException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceQuotaExceededException
+    _ServiceQuotaExceededException,
+
+    -- ** TooManyTagsException
+    _TooManyTagsException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CreateAssistant
+    CreateAssistant (CreateAssistant'),
+    newCreateAssistant,
+    CreateAssistantResponse (CreateAssistantResponse'),
+    newCreateAssistantResponse,
+
+    -- ** CreateAssistantAssociation
+    CreateAssistantAssociation (CreateAssistantAssociation'),
+    newCreateAssistantAssociation,
+    CreateAssistantAssociationResponse (CreateAssistantAssociationResponse'),
+    newCreateAssistantAssociationResponse,
+
+    -- ** CreateContent
+    CreateContent (CreateContent'),
+    newCreateContent,
+    CreateContentResponse (CreateContentResponse'),
+    newCreateContentResponse,
+
+    -- ** CreateKnowledgeBase
+    CreateKnowledgeBase (CreateKnowledgeBase'),
+    newCreateKnowledgeBase,
+    CreateKnowledgeBaseResponse (CreateKnowledgeBaseResponse'),
+    newCreateKnowledgeBaseResponse,
+
+    -- ** CreateSession
+    CreateSession (CreateSession'),
+    newCreateSession,
+    CreateSessionResponse (CreateSessionResponse'),
+    newCreateSessionResponse,
+
+    -- ** DeleteAssistant
+    DeleteAssistant (DeleteAssistant'),
+    newDeleteAssistant,
+    DeleteAssistantResponse (DeleteAssistantResponse'),
+    newDeleteAssistantResponse,
+
+    -- ** DeleteAssistantAssociation
+    DeleteAssistantAssociation (DeleteAssistantAssociation'),
+    newDeleteAssistantAssociation,
+    DeleteAssistantAssociationResponse (DeleteAssistantAssociationResponse'),
+    newDeleteAssistantAssociationResponse,
+
+    -- ** DeleteContent
+    DeleteContent (DeleteContent'),
+    newDeleteContent,
+    DeleteContentResponse (DeleteContentResponse'),
+    newDeleteContentResponse,
+
+    -- ** DeleteKnowledgeBase
+    DeleteKnowledgeBase (DeleteKnowledgeBase'),
+    newDeleteKnowledgeBase,
+    DeleteKnowledgeBaseResponse (DeleteKnowledgeBaseResponse'),
+    newDeleteKnowledgeBaseResponse,
+
+    -- ** GetAssistant
+    GetAssistant (GetAssistant'),
+    newGetAssistant,
+    GetAssistantResponse (GetAssistantResponse'),
+    newGetAssistantResponse,
+
+    -- ** GetAssistantAssociation
+    GetAssistantAssociation (GetAssistantAssociation'),
+    newGetAssistantAssociation,
+    GetAssistantAssociationResponse (GetAssistantAssociationResponse'),
+    newGetAssistantAssociationResponse,
+
+    -- ** GetContent
+    GetContent (GetContent'),
+    newGetContent,
+    GetContentResponse (GetContentResponse'),
+    newGetContentResponse,
+
+    -- ** GetContentSummary
+    GetContentSummary (GetContentSummary'),
+    newGetContentSummary,
+    GetContentSummaryResponse (GetContentSummaryResponse'),
+    newGetContentSummaryResponse,
+
+    -- ** GetKnowledgeBase
+    GetKnowledgeBase (GetKnowledgeBase'),
+    newGetKnowledgeBase,
+    GetKnowledgeBaseResponse (GetKnowledgeBaseResponse'),
+    newGetKnowledgeBaseResponse,
+
+    -- ** GetRecommendations
+    GetRecommendations (GetRecommendations'),
+    newGetRecommendations,
+    GetRecommendationsResponse (GetRecommendationsResponse'),
+    newGetRecommendationsResponse,
+
+    -- ** GetSession
+    GetSession (GetSession'),
+    newGetSession,
+    GetSessionResponse (GetSessionResponse'),
+    newGetSessionResponse,
+
+    -- ** ListAssistantAssociations (Paginated)
+    ListAssistantAssociations (ListAssistantAssociations'),
+    newListAssistantAssociations,
+    ListAssistantAssociationsResponse (ListAssistantAssociationsResponse'),
+    newListAssistantAssociationsResponse,
+
+    -- ** ListAssistants (Paginated)
+    ListAssistants (ListAssistants'),
+    newListAssistants,
+    ListAssistantsResponse (ListAssistantsResponse'),
+    newListAssistantsResponse,
+
+    -- ** ListContents (Paginated)
+    ListContents (ListContents'),
+    newListContents,
+    ListContentsResponse (ListContentsResponse'),
+    newListContentsResponse,
+
+    -- ** ListKnowledgeBases (Paginated)
+    ListKnowledgeBases (ListKnowledgeBases'),
+    newListKnowledgeBases,
+    ListKnowledgeBasesResponse (ListKnowledgeBasesResponse'),
+    newListKnowledgeBasesResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** NotifyRecommendationsReceived
+    NotifyRecommendationsReceived (NotifyRecommendationsReceived'),
+    newNotifyRecommendationsReceived,
+    NotifyRecommendationsReceivedResponse (NotifyRecommendationsReceivedResponse'),
+    newNotifyRecommendationsReceivedResponse,
+
+    -- ** QueryAssistant (Paginated)
+    QueryAssistant (QueryAssistant'),
+    newQueryAssistant,
+    QueryAssistantResponse (QueryAssistantResponse'),
+    newQueryAssistantResponse,
+
+    -- ** RemoveKnowledgeBaseTemplateUri
+    RemoveKnowledgeBaseTemplateUri (RemoveKnowledgeBaseTemplateUri'),
+    newRemoveKnowledgeBaseTemplateUri,
+    RemoveKnowledgeBaseTemplateUriResponse (RemoveKnowledgeBaseTemplateUriResponse'),
+    newRemoveKnowledgeBaseTemplateUriResponse,
+
+    -- ** SearchContent (Paginated)
+    SearchContent (SearchContent'),
+    newSearchContent,
+    SearchContentResponse (SearchContentResponse'),
+    newSearchContentResponse,
+
+    -- ** SearchSessions (Paginated)
+    SearchSessions (SearchSessions'),
+    newSearchSessions,
+    SearchSessionsResponse (SearchSessionsResponse'),
+    newSearchSessionsResponse,
+
+    -- ** StartContentUpload
+    StartContentUpload (StartContentUpload'),
+    newStartContentUpload,
+    StartContentUploadResponse (StartContentUploadResponse'),
+    newStartContentUploadResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateContent
+    UpdateContent (UpdateContent'),
+    newUpdateContent,
+    UpdateContentResponse (UpdateContentResponse'),
+    newUpdateContentResponse,
+
+    -- ** UpdateKnowledgeBaseTemplateUri
+    UpdateKnowledgeBaseTemplateUri (UpdateKnowledgeBaseTemplateUri'),
+    newUpdateKnowledgeBaseTemplateUri,
+    UpdateKnowledgeBaseTemplateUriResponse (UpdateKnowledgeBaseTemplateUriResponse'),
+    newUpdateKnowledgeBaseTemplateUriResponse,
+
+    -- * Types
+
+    -- ** AssistantStatus
+    AssistantStatus (..),
+
+    -- ** AssistantType
+    AssistantType (..),
+
+    -- ** AssociationType
+    AssociationType (..),
+
+    -- ** ContentStatus
+    ContentStatus (..),
+
+    -- ** FilterField
+    FilterField (..),
+
+    -- ** FilterOperator
+    FilterOperator (..),
+
+    -- ** KnowledgeBaseStatus
+    KnowledgeBaseStatus (..),
+
+    -- ** KnowledgeBaseType
+    KnowledgeBaseType (..),
+
+    -- ** RecommendationSourceType
+    RecommendationSourceType (..),
+
+    -- ** RecommendationTriggerType
+    RecommendationTriggerType (..),
+
+    -- ** RecommendationType
+    RecommendationType (..),
+
+    -- ** RelevanceLevel
+    RelevanceLevel (..),
+
+    -- ** AppIntegrationsConfiguration
+    AppIntegrationsConfiguration (AppIntegrationsConfiguration'),
+    newAppIntegrationsConfiguration,
+
+    -- ** AssistantAssociationData
+    AssistantAssociationData (AssistantAssociationData'),
+    newAssistantAssociationData,
+
+    -- ** AssistantAssociationInputData
+    AssistantAssociationInputData (AssistantAssociationInputData'),
+    newAssistantAssociationInputData,
+
+    -- ** AssistantAssociationOutputData
+    AssistantAssociationOutputData (AssistantAssociationOutputData'),
+    newAssistantAssociationOutputData,
+
+    -- ** AssistantAssociationSummary
+    AssistantAssociationSummary (AssistantAssociationSummary'),
+    newAssistantAssociationSummary,
+
+    -- ** AssistantData
+    AssistantData (AssistantData'),
+    newAssistantData,
+
+    -- ** AssistantSummary
+    AssistantSummary (AssistantSummary'),
+    newAssistantSummary,
+
+    -- ** ContentData
+    ContentData (ContentData'),
+    newContentData,
+
+    -- ** ContentReference
+    ContentReference (ContentReference'),
+    newContentReference,
+
+    -- ** ContentSummary
+    ContentSummary (ContentSummary'),
+    newContentSummary,
+
+    -- ** Document
+    Document (Document'),
+    newDocument,
+
+    -- ** DocumentText
+    DocumentText (DocumentText'),
+    newDocumentText,
+
+    -- ** Filter
+    Filter (Filter'),
+    newFilter,
+
+    -- ** Highlight
+    Highlight (Highlight'),
+    newHighlight,
+
+    -- ** KnowledgeBaseAssociationData
+    KnowledgeBaseAssociationData (KnowledgeBaseAssociationData'),
+    newKnowledgeBaseAssociationData,
+
+    -- ** KnowledgeBaseData
+    KnowledgeBaseData (KnowledgeBaseData'),
+    newKnowledgeBaseData,
+
+    -- ** KnowledgeBaseSummary
+    KnowledgeBaseSummary (KnowledgeBaseSummary'),
+    newKnowledgeBaseSummary,
+
+    -- ** NotifyRecommendationsReceivedError
+    NotifyRecommendationsReceivedError (NotifyRecommendationsReceivedError'),
+    newNotifyRecommendationsReceivedError,
+
+    -- ** QueryRecommendationTriggerData
+    QueryRecommendationTriggerData (QueryRecommendationTriggerData'),
+    newQueryRecommendationTriggerData,
+
+    -- ** RecommendationData
+    RecommendationData (RecommendationData'),
+    newRecommendationData,
+
+    -- ** RecommendationTrigger
+    RecommendationTrigger (RecommendationTrigger'),
+    newRecommendationTrigger,
+
+    -- ** RecommendationTriggerData
+    RecommendationTriggerData (RecommendationTriggerData'),
+    newRecommendationTriggerData,
+
+    -- ** RenderingConfiguration
+    RenderingConfiguration (RenderingConfiguration'),
+    newRenderingConfiguration,
+
+    -- ** ResultData
+    ResultData (ResultData'),
+    newResultData,
+
+    -- ** SearchExpression
+    SearchExpression (SearchExpression'),
+    newSearchExpression,
+
+    -- ** ServerSideEncryptionConfiguration
+    ServerSideEncryptionConfiguration (ServerSideEncryptionConfiguration'),
+    newServerSideEncryptionConfiguration,
+
+    -- ** SessionData
+    SessionData (SessionData'),
+    newSessionData,
+
+    -- ** SessionSummary
+    SessionSummary (SessionSummary'),
+    newSessionSummary,
+
+    -- ** SourceConfiguration
+    SourceConfiguration (SourceConfiguration'),
+    newSourceConfiguration,
+  )
+where
+
+import Amazonka.Wisdom.CreateAssistant
+import Amazonka.Wisdom.CreateAssistantAssociation
+import Amazonka.Wisdom.CreateContent
+import Amazonka.Wisdom.CreateKnowledgeBase
+import Amazonka.Wisdom.CreateSession
+import Amazonka.Wisdom.DeleteAssistant
+import Amazonka.Wisdom.DeleteAssistantAssociation
+import Amazonka.Wisdom.DeleteContent
+import Amazonka.Wisdom.DeleteKnowledgeBase
+import Amazonka.Wisdom.GetAssistant
+import Amazonka.Wisdom.GetAssistantAssociation
+import Amazonka.Wisdom.GetContent
+import Amazonka.Wisdom.GetContentSummary
+import Amazonka.Wisdom.GetKnowledgeBase
+import Amazonka.Wisdom.GetRecommendations
+import Amazonka.Wisdom.GetSession
+import Amazonka.Wisdom.Lens
+import Amazonka.Wisdom.ListAssistantAssociations
+import Amazonka.Wisdom.ListAssistants
+import Amazonka.Wisdom.ListContents
+import Amazonka.Wisdom.ListKnowledgeBases
+import Amazonka.Wisdom.ListTagsForResource
+import Amazonka.Wisdom.NotifyRecommendationsReceived
+import Amazonka.Wisdom.QueryAssistant
+import Amazonka.Wisdom.RemoveKnowledgeBaseTemplateUri
+import Amazonka.Wisdom.SearchContent
+import Amazonka.Wisdom.SearchSessions
+import Amazonka.Wisdom.StartContentUpload
+import Amazonka.Wisdom.TagResource
+import Amazonka.Wisdom.Types
+import Amazonka.Wisdom.UntagResource
+import Amazonka.Wisdom.UpdateContent
+import Amazonka.Wisdom.UpdateKnowledgeBaseTemplateUri
+import Amazonka.Wisdom.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 'Wisdom'.
+
+-- $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/Wisdom/CreateAssistant.hs b/gen/Amazonka/Wisdom/CreateAssistant.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/CreateAssistant.hs
@@ -0,0 +1,240 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Wisdom.CreateAssistant
+-- 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 Connect Wisdom assistant.
+module Amazonka.Wisdom.CreateAssistant
+  ( -- * Creating a Request
+    CreateAssistant (..),
+    newCreateAssistant,
+
+    -- * Request Lenses
+    createAssistant_clientToken,
+    createAssistant_description,
+    createAssistant_serverSideEncryptionConfiguration,
+    createAssistant_tags,
+    createAssistant_name,
+    createAssistant_type,
+
+    -- * Destructuring the Response
+    CreateAssistantResponse (..),
+    newCreateAssistantResponse,
+
+    -- * Response Lenses
+    createAssistantResponse_assistant,
+    createAssistantResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newCreateAssistant' smart constructor.
+data CreateAssistant = CreateAssistant'
+  { -- | A unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The description of the assistant.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The KMS key used for encryption.
+    serverSideEncryptionConfiguration :: Prelude.Maybe ServerSideEncryptionConfiguration,
+    -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the assistant.
+    name :: Prelude.Text,
+    -- | The type of assistant.
+    type' :: AssistantType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAssistant' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createAssistant_clientToken' - A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'description', 'createAssistant_description' - The description of the assistant.
+--
+-- 'serverSideEncryptionConfiguration', 'createAssistant_serverSideEncryptionConfiguration' - The KMS key used for encryption.
+--
+-- 'tags', 'createAssistant_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'name', 'createAssistant_name' - The name of the assistant.
+--
+-- 'type'', 'createAssistant_type' - The type of assistant.
+newCreateAssistant ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'type''
+  AssistantType ->
+  CreateAssistant
+newCreateAssistant pName_ pType_ =
+  CreateAssistant'
+    { clientToken = Prelude.Nothing,
+      description = Prelude.Nothing,
+      serverSideEncryptionConfiguration = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_,
+      type' = pType_
+    }
+
+-- | A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+createAssistant_clientToken :: Lens.Lens' CreateAssistant (Prelude.Maybe Prelude.Text)
+createAssistant_clientToken = Lens.lens (\CreateAssistant' {clientToken} -> clientToken) (\s@CreateAssistant' {} a -> s {clientToken = a} :: CreateAssistant)
+
+-- | The description of the assistant.
+createAssistant_description :: Lens.Lens' CreateAssistant (Prelude.Maybe Prelude.Text)
+createAssistant_description = Lens.lens (\CreateAssistant' {description} -> description) (\s@CreateAssistant' {} a -> s {description = a} :: CreateAssistant)
+
+-- | The KMS key used for encryption.
+createAssistant_serverSideEncryptionConfiguration :: Lens.Lens' CreateAssistant (Prelude.Maybe ServerSideEncryptionConfiguration)
+createAssistant_serverSideEncryptionConfiguration = Lens.lens (\CreateAssistant' {serverSideEncryptionConfiguration} -> serverSideEncryptionConfiguration) (\s@CreateAssistant' {} a -> s {serverSideEncryptionConfiguration = a} :: CreateAssistant)
+
+-- | The tags used to organize, track, or control access for this resource.
+createAssistant_tags :: Lens.Lens' CreateAssistant (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createAssistant_tags = Lens.lens (\CreateAssistant' {tags} -> tags) (\s@CreateAssistant' {} a -> s {tags = a} :: CreateAssistant) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the assistant.
+createAssistant_name :: Lens.Lens' CreateAssistant Prelude.Text
+createAssistant_name = Lens.lens (\CreateAssistant' {name} -> name) (\s@CreateAssistant' {} a -> s {name = a} :: CreateAssistant)
+
+-- | The type of assistant.
+createAssistant_type :: Lens.Lens' CreateAssistant AssistantType
+createAssistant_type = Lens.lens (\CreateAssistant' {type'} -> type') (\s@CreateAssistant' {} a -> s {type' = a} :: CreateAssistant)
+
+instance Core.AWSRequest CreateAssistant where
+  type
+    AWSResponse CreateAssistant =
+      CreateAssistantResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateAssistantResponse'
+            Prelude.<$> (x Data..?> "assistant")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateAssistant where
+  hashWithSalt _salt CreateAssistant' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` serverSideEncryptionConfiguration
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData CreateAssistant where
+  rnf CreateAssistant' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf serverSideEncryptionConfiguration
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToHeaders CreateAssistant where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateAssistant where
+  toJSON CreateAssistant' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("description" Data..=) Prelude.<$> description,
+            ("serverSideEncryptionConfiguration" Data..=)
+              Prelude.<$> serverSideEncryptionConfiguration,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("type" Data..= type')
+          ]
+      )
+
+instance Data.ToPath CreateAssistant where
+  toPath = Prelude.const "/assistants"
+
+instance Data.ToQuery CreateAssistant where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateAssistantResponse' smart constructor.
+data CreateAssistantResponse = CreateAssistantResponse'
+  { -- | Information about the assistant.
+    assistant :: Prelude.Maybe AssistantData,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAssistantResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assistant', 'createAssistantResponse_assistant' - Information about the assistant.
+--
+-- 'httpStatus', 'createAssistantResponse_httpStatus' - The response's http status code.
+newCreateAssistantResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateAssistantResponse
+newCreateAssistantResponse pHttpStatus_ =
+  CreateAssistantResponse'
+    { assistant =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the assistant.
+createAssistantResponse_assistant :: Lens.Lens' CreateAssistantResponse (Prelude.Maybe AssistantData)
+createAssistantResponse_assistant = Lens.lens (\CreateAssistantResponse' {assistant} -> assistant) (\s@CreateAssistantResponse' {} a -> s {assistant = a} :: CreateAssistantResponse)
+
+-- | The response's http status code.
+createAssistantResponse_httpStatus :: Lens.Lens' CreateAssistantResponse Prelude.Int
+createAssistantResponse_httpStatus = Lens.lens (\CreateAssistantResponse' {httpStatus} -> httpStatus) (\s@CreateAssistantResponse' {} a -> s {httpStatus = a} :: CreateAssistantResponse)
+
+instance Prelude.NFData CreateAssistantResponse where
+  rnf CreateAssistantResponse' {..} =
+    Prelude.rnf assistant
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Wisdom/CreateAssistantAssociation.hs b/gen/Amazonka/Wisdom/CreateAssistantAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/CreateAssistantAssociation.hs
@@ -0,0 +1,245 @@
+{-# 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.Wisdom.CreateAssistantAssociation
+-- 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 association between an Amazon Connect Wisdom assistant and
+-- another resource. Currently, the only supported association is with a
+-- knowledge base. An assistant can have only a single association.
+module Amazonka.Wisdom.CreateAssistantAssociation
+  ( -- * Creating a Request
+    CreateAssistantAssociation (..),
+    newCreateAssistantAssociation,
+
+    -- * Request Lenses
+    createAssistantAssociation_clientToken,
+    createAssistantAssociation_tags,
+    createAssistantAssociation_assistantId,
+    createAssistantAssociation_association,
+    createAssistantAssociation_associationType,
+
+    -- * Destructuring the Response
+    CreateAssistantAssociationResponse (..),
+    newCreateAssistantAssociationResponse,
+
+    -- * Response Lenses
+    createAssistantAssociationResponse_assistantAssociation,
+    createAssistantAssociationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newCreateAssistantAssociation' smart constructor.
+data CreateAssistantAssociation = CreateAssistantAssociation'
+  { -- | A unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+    -- URLs cannot contain the ARN.
+    assistantId :: Prelude.Text,
+    -- | The identifier of the associated resource.
+    association :: AssistantAssociationInputData,
+    -- | The type of association.
+    associationType :: AssociationType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAssistantAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createAssistantAssociation_clientToken' - A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'tags', 'createAssistantAssociation_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'assistantId', 'createAssistantAssociation_assistantId' - The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+--
+-- 'association', 'createAssistantAssociation_association' - The identifier of the associated resource.
+--
+-- 'associationType', 'createAssistantAssociation_associationType' - The type of association.
+newCreateAssistantAssociation ::
+  -- | 'assistantId'
+  Prelude.Text ->
+  -- | 'association'
+  AssistantAssociationInputData ->
+  -- | 'associationType'
+  AssociationType ->
+  CreateAssistantAssociation
+newCreateAssistantAssociation
+  pAssistantId_
+  pAssociation_
+  pAssociationType_ =
+    CreateAssistantAssociation'
+      { clientToken =
+          Prelude.Nothing,
+        tags = Prelude.Nothing,
+        assistantId = pAssistantId_,
+        association = pAssociation_,
+        associationType = pAssociationType_
+      }
+
+-- | A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+createAssistantAssociation_clientToken :: Lens.Lens' CreateAssistantAssociation (Prelude.Maybe Prelude.Text)
+createAssistantAssociation_clientToken = Lens.lens (\CreateAssistantAssociation' {clientToken} -> clientToken) (\s@CreateAssistantAssociation' {} a -> s {clientToken = a} :: CreateAssistantAssociation)
+
+-- | The tags used to organize, track, or control access for this resource.
+createAssistantAssociation_tags :: Lens.Lens' CreateAssistantAssociation (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createAssistantAssociation_tags = Lens.lens (\CreateAssistantAssociation' {tags} -> tags) (\s@CreateAssistantAssociation' {} a -> s {tags = a} :: CreateAssistantAssociation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+createAssistantAssociation_assistantId :: Lens.Lens' CreateAssistantAssociation Prelude.Text
+createAssistantAssociation_assistantId = Lens.lens (\CreateAssistantAssociation' {assistantId} -> assistantId) (\s@CreateAssistantAssociation' {} a -> s {assistantId = a} :: CreateAssistantAssociation)
+
+-- | The identifier of the associated resource.
+createAssistantAssociation_association :: Lens.Lens' CreateAssistantAssociation AssistantAssociationInputData
+createAssistantAssociation_association = Lens.lens (\CreateAssistantAssociation' {association} -> association) (\s@CreateAssistantAssociation' {} a -> s {association = a} :: CreateAssistantAssociation)
+
+-- | The type of association.
+createAssistantAssociation_associationType :: Lens.Lens' CreateAssistantAssociation AssociationType
+createAssistantAssociation_associationType = Lens.lens (\CreateAssistantAssociation' {associationType} -> associationType) (\s@CreateAssistantAssociation' {} a -> s {associationType = a} :: CreateAssistantAssociation)
+
+instance Core.AWSRequest CreateAssistantAssociation where
+  type
+    AWSResponse CreateAssistantAssociation =
+      CreateAssistantAssociationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateAssistantAssociationResponse'
+            Prelude.<$> (x Data..?> "assistantAssociation")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateAssistantAssociation where
+  hashWithSalt _salt CreateAssistantAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` assistantId
+      `Prelude.hashWithSalt` association
+      `Prelude.hashWithSalt` associationType
+
+instance Prelude.NFData CreateAssistantAssociation where
+  rnf CreateAssistantAssociation' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf assistantId
+      `Prelude.seq` Prelude.rnf association
+      `Prelude.seq` Prelude.rnf associationType
+
+instance Data.ToHeaders CreateAssistantAssociation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateAssistantAssociation where
+  toJSON CreateAssistantAssociation' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("association" Data..= association),
+            Prelude.Just
+              ("associationType" Data..= associationType)
+          ]
+      )
+
+instance Data.ToPath CreateAssistantAssociation where
+  toPath CreateAssistantAssociation' {..} =
+    Prelude.mconcat
+      [ "/assistants/",
+        Data.toBS assistantId,
+        "/associations"
+      ]
+
+instance Data.ToQuery CreateAssistantAssociation where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateAssistantAssociationResponse' smart constructor.
+data CreateAssistantAssociationResponse = CreateAssistantAssociationResponse'
+  { -- | The assistant association.
+    assistantAssociation :: Prelude.Maybe AssistantAssociationData,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAssistantAssociationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assistantAssociation', 'createAssistantAssociationResponse_assistantAssociation' - The assistant association.
+--
+-- 'httpStatus', 'createAssistantAssociationResponse_httpStatus' - The response's http status code.
+newCreateAssistantAssociationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateAssistantAssociationResponse
+newCreateAssistantAssociationResponse pHttpStatus_ =
+  CreateAssistantAssociationResponse'
+    { assistantAssociation =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The assistant association.
+createAssistantAssociationResponse_assistantAssociation :: Lens.Lens' CreateAssistantAssociationResponse (Prelude.Maybe AssistantAssociationData)
+createAssistantAssociationResponse_assistantAssociation = Lens.lens (\CreateAssistantAssociationResponse' {assistantAssociation} -> assistantAssociation) (\s@CreateAssistantAssociationResponse' {} a -> s {assistantAssociation = a} :: CreateAssistantAssociationResponse)
+
+-- | The response's http status code.
+createAssistantAssociationResponse_httpStatus :: Lens.Lens' CreateAssistantAssociationResponse Prelude.Int
+createAssistantAssociationResponse_httpStatus = Lens.lens (\CreateAssistantAssociationResponse' {httpStatus} -> httpStatus) (\s@CreateAssistantAssociationResponse' {} a -> s {httpStatus = a} :: CreateAssistantAssociationResponse)
+
+instance
+  Prelude.NFData
+    CreateAssistantAssociationResponse
+  where
+  rnf CreateAssistantAssociationResponse' {..} =
+    Prelude.rnf assistantAssociation
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Wisdom/CreateContent.hs b/gen/Amazonka/Wisdom/CreateContent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/CreateContent.hs
@@ -0,0 +1,306 @@
+{-# 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.Wisdom.CreateContent
+-- 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 Wisdom content. Before to calling this API, use
+-- <https://docs.aws.amazon.com/wisdom/latest/APIReference/API_StartContentUpload.html StartContentUpload>
+-- to upload an asset.
+module Amazonka.Wisdom.CreateContent
+  ( -- * Creating a Request
+    CreateContent (..),
+    newCreateContent,
+
+    -- * Request Lenses
+    createContent_clientToken,
+    createContent_metadata,
+    createContent_overrideLinkOutUri,
+    createContent_tags,
+    createContent_title,
+    createContent_knowledgeBaseId,
+    createContent_name,
+    createContent_uploadId,
+
+    -- * Destructuring the Response
+    CreateContentResponse (..),
+    newCreateContentResponse,
+
+    -- * Response Lenses
+    createContentResponse_content,
+    createContentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newCreateContent' smart constructor.
+data CreateContent = CreateContent'
+  { -- | A unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A key\/value map to store attributes without affecting tagging or
+    -- recommendations. For example, when synchronizing data between an
+    -- external system and Wisdom, you can store an external version identifier
+    -- as metadata to utilize for determining drift.
+    metadata :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The URI you want to use for the article. If the knowledge base has a
+    -- templateUri, setting this argument overrides it for this piece of
+    -- content.
+    overrideLinkOutUri :: Prelude.Maybe Prelude.Text,
+    -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The title of the content. If not set, the title is equal to the name.
+    title :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the knowledge base. Can be either the ID or the ARN.
+    -- URLs cannot contain the ARN.
+    knowledgeBaseId :: Prelude.Text,
+    -- | The name of the content. Each piece of content in a knowledge base must
+    -- have a unique name. You can retrieve a piece of content using only its
+    -- knowledge base and its name with the
+    -- <https://docs.aws.amazon.com/wisdom/latest/APIReference/API_SearchContent.html SearchContent>
+    -- API.
+    name :: Prelude.Text,
+    -- | A pointer to the uploaded asset. This value is returned by
+    -- <https://docs.aws.amazon.com/wisdom/latest/APIReference/API_StartContentUpload.html StartContentUpload>.
+    uploadId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateContent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createContent_clientToken' - A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'metadata', 'createContent_metadata' - A key\/value map to store attributes without affecting tagging or
+-- recommendations. For example, when synchronizing data between an
+-- external system and Wisdom, you can store an external version identifier
+-- as metadata to utilize for determining drift.
+--
+-- 'overrideLinkOutUri', 'createContent_overrideLinkOutUri' - The URI you want to use for the article. If the knowledge base has a
+-- templateUri, setting this argument overrides it for this piece of
+-- content.
+--
+-- 'tags', 'createContent_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'title', 'createContent_title' - The title of the content. If not set, the title is equal to the name.
+--
+-- 'knowledgeBaseId', 'createContent_knowledgeBaseId' - The identifier of the knowledge base. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+--
+-- 'name', 'createContent_name' - The name of the content. Each piece of content in a knowledge base must
+-- have a unique name. You can retrieve a piece of content using only its
+-- knowledge base and its name with the
+-- <https://docs.aws.amazon.com/wisdom/latest/APIReference/API_SearchContent.html SearchContent>
+-- API.
+--
+-- 'uploadId', 'createContent_uploadId' - A pointer to the uploaded asset. This value is returned by
+-- <https://docs.aws.amazon.com/wisdom/latest/APIReference/API_StartContentUpload.html StartContentUpload>.
+newCreateContent ::
+  -- | 'knowledgeBaseId'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'uploadId'
+  Prelude.Text ->
+  CreateContent
+newCreateContent pKnowledgeBaseId_ pName_ pUploadId_ =
+  CreateContent'
+    { clientToken = Prelude.Nothing,
+      metadata = Prelude.Nothing,
+      overrideLinkOutUri = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      title = Prelude.Nothing,
+      knowledgeBaseId = pKnowledgeBaseId_,
+      name = pName_,
+      uploadId = pUploadId_
+    }
+
+-- | A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+createContent_clientToken :: Lens.Lens' CreateContent (Prelude.Maybe Prelude.Text)
+createContent_clientToken = Lens.lens (\CreateContent' {clientToken} -> clientToken) (\s@CreateContent' {} a -> s {clientToken = a} :: CreateContent)
+
+-- | A key\/value map to store attributes without affecting tagging or
+-- recommendations. For example, when synchronizing data between an
+-- external system and Wisdom, you can store an external version identifier
+-- as metadata to utilize for determining drift.
+createContent_metadata :: Lens.Lens' CreateContent (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createContent_metadata = Lens.lens (\CreateContent' {metadata} -> metadata) (\s@CreateContent' {} a -> s {metadata = a} :: CreateContent) Prelude.. Lens.mapping Lens.coerced
+
+-- | The URI you want to use for the article. If the knowledge base has a
+-- templateUri, setting this argument overrides it for this piece of
+-- content.
+createContent_overrideLinkOutUri :: Lens.Lens' CreateContent (Prelude.Maybe Prelude.Text)
+createContent_overrideLinkOutUri = Lens.lens (\CreateContent' {overrideLinkOutUri} -> overrideLinkOutUri) (\s@CreateContent' {} a -> s {overrideLinkOutUri = a} :: CreateContent)
+
+-- | The tags used to organize, track, or control access for this resource.
+createContent_tags :: Lens.Lens' CreateContent (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createContent_tags = Lens.lens (\CreateContent' {tags} -> tags) (\s@CreateContent' {} a -> s {tags = a} :: CreateContent) Prelude.. Lens.mapping Lens.coerced
+
+-- | The title of the content. If not set, the title is equal to the name.
+createContent_title :: Lens.Lens' CreateContent (Prelude.Maybe Prelude.Text)
+createContent_title = Lens.lens (\CreateContent' {title} -> title) (\s@CreateContent' {} a -> s {title = a} :: CreateContent)
+
+-- | The identifier of the knowledge base. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+createContent_knowledgeBaseId :: Lens.Lens' CreateContent Prelude.Text
+createContent_knowledgeBaseId = Lens.lens (\CreateContent' {knowledgeBaseId} -> knowledgeBaseId) (\s@CreateContent' {} a -> s {knowledgeBaseId = a} :: CreateContent)
+
+-- | The name of the content. Each piece of content in a knowledge base must
+-- have a unique name. You can retrieve a piece of content using only its
+-- knowledge base and its name with the
+-- <https://docs.aws.amazon.com/wisdom/latest/APIReference/API_SearchContent.html SearchContent>
+-- API.
+createContent_name :: Lens.Lens' CreateContent Prelude.Text
+createContent_name = Lens.lens (\CreateContent' {name} -> name) (\s@CreateContent' {} a -> s {name = a} :: CreateContent)
+
+-- | A pointer to the uploaded asset. This value is returned by
+-- <https://docs.aws.amazon.com/wisdom/latest/APIReference/API_StartContentUpload.html StartContentUpload>.
+createContent_uploadId :: Lens.Lens' CreateContent Prelude.Text
+createContent_uploadId = Lens.lens (\CreateContent' {uploadId} -> uploadId) (\s@CreateContent' {} a -> s {uploadId = a} :: CreateContent)
+
+instance Core.AWSRequest CreateContent where
+  type
+    AWSResponse CreateContent =
+      CreateContentResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateContentResponse'
+            Prelude.<$> (x Data..?> "content")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateContent where
+  hashWithSalt _salt CreateContent' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` metadata
+      `Prelude.hashWithSalt` overrideLinkOutUri
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` title
+      `Prelude.hashWithSalt` knowledgeBaseId
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` uploadId
+
+instance Prelude.NFData CreateContent where
+  rnf CreateContent' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf metadata
+      `Prelude.seq` Prelude.rnf overrideLinkOutUri
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf title
+      `Prelude.seq` Prelude.rnf knowledgeBaseId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf uploadId
+
+instance Data.ToHeaders CreateContent where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateContent where
+  toJSON CreateContent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("metadata" Data..=) Prelude.<$> metadata,
+            ("overrideLinkOutUri" Data..=)
+              Prelude.<$> overrideLinkOutUri,
+            ("tags" Data..=) Prelude.<$> tags,
+            ("title" Data..=) Prelude.<$> title,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("uploadId" Data..= uploadId)
+          ]
+      )
+
+instance Data.ToPath CreateContent where
+  toPath CreateContent' {..} =
+    Prelude.mconcat
+      [ "/knowledgeBases/",
+        Data.toBS knowledgeBaseId,
+        "/contents"
+      ]
+
+instance Data.ToQuery CreateContent where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateContentResponse' smart constructor.
+data CreateContentResponse = CreateContentResponse'
+  { -- | The content.
+    content :: Prelude.Maybe ContentData,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateContentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'content', 'createContentResponse_content' - The content.
+--
+-- 'httpStatus', 'createContentResponse_httpStatus' - The response's http status code.
+newCreateContentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateContentResponse
+newCreateContentResponse pHttpStatus_ =
+  CreateContentResponse'
+    { content = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The content.
+createContentResponse_content :: Lens.Lens' CreateContentResponse (Prelude.Maybe ContentData)
+createContentResponse_content = Lens.lens (\CreateContentResponse' {content} -> content) (\s@CreateContentResponse' {} a -> s {content = a} :: CreateContentResponse)
+
+-- | The response's http status code.
+createContentResponse_httpStatus :: Lens.Lens' CreateContentResponse Prelude.Int
+createContentResponse_httpStatus = Lens.lens (\CreateContentResponse' {httpStatus} -> httpStatus) (\s@CreateContentResponse' {} a -> s {httpStatus = a} :: CreateContentResponse)
+
+instance Prelude.NFData CreateContentResponse where
+  rnf CreateContentResponse' {..} =
+    Prelude.rnf content
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Wisdom/CreateKnowledgeBase.hs b/gen/Amazonka/Wisdom/CreateKnowledgeBase.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/CreateKnowledgeBase.hs
@@ -0,0 +1,285 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Wisdom.CreateKnowledgeBase
+-- 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 knowledge base.
+--
+-- When using this API, you cannot reuse
+-- <https://docs.aws.amazon.com/appintegrations/latest/APIReference/Welcome.html Amazon AppIntegrations>
+-- DataIntegrations with external knowledge bases such as Salesforce and
+-- ServiceNow. If you do, you\'ll get an @InvalidRequestException@ error.
+--
+-- >  <p>For example, you're programmatically managing your external knowledge base, and you want to add or remove one of the fields that is being ingested from Salesforce. Do the following:</p> <ol> <li> <p>Call <a href="https://docs.aws.amazon.com/wisdom/latest/APIReference/API_DeleteKnowledgeBase.html">DeleteKnowledgeBase</a>.</p> </li> <li> <p>Call <a href="https://docs.aws.amazon.com/appintegrations/latest/APIReference/API_DeleteDataIntegration.html">DeleteDataIntegration</a>.</p> </li> <li> <p>Call <a href="https://docs.aws.amazon.com/appintegrations/latest/APIReference/API_CreateDataIntegration.html">CreateDataIntegration</a> to recreate the DataIntegration or a create different one.</p> </li> <li> <p>Call CreateKnowledgeBase.</p> </li> </ol> </note>
+module Amazonka.Wisdom.CreateKnowledgeBase
+  ( -- * Creating a Request
+    CreateKnowledgeBase (..),
+    newCreateKnowledgeBase,
+
+    -- * Request Lenses
+    createKnowledgeBase_clientToken,
+    createKnowledgeBase_description,
+    createKnowledgeBase_renderingConfiguration,
+    createKnowledgeBase_serverSideEncryptionConfiguration,
+    createKnowledgeBase_sourceConfiguration,
+    createKnowledgeBase_tags,
+    createKnowledgeBase_knowledgeBaseType,
+    createKnowledgeBase_name,
+
+    -- * Destructuring the Response
+    CreateKnowledgeBaseResponse (..),
+    newCreateKnowledgeBaseResponse,
+
+    -- * Response Lenses
+    createKnowledgeBaseResponse_knowledgeBase,
+    createKnowledgeBaseResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newCreateKnowledgeBase' smart constructor.
+data CreateKnowledgeBase = CreateKnowledgeBase'
+  { -- | A unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Information about how to render the content.
+    renderingConfiguration :: Prelude.Maybe RenderingConfiguration,
+    -- | The KMS key used for encryption.
+    serverSideEncryptionConfiguration :: Prelude.Maybe ServerSideEncryptionConfiguration,
+    -- | The source of the knowledge base content. Only set this argument for
+    -- EXTERNAL knowledge bases.
+    sourceConfiguration :: Prelude.Maybe SourceConfiguration,
+    -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The type of knowledge base. Only CUSTOM knowledge bases allow you to
+    -- upload your own content. EXTERNAL knowledge bases support integrations
+    -- with third-party systems whose content is synchronized automatically.
+    knowledgeBaseType :: KnowledgeBaseType,
+    -- | The name of the knowledge base.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateKnowledgeBase' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createKnowledgeBase_clientToken' - A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'description', 'createKnowledgeBase_description' - The description.
+--
+-- 'renderingConfiguration', 'createKnowledgeBase_renderingConfiguration' - Information about how to render the content.
+--
+-- 'serverSideEncryptionConfiguration', 'createKnowledgeBase_serverSideEncryptionConfiguration' - The KMS key used for encryption.
+--
+-- 'sourceConfiguration', 'createKnowledgeBase_sourceConfiguration' - The source of the knowledge base content. Only set this argument for
+-- EXTERNAL knowledge bases.
+--
+-- 'tags', 'createKnowledgeBase_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'knowledgeBaseType', 'createKnowledgeBase_knowledgeBaseType' - The type of knowledge base. Only CUSTOM knowledge bases allow you to
+-- upload your own content. EXTERNAL knowledge bases support integrations
+-- with third-party systems whose content is synchronized automatically.
+--
+-- 'name', 'createKnowledgeBase_name' - The name of the knowledge base.
+newCreateKnowledgeBase ::
+  -- | 'knowledgeBaseType'
+  KnowledgeBaseType ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateKnowledgeBase
+newCreateKnowledgeBase pKnowledgeBaseType_ pName_ =
+  CreateKnowledgeBase'
+    { clientToken = Prelude.Nothing,
+      description = Prelude.Nothing,
+      renderingConfiguration = Prelude.Nothing,
+      serverSideEncryptionConfiguration = Prelude.Nothing,
+      sourceConfiguration = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      knowledgeBaseType = pKnowledgeBaseType_,
+      name = pName_
+    }
+
+-- | A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+createKnowledgeBase_clientToken :: Lens.Lens' CreateKnowledgeBase (Prelude.Maybe Prelude.Text)
+createKnowledgeBase_clientToken = Lens.lens (\CreateKnowledgeBase' {clientToken} -> clientToken) (\s@CreateKnowledgeBase' {} a -> s {clientToken = a} :: CreateKnowledgeBase)
+
+-- | The description.
+createKnowledgeBase_description :: Lens.Lens' CreateKnowledgeBase (Prelude.Maybe Prelude.Text)
+createKnowledgeBase_description = Lens.lens (\CreateKnowledgeBase' {description} -> description) (\s@CreateKnowledgeBase' {} a -> s {description = a} :: CreateKnowledgeBase)
+
+-- | Information about how to render the content.
+createKnowledgeBase_renderingConfiguration :: Lens.Lens' CreateKnowledgeBase (Prelude.Maybe RenderingConfiguration)
+createKnowledgeBase_renderingConfiguration = Lens.lens (\CreateKnowledgeBase' {renderingConfiguration} -> renderingConfiguration) (\s@CreateKnowledgeBase' {} a -> s {renderingConfiguration = a} :: CreateKnowledgeBase)
+
+-- | The KMS key used for encryption.
+createKnowledgeBase_serverSideEncryptionConfiguration :: Lens.Lens' CreateKnowledgeBase (Prelude.Maybe ServerSideEncryptionConfiguration)
+createKnowledgeBase_serverSideEncryptionConfiguration = Lens.lens (\CreateKnowledgeBase' {serverSideEncryptionConfiguration} -> serverSideEncryptionConfiguration) (\s@CreateKnowledgeBase' {} a -> s {serverSideEncryptionConfiguration = a} :: CreateKnowledgeBase)
+
+-- | The source of the knowledge base content. Only set this argument for
+-- EXTERNAL knowledge bases.
+createKnowledgeBase_sourceConfiguration :: Lens.Lens' CreateKnowledgeBase (Prelude.Maybe SourceConfiguration)
+createKnowledgeBase_sourceConfiguration = Lens.lens (\CreateKnowledgeBase' {sourceConfiguration} -> sourceConfiguration) (\s@CreateKnowledgeBase' {} a -> s {sourceConfiguration = a} :: CreateKnowledgeBase)
+
+-- | The tags used to organize, track, or control access for this resource.
+createKnowledgeBase_tags :: Lens.Lens' CreateKnowledgeBase (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createKnowledgeBase_tags = Lens.lens (\CreateKnowledgeBase' {tags} -> tags) (\s@CreateKnowledgeBase' {} a -> s {tags = a} :: CreateKnowledgeBase) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of knowledge base. Only CUSTOM knowledge bases allow you to
+-- upload your own content. EXTERNAL knowledge bases support integrations
+-- with third-party systems whose content is synchronized automatically.
+createKnowledgeBase_knowledgeBaseType :: Lens.Lens' CreateKnowledgeBase KnowledgeBaseType
+createKnowledgeBase_knowledgeBaseType = Lens.lens (\CreateKnowledgeBase' {knowledgeBaseType} -> knowledgeBaseType) (\s@CreateKnowledgeBase' {} a -> s {knowledgeBaseType = a} :: CreateKnowledgeBase)
+
+-- | The name of the knowledge base.
+createKnowledgeBase_name :: Lens.Lens' CreateKnowledgeBase Prelude.Text
+createKnowledgeBase_name = Lens.lens (\CreateKnowledgeBase' {name} -> name) (\s@CreateKnowledgeBase' {} a -> s {name = a} :: CreateKnowledgeBase)
+
+instance Core.AWSRequest CreateKnowledgeBase where
+  type
+    AWSResponse CreateKnowledgeBase =
+      CreateKnowledgeBaseResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateKnowledgeBaseResponse'
+            Prelude.<$> (x Data..?> "knowledgeBase")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateKnowledgeBase where
+  hashWithSalt _salt CreateKnowledgeBase' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` renderingConfiguration
+      `Prelude.hashWithSalt` serverSideEncryptionConfiguration
+      `Prelude.hashWithSalt` sourceConfiguration
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` knowledgeBaseType
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateKnowledgeBase where
+  rnf CreateKnowledgeBase' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf renderingConfiguration
+      `Prelude.seq` Prelude.rnf serverSideEncryptionConfiguration
+      `Prelude.seq` Prelude.rnf sourceConfiguration
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf knowledgeBaseType
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateKnowledgeBase where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateKnowledgeBase where
+  toJSON CreateKnowledgeBase' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("description" Data..=) Prelude.<$> description,
+            ("renderingConfiguration" Data..=)
+              Prelude.<$> renderingConfiguration,
+            ("serverSideEncryptionConfiguration" Data..=)
+              Prelude.<$> serverSideEncryptionConfiguration,
+            ("sourceConfiguration" Data..=)
+              Prelude.<$> sourceConfiguration,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("knowledgeBaseType" Data..= knowledgeBaseType),
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateKnowledgeBase where
+  toPath = Prelude.const "/knowledgeBases"
+
+instance Data.ToQuery CreateKnowledgeBase where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateKnowledgeBaseResponse' smart constructor.
+data CreateKnowledgeBaseResponse = CreateKnowledgeBaseResponse'
+  { -- | The knowledge base.
+    knowledgeBase :: Prelude.Maybe KnowledgeBaseData,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateKnowledgeBaseResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'knowledgeBase', 'createKnowledgeBaseResponse_knowledgeBase' - The knowledge base.
+--
+-- 'httpStatus', 'createKnowledgeBaseResponse_httpStatus' - The response's http status code.
+newCreateKnowledgeBaseResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateKnowledgeBaseResponse
+newCreateKnowledgeBaseResponse pHttpStatus_ =
+  CreateKnowledgeBaseResponse'
+    { knowledgeBase =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The knowledge base.
+createKnowledgeBaseResponse_knowledgeBase :: Lens.Lens' CreateKnowledgeBaseResponse (Prelude.Maybe KnowledgeBaseData)
+createKnowledgeBaseResponse_knowledgeBase = Lens.lens (\CreateKnowledgeBaseResponse' {knowledgeBase} -> knowledgeBase) (\s@CreateKnowledgeBaseResponse' {} a -> s {knowledgeBase = a} :: CreateKnowledgeBaseResponse)
+
+-- | The response's http status code.
+createKnowledgeBaseResponse_httpStatus :: Lens.Lens' CreateKnowledgeBaseResponse Prelude.Int
+createKnowledgeBaseResponse_httpStatus = Lens.lens (\CreateKnowledgeBaseResponse' {httpStatus} -> httpStatus) (\s@CreateKnowledgeBaseResponse' {} a -> s {httpStatus = a} :: CreateKnowledgeBaseResponse)
+
+instance Prelude.NFData CreateKnowledgeBaseResponse where
+  rnf CreateKnowledgeBaseResponse' {..} =
+    Prelude.rnf knowledgeBase
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Wisdom/CreateSession.hs b/gen/Amazonka/Wisdom/CreateSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/CreateSession.hs
@@ -0,0 +1,231 @@
+{-# 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.Wisdom.CreateSession
+-- 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 session. A session is a contextual container used for
+-- generating recommendations. Amazon Connect creates a new Wisdom session
+-- for each contact on which Wisdom is enabled.
+module Amazonka.Wisdom.CreateSession
+  ( -- * Creating a Request
+    CreateSession (..),
+    newCreateSession,
+
+    -- * Request Lenses
+    createSession_clientToken,
+    createSession_description,
+    createSession_tags,
+    createSession_assistantId,
+    createSession_name,
+
+    -- * Destructuring the Response
+    CreateSessionResponse (..),
+    newCreateSessionResponse,
+
+    -- * Response Lenses
+    createSessionResponse_session,
+    createSessionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newCreateSession' smart constructor.
+data CreateSession = CreateSession'
+  { -- | A unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+    -- URLs cannot contain the ARN.
+    assistantId :: Prelude.Text,
+    -- | The name of the session.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSession' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createSession_clientToken' - A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'description', 'createSession_description' - The description.
+--
+-- 'tags', 'createSession_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'assistantId', 'createSession_assistantId' - The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+--
+-- 'name', 'createSession_name' - The name of the session.
+newCreateSession ::
+  -- | 'assistantId'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateSession
+newCreateSession pAssistantId_ pName_ =
+  CreateSession'
+    { clientToken = Prelude.Nothing,
+      description = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      assistantId = pAssistantId_,
+      name = pName_
+    }
+
+-- | A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+createSession_clientToken :: Lens.Lens' CreateSession (Prelude.Maybe Prelude.Text)
+createSession_clientToken = Lens.lens (\CreateSession' {clientToken} -> clientToken) (\s@CreateSession' {} a -> s {clientToken = a} :: CreateSession)
+
+-- | The description.
+createSession_description :: Lens.Lens' CreateSession (Prelude.Maybe Prelude.Text)
+createSession_description = Lens.lens (\CreateSession' {description} -> description) (\s@CreateSession' {} a -> s {description = a} :: CreateSession)
+
+-- | The tags used to organize, track, or control access for this resource.
+createSession_tags :: Lens.Lens' CreateSession (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createSession_tags = Lens.lens (\CreateSession' {tags} -> tags) (\s@CreateSession' {} a -> s {tags = a} :: CreateSession) Prelude.. Lens.mapping Lens.coerced
+
+-- | The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+createSession_assistantId :: Lens.Lens' CreateSession Prelude.Text
+createSession_assistantId = Lens.lens (\CreateSession' {assistantId} -> assistantId) (\s@CreateSession' {} a -> s {assistantId = a} :: CreateSession)
+
+-- | The name of the session.
+createSession_name :: Lens.Lens' CreateSession Prelude.Text
+createSession_name = Lens.lens (\CreateSession' {name} -> name) (\s@CreateSession' {} a -> s {name = a} :: CreateSession)
+
+instance Core.AWSRequest CreateSession where
+  type
+    AWSResponse CreateSession =
+      CreateSessionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateSessionResponse'
+            Prelude.<$> (x Data..?> "session")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateSession where
+  hashWithSalt _salt CreateSession' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` assistantId
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateSession where
+  rnf CreateSession' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf assistantId
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateSession where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateSession where
+  toJSON CreateSession' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("description" Data..=) Prelude.<$> description,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateSession where
+  toPath CreateSession' {..} =
+    Prelude.mconcat
+      ["/assistants/", Data.toBS assistantId, "/sessions"]
+
+instance Data.ToQuery CreateSession where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateSessionResponse' smart constructor.
+data CreateSessionResponse = CreateSessionResponse'
+  { -- | The session.
+    session :: Prelude.Maybe SessionData,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSessionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'session', 'createSessionResponse_session' - The session.
+--
+-- 'httpStatus', 'createSessionResponse_httpStatus' - The response's http status code.
+newCreateSessionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateSessionResponse
+newCreateSessionResponse pHttpStatus_ =
+  CreateSessionResponse'
+    { session = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The session.
+createSessionResponse_session :: Lens.Lens' CreateSessionResponse (Prelude.Maybe SessionData)
+createSessionResponse_session = Lens.lens (\CreateSessionResponse' {session} -> session) (\s@CreateSessionResponse' {} a -> s {session = a} :: CreateSessionResponse)
+
+-- | The response's http status code.
+createSessionResponse_httpStatus :: Lens.Lens' CreateSessionResponse Prelude.Int
+createSessionResponse_httpStatus = Lens.lens (\CreateSessionResponse' {httpStatus} -> httpStatus) (\s@CreateSessionResponse' {} a -> s {httpStatus = a} :: CreateSessionResponse)
+
+instance Prelude.NFData CreateSessionResponse where
+  rnf CreateSessionResponse' {..} =
+    Prelude.rnf session
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Wisdom/DeleteAssistant.hs b/gen/Amazonka/Wisdom/DeleteAssistant.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/DeleteAssistant.hs
@@ -0,0 +1,147 @@
+{-# 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.Wisdom.DeleteAssistant
+-- 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 assistant.
+module Amazonka.Wisdom.DeleteAssistant
+  ( -- * Creating a Request
+    DeleteAssistant (..),
+    newDeleteAssistant,
+
+    -- * Request Lenses
+    deleteAssistant_assistantId,
+
+    -- * Destructuring the Response
+    DeleteAssistantResponse (..),
+    newDeleteAssistantResponse,
+
+    -- * Response Lenses
+    deleteAssistantResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newDeleteAssistant' smart constructor.
+data DeleteAssistant = DeleteAssistant'
+  { -- | The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+    -- URLs cannot contain the ARN.
+    assistantId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAssistant' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assistantId', 'deleteAssistant_assistantId' - The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+newDeleteAssistant ::
+  -- | 'assistantId'
+  Prelude.Text ->
+  DeleteAssistant
+newDeleteAssistant pAssistantId_ =
+  DeleteAssistant' {assistantId = pAssistantId_}
+
+-- | The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+deleteAssistant_assistantId :: Lens.Lens' DeleteAssistant Prelude.Text
+deleteAssistant_assistantId = Lens.lens (\DeleteAssistant' {assistantId} -> assistantId) (\s@DeleteAssistant' {} a -> s {assistantId = a} :: DeleteAssistant)
+
+instance Core.AWSRequest DeleteAssistant where
+  type
+    AWSResponse DeleteAssistant =
+      DeleteAssistantResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteAssistantResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteAssistant where
+  hashWithSalt _salt DeleteAssistant' {..} =
+    _salt `Prelude.hashWithSalt` assistantId
+
+instance Prelude.NFData DeleteAssistant where
+  rnf DeleteAssistant' {..} = Prelude.rnf assistantId
+
+instance Data.ToHeaders DeleteAssistant where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteAssistant where
+  toPath DeleteAssistant' {..} =
+    Prelude.mconcat
+      ["/assistants/", Data.toBS assistantId]
+
+instance Data.ToQuery DeleteAssistant where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteAssistantResponse' smart constructor.
+data DeleteAssistantResponse = DeleteAssistantResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAssistantResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteAssistantResponse_httpStatus' - The response's http status code.
+newDeleteAssistantResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteAssistantResponse
+newDeleteAssistantResponse pHttpStatus_ =
+  DeleteAssistantResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteAssistantResponse_httpStatus :: Lens.Lens' DeleteAssistantResponse Prelude.Int
+deleteAssistantResponse_httpStatus = Lens.lens (\DeleteAssistantResponse' {httpStatus} -> httpStatus) (\s@DeleteAssistantResponse' {} a -> s {httpStatus = a} :: DeleteAssistantResponse)
+
+instance Prelude.NFData DeleteAssistantResponse where
+  rnf DeleteAssistantResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Wisdom/DeleteAssistantAssociation.hs b/gen/Amazonka/Wisdom/DeleteAssistantAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/DeleteAssistantAssociation.hs
@@ -0,0 +1,181 @@
+{-# 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.Wisdom.DeleteAssistantAssociation
+-- 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 assistant association.
+module Amazonka.Wisdom.DeleteAssistantAssociation
+  ( -- * Creating a Request
+    DeleteAssistantAssociation (..),
+    newDeleteAssistantAssociation,
+
+    -- * Request Lenses
+    deleteAssistantAssociation_assistantAssociationId,
+    deleteAssistantAssociation_assistantId,
+
+    -- * Destructuring the Response
+    DeleteAssistantAssociationResponse (..),
+    newDeleteAssistantAssociationResponse,
+
+    -- * Response Lenses
+    deleteAssistantAssociationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newDeleteAssistantAssociation' smart constructor.
+data DeleteAssistantAssociation = DeleteAssistantAssociation'
+  { -- | The identifier of the assistant association. Can be either the ID or the
+    -- ARN. URLs cannot contain the ARN.
+    assistantAssociationId :: Prelude.Text,
+    -- | The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+    -- URLs cannot contain the ARN.
+    assistantId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAssistantAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assistantAssociationId', 'deleteAssistantAssociation_assistantAssociationId' - The identifier of the assistant association. Can be either the ID or the
+-- ARN. URLs cannot contain the ARN.
+--
+-- 'assistantId', 'deleteAssistantAssociation_assistantId' - The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+newDeleteAssistantAssociation ::
+  -- | 'assistantAssociationId'
+  Prelude.Text ->
+  -- | 'assistantId'
+  Prelude.Text ->
+  DeleteAssistantAssociation
+newDeleteAssistantAssociation
+  pAssistantAssociationId_
+  pAssistantId_ =
+    DeleteAssistantAssociation'
+      { assistantAssociationId =
+          pAssistantAssociationId_,
+        assistantId = pAssistantId_
+      }
+
+-- | The identifier of the assistant association. Can be either the ID or the
+-- ARN. URLs cannot contain the ARN.
+deleteAssistantAssociation_assistantAssociationId :: Lens.Lens' DeleteAssistantAssociation Prelude.Text
+deleteAssistantAssociation_assistantAssociationId = Lens.lens (\DeleteAssistantAssociation' {assistantAssociationId} -> assistantAssociationId) (\s@DeleteAssistantAssociation' {} a -> s {assistantAssociationId = a} :: DeleteAssistantAssociation)
+
+-- | The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+deleteAssistantAssociation_assistantId :: Lens.Lens' DeleteAssistantAssociation Prelude.Text
+deleteAssistantAssociation_assistantId = Lens.lens (\DeleteAssistantAssociation' {assistantId} -> assistantId) (\s@DeleteAssistantAssociation' {} a -> s {assistantId = a} :: DeleteAssistantAssociation)
+
+instance Core.AWSRequest DeleteAssistantAssociation where
+  type
+    AWSResponse DeleteAssistantAssociation =
+      DeleteAssistantAssociationResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteAssistantAssociationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteAssistantAssociation where
+  hashWithSalt _salt DeleteAssistantAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` assistantAssociationId
+      `Prelude.hashWithSalt` assistantId
+
+instance Prelude.NFData DeleteAssistantAssociation where
+  rnf DeleteAssistantAssociation' {..} =
+    Prelude.rnf assistantAssociationId
+      `Prelude.seq` Prelude.rnf assistantId
+
+instance Data.ToHeaders DeleteAssistantAssociation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteAssistantAssociation where
+  toPath DeleteAssistantAssociation' {..} =
+    Prelude.mconcat
+      [ "/assistants/",
+        Data.toBS assistantId,
+        "/associations/",
+        Data.toBS assistantAssociationId
+      ]
+
+instance Data.ToQuery DeleteAssistantAssociation where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteAssistantAssociationResponse' smart constructor.
+data DeleteAssistantAssociationResponse = DeleteAssistantAssociationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAssistantAssociationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteAssistantAssociationResponse_httpStatus' - The response's http status code.
+newDeleteAssistantAssociationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteAssistantAssociationResponse
+newDeleteAssistantAssociationResponse pHttpStatus_ =
+  DeleteAssistantAssociationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteAssistantAssociationResponse_httpStatus :: Lens.Lens' DeleteAssistantAssociationResponse Prelude.Int
+deleteAssistantAssociationResponse_httpStatus = Lens.lens (\DeleteAssistantAssociationResponse' {httpStatus} -> httpStatus) (\s@DeleteAssistantAssociationResponse' {} a -> s {httpStatus = a} :: DeleteAssistantAssociationResponse)
+
+instance
+  Prelude.NFData
+    DeleteAssistantAssociationResponse
+  where
+  rnf DeleteAssistantAssociationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Wisdom/DeleteContent.hs b/gen/Amazonka/Wisdom/DeleteContent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/DeleteContent.hs
@@ -0,0 +1,172 @@
+{-# 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.Wisdom.DeleteContent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the content.
+module Amazonka.Wisdom.DeleteContent
+  ( -- * Creating a Request
+    DeleteContent (..),
+    newDeleteContent,
+
+    -- * Request Lenses
+    deleteContent_contentId,
+    deleteContent_knowledgeBaseId,
+
+    -- * Destructuring the Response
+    DeleteContentResponse (..),
+    newDeleteContentResponse,
+
+    -- * Response Lenses
+    deleteContentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newDeleteContent' smart constructor.
+data DeleteContent = DeleteContent'
+  { -- | The identifier of the content. Can be either the ID or the ARN. URLs
+    -- cannot contain the ARN.
+    contentId :: Prelude.Text,
+    -- | The identifier of the knowledge base. Can be either the ID or the ARN.
+    -- URLs cannot contain the ARN.
+    knowledgeBaseId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteContent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contentId', 'deleteContent_contentId' - The identifier of the content. Can be either the ID or the ARN. URLs
+-- cannot contain the ARN.
+--
+-- 'knowledgeBaseId', 'deleteContent_knowledgeBaseId' - The identifier of the knowledge base. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+newDeleteContent ::
+  -- | 'contentId'
+  Prelude.Text ->
+  -- | 'knowledgeBaseId'
+  Prelude.Text ->
+  DeleteContent
+newDeleteContent pContentId_ pKnowledgeBaseId_ =
+  DeleteContent'
+    { contentId = pContentId_,
+      knowledgeBaseId = pKnowledgeBaseId_
+    }
+
+-- | The identifier of the content. Can be either the ID or the ARN. URLs
+-- cannot contain the ARN.
+deleteContent_contentId :: Lens.Lens' DeleteContent Prelude.Text
+deleteContent_contentId = Lens.lens (\DeleteContent' {contentId} -> contentId) (\s@DeleteContent' {} a -> s {contentId = a} :: DeleteContent)
+
+-- | The identifier of the knowledge base. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+deleteContent_knowledgeBaseId :: Lens.Lens' DeleteContent Prelude.Text
+deleteContent_knowledgeBaseId = Lens.lens (\DeleteContent' {knowledgeBaseId} -> knowledgeBaseId) (\s@DeleteContent' {} a -> s {knowledgeBaseId = a} :: DeleteContent)
+
+instance Core.AWSRequest DeleteContent where
+  type
+    AWSResponse DeleteContent =
+      DeleteContentResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteContentResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteContent where
+  hashWithSalt _salt DeleteContent' {..} =
+    _salt
+      `Prelude.hashWithSalt` contentId
+      `Prelude.hashWithSalt` knowledgeBaseId
+
+instance Prelude.NFData DeleteContent where
+  rnf DeleteContent' {..} =
+    Prelude.rnf contentId
+      `Prelude.seq` Prelude.rnf knowledgeBaseId
+
+instance Data.ToHeaders DeleteContent where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteContent where
+  toPath DeleteContent' {..} =
+    Prelude.mconcat
+      [ "/knowledgeBases/",
+        Data.toBS knowledgeBaseId,
+        "/contents/",
+        Data.toBS contentId
+      ]
+
+instance Data.ToQuery DeleteContent where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteContentResponse' smart constructor.
+data DeleteContentResponse = DeleteContentResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteContentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteContentResponse_httpStatus' - The response's http status code.
+newDeleteContentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteContentResponse
+newDeleteContentResponse pHttpStatus_ =
+  DeleteContentResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteContentResponse_httpStatus :: Lens.Lens' DeleteContentResponse Prelude.Int
+deleteContentResponse_httpStatus = Lens.lens (\DeleteContentResponse' {httpStatus} -> httpStatus) (\s@DeleteContentResponse' {} a -> s {httpStatus = a} :: DeleteContentResponse)
+
+instance Prelude.NFData DeleteContentResponse where
+  rnf DeleteContentResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Wisdom/DeleteKnowledgeBase.hs b/gen/Amazonka/Wisdom/DeleteKnowledgeBase.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/DeleteKnowledgeBase.hs
@@ -0,0 +1,165 @@
+{-# 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.Wisdom.DeleteKnowledgeBase
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the knowledge base.
+--
+-- When you use this API to delete an external knowledge base such as
+-- Salesforce or ServiceNow, you must also delete the
+-- <https://docs.aws.amazon.com/appintegrations/latest/APIReference/Welcome.html Amazon AppIntegrations>
+-- DataIntegration. This is because you can\'t reuse the DataIntegration
+-- after it\'s been associated with an external knowledge base. However,
+-- you can delete and recreate it. See
+-- <https://docs.aws.amazon.com/appintegrations/latest/APIReference/API_DeleteDataIntegration.html DeleteDataIntegration>
+-- and
+-- <https://docs.aws.amazon.com/appintegrations/latest/APIReference/API_CreateDataIntegration.html CreateDataIntegration>
+-- in the /Amazon AppIntegrations API Reference/.
+module Amazonka.Wisdom.DeleteKnowledgeBase
+  ( -- * Creating a Request
+    DeleteKnowledgeBase (..),
+    newDeleteKnowledgeBase,
+
+    -- * Request Lenses
+    deleteKnowledgeBase_knowledgeBaseId,
+
+    -- * Destructuring the Response
+    DeleteKnowledgeBaseResponse (..),
+    newDeleteKnowledgeBaseResponse,
+
+    -- * Response Lenses
+    deleteKnowledgeBaseResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newDeleteKnowledgeBase' smart constructor.
+data DeleteKnowledgeBase = DeleteKnowledgeBase'
+  { -- | The knowledge base to delete content from. Can be either the ID or the
+    -- ARN. URLs cannot contain the ARN.
+    knowledgeBaseId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteKnowledgeBase' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'knowledgeBaseId', 'deleteKnowledgeBase_knowledgeBaseId' - The knowledge base to delete content from. Can be either the ID or the
+-- ARN. URLs cannot contain the ARN.
+newDeleteKnowledgeBase ::
+  -- | 'knowledgeBaseId'
+  Prelude.Text ->
+  DeleteKnowledgeBase
+newDeleteKnowledgeBase pKnowledgeBaseId_ =
+  DeleteKnowledgeBase'
+    { knowledgeBaseId =
+        pKnowledgeBaseId_
+    }
+
+-- | The knowledge base to delete content from. Can be either the ID or the
+-- ARN. URLs cannot contain the ARN.
+deleteKnowledgeBase_knowledgeBaseId :: Lens.Lens' DeleteKnowledgeBase Prelude.Text
+deleteKnowledgeBase_knowledgeBaseId = Lens.lens (\DeleteKnowledgeBase' {knowledgeBaseId} -> knowledgeBaseId) (\s@DeleteKnowledgeBase' {} a -> s {knowledgeBaseId = a} :: DeleteKnowledgeBase)
+
+instance Core.AWSRequest DeleteKnowledgeBase where
+  type
+    AWSResponse DeleteKnowledgeBase =
+      DeleteKnowledgeBaseResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteKnowledgeBaseResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteKnowledgeBase where
+  hashWithSalt _salt DeleteKnowledgeBase' {..} =
+    _salt `Prelude.hashWithSalt` knowledgeBaseId
+
+instance Prelude.NFData DeleteKnowledgeBase where
+  rnf DeleteKnowledgeBase' {..} =
+    Prelude.rnf knowledgeBaseId
+
+instance Data.ToHeaders DeleteKnowledgeBase where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteKnowledgeBase where
+  toPath DeleteKnowledgeBase' {..} =
+    Prelude.mconcat
+      ["/knowledgeBases/", Data.toBS knowledgeBaseId]
+
+instance Data.ToQuery DeleteKnowledgeBase where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteKnowledgeBaseResponse' smart constructor.
+data DeleteKnowledgeBaseResponse = DeleteKnowledgeBaseResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteKnowledgeBaseResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteKnowledgeBaseResponse_httpStatus' - The response's http status code.
+newDeleteKnowledgeBaseResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteKnowledgeBaseResponse
+newDeleteKnowledgeBaseResponse pHttpStatus_ =
+  DeleteKnowledgeBaseResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteKnowledgeBaseResponse_httpStatus :: Lens.Lens' DeleteKnowledgeBaseResponse Prelude.Int
+deleteKnowledgeBaseResponse_httpStatus = Lens.lens (\DeleteKnowledgeBaseResponse' {httpStatus} -> httpStatus) (\s@DeleteKnowledgeBaseResponse' {} a -> s {httpStatus = a} :: DeleteKnowledgeBaseResponse)
+
+instance Prelude.NFData DeleteKnowledgeBaseResponse where
+  rnf DeleteKnowledgeBaseResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Wisdom/GetAssistant.hs b/gen/Amazonka/Wisdom/GetAssistant.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/GetAssistant.hs
@@ -0,0 +1,159 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Wisdom.GetAssistant
+-- 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 information about an assistant.
+module Amazonka.Wisdom.GetAssistant
+  ( -- * Creating a Request
+    GetAssistant (..),
+    newGetAssistant,
+
+    -- * Request Lenses
+    getAssistant_assistantId,
+
+    -- * Destructuring the Response
+    GetAssistantResponse (..),
+    newGetAssistantResponse,
+
+    -- * Response Lenses
+    getAssistantResponse_assistant,
+    getAssistantResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newGetAssistant' smart constructor.
+data GetAssistant = GetAssistant'
+  { -- | The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+    -- URLs cannot contain the ARN.
+    assistantId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAssistant' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assistantId', 'getAssistant_assistantId' - The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+newGetAssistant ::
+  -- | 'assistantId'
+  Prelude.Text ->
+  GetAssistant
+newGetAssistant pAssistantId_ =
+  GetAssistant' {assistantId = pAssistantId_}
+
+-- | The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+getAssistant_assistantId :: Lens.Lens' GetAssistant Prelude.Text
+getAssistant_assistantId = Lens.lens (\GetAssistant' {assistantId} -> assistantId) (\s@GetAssistant' {} a -> s {assistantId = a} :: GetAssistant)
+
+instance Core.AWSRequest GetAssistant where
+  type AWSResponse GetAssistant = GetAssistantResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetAssistantResponse'
+            Prelude.<$> (x Data..?> "assistant")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetAssistant where
+  hashWithSalt _salt GetAssistant' {..} =
+    _salt `Prelude.hashWithSalt` assistantId
+
+instance Prelude.NFData GetAssistant where
+  rnf GetAssistant' {..} = Prelude.rnf assistantId
+
+instance Data.ToHeaders GetAssistant where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetAssistant where
+  toPath GetAssistant' {..} =
+    Prelude.mconcat
+      ["/assistants/", Data.toBS assistantId]
+
+instance Data.ToQuery GetAssistant where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetAssistantResponse' smart constructor.
+data GetAssistantResponse = GetAssistantResponse'
+  { -- | Information about the assistant.
+    assistant :: Prelude.Maybe AssistantData,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAssistantResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assistant', 'getAssistantResponse_assistant' - Information about the assistant.
+--
+-- 'httpStatus', 'getAssistantResponse_httpStatus' - The response's http status code.
+newGetAssistantResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAssistantResponse
+newGetAssistantResponse pHttpStatus_ =
+  GetAssistantResponse'
+    { assistant = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the assistant.
+getAssistantResponse_assistant :: Lens.Lens' GetAssistantResponse (Prelude.Maybe AssistantData)
+getAssistantResponse_assistant = Lens.lens (\GetAssistantResponse' {assistant} -> assistant) (\s@GetAssistantResponse' {} a -> s {assistant = a} :: GetAssistantResponse)
+
+-- | The response's http status code.
+getAssistantResponse_httpStatus :: Lens.Lens' GetAssistantResponse Prelude.Int
+getAssistantResponse_httpStatus = Lens.lens (\GetAssistantResponse' {httpStatus} -> httpStatus) (\s@GetAssistantResponse' {} a -> s {httpStatus = a} :: GetAssistantResponse)
+
+instance Prelude.NFData GetAssistantResponse where
+  rnf GetAssistantResponse' {..} =
+    Prelude.rnf assistant
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Wisdom/GetAssistantAssociation.hs b/gen/Amazonka/Wisdom/GetAssistantAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/GetAssistantAssociation.hs
@@ -0,0 +1,193 @@
+{-# 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.Wisdom.GetAssistantAssociation
+-- 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 information about an assistant association.
+module Amazonka.Wisdom.GetAssistantAssociation
+  ( -- * Creating a Request
+    GetAssistantAssociation (..),
+    newGetAssistantAssociation,
+
+    -- * Request Lenses
+    getAssistantAssociation_assistantAssociationId,
+    getAssistantAssociation_assistantId,
+
+    -- * Destructuring the Response
+    GetAssistantAssociationResponse (..),
+    newGetAssistantAssociationResponse,
+
+    -- * Response Lenses
+    getAssistantAssociationResponse_assistantAssociation,
+    getAssistantAssociationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newGetAssistantAssociation' smart constructor.
+data GetAssistantAssociation = GetAssistantAssociation'
+  { -- | The identifier of the assistant association. Can be either the ID or the
+    -- ARN. URLs cannot contain the ARN.
+    assistantAssociationId :: Prelude.Text,
+    -- | The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+    -- URLs cannot contain the ARN.
+    assistantId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAssistantAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assistantAssociationId', 'getAssistantAssociation_assistantAssociationId' - The identifier of the assistant association. Can be either the ID or the
+-- ARN. URLs cannot contain the ARN.
+--
+-- 'assistantId', 'getAssistantAssociation_assistantId' - The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+newGetAssistantAssociation ::
+  -- | 'assistantAssociationId'
+  Prelude.Text ->
+  -- | 'assistantId'
+  Prelude.Text ->
+  GetAssistantAssociation
+newGetAssistantAssociation
+  pAssistantAssociationId_
+  pAssistantId_ =
+    GetAssistantAssociation'
+      { assistantAssociationId =
+          pAssistantAssociationId_,
+        assistantId = pAssistantId_
+      }
+
+-- | The identifier of the assistant association. Can be either the ID or the
+-- ARN. URLs cannot contain the ARN.
+getAssistantAssociation_assistantAssociationId :: Lens.Lens' GetAssistantAssociation Prelude.Text
+getAssistantAssociation_assistantAssociationId = Lens.lens (\GetAssistantAssociation' {assistantAssociationId} -> assistantAssociationId) (\s@GetAssistantAssociation' {} a -> s {assistantAssociationId = a} :: GetAssistantAssociation)
+
+-- | The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+getAssistantAssociation_assistantId :: Lens.Lens' GetAssistantAssociation Prelude.Text
+getAssistantAssociation_assistantId = Lens.lens (\GetAssistantAssociation' {assistantId} -> assistantId) (\s@GetAssistantAssociation' {} a -> s {assistantId = a} :: GetAssistantAssociation)
+
+instance Core.AWSRequest GetAssistantAssociation where
+  type
+    AWSResponse GetAssistantAssociation =
+      GetAssistantAssociationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetAssistantAssociationResponse'
+            Prelude.<$> (x Data..?> "assistantAssociation")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetAssistantAssociation where
+  hashWithSalt _salt GetAssistantAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` assistantAssociationId
+      `Prelude.hashWithSalt` assistantId
+
+instance Prelude.NFData GetAssistantAssociation where
+  rnf GetAssistantAssociation' {..} =
+    Prelude.rnf assistantAssociationId
+      `Prelude.seq` Prelude.rnf assistantId
+
+instance Data.ToHeaders GetAssistantAssociation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetAssistantAssociation where
+  toPath GetAssistantAssociation' {..} =
+    Prelude.mconcat
+      [ "/assistants/",
+        Data.toBS assistantId,
+        "/associations/",
+        Data.toBS assistantAssociationId
+      ]
+
+instance Data.ToQuery GetAssistantAssociation where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetAssistantAssociationResponse' smart constructor.
+data GetAssistantAssociationResponse = GetAssistantAssociationResponse'
+  { -- | The assistant association.
+    assistantAssociation :: Prelude.Maybe AssistantAssociationData,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAssistantAssociationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assistantAssociation', 'getAssistantAssociationResponse_assistantAssociation' - The assistant association.
+--
+-- 'httpStatus', 'getAssistantAssociationResponse_httpStatus' - The response's http status code.
+newGetAssistantAssociationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAssistantAssociationResponse
+newGetAssistantAssociationResponse pHttpStatus_ =
+  GetAssistantAssociationResponse'
+    { assistantAssociation =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The assistant association.
+getAssistantAssociationResponse_assistantAssociation :: Lens.Lens' GetAssistantAssociationResponse (Prelude.Maybe AssistantAssociationData)
+getAssistantAssociationResponse_assistantAssociation = Lens.lens (\GetAssistantAssociationResponse' {assistantAssociation} -> assistantAssociation) (\s@GetAssistantAssociationResponse' {} a -> s {assistantAssociation = a} :: GetAssistantAssociationResponse)
+
+-- | The response's http status code.
+getAssistantAssociationResponse_httpStatus :: Lens.Lens' GetAssistantAssociationResponse Prelude.Int
+getAssistantAssociationResponse_httpStatus = Lens.lens (\GetAssistantAssociationResponse' {httpStatus} -> httpStatus) (\s@GetAssistantAssociationResponse' {} a -> s {httpStatus = a} :: GetAssistantAssociationResponse)
+
+instance
+  Prelude.NFData
+    GetAssistantAssociationResponse
+  where
+  rnf GetAssistantAssociationResponse' {..} =
+    Prelude.rnf assistantAssociation
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Wisdom/GetContent.hs b/gen/Amazonka/Wisdom/GetContent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/GetContent.hs
@@ -0,0 +1,184 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Wisdom.GetContent
+-- 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 content, including a pre-signed URL to download the content.
+module Amazonka.Wisdom.GetContent
+  ( -- * Creating a Request
+    GetContent (..),
+    newGetContent,
+
+    -- * Request Lenses
+    getContent_contentId,
+    getContent_knowledgeBaseId,
+
+    -- * Destructuring the Response
+    GetContentResponse (..),
+    newGetContentResponse,
+
+    -- * Response Lenses
+    getContentResponse_content,
+    getContentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newGetContent' smart constructor.
+data GetContent = GetContent'
+  { -- | The identifier of the content. Can be either the ID or the ARN. URLs
+    -- cannot contain the ARN.
+    contentId :: Prelude.Text,
+    -- | The identifier of the knowledge base. Can be either the ID or the ARN.
+    -- URLs cannot contain the ARN.
+    knowledgeBaseId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetContent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contentId', 'getContent_contentId' - The identifier of the content. Can be either the ID or the ARN. URLs
+-- cannot contain the ARN.
+--
+-- 'knowledgeBaseId', 'getContent_knowledgeBaseId' - The identifier of the knowledge base. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+newGetContent ::
+  -- | 'contentId'
+  Prelude.Text ->
+  -- | 'knowledgeBaseId'
+  Prelude.Text ->
+  GetContent
+newGetContent pContentId_ pKnowledgeBaseId_ =
+  GetContent'
+    { contentId = pContentId_,
+      knowledgeBaseId = pKnowledgeBaseId_
+    }
+
+-- | The identifier of the content. Can be either the ID or the ARN. URLs
+-- cannot contain the ARN.
+getContent_contentId :: Lens.Lens' GetContent Prelude.Text
+getContent_contentId = Lens.lens (\GetContent' {contentId} -> contentId) (\s@GetContent' {} a -> s {contentId = a} :: GetContent)
+
+-- | The identifier of the knowledge base. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+getContent_knowledgeBaseId :: Lens.Lens' GetContent Prelude.Text
+getContent_knowledgeBaseId = Lens.lens (\GetContent' {knowledgeBaseId} -> knowledgeBaseId) (\s@GetContent' {} a -> s {knowledgeBaseId = a} :: GetContent)
+
+instance Core.AWSRequest GetContent where
+  type AWSResponse GetContent = GetContentResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetContentResponse'
+            Prelude.<$> (x Data..?> "content")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetContent where
+  hashWithSalt _salt GetContent' {..} =
+    _salt
+      `Prelude.hashWithSalt` contentId
+      `Prelude.hashWithSalt` knowledgeBaseId
+
+instance Prelude.NFData GetContent where
+  rnf GetContent' {..} =
+    Prelude.rnf contentId
+      `Prelude.seq` Prelude.rnf knowledgeBaseId
+
+instance Data.ToHeaders GetContent where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetContent where
+  toPath GetContent' {..} =
+    Prelude.mconcat
+      [ "/knowledgeBases/",
+        Data.toBS knowledgeBaseId,
+        "/contents/",
+        Data.toBS contentId
+      ]
+
+instance Data.ToQuery GetContent where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetContentResponse' smart constructor.
+data GetContentResponse = GetContentResponse'
+  { -- | The content.
+    content :: Prelude.Maybe ContentData,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetContentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'content', 'getContentResponse_content' - The content.
+--
+-- 'httpStatus', 'getContentResponse_httpStatus' - The response's http status code.
+newGetContentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetContentResponse
+newGetContentResponse pHttpStatus_ =
+  GetContentResponse'
+    { content = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The content.
+getContentResponse_content :: Lens.Lens' GetContentResponse (Prelude.Maybe ContentData)
+getContentResponse_content = Lens.lens (\GetContentResponse' {content} -> content) (\s@GetContentResponse' {} a -> s {content = a} :: GetContentResponse)
+
+-- | The response's http status code.
+getContentResponse_httpStatus :: Lens.Lens' GetContentResponse Prelude.Int
+getContentResponse_httpStatus = Lens.lens (\GetContentResponse' {httpStatus} -> httpStatus) (\s@GetContentResponse' {} a -> s {httpStatus = a} :: GetContentResponse)
+
+instance Prelude.NFData GetContentResponse where
+  rnf GetContentResponse' {..} =
+    Prelude.rnf content
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Wisdom/GetContentSummary.hs b/gen/Amazonka/Wisdom/GetContentSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/GetContentSummary.hs
@@ -0,0 +1,188 @@
+{-# 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.Wisdom.GetContentSummary
+-- 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 summary information about the content.
+module Amazonka.Wisdom.GetContentSummary
+  ( -- * Creating a Request
+    GetContentSummary (..),
+    newGetContentSummary,
+
+    -- * Request Lenses
+    getContentSummary_contentId,
+    getContentSummary_knowledgeBaseId,
+
+    -- * Destructuring the Response
+    GetContentSummaryResponse (..),
+    newGetContentSummaryResponse,
+
+    -- * Response Lenses
+    getContentSummaryResponse_contentSummary,
+    getContentSummaryResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newGetContentSummary' smart constructor.
+data GetContentSummary = GetContentSummary'
+  { -- | The identifier of the content. Can be either the ID or the ARN. URLs
+    -- cannot contain the ARN.
+    contentId :: Prelude.Text,
+    -- | The identifier of the knowledge base. Can be either the ID or the ARN.
+    -- URLs cannot contain the ARN.
+    knowledgeBaseId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetContentSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contentId', 'getContentSummary_contentId' - The identifier of the content. Can be either the ID or the ARN. URLs
+-- cannot contain the ARN.
+--
+-- 'knowledgeBaseId', 'getContentSummary_knowledgeBaseId' - The identifier of the knowledge base. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+newGetContentSummary ::
+  -- | 'contentId'
+  Prelude.Text ->
+  -- | 'knowledgeBaseId'
+  Prelude.Text ->
+  GetContentSummary
+newGetContentSummary pContentId_ pKnowledgeBaseId_ =
+  GetContentSummary'
+    { contentId = pContentId_,
+      knowledgeBaseId = pKnowledgeBaseId_
+    }
+
+-- | The identifier of the content. Can be either the ID or the ARN. URLs
+-- cannot contain the ARN.
+getContentSummary_contentId :: Lens.Lens' GetContentSummary Prelude.Text
+getContentSummary_contentId = Lens.lens (\GetContentSummary' {contentId} -> contentId) (\s@GetContentSummary' {} a -> s {contentId = a} :: GetContentSummary)
+
+-- | The identifier of the knowledge base. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+getContentSummary_knowledgeBaseId :: Lens.Lens' GetContentSummary Prelude.Text
+getContentSummary_knowledgeBaseId = Lens.lens (\GetContentSummary' {knowledgeBaseId} -> knowledgeBaseId) (\s@GetContentSummary' {} a -> s {knowledgeBaseId = a} :: GetContentSummary)
+
+instance Core.AWSRequest GetContentSummary where
+  type
+    AWSResponse GetContentSummary =
+      GetContentSummaryResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetContentSummaryResponse'
+            Prelude.<$> (x Data..?> "contentSummary")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetContentSummary where
+  hashWithSalt _salt GetContentSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` contentId
+      `Prelude.hashWithSalt` knowledgeBaseId
+
+instance Prelude.NFData GetContentSummary where
+  rnf GetContentSummary' {..} =
+    Prelude.rnf contentId
+      `Prelude.seq` Prelude.rnf knowledgeBaseId
+
+instance Data.ToHeaders GetContentSummary where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetContentSummary where
+  toPath GetContentSummary' {..} =
+    Prelude.mconcat
+      [ "/knowledgeBases/",
+        Data.toBS knowledgeBaseId,
+        "/contents/",
+        Data.toBS contentId,
+        "/summary"
+      ]
+
+instance Data.ToQuery GetContentSummary where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetContentSummaryResponse' smart constructor.
+data GetContentSummaryResponse = GetContentSummaryResponse'
+  { -- | The content summary.
+    contentSummary :: Prelude.Maybe ContentSummary,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetContentSummaryResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contentSummary', 'getContentSummaryResponse_contentSummary' - The content summary.
+--
+-- 'httpStatus', 'getContentSummaryResponse_httpStatus' - The response's http status code.
+newGetContentSummaryResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetContentSummaryResponse
+newGetContentSummaryResponse pHttpStatus_ =
+  GetContentSummaryResponse'
+    { contentSummary =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The content summary.
+getContentSummaryResponse_contentSummary :: Lens.Lens' GetContentSummaryResponse (Prelude.Maybe ContentSummary)
+getContentSummaryResponse_contentSummary = Lens.lens (\GetContentSummaryResponse' {contentSummary} -> contentSummary) (\s@GetContentSummaryResponse' {} a -> s {contentSummary = a} :: GetContentSummaryResponse)
+
+-- | The response's http status code.
+getContentSummaryResponse_httpStatus :: Lens.Lens' GetContentSummaryResponse Prelude.Int
+getContentSummaryResponse_httpStatus = Lens.lens (\GetContentSummaryResponse' {httpStatus} -> httpStatus) (\s@GetContentSummaryResponse' {} a -> s {httpStatus = a} :: GetContentSummaryResponse)
+
+instance Prelude.NFData GetContentSummaryResponse where
+  rnf GetContentSummaryResponse' {..} =
+    Prelude.rnf contentSummary
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Wisdom/GetKnowledgeBase.hs b/gen/Amazonka/Wisdom/GetKnowledgeBase.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/GetKnowledgeBase.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Wisdom.GetKnowledgeBase
+-- 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 information about the knowledge base.
+module Amazonka.Wisdom.GetKnowledgeBase
+  ( -- * Creating a Request
+    GetKnowledgeBase (..),
+    newGetKnowledgeBase,
+
+    -- * Request Lenses
+    getKnowledgeBase_knowledgeBaseId,
+
+    -- * Destructuring the Response
+    GetKnowledgeBaseResponse (..),
+    newGetKnowledgeBaseResponse,
+
+    -- * Response Lenses
+    getKnowledgeBaseResponse_knowledgeBase,
+    getKnowledgeBaseResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newGetKnowledgeBase' smart constructor.
+data GetKnowledgeBase = GetKnowledgeBase'
+  { -- | The identifier of the knowledge base. Can be either the ID or the ARN.
+    -- URLs cannot contain the ARN.
+    knowledgeBaseId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetKnowledgeBase' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'knowledgeBaseId', 'getKnowledgeBase_knowledgeBaseId' - The identifier of the knowledge base. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+newGetKnowledgeBase ::
+  -- | 'knowledgeBaseId'
+  Prelude.Text ->
+  GetKnowledgeBase
+newGetKnowledgeBase pKnowledgeBaseId_ =
+  GetKnowledgeBase'
+    { knowledgeBaseId =
+        pKnowledgeBaseId_
+    }
+
+-- | The identifier of the knowledge base. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+getKnowledgeBase_knowledgeBaseId :: Lens.Lens' GetKnowledgeBase Prelude.Text
+getKnowledgeBase_knowledgeBaseId = Lens.lens (\GetKnowledgeBase' {knowledgeBaseId} -> knowledgeBaseId) (\s@GetKnowledgeBase' {} a -> s {knowledgeBaseId = a} :: GetKnowledgeBase)
+
+instance Core.AWSRequest GetKnowledgeBase where
+  type
+    AWSResponse GetKnowledgeBase =
+      GetKnowledgeBaseResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetKnowledgeBaseResponse'
+            Prelude.<$> (x Data..?> "knowledgeBase")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetKnowledgeBase where
+  hashWithSalt _salt GetKnowledgeBase' {..} =
+    _salt `Prelude.hashWithSalt` knowledgeBaseId
+
+instance Prelude.NFData GetKnowledgeBase where
+  rnf GetKnowledgeBase' {..} =
+    Prelude.rnf knowledgeBaseId
+
+instance Data.ToHeaders GetKnowledgeBase where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetKnowledgeBase where
+  toPath GetKnowledgeBase' {..} =
+    Prelude.mconcat
+      ["/knowledgeBases/", Data.toBS knowledgeBaseId]
+
+instance Data.ToQuery GetKnowledgeBase where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetKnowledgeBaseResponse' smart constructor.
+data GetKnowledgeBaseResponse = GetKnowledgeBaseResponse'
+  { -- | The knowledge base.
+    knowledgeBase :: Prelude.Maybe KnowledgeBaseData,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetKnowledgeBaseResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'knowledgeBase', 'getKnowledgeBaseResponse_knowledgeBase' - The knowledge base.
+--
+-- 'httpStatus', 'getKnowledgeBaseResponse_httpStatus' - The response's http status code.
+newGetKnowledgeBaseResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetKnowledgeBaseResponse
+newGetKnowledgeBaseResponse pHttpStatus_ =
+  GetKnowledgeBaseResponse'
+    { knowledgeBase =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The knowledge base.
+getKnowledgeBaseResponse_knowledgeBase :: Lens.Lens' GetKnowledgeBaseResponse (Prelude.Maybe KnowledgeBaseData)
+getKnowledgeBaseResponse_knowledgeBase = Lens.lens (\GetKnowledgeBaseResponse' {knowledgeBase} -> knowledgeBase) (\s@GetKnowledgeBaseResponse' {} a -> s {knowledgeBase = a} :: GetKnowledgeBaseResponse)
+
+-- | The response's http status code.
+getKnowledgeBaseResponse_httpStatus :: Lens.Lens' GetKnowledgeBaseResponse Prelude.Int
+getKnowledgeBaseResponse_httpStatus = Lens.lens (\GetKnowledgeBaseResponse' {httpStatus} -> httpStatus) (\s@GetKnowledgeBaseResponse' {} a -> s {httpStatus = a} :: GetKnowledgeBaseResponse)
+
+instance Prelude.NFData GetKnowledgeBaseResponse where
+  rnf GetKnowledgeBaseResponse' {..} =
+    Prelude.rnf knowledgeBase
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Wisdom/GetRecommendations.hs b/gen/Amazonka/Wisdom/GetRecommendations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/GetRecommendations.hs
@@ -0,0 +1,250 @@
+{-# 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.Wisdom.GetRecommendations
+-- 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 recommendations for the specified session. To avoid retrieving
+-- the same recommendations in subsequent calls, use
+-- <https://docs.aws.amazon.com/wisdom/latest/APIReference/API_NotifyRecommendationsReceived.html NotifyRecommendationsReceived>.
+-- This API supports long-polling behavior with the @waitTimeSeconds@
+-- parameter. Short poll is the default behavior and only returns
+-- recommendations already available. To perform a manual query against an
+-- assistant, use
+-- <https://docs.aws.amazon.com/wisdom/latest/APIReference/API_QueryAssistant.html QueryAssistant>.
+module Amazonka.Wisdom.GetRecommendations
+  ( -- * Creating a Request
+    GetRecommendations (..),
+    newGetRecommendations,
+
+    -- * Request Lenses
+    getRecommendations_maxResults,
+    getRecommendations_waitTimeSeconds,
+    getRecommendations_assistantId,
+    getRecommendations_sessionId,
+
+    -- * Destructuring the Response
+    GetRecommendationsResponse (..),
+    newGetRecommendationsResponse,
+
+    -- * Response Lenses
+    getRecommendationsResponse_triggers,
+    getRecommendationsResponse_httpStatus,
+    getRecommendationsResponse_recommendations,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newGetRecommendations' smart constructor.
+data GetRecommendations = GetRecommendations'
+  { -- | The maximum number of results to return per page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The duration (in seconds) for which the call waits for a recommendation
+    -- to be made available before returning. If a recommendation is available,
+    -- the call returns sooner than @WaitTimeSeconds@. If no messages are
+    -- available and the wait time expires, the call returns successfully with
+    -- an empty list.
+    waitTimeSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+    -- URLs cannot contain the ARN.
+    assistantId :: Prelude.Text,
+    -- | The identifier of the session. Can be either the ID or the ARN. URLs
+    -- cannot contain the ARN.
+    sessionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetRecommendations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getRecommendations_maxResults' - The maximum number of results to return per page.
+--
+-- 'waitTimeSeconds', 'getRecommendations_waitTimeSeconds' - The duration (in seconds) for which the call waits for a recommendation
+-- to be made available before returning. If a recommendation is available,
+-- the call returns sooner than @WaitTimeSeconds@. If no messages are
+-- available and the wait time expires, the call returns successfully with
+-- an empty list.
+--
+-- 'assistantId', 'getRecommendations_assistantId' - The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+--
+-- 'sessionId', 'getRecommendations_sessionId' - The identifier of the session. Can be either the ID or the ARN. URLs
+-- cannot contain the ARN.
+newGetRecommendations ::
+  -- | 'assistantId'
+  Prelude.Text ->
+  -- | 'sessionId'
+  Prelude.Text ->
+  GetRecommendations
+newGetRecommendations pAssistantId_ pSessionId_ =
+  GetRecommendations'
+    { maxResults = Prelude.Nothing,
+      waitTimeSeconds = Prelude.Nothing,
+      assistantId = pAssistantId_,
+      sessionId = pSessionId_
+    }
+
+-- | The maximum number of results to return per page.
+getRecommendations_maxResults :: Lens.Lens' GetRecommendations (Prelude.Maybe Prelude.Natural)
+getRecommendations_maxResults = Lens.lens (\GetRecommendations' {maxResults} -> maxResults) (\s@GetRecommendations' {} a -> s {maxResults = a} :: GetRecommendations)
+
+-- | The duration (in seconds) for which the call waits for a recommendation
+-- to be made available before returning. If a recommendation is available,
+-- the call returns sooner than @WaitTimeSeconds@. If no messages are
+-- available and the wait time expires, the call returns successfully with
+-- an empty list.
+getRecommendations_waitTimeSeconds :: Lens.Lens' GetRecommendations (Prelude.Maybe Prelude.Natural)
+getRecommendations_waitTimeSeconds = Lens.lens (\GetRecommendations' {waitTimeSeconds} -> waitTimeSeconds) (\s@GetRecommendations' {} a -> s {waitTimeSeconds = a} :: GetRecommendations)
+
+-- | The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+getRecommendations_assistantId :: Lens.Lens' GetRecommendations Prelude.Text
+getRecommendations_assistantId = Lens.lens (\GetRecommendations' {assistantId} -> assistantId) (\s@GetRecommendations' {} a -> s {assistantId = a} :: GetRecommendations)
+
+-- | The identifier of the session. Can be either the ID or the ARN. URLs
+-- cannot contain the ARN.
+getRecommendations_sessionId :: Lens.Lens' GetRecommendations Prelude.Text
+getRecommendations_sessionId = Lens.lens (\GetRecommendations' {sessionId} -> sessionId) (\s@GetRecommendations' {} a -> s {sessionId = a} :: GetRecommendations)
+
+instance Core.AWSRequest GetRecommendations where
+  type
+    AWSResponse GetRecommendations =
+      GetRecommendationsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetRecommendationsResponse'
+            Prelude.<$> (x Data..?> "triggers" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "recommendations"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable GetRecommendations where
+  hashWithSalt _salt GetRecommendations' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` waitTimeSeconds
+      `Prelude.hashWithSalt` assistantId
+      `Prelude.hashWithSalt` sessionId
+
+instance Prelude.NFData GetRecommendations where
+  rnf GetRecommendations' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf waitTimeSeconds
+      `Prelude.seq` Prelude.rnf assistantId
+      `Prelude.seq` Prelude.rnf sessionId
+
+instance Data.ToHeaders GetRecommendations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetRecommendations where
+  toPath GetRecommendations' {..} =
+    Prelude.mconcat
+      [ "/assistants/",
+        Data.toBS assistantId,
+        "/sessions/",
+        Data.toBS sessionId,
+        "/recommendations"
+      ]
+
+instance Data.ToQuery GetRecommendations where
+  toQuery GetRecommendations' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "waitTimeSeconds" Data.=: waitTimeSeconds
+      ]
+
+-- | /See:/ 'newGetRecommendationsResponse' smart constructor.
+data GetRecommendationsResponse = GetRecommendationsResponse'
+  { -- | The triggers corresponding to recommendations.
+    triggers :: Prelude.Maybe [RecommendationTrigger],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The recommendations.
+    recommendations :: [RecommendationData]
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetRecommendationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'triggers', 'getRecommendationsResponse_triggers' - The triggers corresponding to recommendations.
+--
+-- 'httpStatus', 'getRecommendationsResponse_httpStatus' - The response's http status code.
+--
+-- 'recommendations', 'getRecommendationsResponse_recommendations' - The recommendations.
+newGetRecommendationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetRecommendationsResponse
+newGetRecommendationsResponse pHttpStatus_ =
+  GetRecommendationsResponse'
+    { triggers =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      recommendations = Prelude.mempty
+    }
+
+-- | The triggers corresponding to recommendations.
+getRecommendationsResponse_triggers :: Lens.Lens' GetRecommendationsResponse (Prelude.Maybe [RecommendationTrigger])
+getRecommendationsResponse_triggers = Lens.lens (\GetRecommendationsResponse' {triggers} -> triggers) (\s@GetRecommendationsResponse' {} a -> s {triggers = a} :: GetRecommendationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getRecommendationsResponse_httpStatus :: Lens.Lens' GetRecommendationsResponse Prelude.Int
+getRecommendationsResponse_httpStatus = Lens.lens (\GetRecommendationsResponse' {httpStatus} -> httpStatus) (\s@GetRecommendationsResponse' {} a -> s {httpStatus = a} :: GetRecommendationsResponse)
+
+-- | The recommendations.
+getRecommendationsResponse_recommendations :: Lens.Lens' GetRecommendationsResponse [RecommendationData]
+getRecommendationsResponse_recommendations = Lens.lens (\GetRecommendationsResponse' {recommendations} -> recommendations) (\s@GetRecommendationsResponse' {} a -> s {recommendations = a} :: GetRecommendationsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData GetRecommendationsResponse where
+  rnf GetRecommendationsResponse' {..} =
+    Prelude.rnf triggers
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf recommendations
diff --git a/gen/Amazonka/Wisdom/GetSession.hs b/gen/Amazonka/Wisdom/GetSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/GetSession.hs
@@ -0,0 +1,184 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Wisdom.GetSession
+-- 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 information for a specified session.
+module Amazonka.Wisdom.GetSession
+  ( -- * Creating a Request
+    GetSession (..),
+    newGetSession,
+
+    -- * Request Lenses
+    getSession_assistantId,
+    getSession_sessionId,
+
+    -- * Destructuring the Response
+    GetSessionResponse (..),
+    newGetSessionResponse,
+
+    -- * Response Lenses
+    getSessionResponse_session,
+    getSessionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newGetSession' smart constructor.
+data GetSession = GetSession'
+  { -- | The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+    -- URLs cannot contain the ARN.
+    assistantId :: Prelude.Text,
+    -- | The identifier of the session. Can be either the ID or the ARN. URLs
+    -- cannot contain the ARN.
+    sessionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSession' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assistantId', 'getSession_assistantId' - The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+--
+-- 'sessionId', 'getSession_sessionId' - The identifier of the session. Can be either the ID or the ARN. URLs
+-- cannot contain the ARN.
+newGetSession ::
+  -- | 'assistantId'
+  Prelude.Text ->
+  -- | 'sessionId'
+  Prelude.Text ->
+  GetSession
+newGetSession pAssistantId_ pSessionId_ =
+  GetSession'
+    { assistantId = pAssistantId_,
+      sessionId = pSessionId_
+    }
+
+-- | The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+getSession_assistantId :: Lens.Lens' GetSession Prelude.Text
+getSession_assistantId = Lens.lens (\GetSession' {assistantId} -> assistantId) (\s@GetSession' {} a -> s {assistantId = a} :: GetSession)
+
+-- | The identifier of the session. Can be either the ID or the ARN. URLs
+-- cannot contain the ARN.
+getSession_sessionId :: Lens.Lens' GetSession Prelude.Text
+getSession_sessionId = Lens.lens (\GetSession' {sessionId} -> sessionId) (\s@GetSession' {} a -> s {sessionId = a} :: GetSession)
+
+instance Core.AWSRequest GetSession where
+  type AWSResponse GetSession = GetSessionResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetSessionResponse'
+            Prelude.<$> (x Data..?> "session")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetSession where
+  hashWithSalt _salt GetSession' {..} =
+    _salt
+      `Prelude.hashWithSalt` assistantId
+      `Prelude.hashWithSalt` sessionId
+
+instance Prelude.NFData GetSession where
+  rnf GetSession' {..} =
+    Prelude.rnf assistantId
+      `Prelude.seq` Prelude.rnf sessionId
+
+instance Data.ToHeaders GetSession where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetSession where
+  toPath GetSession' {..} =
+    Prelude.mconcat
+      [ "/assistants/",
+        Data.toBS assistantId,
+        "/sessions/",
+        Data.toBS sessionId
+      ]
+
+instance Data.ToQuery GetSession where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetSessionResponse' smart constructor.
+data GetSessionResponse = GetSessionResponse'
+  { -- | The session.
+    session :: Prelude.Maybe SessionData,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSessionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'session', 'getSessionResponse_session' - The session.
+--
+-- 'httpStatus', 'getSessionResponse_httpStatus' - The response's http status code.
+newGetSessionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetSessionResponse
+newGetSessionResponse pHttpStatus_ =
+  GetSessionResponse'
+    { session = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The session.
+getSessionResponse_session :: Lens.Lens' GetSessionResponse (Prelude.Maybe SessionData)
+getSessionResponse_session = Lens.lens (\GetSessionResponse' {session} -> session) (\s@GetSessionResponse' {} a -> s {session = a} :: GetSessionResponse)
+
+-- | The response's http status code.
+getSessionResponse_httpStatus :: Lens.Lens' GetSessionResponse Prelude.Int
+getSessionResponse_httpStatus = Lens.lens (\GetSessionResponse' {httpStatus} -> httpStatus) (\s@GetSessionResponse' {} a -> s {httpStatus = a} :: GetSessionResponse)
+
+instance Prelude.NFData GetSessionResponse where
+  rnf GetSessionResponse' {..} =
+    Prelude.rnf session
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Wisdom/Lens.hs b/gen/Amazonka/Wisdom/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Lens.hs
@@ -0,0 +1,488 @@
+{-# 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.Wisdom.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.Wisdom.Lens
+  ( -- * Operations
+
+    -- ** CreateAssistant
+    createAssistant_clientToken,
+    createAssistant_description,
+    createAssistant_serverSideEncryptionConfiguration,
+    createAssistant_tags,
+    createAssistant_name,
+    createAssistant_type,
+    createAssistantResponse_assistant,
+    createAssistantResponse_httpStatus,
+
+    -- ** CreateAssistantAssociation
+    createAssistantAssociation_clientToken,
+    createAssistantAssociation_tags,
+    createAssistantAssociation_assistantId,
+    createAssistantAssociation_association,
+    createAssistantAssociation_associationType,
+    createAssistantAssociationResponse_assistantAssociation,
+    createAssistantAssociationResponse_httpStatus,
+
+    -- ** CreateContent
+    createContent_clientToken,
+    createContent_metadata,
+    createContent_overrideLinkOutUri,
+    createContent_tags,
+    createContent_title,
+    createContent_knowledgeBaseId,
+    createContent_name,
+    createContent_uploadId,
+    createContentResponse_content,
+    createContentResponse_httpStatus,
+
+    -- ** CreateKnowledgeBase
+    createKnowledgeBase_clientToken,
+    createKnowledgeBase_description,
+    createKnowledgeBase_renderingConfiguration,
+    createKnowledgeBase_serverSideEncryptionConfiguration,
+    createKnowledgeBase_sourceConfiguration,
+    createKnowledgeBase_tags,
+    createKnowledgeBase_knowledgeBaseType,
+    createKnowledgeBase_name,
+    createKnowledgeBaseResponse_knowledgeBase,
+    createKnowledgeBaseResponse_httpStatus,
+
+    -- ** CreateSession
+    createSession_clientToken,
+    createSession_description,
+    createSession_tags,
+    createSession_assistantId,
+    createSession_name,
+    createSessionResponse_session,
+    createSessionResponse_httpStatus,
+
+    -- ** DeleteAssistant
+    deleteAssistant_assistantId,
+    deleteAssistantResponse_httpStatus,
+
+    -- ** DeleteAssistantAssociation
+    deleteAssistantAssociation_assistantAssociationId,
+    deleteAssistantAssociation_assistantId,
+    deleteAssistantAssociationResponse_httpStatus,
+
+    -- ** DeleteContent
+    deleteContent_contentId,
+    deleteContent_knowledgeBaseId,
+    deleteContentResponse_httpStatus,
+
+    -- ** DeleteKnowledgeBase
+    deleteKnowledgeBase_knowledgeBaseId,
+    deleteKnowledgeBaseResponse_httpStatus,
+
+    -- ** GetAssistant
+    getAssistant_assistantId,
+    getAssistantResponse_assistant,
+    getAssistantResponse_httpStatus,
+
+    -- ** GetAssistantAssociation
+    getAssistantAssociation_assistantAssociationId,
+    getAssistantAssociation_assistantId,
+    getAssistantAssociationResponse_assistantAssociation,
+    getAssistantAssociationResponse_httpStatus,
+
+    -- ** GetContent
+    getContent_contentId,
+    getContent_knowledgeBaseId,
+    getContentResponse_content,
+    getContentResponse_httpStatus,
+
+    -- ** GetContentSummary
+    getContentSummary_contentId,
+    getContentSummary_knowledgeBaseId,
+    getContentSummaryResponse_contentSummary,
+    getContentSummaryResponse_httpStatus,
+
+    -- ** GetKnowledgeBase
+    getKnowledgeBase_knowledgeBaseId,
+    getKnowledgeBaseResponse_knowledgeBase,
+    getKnowledgeBaseResponse_httpStatus,
+
+    -- ** GetRecommendations
+    getRecommendations_maxResults,
+    getRecommendations_waitTimeSeconds,
+    getRecommendations_assistantId,
+    getRecommendations_sessionId,
+    getRecommendationsResponse_triggers,
+    getRecommendationsResponse_httpStatus,
+    getRecommendationsResponse_recommendations,
+
+    -- ** GetSession
+    getSession_assistantId,
+    getSession_sessionId,
+    getSessionResponse_session,
+    getSessionResponse_httpStatus,
+
+    -- ** ListAssistantAssociations
+    listAssistantAssociations_maxResults,
+    listAssistantAssociations_nextToken,
+    listAssistantAssociations_assistantId,
+    listAssistantAssociationsResponse_nextToken,
+    listAssistantAssociationsResponse_httpStatus,
+    listAssistantAssociationsResponse_assistantAssociationSummaries,
+
+    -- ** ListAssistants
+    listAssistants_maxResults,
+    listAssistants_nextToken,
+    listAssistantsResponse_nextToken,
+    listAssistantsResponse_httpStatus,
+    listAssistantsResponse_assistantSummaries,
+
+    -- ** ListContents
+    listContents_maxResults,
+    listContents_nextToken,
+    listContents_knowledgeBaseId,
+    listContentsResponse_nextToken,
+    listContentsResponse_httpStatus,
+    listContentsResponse_contentSummaries,
+
+    -- ** ListKnowledgeBases
+    listKnowledgeBases_maxResults,
+    listKnowledgeBases_nextToken,
+    listKnowledgeBasesResponse_nextToken,
+    listKnowledgeBasesResponse_httpStatus,
+    listKnowledgeBasesResponse_knowledgeBaseSummaries,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** NotifyRecommendationsReceived
+    notifyRecommendationsReceived_assistantId,
+    notifyRecommendationsReceived_recommendationIds,
+    notifyRecommendationsReceived_sessionId,
+    notifyRecommendationsReceivedResponse_errors,
+    notifyRecommendationsReceivedResponse_recommendationIds,
+    notifyRecommendationsReceivedResponse_httpStatus,
+
+    -- ** QueryAssistant
+    queryAssistant_maxResults,
+    queryAssistant_nextToken,
+    queryAssistant_assistantId,
+    queryAssistant_queryText,
+    queryAssistantResponse_nextToken,
+    queryAssistantResponse_httpStatus,
+    queryAssistantResponse_results,
+
+    -- ** RemoveKnowledgeBaseTemplateUri
+    removeKnowledgeBaseTemplateUri_knowledgeBaseId,
+    removeKnowledgeBaseTemplateUriResponse_httpStatus,
+
+    -- ** SearchContent
+    searchContent_maxResults,
+    searchContent_nextToken,
+    searchContent_knowledgeBaseId,
+    searchContent_searchExpression,
+    searchContentResponse_nextToken,
+    searchContentResponse_httpStatus,
+    searchContentResponse_contentSummaries,
+
+    -- ** SearchSessions
+    searchSessions_maxResults,
+    searchSessions_nextToken,
+    searchSessions_assistantId,
+    searchSessions_searchExpression,
+    searchSessionsResponse_nextToken,
+    searchSessionsResponse_httpStatus,
+    searchSessionsResponse_sessionSummaries,
+
+    -- ** StartContentUpload
+    startContentUpload_contentType,
+    startContentUpload_knowledgeBaseId,
+    startContentUploadResponse_httpStatus,
+    startContentUploadResponse_headersToInclude,
+    startContentUploadResponse_uploadId,
+    startContentUploadResponse_url,
+    startContentUploadResponse_urlExpiry,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateContent
+    updateContent_metadata,
+    updateContent_overrideLinkOutUri,
+    updateContent_removeOverrideLinkOutUri,
+    updateContent_revisionId,
+    updateContent_title,
+    updateContent_uploadId,
+    updateContent_contentId,
+    updateContent_knowledgeBaseId,
+    updateContentResponse_content,
+    updateContentResponse_httpStatus,
+
+    -- ** UpdateKnowledgeBaseTemplateUri
+    updateKnowledgeBaseTemplateUri_knowledgeBaseId,
+    updateKnowledgeBaseTemplateUri_templateUri,
+    updateKnowledgeBaseTemplateUriResponse_knowledgeBase,
+    updateKnowledgeBaseTemplateUriResponse_httpStatus,
+
+    -- * Types
+
+    -- ** AppIntegrationsConfiguration
+    appIntegrationsConfiguration_appIntegrationArn,
+    appIntegrationsConfiguration_objectFields,
+
+    -- ** AssistantAssociationData
+    assistantAssociationData_tags,
+    assistantAssociationData_assistantArn,
+    assistantAssociationData_assistantAssociationArn,
+    assistantAssociationData_assistantAssociationId,
+    assistantAssociationData_assistantId,
+    assistantAssociationData_associationData,
+    assistantAssociationData_associationType,
+
+    -- ** AssistantAssociationInputData
+    assistantAssociationInputData_knowledgeBaseId,
+
+    -- ** AssistantAssociationOutputData
+    assistantAssociationOutputData_knowledgeBaseAssociation,
+
+    -- ** AssistantAssociationSummary
+    assistantAssociationSummary_tags,
+    assistantAssociationSummary_assistantArn,
+    assistantAssociationSummary_assistantAssociationArn,
+    assistantAssociationSummary_assistantAssociationId,
+    assistantAssociationSummary_assistantId,
+    assistantAssociationSummary_associationData,
+    assistantAssociationSummary_associationType,
+
+    -- ** AssistantData
+    assistantData_description,
+    assistantData_serverSideEncryptionConfiguration,
+    assistantData_tags,
+    assistantData_assistantArn,
+    assistantData_assistantId,
+    assistantData_name,
+    assistantData_status,
+    assistantData_type,
+
+    -- ** AssistantSummary
+    assistantSummary_description,
+    assistantSummary_serverSideEncryptionConfiguration,
+    assistantSummary_tags,
+    assistantSummary_assistantArn,
+    assistantSummary_assistantId,
+    assistantSummary_name,
+    assistantSummary_status,
+    assistantSummary_type,
+
+    -- ** ContentData
+    contentData_linkOutUri,
+    contentData_tags,
+    contentData_contentArn,
+    contentData_contentId,
+    contentData_contentType,
+    contentData_knowledgeBaseArn,
+    contentData_knowledgeBaseId,
+    contentData_metadata,
+    contentData_name,
+    contentData_revisionId,
+    contentData_status,
+    contentData_title,
+    contentData_url,
+    contentData_urlExpiry,
+
+    -- ** ContentReference
+    contentReference_contentArn,
+    contentReference_contentId,
+    contentReference_knowledgeBaseArn,
+    contentReference_knowledgeBaseId,
+
+    -- ** ContentSummary
+    contentSummary_tags,
+    contentSummary_contentArn,
+    contentSummary_contentId,
+    contentSummary_contentType,
+    contentSummary_knowledgeBaseArn,
+    contentSummary_knowledgeBaseId,
+    contentSummary_metadata,
+    contentSummary_name,
+    contentSummary_revisionId,
+    contentSummary_status,
+    contentSummary_title,
+
+    -- ** Document
+    document_excerpt,
+    document_title,
+    document_contentReference,
+
+    -- ** DocumentText
+    documentText_highlights,
+    documentText_text,
+
+    -- ** Filter
+    filter_field,
+    filter_operator,
+    filter_value,
+
+    -- ** Highlight
+    highlight_beginOffsetInclusive,
+    highlight_endOffsetExclusive,
+
+    -- ** KnowledgeBaseAssociationData
+    knowledgeBaseAssociationData_knowledgeBaseArn,
+    knowledgeBaseAssociationData_knowledgeBaseId,
+
+    -- ** KnowledgeBaseData
+    knowledgeBaseData_description,
+    knowledgeBaseData_lastContentModificationTime,
+    knowledgeBaseData_renderingConfiguration,
+    knowledgeBaseData_serverSideEncryptionConfiguration,
+    knowledgeBaseData_sourceConfiguration,
+    knowledgeBaseData_tags,
+    knowledgeBaseData_knowledgeBaseArn,
+    knowledgeBaseData_knowledgeBaseId,
+    knowledgeBaseData_knowledgeBaseType,
+    knowledgeBaseData_name,
+    knowledgeBaseData_status,
+
+    -- ** KnowledgeBaseSummary
+    knowledgeBaseSummary_description,
+    knowledgeBaseSummary_renderingConfiguration,
+    knowledgeBaseSummary_serverSideEncryptionConfiguration,
+    knowledgeBaseSummary_sourceConfiguration,
+    knowledgeBaseSummary_tags,
+    knowledgeBaseSummary_knowledgeBaseArn,
+    knowledgeBaseSummary_knowledgeBaseId,
+    knowledgeBaseSummary_knowledgeBaseType,
+    knowledgeBaseSummary_name,
+    knowledgeBaseSummary_status,
+
+    -- ** NotifyRecommendationsReceivedError
+    notifyRecommendationsReceivedError_message,
+    notifyRecommendationsReceivedError_recommendationId,
+
+    -- ** QueryRecommendationTriggerData
+    queryRecommendationTriggerData_text,
+
+    -- ** RecommendationData
+    recommendationData_relevanceLevel,
+    recommendationData_relevanceScore,
+    recommendationData_type,
+    recommendationData_document,
+    recommendationData_recommendationId,
+
+    -- ** RecommendationTrigger
+    recommendationTrigger_data,
+    recommendationTrigger_id,
+    recommendationTrigger_recommendationIds,
+    recommendationTrigger_source,
+    recommendationTrigger_type,
+
+    -- ** RecommendationTriggerData
+    recommendationTriggerData_query,
+
+    -- ** RenderingConfiguration
+    renderingConfiguration_templateUri,
+
+    -- ** ResultData
+    resultData_relevanceScore,
+    resultData_document,
+    resultData_resultId,
+
+    -- ** SearchExpression
+    searchExpression_filters,
+
+    -- ** ServerSideEncryptionConfiguration
+    serverSideEncryptionConfiguration_kmsKeyId,
+
+    -- ** SessionData
+    sessionData_description,
+    sessionData_tags,
+    sessionData_name,
+    sessionData_sessionArn,
+    sessionData_sessionId,
+
+    -- ** SessionSummary
+    sessionSummary_assistantArn,
+    sessionSummary_assistantId,
+    sessionSummary_sessionArn,
+    sessionSummary_sessionId,
+
+    -- ** SourceConfiguration
+    sourceConfiguration_appIntegrations,
+  )
+where
+
+import Amazonka.Wisdom.CreateAssistant
+import Amazonka.Wisdom.CreateAssistantAssociation
+import Amazonka.Wisdom.CreateContent
+import Amazonka.Wisdom.CreateKnowledgeBase
+import Amazonka.Wisdom.CreateSession
+import Amazonka.Wisdom.DeleteAssistant
+import Amazonka.Wisdom.DeleteAssistantAssociation
+import Amazonka.Wisdom.DeleteContent
+import Amazonka.Wisdom.DeleteKnowledgeBase
+import Amazonka.Wisdom.GetAssistant
+import Amazonka.Wisdom.GetAssistantAssociation
+import Amazonka.Wisdom.GetContent
+import Amazonka.Wisdom.GetContentSummary
+import Amazonka.Wisdom.GetKnowledgeBase
+import Amazonka.Wisdom.GetRecommendations
+import Amazonka.Wisdom.GetSession
+import Amazonka.Wisdom.ListAssistantAssociations
+import Amazonka.Wisdom.ListAssistants
+import Amazonka.Wisdom.ListContents
+import Amazonka.Wisdom.ListKnowledgeBases
+import Amazonka.Wisdom.ListTagsForResource
+import Amazonka.Wisdom.NotifyRecommendationsReceived
+import Amazonka.Wisdom.QueryAssistant
+import Amazonka.Wisdom.RemoveKnowledgeBaseTemplateUri
+import Amazonka.Wisdom.SearchContent
+import Amazonka.Wisdom.SearchSessions
+import Amazonka.Wisdom.StartContentUpload
+import Amazonka.Wisdom.TagResource
+import Amazonka.Wisdom.Types.AppIntegrationsConfiguration
+import Amazonka.Wisdom.Types.AssistantAssociationData
+import Amazonka.Wisdom.Types.AssistantAssociationInputData
+import Amazonka.Wisdom.Types.AssistantAssociationOutputData
+import Amazonka.Wisdom.Types.AssistantAssociationSummary
+import Amazonka.Wisdom.Types.AssistantData
+import Amazonka.Wisdom.Types.AssistantSummary
+import Amazonka.Wisdom.Types.ContentData
+import Amazonka.Wisdom.Types.ContentReference
+import Amazonka.Wisdom.Types.ContentSummary
+import Amazonka.Wisdom.Types.Document
+import Amazonka.Wisdom.Types.DocumentText
+import Amazonka.Wisdom.Types.Filter
+import Amazonka.Wisdom.Types.Highlight
+import Amazonka.Wisdom.Types.KnowledgeBaseAssociationData
+import Amazonka.Wisdom.Types.KnowledgeBaseData
+import Amazonka.Wisdom.Types.KnowledgeBaseSummary
+import Amazonka.Wisdom.Types.NotifyRecommendationsReceivedError
+import Amazonka.Wisdom.Types.QueryRecommendationTriggerData
+import Amazonka.Wisdom.Types.RecommendationData
+import Amazonka.Wisdom.Types.RecommendationTrigger
+import Amazonka.Wisdom.Types.RecommendationTriggerData
+import Amazonka.Wisdom.Types.RenderingConfiguration
+import Amazonka.Wisdom.Types.ResultData
+import Amazonka.Wisdom.Types.SearchExpression
+import Amazonka.Wisdom.Types.ServerSideEncryptionConfiguration
+import Amazonka.Wisdom.Types.SessionData
+import Amazonka.Wisdom.Types.SessionSummary
+import Amazonka.Wisdom.Types.SourceConfiguration
+import Amazonka.Wisdom.UntagResource
+import Amazonka.Wisdom.UpdateContent
+import Amazonka.Wisdom.UpdateKnowledgeBaseTemplateUri
diff --git a/gen/Amazonka/Wisdom/ListAssistantAssociations.hs b/gen/Amazonka/Wisdom/ListAssistantAssociations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/ListAssistantAssociations.hs
@@ -0,0 +1,249 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Wisdom.ListAssistantAssociations
+-- 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 information about assistant associations.
+--
+-- This operation returns paginated results.
+module Amazonka.Wisdom.ListAssistantAssociations
+  ( -- * Creating a Request
+    ListAssistantAssociations (..),
+    newListAssistantAssociations,
+
+    -- * Request Lenses
+    listAssistantAssociations_maxResults,
+    listAssistantAssociations_nextToken,
+    listAssistantAssociations_assistantId,
+
+    -- * Destructuring the Response
+    ListAssistantAssociationsResponse (..),
+    newListAssistantAssociationsResponse,
+
+    -- * Response Lenses
+    listAssistantAssociationsResponse_nextToken,
+    listAssistantAssociationsResponse_httpStatus,
+    listAssistantAssociationsResponse_assistantAssociationSummaries,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newListAssistantAssociations' smart constructor.
+data ListAssistantAssociations = ListAssistantAssociations'
+  { -- | The maximum number of results to return per page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results. Use the value returned in the
+    -- previous response in the next request to retrieve the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+    -- URLs cannot contain the ARN.
+    assistantId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAssistantAssociations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listAssistantAssociations_maxResults' - The maximum number of results to return per page.
+--
+-- 'nextToken', 'listAssistantAssociations_nextToken' - The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+--
+-- 'assistantId', 'listAssistantAssociations_assistantId' - The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+newListAssistantAssociations ::
+  -- | 'assistantId'
+  Prelude.Text ->
+  ListAssistantAssociations
+newListAssistantAssociations pAssistantId_ =
+  ListAssistantAssociations'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      assistantId = pAssistantId_
+    }
+
+-- | The maximum number of results to return per page.
+listAssistantAssociations_maxResults :: Lens.Lens' ListAssistantAssociations (Prelude.Maybe Prelude.Natural)
+listAssistantAssociations_maxResults = Lens.lens (\ListAssistantAssociations' {maxResults} -> maxResults) (\s@ListAssistantAssociations' {} a -> s {maxResults = a} :: ListAssistantAssociations)
+
+-- | The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+listAssistantAssociations_nextToken :: Lens.Lens' ListAssistantAssociations (Prelude.Maybe Prelude.Text)
+listAssistantAssociations_nextToken = Lens.lens (\ListAssistantAssociations' {nextToken} -> nextToken) (\s@ListAssistantAssociations' {} a -> s {nextToken = a} :: ListAssistantAssociations)
+
+-- | The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+listAssistantAssociations_assistantId :: Lens.Lens' ListAssistantAssociations Prelude.Text
+listAssistantAssociations_assistantId = Lens.lens (\ListAssistantAssociations' {assistantId} -> assistantId) (\s@ListAssistantAssociations' {} a -> s {assistantId = a} :: ListAssistantAssociations)
+
+instance Core.AWSPager ListAssistantAssociations where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listAssistantAssociationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^. listAssistantAssociationsResponse_assistantAssociationSummaries
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listAssistantAssociations_nextToken
+          Lens..~ rs
+          Lens.^? listAssistantAssociationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListAssistantAssociations where
+  type
+    AWSResponse ListAssistantAssociations =
+      ListAssistantAssociationsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAssistantAssociationsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "assistantAssociationSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListAssistantAssociations where
+  hashWithSalt _salt ListAssistantAssociations' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` assistantId
+
+instance Prelude.NFData ListAssistantAssociations where
+  rnf ListAssistantAssociations' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf assistantId
+
+instance Data.ToHeaders ListAssistantAssociations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListAssistantAssociations where
+  toPath ListAssistantAssociations' {..} =
+    Prelude.mconcat
+      [ "/assistants/",
+        Data.toBS assistantId,
+        "/associations"
+      ]
+
+instance Data.ToQuery ListAssistantAssociations where
+  toQuery ListAssistantAssociations' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListAssistantAssociationsResponse' smart constructor.
+data ListAssistantAssociationsResponse = ListAssistantAssociationsResponse'
+  { -- | If there are additional results, this is the token for the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Summary information about assistant associations.
+    assistantAssociationSummaries :: [AssistantAssociationSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAssistantAssociationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listAssistantAssociationsResponse_nextToken' - If there are additional results, this is the token for the next set of
+-- results.
+--
+-- 'httpStatus', 'listAssistantAssociationsResponse_httpStatus' - The response's http status code.
+--
+-- 'assistantAssociationSummaries', 'listAssistantAssociationsResponse_assistantAssociationSummaries' - Summary information about assistant associations.
+newListAssistantAssociationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAssistantAssociationsResponse
+newListAssistantAssociationsResponse pHttpStatus_ =
+  ListAssistantAssociationsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      assistantAssociationSummaries =
+        Prelude.mempty
+    }
+
+-- | If there are additional results, this is the token for the next set of
+-- results.
+listAssistantAssociationsResponse_nextToken :: Lens.Lens' ListAssistantAssociationsResponse (Prelude.Maybe Prelude.Text)
+listAssistantAssociationsResponse_nextToken = Lens.lens (\ListAssistantAssociationsResponse' {nextToken} -> nextToken) (\s@ListAssistantAssociationsResponse' {} a -> s {nextToken = a} :: ListAssistantAssociationsResponse)
+
+-- | The response's http status code.
+listAssistantAssociationsResponse_httpStatus :: Lens.Lens' ListAssistantAssociationsResponse Prelude.Int
+listAssistantAssociationsResponse_httpStatus = Lens.lens (\ListAssistantAssociationsResponse' {httpStatus} -> httpStatus) (\s@ListAssistantAssociationsResponse' {} a -> s {httpStatus = a} :: ListAssistantAssociationsResponse)
+
+-- | Summary information about assistant associations.
+listAssistantAssociationsResponse_assistantAssociationSummaries :: Lens.Lens' ListAssistantAssociationsResponse [AssistantAssociationSummary]
+listAssistantAssociationsResponse_assistantAssociationSummaries = Lens.lens (\ListAssistantAssociationsResponse' {assistantAssociationSummaries} -> assistantAssociationSummaries) (\s@ListAssistantAssociationsResponse' {} a -> s {assistantAssociationSummaries = a} :: ListAssistantAssociationsResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    ListAssistantAssociationsResponse
+  where
+  rnf ListAssistantAssociationsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf assistantAssociationSummaries
diff --git a/gen/Amazonka/Wisdom/ListAssistants.hs b/gen/Amazonka/Wisdom/ListAssistants.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/ListAssistants.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.Wisdom.ListAssistants
+-- 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 information about assistants.
+--
+-- This operation returns paginated results.
+module Amazonka.Wisdom.ListAssistants
+  ( -- * Creating a Request
+    ListAssistants (..),
+    newListAssistants,
+
+    -- * Request Lenses
+    listAssistants_maxResults,
+    listAssistants_nextToken,
+
+    -- * Destructuring the Response
+    ListAssistantsResponse (..),
+    newListAssistantsResponse,
+
+    -- * Response Lenses
+    listAssistantsResponse_nextToken,
+    listAssistantsResponse_httpStatus,
+    listAssistantsResponse_assistantSummaries,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newListAssistants' smart constructor.
+data ListAssistants = ListAssistants'
+  { -- | The maximum number of results to return per page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results. Use the value returned in the
+    -- previous response in the next request to retrieve the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAssistants' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listAssistants_maxResults' - The maximum number of results to return per page.
+--
+-- 'nextToken', 'listAssistants_nextToken' - The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+newListAssistants ::
+  ListAssistants
+newListAssistants =
+  ListAssistants'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return per page.
+listAssistants_maxResults :: Lens.Lens' ListAssistants (Prelude.Maybe Prelude.Natural)
+listAssistants_maxResults = Lens.lens (\ListAssistants' {maxResults} -> maxResults) (\s@ListAssistants' {} a -> s {maxResults = a} :: ListAssistants)
+
+-- | The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+listAssistants_nextToken :: Lens.Lens' ListAssistants (Prelude.Maybe Prelude.Text)
+listAssistants_nextToken = Lens.lens (\ListAssistants' {nextToken} -> nextToken) (\s@ListAssistants' {} a -> s {nextToken = a} :: ListAssistants)
+
+instance Core.AWSPager ListAssistants where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listAssistantsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^. listAssistantsResponse_assistantSummaries
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listAssistants_nextToken
+          Lens..~ rs
+          Lens.^? listAssistantsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListAssistants where
+  type
+    AWSResponse ListAssistants =
+      ListAssistantsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAssistantsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "assistantSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListAssistants where
+  hashWithSalt _salt ListAssistants' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListAssistants where
+  rnf ListAssistants' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListAssistants where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListAssistants where
+  toPath = Prelude.const "/assistants"
+
+instance Data.ToQuery ListAssistants where
+  toQuery ListAssistants' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListAssistantsResponse' smart constructor.
+data ListAssistantsResponse = ListAssistantsResponse'
+  { -- | If there are additional results, this is the token for the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Information about the assistants.
+    assistantSummaries :: [AssistantSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAssistantsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listAssistantsResponse_nextToken' - If there are additional results, this is the token for the next set of
+-- results.
+--
+-- 'httpStatus', 'listAssistantsResponse_httpStatus' - The response's http status code.
+--
+-- 'assistantSummaries', 'listAssistantsResponse_assistantSummaries' - Information about the assistants.
+newListAssistantsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAssistantsResponse
+newListAssistantsResponse pHttpStatus_ =
+  ListAssistantsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      assistantSummaries = Prelude.mempty
+    }
+
+-- | If there are additional results, this is the token for the next set of
+-- results.
+listAssistantsResponse_nextToken :: Lens.Lens' ListAssistantsResponse (Prelude.Maybe Prelude.Text)
+listAssistantsResponse_nextToken = Lens.lens (\ListAssistantsResponse' {nextToken} -> nextToken) (\s@ListAssistantsResponse' {} a -> s {nextToken = a} :: ListAssistantsResponse)
+
+-- | The response's http status code.
+listAssistantsResponse_httpStatus :: Lens.Lens' ListAssistantsResponse Prelude.Int
+listAssistantsResponse_httpStatus = Lens.lens (\ListAssistantsResponse' {httpStatus} -> httpStatus) (\s@ListAssistantsResponse' {} a -> s {httpStatus = a} :: ListAssistantsResponse)
+
+-- | Information about the assistants.
+listAssistantsResponse_assistantSummaries :: Lens.Lens' ListAssistantsResponse [AssistantSummary]
+listAssistantsResponse_assistantSummaries = Lens.lens (\ListAssistantsResponse' {assistantSummaries} -> assistantSummaries) (\s@ListAssistantsResponse' {} a -> s {assistantSummaries = a} :: ListAssistantsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListAssistantsResponse where
+  rnf ListAssistantsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf assistantSummaries
diff --git a/gen/Amazonka/Wisdom/ListContents.hs b/gen/Amazonka/Wisdom/ListContents.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/ListContents.hs
@@ -0,0 +1,239 @@
+{-# 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.Wisdom.ListContents
+-- 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 content.
+--
+-- This operation returns paginated results.
+module Amazonka.Wisdom.ListContents
+  ( -- * Creating a Request
+    ListContents (..),
+    newListContents,
+
+    -- * Request Lenses
+    listContents_maxResults,
+    listContents_nextToken,
+    listContents_knowledgeBaseId,
+
+    -- * Destructuring the Response
+    ListContentsResponse (..),
+    newListContentsResponse,
+
+    -- * Response Lenses
+    listContentsResponse_nextToken,
+    listContentsResponse_httpStatus,
+    listContentsResponse_contentSummaries,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newListContents' smart constructor.
+data ListContents = ListContents'
+  { -- | The maximum number of results to return per page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results. Use the value returned in the
+    -- previous response in the next request to retrieve the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the knowledge base. Can be either the ID or the ARN.
+    -- URLs cannot contain the ARN.
+    knowledgeBaseId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListContents' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listContents_maxResults' - The maximum number of results to return per page.
+--
+-- 'nextToken', 'listContents_nextToken' - The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+--
+-- 'knowledgeBaseId', 'listContents_knowledgeBaseId' - The identifier of the knowledge base. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+newListContents ::
+  -- | 'knowledgeBaseId'
+  Prelude.Text ->
+  ListContents
+newListContents pKnowledgeBaseId_ =
+  ListContents'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      knowledgeBaseId = pKnowledgeBaseId_
+    }
+
+-- | The maximum number of results to return per page.
+listContents_maxResults :: Lens.Lens' ListContents (Prelude.Maybe Prelude.Natural)
+listContents_maxResults = Lens.lens (\ListContents' {maxResults} -> maxResults) (\s@ListContents' {} a -> s {maxResults = a} :: ListContents)
+
+-- | The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+listContents_nextToken :: Lens.Lens' ListContents (Prelude.Maybe Prelude.Text)
+listContents_nextToken = Lens.lens (\ListContents' {nextToken} -> nextToken) (\s@ListContents' {} a -> s {nextToken = a} :: ListContents)
+
+-- | The identifier of the knowledge base. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+listContents_knowledgeBaseId :: Lens.Lens' ListContents Prelude.Text
+listContents_knowledgeBaseId = Lens.lens (\ListContents' {knowledgeBaseId} -> knowledgeBaseId) (\s@ListContents' {} a -> s {knowledgeBaseId = a} :: ListContents)
+
+instance Core.AWSPager ListContents where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listContentsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        (rs Lens.^. listContentsResponse_contentSummaries) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listContents_nextToken
+          Lens..~ rs
+          Lens.^? listContentsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListContents where
+  type AWSResponse ListContents = ListContentsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListContentsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "contentSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListContents where
+  hashWithSalt _salt ListContents' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` knowledgeBaseId
+
+instance Prelude.NFData ListContents where
+  rnf ListContents' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf knowledgeBaseId
+
+instance Data.ToHeaders ListContents where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListContents where
+  toPath ListContents' {..} =
+    Prelude.mconcat
+      [ "/knowledgeBases/",
+        Data.toBS knowledgeBaseId,
+        "/contents"
+      ]
+
+instance Data.ToQuery ListContents where
+  toQuery ListContents' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListContentsResponse' smart constructor.
+data ListContentsResponse = ListContentsResponse'
+  { -- | If there are additional results, this is the token for the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Information about the content.
+    contentSummaries :: [ContentSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListContentsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listContentsResponse_nextToken' - If there are additional results, this is the token for the next set of
+-- results.
+--
+-- 'httpStatus', 'listContentsResponse_httpStatus' - The response's http status code.
+--
+-- 'contentSummaries', 'listContentsResponse_contentSummaries' - Information about the content.
+newListContentsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListContentsResponse
+newListContentsResponse pHttpStatus_ =
+  ListContentsResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      contentSummaries = Prelude.mempty
+    }
+
+-- | If there are additional results, this is the token for the next set of
+-- results.
+listContentsResponse_nextToken :: Lens.Lens' ListContentsResponse (Prelude.Maybe Prelude.Text)
+listContentsResponse_nextToken = Lens.lens (\ListContentsResponse' {nextToken} -> nextToken) (\s@ListContentsResponse' {} a -> s {nextToken = a} :: ListContentsResponse)
+
+-- | The response's http status code.
+listContentsResponse_httpStatus :: Lens.Lens' ListContentsResponse Prelude.Int
+listContentsResponse_httpStatus = Lens.lens (\ListContentsResponse' {httpStatus} -> httpStatus) (\s@ListContentsResponse' {} a -> s {httpStatus = a} :: ListContentsResponse)
+
+-- | Information about the content.
+listContentsResponse_contentSummaries :: Lens.Lens' ListContentsResponse [ContentSummary]
+listContentsResponse_contentSummaries = Lens.lens (\ListContentsResponse' {contentSummaries} -> contentSummaries) (\s@ListContentsResponse' {} a -> s {contentSummaries = a} :: ListContentsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListContentsResponse where
+  rnf ListContentsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf contentSummaries
diff --git a/gen/Amazonka/Wisdom/ListKnowledgeBases.hs b/gen/Amazonka/Wisdom/ListKnowledgeBases.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/ListKnowledgeBases.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.Wisdom.ListKnowledgeBases
+-- 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 knowledge bases.
+--
+-- This operation returns paginated results.
+module Amazonka.Wisdom.ListKnowledgeBases
+  ( -- * Creating a Request
+    ListKnowledgeBases (..),
+    newListKnowledgeBases,
+
+    -- * Request Lenses
+    listKnowledgeBases_maxResults,
+    listKnowledgeBases_nextToken,
+
+    -- * Destructuring the Response
+    ListKnowledgeBasesResponse (..),
+    newListKnowledgeBasesResponse,
+
+    -- * Response Lenses
+    listKnowledgeBasesResponse_nextToken,
+    listKnowledgeBasesResponse_httpStatus,
+    listKnowledgeBasesResponse_knowledgeBaseSummaries,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newListKnowledgeBases' smart constructor.
+data ListKnowledgeBases = ListKnowledgeBases'
+  { -- | The maximum number of results to return per page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results. Use the value returned in the
+    -- previous response in the next request to retrieve the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListKnowledgeBases' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listKnowledgeBases_maxResults' - The maximum number of results to return per page.
+--
+-- 'nextToken', 'listKnowledgeBases_nextToken' - The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+newListKnowledgeBases ::
+  ListKnowledgeBases
+newListKnowledgeBases =
+  ListKnowledgeBases'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return per page.
+listKnowledgeBases_maxResults :: Lens.Lens' ListKnowledgeBases (Prelude.Maybe Prelude.Natural)
+listKnowledgeBases_maxResults = Lens.lens (\ListKnowledgeBases' {maxResults} -> maxResults) (\s@ListKnowledgeBases' {} a -> s {maxResults = a} :: ListKnowledgeBases)
+
+-- | The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+listKnowledgeBases_nextToken :: Lens.Lens' ListKnowledgeBases (Prelude.Maybe Prelude.Text)
+listKnowledgeBases_nextToken = Lens.lens (\ListKnowledgeBases' {nextToken} -> nextToken) (\s@ListKnowledgeBases' {} a -> s {nextToken = a} :: ListKnowledgeBases)
+
+instance Core.AWSPager ListKnowledgeBases where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listKnowledgeBasesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^. listKnowledgeBasesResponse_knowledgeBaseSummaries
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listKnowledgeBases_nextToken
+          Lens..~ rs
+          Lens.^? listKnowledgeBasesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListKnowledgeBases where
+  type
+    AWSResponse ListKnowledgeBases =
+      ListKnowledgeBasesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListKnowledgeBasesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "knowledgeBaseSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListKnowledgeBases where
+  hashWithSalt _salt ListKnowledgeBases' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListKnowledgeBases where
+  rnf ListKnowledgeBases' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListKnowledgeBases where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListKnowledgeBases where
+  toPath = Prelude.const "/knowledgeBases"
+
+instance Data.ToQuery ListKnowledgeBases where
+  toQuery ListKnowledgeBases' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListKnowledgeBasesResponse' smart constructor.
+data ListKnowledgeBasesResponse = ListKnowledgeBasesResponse'
+  { -- | If there are additional results, this is the token for the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Information about the knowledge bases.
+    knowledgeBaseSummaries :: [KnowledgeBaseSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListKnowledgeBasesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listKnowledgeBasesResponse_nextToken' - If there are additional results, this is the token for the next set of
+-- results.
+--
+-- 'httpStatus', 'listKnowledgeBasesResponse_httpStatus' - The response's http status code.
+--
+-- 'knowledgeBaseSummaries', 'listKnowledgeBasesResponse_knowledgeBaseSummaries' - Information about the knowledge bases.
+newListKnowledgeBasesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListKnowledgeBasesResponse
+newListKnowledgeBasesResponse pHttpStatus_ =
+  ListKnowledgeBasesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      knowledgeBaseSummaries = Prelude.mempty
+    }
+
+-- | If there are additional results, this is the token for the next set of
+-- results.
+listKnowledgeBasesResponse_nextToken :: Lens.Lens' ListKnowledgeBasesResponse (Prelude.Maybe Prelude.Text)
+listKnowledgeBasesResponse_nextToken = Lens.lens (\ListKnowledgeBasesResponse' {nextToken} -> nextToken) (\s@ListKnowledgeBasesResponse' {} a -> s {nextToken = a} :: ListKnowledgeBasesResponse)
+
+-- | The response's http status code.
+listKnowledgeBasesResponse_httpStatus :: Lens.Lens' ListKnowledgeBasesResponse Prelude.Int
+listKnowledgeBasesResponse_httpStatus = Lens.lens (\ListKnowledgeBasesResponse' {httpStatus} -> httpStatus) (\s@ListKnowledgeBasesResponse' {} a -> s {httpStatus = a} :: ListKnowledgeBasesResponse)
+
+-- | Information about the knowledge bases.
+listKnowledgeBasesResponse_knowledgeBaseSummaries :: Lens.Lens' ListKnowledgeBasesResponse [KnowledgeBaseSummary]
+listKnowledgeBasesResponse_knowledgeBaseSummaries = Lens.lens (\ListKnowledgeBasesResponse' {knowledgeBaseSummaries} -> knowledgeBaseSummaries) (\s@ListKnowledgeBasesResponse' {} a -> s {knowledgeBaseSummaries = a} :: ListKnowledgeBasesResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListKnowledgeBasesResponse where
+  rnf ListKnowledgeBasesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf knowledgeBaseSummaries
diff --git a/gen/Amazonka/Wisdom/ListTagsForResource.hs b/gen/Amazonka/Wisdom/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/ListTagsForResource.hs
@@ -0,0 +1,159 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Wisdom.ListTagsForResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the tags for the specified resource.
+module Amazonka.Wisdom.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The Amazon Resource Name (ARN) of the resource.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'listTagsForResource_resourceArn' - The Amazon Resource Name (ARN) of the resource.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) of the resource.
+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath ListTagsForResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The tags used to organize, track, or control access for this resource.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Wisdom/NotifyRecommendationsReceived.hs b/gen/Amazonka/Wisdom/NotifyRecommendationsReceived.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/NotifyRecommendationsReceived.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.Wisdom.NotifyRecommendationsReceived
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes the specified recommendations from the specified assistant\'s
+-- queue of newly available recommendations. You can use this API in
+-- conjunction with
+-- <https://docs.aws.amazon.com/wisdom/latest/APIReference/API_GetRecommendations.html GetRecommendations>
+-- and a @waitTimeSeconds@ input for long-polling behavior and avoiding
+-- duplicate recommendations.
+module Amazonka.Wisdom.NotifyRecommendationsReceived
+  ( -- * Creating a Request
+    NotifyRecommendationsReceived (..),
+    newNotifyRecommendationsReceived,
+
+    -- * Request Lenses
+    notifyRecommendationsReceived_assistantId,
+    notifyRecommendationsReceived_recommendationIds,
+    notifyRecommendationsReceived_sessionId,
+
+    -- * Destructuring the Response
+    NotifyRecommendationsReceivedResponse (..),
+    newNotifyRecommendationsReceivedResponse,
+
+    -- * Response Lenses
+    notifyRecommendationsReceivedResponse_errors,
+    notifyRecommendationsReceivedResponse_recommendationIds,
+    notifyRecommendationsReceivedResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newNotifyRecommendationsReceived' smart constructor.
+data NotifyRecommendationsReceived = NotifyRecommendationsReceived'
+  { -- | The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+    -- URLs cannot contain the ARN.
+    assistantId :: Prelude.Text,
+    -- | The identifiers of the recommendations.
+    recommendationIds :: [Prelude.Text],
+    -- | The identifier of the session. Can be either the ID or the ARN. URLs
+    -- cannot contain the ARN.
+    sessionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NotifyRecommendationsReceived' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assistantId', 'notifyRecommendationsReceived_assistantId' - The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+--
+-- 'recommendationIds', 'notifyRecommendationsReceived_recommendationIds' - The identifiers of the recommendations.
+--
+-- 'sessionId', 'notifyRecommendationsReceived_sessionId' - The identifier of the session. Can be either the ID or the ARN. URLs
+-- cannot contain the ARN.
+newNotifyRecommendationsReceived ::
+  -- | 'assistantId'
+  Prelude.Text ->
+  -- | 'sessionId'
+  Prelude.Text ->
+  NotifyRecommendationsReceived
+newNotifyRecommendationsReceived
+  pAssistantId_
+  pSessionId_ =
+    NotifyRecommendationsReceived'
+      { assistantId =
+          pAssistantId_,
+        recommendationIds = Prelude.mempty,
+        sessionId = pSessionId_
+      }
+
+-- | The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+notifyRecommendationsReceived_assistantId :: Lens.Lens' NotifyRecommendationsReceived Prelude.Text
+notifyRecommendationsReceived_assistantId = Lens.lens (\NotifyRecommendationsReceived' {assistantId} -> assistantId) (\s@NotifyRecommendationsReceived' {} a -> s {assistantId = a} :: NotifyRecommendationsReceived)
+
+-- | The identifiers of the recommendations.
+notifyRecommendationsReceived_recommendationIds :: Lens.Lens' NotifyRecommendationsReceived [Prelude.Text]
+notifyRecommendationsReceived_recommendationIds = Lens.lens (\NotifyRecommendationsReceived' {recommendationIds} -> recommendationIds) (\s@NotifyRecommendationsReceived' {} a -> s {recommendationIds = a} :: NotifyRecommendationsReceived) Prelude.. Lens.coerced
+
+-- | The identifier of the session. Can be either the ID or the ARN. URLs
+-- cannot contain the ARN.
+notifyRecommendationsReceived_sessionId :: Lens.Lens' NotifyRecommendationsReceived Prelude.Text
+notifyRecommendationsReceived_sessionId = Lens.lens (\NotifyRecommendationsReceived' {sessionId} -> sessionId) (\s@NotifyRecommendationsReceived' {} a -> s {sessionId = a} :: NotifyRecommendationsReceived)
+
+instance
+  Core.AWSRequest
+    NotifyRecommendationsReceived
+  where
+  type
+    AWSResponse NotifyRecommendationsReceived =
+      NotifyRecommendationsReceivedResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          NotifyRecommendationsReceivedResponse'
+            Prelude.<$> (x Data..?> "errors" Core..!@ Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..?> "recommendationIds"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    NotifyRecommendationsReceived
+  where
+  hashWithSalt _salt NotifyRecommendationsReceived' {..} =
+    _salt
+      `Prelude.hashWithSalt` assistantId
+      `Prelude.hashWithSalt` recommendationIds
+      `Prelude.hashWithSalt` sessionId
+
+instance Prelude.NFData NotifyRecommendationsReceived where
+  rnf NotifyRecommendationsReceived' {..} =
+    Prelude.rnf assistantId
+      `Prelude.seq` Prelude.rnf recommendationIds
+      `Prelude.seq` Prelude.rnf sessionId
+
+instance Data.ToHeaders NotifyRecommendationsReceived where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON NotifyRecommendationsReceived where
+  toJSON NotifyRecommendationsReceived' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("recommendationIds" Data..= recommendationIds)
+          ]
+      )
+
+instance Data.ToPath NotifyRecommendationsReceived where
+  toPath NotifyRecommendationsReceived' {..} =
+    Prelude.mconcat
+      [ "/assistants/",
+        Data.toBS assistantId,
+        "/sessions/",
+        Data.toBS sessionId,
+        "/recommendations/notify"
+      ]
+
+instance Data.ToQuery NotifyRecommendationsReceived where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newNotifyRecommendationsReceivedResponse' smart constructor.
+data NotifyRecommendationsReceivedResponse = NotifyRecommendationsReceivedResponse'
+  { -- | The identifiers of recommendations that are causing errors.
+    errors :: Prelude.Maybe [NotifyRecommendationsReceivedError],
+    -- | The identifiers of the recommendations.
+    recommendationIds :: 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 'NotifyRecommendationsReceivedResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errors', 'notifyRecommendationsReceivedResponse_errors' - The identifiers of recommendations that are causing errors.
+--
+-- 'recommendationIds', 'notifyRecommendationsReceivedResponse_recommendationIds' - The identifiers of the recommendations.
+--
+-- 'httpStatus', 'notifyRecommendationsReceivedResponse_httpStatus' - The response's http status code.
+newNotifyRecommendationsReceivedResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  NotifyRecommendationsReceivedResponse
+newNotifyRecommendationsReceivedResponse pHttpStatus_ =
+  NotifyRecommendationsReceivedResponse'
+    { errors =
+        Prelude.Nothing,
+      recommendationIds = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifiers of recommendations that are causing errors.
+notifyRecommendationsReceivedResponse_errors :: Lens.Lens' NotifyRecommendationsReceivedResponse (Prelude.Maybe [NotifyRecommendationsReceivedError])
+notifyRecommendationsReceivedResponse_errors = Lens.lens (\NotifyRecommendationsReceivedResponse' {errors} -> errors) (\s@NotifyRecommendationsReceivedResponse' {} a -> s {errors = a} :: NotifyRecommendationsReceivedResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The identifiers of the recommendations.
+notifyRecommendationsReceivedResponse_recommendationIds :: Lens.Lens' NotifyRecommendationsReceivedResponse (Prelude.Maybe [Prelude.Text])
+notifyRecommendationsReceivedResponse_recommendationIds = Lens.lens (\NotifyRecommendationsReceivedResponse' {recommendationIds} -> recommendationIds) (\s@NotifyRecommendationsReceivedResponse' {} a -> s {recommendationIds = a} :: NotifyRecommendationsReceivedResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+notifyRecommendationsReceivedResponse_httpStatus :: Lens.Lens' NotifyRecommendationsReceivedResponse Prelude.Int
+notifyRecommendationsReceivedResponse_httpStatus = Lens.lens (\NotifyRecommendationsReceivedResponse' {httpStatus} -> httpStatus) (\s@NotifyRecommendationsReceivedResponse' {} a -> s {httpStatus = a} :: NotifyRecommendationsReceivedResponse)
+
+instance
+  Prelude.NFData
+    NotifyRecommendationsReceivedResponse
+  where
+  rnf NotifyRecommendationsReceivedResponse' {..} =
+    Prelude.rnf errors
+      `Prelude.seq` Prelude.rnf recommendationIds
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Wisdom/QueryAssistant.hs b/gen/Amazonka/Wisdom/QueryAssistant.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/QueryAssistant.hs
@@ -0,0 +1,258 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Wisdom.QueryAssistant
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Performs a manual search against the specified assistant. To retrieve
+-- recommendations for an assistant, use
+-- <https://docs.aws.amazon.com/wisdom/latest/APIReference/API_GetRecommendations.html GetRecommendations>.
+--
+-- This operation returns paginated results.
+module Amazonka.Wisdom.QueryAssistant
+  ( -- * Creating a Request
+    QueryAssistant (..),
+    newQueryAssistant,
+
+    -- * Request Lenses
+    queryAssistant_maxResults,
+    queryAssistant_nextToken,
+    queryAssistant_assistantId,
+    queryAssistant_queryText,
+
+    -- * Destructuring the Response
+    QueryAssistantResponse (..),
+    newQueryAssistantResponse,
+
+    -- * Response Lenses
+    queryAssistantResponse_nextToken,
+    queryAssistantResponse_httpStatus,
+    queryAssistantResponse_results,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newQueryAssistant' smart constructor.
+data QueryAssistant = QueryAssistant'
+  { -- | The maximum number of results to return per page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results. Use the value returned in the
+    -- previous response in the next request to retrieve the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+    -- URLs cannot contain the ARN.
+    assistantId :: Prelude.Text,
+    -- | The text to search for.
+    queryText :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'QueryAssistant' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'queryAssistant_maxResults' - The maximum number of results to return per page.
+--
+-- 'nextToken', 'queryAssistant_nextToken' - The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+--
+-- 'assistantId', 'queryAssistant_assistantId' - The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+--
+-- 'queryText', 'queryAssistant_queryText' - The text to search for.
+newQueryAssistant ::
+  -- | 'assistantId'
+  Prelude.Text ->
+  -- | 'queryText'
+  Prelude.Text ->
+  QueryAssistant
+newQueryAssistant pAssistantId_ pQueryText_ =
+  QueryAssistant'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      assistantId = pAssistantId_,
+      queryText = Data._Sensitive Lens.# pQueryText_
+    }
+
+-- | The maximum number of results to return per page.
+queryAssistant_maxResults :: Lens.Lens' QueryAssistant (Prelude.Maybe Prelude.Natural)
+queryAssistant_maxResults = Lens.lens (\QueryAssistant' {maxResults} -> maxResults) (\s@QueryAssistant' {} a -> s {maxResults = a} :: QueryAssistant)
+
+-- | The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+queryAssistant_nextToken :: Lens.Lens' QueryAssistant (Prelude.Maybe Prelude.Text)
+queryAssistant_nextToken = Lens.lens (\QueryAssistant' {nextToken} -> nextToken) (\s@QueryAssistant' {} a -> s {nextToken = a} :: QueryAssistant)
+
+-- | The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+queryAssistant_assistantId :: Lens.Lens' QueryAssistant Prelude.Text
+queryAssistant_assistantId = Lens.lens (\QueryAssistant' {assistantId} -> assistantId) (\s@QueryAssistant' {} a -> s {assistantId = a} :: QueryAssistant)
+
+-- | The text to search for.
+queryAssistant_queryText :: Lens.Lens' QueryAssistant Prelude.Text
+queryAssistant_queryText = Lens.lens (\QueryAssistant' {queryText} -> queryText) (\s@QueryAssistant' {} a -> s {queryText = a} :: QueryAssistant) Prelude.. Data._Sensitive
+
+instance Core.AWSPager QueryAssistant where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? queryAssistantResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        (rs Lens.^. queryAssistantResponse_results) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& queryAssistant_nextToken
+          Lens..~ rs
+          Lens.^? queryAssistantResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest QueryAssistant where
+  type
+    AWSResponse QueryAssistant =
+      QueryAssistantResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          QueryAssistantResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "results" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable QueryAssistant where
+  hashWithSalt _salt QueryAssistant' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` assistantId
+      `Prelude.hashWithSalt` queryText
+
+instance Prelude.NFData QueryAssistant where
+  rnf QueryAssistant' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf assistantId
+      `Prelude.seq` Prelude.rnf queryText
+
+instance Data.ToHeaders QueryAssistant where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON QueryAssistant where
+  toJSON QueryAssistant' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("queryText" Data..= queryText)
+          ]
+      )
+
+instance Data.ToPath QueryAssistant where
+  toPath QueryAssistant' {..} =
+    Prelude.mconcat
+      ["/assistants/", Data.toBS assistantId, "/query"]
+
+instance Data.ToQuery QueryAssistant where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newQueryAssistantResponse' smart constructor.
+data QueryAssistantResponse = QueryAssistantResponse'
+  { -- | If there are additional results, this is the token for the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The results of the query.
+    results :: [ResultData]
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'QueryAssistantResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'queryAssistantResponse_nextToken' - If there are additional results, this is the token for the next set of
+-- results.
+--
+-- 'httpStatus', 'queryAssistantResponse_httpStatus' - The response's http status code.
+--
+-- 'results', 'queryAssistantResponse_results' - The results of the query.
+newQueryAssistantResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  QueryAssistantResponse
+newQueryAssistantResponse pHttpStatus_ =
+  QueryAssistantResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      results = Prelude.mempty
+    }
+
+-- | If there are additional results, this is the token for the next set of
+-- results.
+queryAssistantResponse_nextToken :: Lens.Lens' QueryAssistantResponse (Prelude.Maybe Prelude.Text)
+queryAssistantResponse_nextToken = Lens.lens (\QueryAssistantResponse' {nextToken} -> nextToken) (\s@QueryAssistantResponse' {} a -> s {nextToken = a} :: QueryAssistantResponse)
+
+-- | The response's http status code.
+queryAssistantResponse_httpStatus :: Lens.Lens' QueryAssistantResponse Prelude.Int
+queryAssistantResponse_httpStatus = Lens.lens (\QueryAssistantResponse' {httpStatus} -> httpStatus) (\s@QueryAssistantResponse' {} a -> s {httpStatus = a} :: QueryAssistantResponse)
+
+-- | The results of the query.
+queryAssistantResponse_results :: Lens.Lens' QueryAssistantResponse [ResultData]
+queryAssistantResponse_results = Lens.lens (\QueryAssistantResponse' {results} -> results) (\s@QueryAssistantResponse' {} a -> s {results = a} :: QueryAssistantResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData QueryAssistantResponse where
+  rnf QueryAssistantResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf results
diff --git a/gen/Amazonka/Wisdom/RemoveKnowledgeBaseTemplateUri.hs b/gen/Amazonka/Wisdom/RemoveKnowledgeBaseTemplateUri.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/RemoveKnowledgeBaseTemplateUri.hs
@@ -0,0 +1,175 @@
+{-# 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.Wisdom.RemoveKnowledgeBaseTemplateUri
+-- 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 URI template from a knowledge base.
+module Amazonka.Wisdom.RemoveKnowledgeBaseTemplateUri
+  ( -- * Creating a Request
+    RemoveKnowledgeBaseTemplateUri (..),
+    newRemoveKnowledgeBaseTemplateUri,
+
+    -- * Request Lenses
+    removeKnowledgeBaseTemplateUri_knowledgeBaseId,
+
+    -- * Destructuring the Response
+    RemoveKnowledgeBaseTemplateUriResponse (..),
+    newRemoveKnowledgeBaseTemplateUriResponse,
+
+    -- * Response Lenses
+    removeKnowledgeBaseTemplateUriResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newRemoveKnowledgeBaseTemplateUri' smart constructor.
+data RemoveKnowledgeBaseTemplateUri = RemoveKnowledgeBaseTemplateUri'
+  { -- | The identifier of the knowledge base. Can be either the ID or the ARN.
+    -- URLs cannot contain the ARN.
+    knowledgeBaseId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RemoveKnowledgeBaseTemplateUri' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'knowledgeBaseId', 'removeKnowledgeBaseTemplateUri_knowledgeBaseId' - The identifier of the knowledge base. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+newRemoveKnowledgeBaseTemplateUri ::
+  -- | 'knowledgeBaseId'
+  Prelude.Text ->
+  RemoveKnowledgeBaseTemplateUri
+newRemoveKnowledgeBaseTemplateUri pKnowledgeBaseId_ =
+  RemoveKnowledgeBaseTemplateUri'
+    { knowledgeBaseId =
+        pKnowledgeBaseId_
+    }
+
+-- | The identifier of the knowledge base. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+removeKnowledgeBaseTemplateUri_knowledgeBaseId :: Lens.Lens' RemoveKnowledgeBaseTemplateUri Prelude.Text
+removeKnowledgeBaseTemplateUri_knowledgeBaseId = Lens.lens (\RemoveKnowledgeBaseTemplateUri' {knowledgeBaseId} -> knowledgeBaseId) (\s@RemoveKnowledgeBaseTemplateUri' {} a -> s {knowledgeBaseId = a} :: RemoveKnowledgeBaseTemplateUri)
+
+instance
+  Core.AWSRequest
+    RemoveKnowledgeBaseTemplateUri
+  where
+  type
+    AWSResponse RemoveKnowledgeBaseTemplateUri =
+      RemoveKnowledgeBaseTemplateUriResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          RemoveKnowledgeBaseTemplateUriResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    RemoveKnowledgeBaseTemplateUri
+  where
+  hashWithSalt
+    _salt
+    RemoveKnowledgeBaseTemplateUri' {..} =
+      _salt `Prelude.hashWithSalt` knowledgeBaseId
+
+instance
+  Prelude.NFData
+    RemoveKnowledgeBaseTemplateUri
+  where
+  rnf RemoveKnowledgeBaseTemplateUri' {..} =
+    Prelude.rnf knowledgeBaseId
+
+instance
+  Data.ToHeaders
+    RemoveKnowledgeBaseTemplateUri
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath RemoveKnowledgeBaseTemplateUri where
+  toPath RemoveKnowledgeBaseTemplateUri' {..} =
+    Prelude.mconcat
+      [ "/knowledgeBases/",
+        Data.toBS knowledgeBaseId,
+        "/templateUri"
+      ]
+
+instance Data.ToQuery RemoveKnowledgeBaseTemplateUri where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRemoveKnowledgeBaseTemplateUriResponse' smart constructor.
+data RemoveKnowledgeBaseTemplateUriResponse = RemoveKnowledgeBaseTemplateUriResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RemoveKnowledgeBaseTemplateUriResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'removeKnowledgeBaseTemplateUriResponse_httpStatus' - The response's http status code.
+newRemoveKnowledgeBaseTemplateUriResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RemoveKnowledgeBaseTemplateUriResponse
+newRemoveKnowledgeBaseTemplateUriResponse
+  pHttpStatus_ =
+    RemoveKnowledgeBaseTemplateUriResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+removeKnowledgeBaseTemplateUriResponse_httpStatus :: Lens.Lens' RemoveKnowledgeBaseTemplateUriResponse Prelude.Int
+removeKnowledgeBaseTemplateUriResponse_httpStatus = Lens.lens (\RemoveKnowledgeBaseTemplateUriResponse' {httpStatus} -> httpStatus) (\s@RemoveKnowledgeBaseTemplateUriResponse' {} a -> s {httpStatus = a} :: RemoveKnowledgeBaseTemplateUriResponse)
+
+instance
+  Prelude.NFData
+    RemoveKnowledgeBaseTemplateUriResponse
+  where
+  rnf RemoveKnowledgeBaseTemplateUriResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Wisdom/SearchContent.hs b/gen/Amazonka/Wisdom/SearchContent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/SearchContent.hs
@@ -0,0 +1,265 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Wisdom.SearchContent
+-- 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 for content in a specified knowledge base. Can be used to get a
+-- specific content resource by its name.
+--
+-- This operation returns paginated results.
+module Amazonka.Wisdom.SearchContent
+  ( -- * Creating a Request
+    SearchContent (..),
+    newSearchContent,
+
+    -- * Request Lenses
+    searchContent_maxResults,
+    searchContent_nextToken,
+    searchContent_knowledgeBaseId,
+    searchContent_searchExpression,
+
+    -- * Destructuring the Response
+    SearchContentResponse (..),
+    newSearchContentResponse,
+
+    -- * Response Lenses
+    searchContentResponse_nextToken,
+    searchContentResponse_httpStatus,
+    searchContentResponse_contentSummaries,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newSearchContent' smart constructor.
+data SearchContent = SearchContent'
+  { -- | The maximum number of results to return per page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results. Use the value returned in the
+    -- previous response in the next request to retrieve the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the knowledge base. Can be either the ID or the ARN.
+    -- URLs cannot contain the ARN.
+    knowledgeBaseId :: Prelude.Text,
+    -- | The search expression to filter results.
+    searchExpression :: SearchExpression
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchContent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'searchContent_maxResults' - The maximum number of results to return per page.
+--
+-- 'nextToken', 'searchContent_nextToken' - The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+--
+-- 'knowledgeBaseId', 'searchContent_knowledgeBaseId' - The identifier of the knowledge base. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+--
+-- 'searchExpression', 'searchContent_searchExpression' - The search expression to filter results.
+newSearchContent ::
+  -- | 'knowledgeBaseId'
+  Prelude.Text ->
+  -- | 'searchExpression'
+  SearchExpression ->
+  SearchContent
+newSearchContent pKnowledgeBaseId_ pSearchExpression_ =
+  SearchContent'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      knowledgeBaseId = pKnowledgeBaseId_,
+      searchExpression = pSearchExpression_
+    }
+
+-- | The maximum number of results to return per page.
+searchContent_maxResults :: Lens.Lens' SearchContent (Prelude.Maybe Prelude.Natural)
+searchContent_maxResults = Lens.lens (\SearchContent' {maxResults} -> maxResults) (\s@SearchContent' {} a -> s {maxResults = a} :: SearchContent)
+
+-- | The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+searchContent_nextToken :: Lens.Lens' SearchContent (Prelude.Maybe Prelude.Text)
+searchContent_nextToken = Lens.lens (\SearchContent' {nextToken} -> nextToken) (\s@SearchContent' {} a -> s {nextToken = a} :: SearchContent)
+
+-- | The identifier of the knowledge base. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+searchContent_knowledgeBaseId :: Lens.Lens' SearchContent Prelude.Text
+searchContent_knowledgeBaseId = Lens.lens (\SearchContent' {knowledgeBaseId} -> knowledgeBaseId) (\s@SearchContent' {} a -> s {knowledgeBaseId = a} :: SearchContent)
+
+-- | The search expression to filter results.
+searchContent_searchExpression :: Lens.Lens' SearchContent SearchExpression
+searchContent_searchExpression = Lens.lens (\SearchContent' {searchExpression} -> searchExpression) (\s@SearchContent' {} a -> s {searchExpression = a} :: SearchContent)
+
+instance Core.AWSPager SearchContent where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? searchContentResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        (rs Lens.^. searchContentResponse_contentSummaries) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& searchContent_nextToken
+          Lens..~ rs
+          Lens.^? searchContentResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest SearchContent where
+  type
+    AWSResponse SearchContent =
+      SearchContentResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          SearchContentResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "contentSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable SearchContent where
+  hashWithSalt _salt SearchContent' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` knowledgeBaseId
+      `Prelude.hashWithSalt` searchExpression
+
+instance Prelude.NFData SearchContent where
+  rnf SearchContent' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf knowledgeBaseId
+      `Prelude.seq` Prelude.rnf searchExpression
+
+instance Data.ToHeaders SearchContent where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SearchContent where
+  toJSON SearchContent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("searchExpression" Data..= searchExpression)
+          ]
+      )
+
+instance Data.ToPath SearchContent where
+  toPath SearchContent' {..} =
+    Prelude.mconcat
+      [ "/knowledgeBases/",
+        Data.toBS knowledgeBaseId,
+        "/search"
+      ]
+
+instance Data.ToQuery SearchContent where
+  toQuery SearchContent' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newSearchContentResponse' smart constructor.
+data SearchContentResponse = SearchContentResponse'
+  { -- | If there are additional results, this is the token for the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Summary information about the content.
+    contentSummaries :: [ContentSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchContentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'searchContentResponse_nextToken' - If there are additional results, this is the token for the next set of
+-- results.
+--
+-- 'httpStatus', 'searchContentResponse_httpStatus' - The response's http status code.
+--
+-- 'contentSummaries', 'searchContentResponse_contentSummaries' - Summary information about the content.
+newSearchContentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SearchContentResponse
+newSearchContentResponse pHttpStatus_ =
+  SearchContentResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      contentSummaries = Prelude.mempty
+    }
+
+-- | If there are additional results, this is the token for the next set of
+-- results.
+searchContentResponse_nextToken :: Lens.Lens' SearchContentResponse (Prelude.Maybe Prelude.Text)
+searchContentResponse_nextToken = Lens.lens (\SearchContentResponse' {nextToken} -> nextToken) (\s@SearchContentResponse' {} a -> s {nextToken = a} :: SearchContentResponse)
+
+-- | The response's http status code.
+searchContentResponse_httpStatus :: Lens.Lens' SearchContentResponse Prelude.Int
+searchContentResponse_httpStatus = Lens.lens (\SearchContentResponse' {httpStatus} -> httpStatus) (\s@SearchContentResponse' {} a -> s {httpStatus = a} :: SearchContentResponse)
+
+-- | Summary information about the content.
+searchContentResponse_contentSummaries :: Lens.Lens' SearchContentResponse [ContentSummary]
+searchContentResponse_contentSummaries = Lens.lens (\SearchContentResponse' {contentSummaries} -> contentSummaries) (\s@SearchContentResponse' {} a -> s {contentSummaries = a} :: SearchContentResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData SearchContentResponse where
+  rnf SearchContentResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf contentSummaries
diff --git a/gen/Amazonka/Wisdom/SearchSessions.hs b/gen/Amazonka/Wisdom/SearchSessions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/SearchSessions.hs
@@ -0,0 +1,265 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Wisdom.SearchSessions
+-- 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 for sessions.
+--
+-- This operation returns paginated results.
+module Amazonka.Wisdom.SearchSessions
+  ( -- * Creating a Request
+    SearchSessions (..),
+    newSearchSessions,
+
+    -- * Request Lenses
+    searchSessions_maxResults,
+    searchSessions_nextToken,
+    searchSessions_assistantId,
+    searchSessions_searchExpression,
+
+    -- * Destructuring the Response
+    SearchSessionsResponse (..),
+    newSearchSessionsResponse,
+
+    -- * Response Lenses
+    searchSessionsResponse_nextToken,
+    searchSessionsResponse_httpStatus,
+    searchSessionsResponse_sessionSummaries,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newSearchSessions' smart constructor.
+data SearchSessions = SearchSessions'
+  { -- | The maximum number of results to return per page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results. Use the value returned in the
+    -- previous response in the next request to retrieve the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+    -- URLs cannot contain the ARN.
+    assistantId :: Prelude.Text,
+    -- | The search expression to filter results.
+    searchExpression :: SearchExpression
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchSessions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'searchSessions_maxResults' - The maximum number of results to return per page.
+--
+-- 'nextToken', 'searchSessions_nextToken' - The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+--
+-- 'assistantId', 'searchSessions_assistantId' - The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+--
+-- 'searchExpression', 'searchSessions_searchExpression' - The search expression to filter results.
+newSearchSessions ::
+  -- | 'assistantId'
+  Prelude.Text ->
+  -- | 'searchExpression'
+  SearchExpression ->
+  SearchSessions
+newSearchSessions pAssistantId_ pSearchExpression_ =
+  SearchSessions'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      assistantId = pAssistantId_,
+      searchExpression = pSearchExpression_
+    }
+
+-- | The maximum number of results to return per page.
+searchSessions_maxResults :: Lens.Lens' SearchSessions (Prelude.Maybe Prelude.Natural)
+searchSessions_maxResults = Lens.lens (\SearchSessions' {maxResults} -> maxResults) (\s@SearchSessions' {} a -> s {maxResults = a} :: SearchSessions)
+
+-- | The token for the next set of results. Use the value returned in the
+-- previous response in the next request to retrieve the next set of
+-- results.
+searchSessions_nextToken :: Lens.Lens' SearchSessions (Prelude.Maybe Prelude.Text)
+searchSessions_nextToken = Lens.lens (\SearchSessions' {nextToken} -> nextToken) (\s@SearchSessions' {} a -> s {nextToken = a} :: SearchSessions)
+
+-- | The identifier of the Wisdom assistant. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+searchSessions_assistantId :: Lens.Lens' SearchSessions Prelude.Text
+searchSessions_assistantId = Lens.lens (\SearchSessions' {assistantId} -> assistantId) (\s@SearchSessions' {} a -> s {assistantId = a} :: SearchSessions)
+
+-- | The search expression to filter results.
+searchSessions_searchExpression :: Lens.Lens' SearchSessions SearchExpression
+searchSessions_searchExpression = Lens.lens (\SearchSessions' {searchExpression} -> searchExpression) (\s@SearchSessions' {} a -> s {searchExpression = a} :: SearchSessions)
+
+instance Core.AWSPager SearchSessions where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? searchSessionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        (rs Lens.^. searchSessionsResponse_sessionSummaries) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& searchSessions_nextToken
+          Lens..~ rs
+          Lens.^? searchSessionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest SearchSessions where
+  type
+    AWSResponse SearchSessions =
+      SearchSessionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          SearchSessionsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "sessionSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable SearchSessions where
+  hashWithSalt _salt SearchSessions' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` assistantId
+      `Prelude.hashWithSalt` searchExpression
+
+instance Prelude.NFData SearchSessions where
+  rnf SearchSessions' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf assistantId
+      `Prelude.seq` Prelude.rnf searchExpression
+
+instance Data.ToHeaders SearchSessions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SearchSessions where
+  toJSON SearchSessions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("searchExpression" Data..= searchExpression)
+          ]
+      )
+
+instance Data.ToPath SearchSessions where
+  toPath SearchSessions' {..} =
+    Prelude.mconcat
+      [ "/assistants/",
+        Data.toBS assistantId,
+        "/searchSessions"
+      ]
+
+instance Data.ToQuery SearchSessions where
+  toQuery SearchSessions' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newSearchSessionsResponse' smart constructor.
+data SearchSessionsResponse = SearchSessionsResponse'
+  { -- | If there are additional results, this is the token for the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Summary information about the sessions.
+    sessionSummaries :: [SessionSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchSessionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'searchSessionsResponse_nextToken' - If there are additional results, this is the token for the next set of
+-- results.
+--
+-- 'httpStatus', 'searchSessionsResponse_httpStatus' - The response's http status code.
+--
+-- 'sessionSummaries', 'searchSessionsResponse_sessionSummaries' - Summary information about the sessions.
+newSearchSessionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SearchSessionsResponse
+newSearchSessionsResponse pHttpStatus_ =
+  SearchSessionsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      sessionSummaries = Prelude.mempty
+    }
+
+-- | If there are additional results, this is the token for the next set of
+-- results.
+searchSessionsResponse_nextToken :: Lens.Lens' SearchSessionsResponse (Prelude.Maybe Prelude.Text)
+searchSessionsResponse_nextToken = Lens.lens (\SearchSessionsResponse' {nextToken} -> nextToken) (\s@SearchSessionsResponse' {} a -> s {nextToken = a} :: SearchSessionsResponse)
+
+-- | The response's http status code.
+searchSessionsResponse_httpStatus :: Lens.Lens' SearchSessionsResponse Prelude.Int
+searchSessionsResponse_httpStatus = Lens.lens (\SearchSessionsResponse' {httpStatus} -> httpStatus) (\s@SearchSessionsResponse' {} a -> s {httpStatus = a} :: SearchSessionsResponse)
+
+-- | Summary information about the sessions.
+searchSessionsResponse_sessionSummaries :: Lens.Lens' SearchSessionsResponse [SessionSummary]
+searchSessionsResponse_sessionSummaries = Lens.lens (\SearchSessionsResponse' {sessionSummaries} -> sessionSummaries) (\s@SearchSessionsResponse' {} a -> s {sessionSummaries = a} :: SearchSessionsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData SearchSessionsResponse where
+  rnf SearchSessionsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf sessionSummaries
diff --git a/gen/Amazonka/Wisdom/StartContentUpload.hs b/gen/Amazonka/Wisdom/StartContentUpload.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/StartContentUpload.hs
@@ -0,0 +1,246 @@
+{-# 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.Wisdom.StartContentUpload
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get a URL to upload content to a knowledge base. To upload content,
+-- first make a PUT request to the returned URL with your file, making sure
+-- to include the required headers. Then use
+-- <https://docs.aws.amazon.com/wisdom/latest/APIReference/API_CreateContent.html CreateContent>
+-- to finalize the content creation process or
+-- <https://docs.aws.amazon.com/wisdom/latest/APIReference/API_UpdateContent.html UpdateContent>
+-- to modify an existing resource. You can only upload content to a
+-- knowledge base of type CUSTOM.
+module Amazonka.Wisdom.StartContentUpload
+  ( -- * Creating a Request
+    StartContentUpload (..),
+    newStartContentUpload,
+
+    -- * Request Lenses
+    startContentUpload_contentType,
+    startContentUpload_knowledgeBaseId,
+
+    -- * Destructuring the Response
+    StartContentUploadResponse (..),
+    newStartContentUploadResponse,
+
+    -- * Response Lenses
+    startContentUploadResponse_httpStatus,
+    startContentUploadResponse_headersToInclude,
+    startContentUploadResponse_uploadId,
+    startContentUploadResponse_url,
+    startContentUploadResponse_urlExpiry,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newStartContentUpload' smart constructor.
+data StartContentUpload = StartContentUpload'
+  { -- | The type of content to upload.
+    contentType :: Prelude.Text,
+    -- | The identifier of the knowledge base. Can be either the ID or the ARN.
+    -- URLs cannot contain the ARN.
+    knowledgeBaseId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartContentUpload' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contentType', 'startContentUpload_contentType' - The type of content to upload.
+--
+-- 'knowledgeBaseId', 'startContentUpload_knowledgeBaseId' - The identifier of the knowledge base. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+newStartContentUpload ::
+  -- | 'contentType'
+  Prelude.Text ->
+  -- | 'knowledgeBaseId'
+  Prelude.Text ->
+  StartContentUpload
+newStartContentUpload pContentType_ pKnowledgeBaseId_ =
+  StartContentUpload'
+    { contentType = pContentType_,
+      knowledgeBaseId = pKnowledgeBaseId_
+    }
+
+-- | The type of content to upload.
+startContentUpload_contentType :: Lens.Lens' StartContentUpload Prelude.Text
+startContentUpload_contentType = Lens.lens (\StartContentUpload' {contentType} -> contentType) (\s@StartContentUpload' {} a -> s {contentType = a} :: StartContentUpload)
+
+-- | The identifier of the knowledge base. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+startContentUpload_knowledgeBaseId :: Lens.Lens' StartContentUpload Prelude.Text
+startContentUpload_knowledgeBaseId = Lens.lens (\StartContentUpload' {knowledgeBaseId} -> knowledgeBaseId) (\s@StartContentUpload' {} a -> s {knowledgeBaseId = a} :: StartContentUpload)
+
+instance Core.AWSRequest StartContentUpload where
+  type
+    AWSResponse StartContentUpload =
+      StartContentUploadResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartContentUploadResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "headersToInclude"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:> "uploadId")
+            Prelude.<*> (x Data..:> "url")
+            Prelude.<*> (x Data..:> "urlExpiry")
+      )
+
+instance Prelude.Hashable StartContentUpload where
+  hashWithSalt _salt StartContentUpload' {..} =
+    _salt
+      `Prelude.hashWithSalt` contentType
+      `Prelude.hashWithSalt` knowledgeBaseId
+
+instance Prelude.NFData StartContentUpload where
+  rnf StartContentUpload' {..} =
+    Prelude.rnf contentType
+      `Prelude.seq` Prelude.rnf knowledgeBaseId
+
+instance Data.ToHeaders StartContentUpload where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartContentUpload where
+  toJSON StartContentUpload' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("contentType" Data..= contentType)]
+      )
+
+instance Data.ToPath StartContentUpload where
+  toPath StartContentUpload' {..} =
+    Prelude.mconcat
+      [ "/knowledgeBases/",
+        Data.toBS knowledgeBaseId,
+        "/upload"
+      ]
+
+instance Data.ToQuery StartContentUpload where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartContentUploadResponse' smart constructor.
+data StartContentUploadResponse = StartContentUploadResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The headers to include in the upload.
+    headersToInclude :: Prelude.HashMap Prelude.Text Prelude.Text,
+    -- | The identifier of the upload.
+    uploadId :: Prelude.Text,
+    -- | The URL of the upload.
+    url :: Data.Sensitive Prelude.Text,
+    -- | The expiration time of the URL as an epoch timestamp.
+    urlExpiry :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartContentUploadResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'startContentUploadResponse_httpStatus' - The response's http status code.
+--
+-- 'headersToInclude', 'startContentUploadResponse_headersToInclude' - The headers to include in the upload.
+--
+-- 'uploadId', 'startContentUploadResponse_uploadId' - The identifier of the upload.
+--
+-- 'url', 'startContentUploadResponse_url' - The URL of the upload.
+--
+-- 'urlExpiry', 'startContentUploadResponse_urlExpiry' - The expiration time of the URL as an epoch timestamp.
+newStartContentUploadResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'uploadId'
+  Prelude.Text ->
+  -- | 'url'
+  Prelude.Text ->
+  -- | 'urlExpiry'
+  Prelude.UTCTime ->
+  StartContentUploadResponse
+newStartContentUploadResponse
+  pHttpStatus_
+  pUploadId_
+  pUrl_
+  pUrlExpiry_ =
+    StartContentUploadResponse'
+      { httpStatus =
+          pHttpStatus_,
+        headersToInclude = Prelude.mempty,
+        uploadId = pUploadId_,
+        url = Data._Sensitive Lens.# pUrl_,
+        urlExpiry = Data._Time Lens.# pUrlExpiry_
+      }
+
+-- | The response's http status code.
+startContentUploadResponse_httpStatus :: Lens.Lens' StartContentUploadResponse Prelude.Int
+startContentUploadResponse_httpStatus = Lens.lens (\StartContentUploadResponse' {httpStatus} -> httpStatus) (\s@StartContentUploadResponse' {} a -> s {httpStatus = a} :: StartContentUploadResponse)
+
+-- | The headers to include in the upload.
+startContentUploadResponse_headersToInclude :: Lens.Lens' StartContentUploadResponse (Prelude.HashMap Prelude.Text Prelude.Text)
+startContentUploadResponse_headersToInclude = Lens.lens (\StartContentUploadResponse' {headersToInclude} -> headersToInclude) (\s@StartContentUploadResponse' {} a -> s {headersToInclude = a} :: StartContentUploadResponse) Prelude.. Lens.coerced
+
+-- | The identifier of the upload.
+startContentUploadResponse_uploadId :: Lens.Lens' StartContentUploadResponse Prelude.Text
+startContentUploadResponse_uploadId = Lens.lens (\StartContentUploadResponse' {uploadId} -> uploadId) (\s@StartContentUploadResponse' {} a -> s {uploadId = a} :: StartContentUploadResponse)
+
+-- | The URL of the upload.
+startContentUploadResponse_url :: Lens.Lens' StartContentUploadResponse Prelude.Text
+startContentUploadResponse_url = Lens.lens (\StartContentUploadResponse' {url} -> url) (\s@StartContentUploadResponse' {} a -> s {url = a} :: StartContentUploadResponse) Prelude.. Data._Sensitive
+
+-- | The expiration time of the URL as an epoch timestamp.
+startContentUploadResponse_urlExpiry :: Lens.Lens' StartContentUploadResponse Prelude.UTCTime
+startContentUploadResponse_urlExpiry = Lens.lens (\StartContentUploadResponse' {urlExpiry} -> urlExpiry) (\s@StartContentUploadResponse' {} a -> s {urlExpiry = a} :: StartContentUploadResponse) Prelude.. Data._Time
+
+instance Prelude.NFData StartContentUploadResponse where
+  rnf StartContentUploadResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf headersToInclude
+      `Prelude.seq` Prelude.rnf uploadId
+      `Prelude.seq` Prelude.rnf url
+      `Prelude.seq` Prelude.rnf urlExpiry
diff --git a/gen/Amazonka/Wisdom/TagResource.hs b/gen/Amazonka/Wisdom/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/TagResource.hs
@@ -0,0 +1,163 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Wisdom.TagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds the specified tags to the specified resource.
+module Amazonka.Wisdom.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+
+    -- * Response Lenses
+    tagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The Amazon Resource Name (ARN) of the resource.
+    resourceArn :: Prelude.Text,
+    -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource.
+--
+-- 'tags', 'tagResource_tags' - The tags used to organize, track, or control access for this resource.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | The tags used to organize, track, or control access for this resource.
+tagResource_tags :: Lens.Lens' TagResource (Prelude.HashMap Prelude.Text Prelude.Text)
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("tags" Data..= tags)]
+      )
+
+instance Data.ToPath TagResource where
+  toPath TagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'tagResourceResponse_httpStatus' - The response's http status code.
+newTagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TagResourceResponse
+newTagResourceResponse pHttpStatus_ =
+  TagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+tagResourceResponse_httpStatus :: Lens.Lens' TagResourceResponse Prelude.Int
+tagResourceResponse_httpStatus = Lens.lens (\TagResourceResponse' {httpStatus} -> httpStatus) (\s@TagResourceResponse' {} a -> s {httpStatus = a} :: TagResourceResponse)
+
+instance Prelude.NFData TagResourceResponse where
+  rnf TagResourceResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Wisdom/Types.hs b/gen/Amazonka/Wisdom/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types.hs
@@ -0,0 +1,486 @@
+{-# 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.Wisdom.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.Wisdom.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _ConflictException,
+    _PreconditionFailedException,
+    _ResourceNotFoundException,
+    _ServiceQuotaExceededException,
+    _TooManyTagsException,
+    _ValidationException,
+
+    -- * AssistantStatus
+    AssistantStatus (..),
+
+    -- * AssistantType
+    AssistantType (..),
+
+    -- * AssociationType
+    AssociationType (..),
+
+    -- * ContentStatus
+    ContentStatus (..),
+
+    -- * FilterField
+    FilterField (..),
+
+    -- * FilterOperator
+    FilterOperator (..),
+
+    -- * KnowledgeBaseStatus
+    KnowledgeBaseStatus (..),
+
+    -- * KnowledgeBaseType
+    KnowledgeBaseType (..),
+
+    -- * RecommendationSourceType
+    RecommendationSourceType (..),
+
+    -- * RecommendationTriggerType
+    RecommendationTriggerType (..),
+
+    -- * RecommendationType
+    RecommendationType (..),
+
+    -- * RelevanceLevel
+    RelevanceLevel (..),
+
+    -- * AppIntegrationsConfiguration
+    AppIntegrationsConfiguration (..),
+    newAppIntegrationsConfiguration,
+    appIntegrationsConfiguration_appIntegrationArn,
+    appIntegrationsConfiguration_objectFields,
+
+    -- * AssistantAssociationData
+    AssistantAssociationData (..),
+    newAssistantAssociationData,
+    assistantAssociationData_tags,
+    assistantAssociationData_assistantArn,
+    assistantAssociationData_assistantAssociationArn,
+    assistantAssociationData_assistantAssociationId,
+    assistantAssociationData_assistantId,
+    assistantAssociationData_associationData,
+    assistantAssociationData_associationType,
+
+    -- * AssistantAssociationInputData
+    AssistantAssociationInputData (..),
+    newAssistantAssociationInputData,
+    assistantAssociationInputData_knowledgeBaseId,
+
+    -- * AssistantAssociationOutputData
+    AssistantAssociationOutputData (..),
+    newAssistantAssociationOutputData,
+    assistantAssociationOutputData_knowledgeBaseAssociation,
+
+    -- * AssistantAssociationSummary
+    AssistantAssociationSummary (..),
+    newAssistantAssociationSummary,
+    assistantAssociationSummary_tags,
+    assistantAssociationSummary_assistantArn,
+    assistantAssociationSummary_assistantAssociationArn,
+    assistantAssociationSummary_assistantAssociationId,
+    assistantAssociationSummary_assistantId,
+    assistantAssociationSummary_associationData,
+    assistantAssociationSummary_associationType,
+
+    -- * AssistantData
+    AssistantData (..),
+    newAssistantData,
+    assistantData_description,
+    assistantData_serverSideEncryptionConfiguration,
+    assistantData_tags,
+    assistantData_assistantArn,
+    assistantData_assistantId,
+    assistantData_name,
+    assistantData_status,
+    assistantData_type,
+
+    -- * AssistantSummary
+    AssistantSummary (..),
+    newAssistantSummary,
+    assistantSummary_description,
+    assistantSummary_serverSideEncryptionConfiguration,
+    assistantSummary_tags,
+    assistantSummary_assistantArn,
+    assistantSummary_assistantId,
+    assistantSummary_name,
+    assistantSummary_status,
+    assistantSummary_type,
+
+    -- * ContentData
+    ContentData (..),
+    newContentData,
+    contentData_linkOutUri,
+    contentData_tags,
+    contentData_contentArn,
+    contentData_contentId,
+    contentData_contentType,
+    contentData_knowledgeBaseArn,
+    contentData_knowledgeBaseId,
+    contentData_metadata,
+    contentData_name,
+    contentData_revisionId,
+    contentData_status,
+    contentData_title,
+    contentData_url,
+    contentData_urlExpiry,
+
+    -- * ContentReference
+    ContentReference (..),
+    newContentReference,
+    contentReference_contentArn,
+    contentReference_contentId,
+    contentReference_knowledgeBaseArn,
+    contentReference_knowledgeBaseId,
+
+    -- * ContentSummary
+    ContentSummary (..),
+    newContentSummary,
+    contentSummary_tags,
+    contentSummary_contentArn,
+    contentSummary_contentId,
+    contentSummary_contentType,
+    contentSummary_knowledgeBaseArn,
+    contentSummary_knowledgeBaseId,
+    contentSummary_metadata,
+    contentSummary_name,
+    contentSummary_revisionId,
+    contentSummary_status,
+    contentSummary_title,
+
+    -- * Document
+    Document (..),
+    newDocument,
+    document_excerpt,
+    document_title,
+    document_contentReference,
+
+    -- * DocumentText
+    DocumentText (..),
+    newDocumentText,
+    documentText_highlights,
+    documentText_text,
+
+    -- * Filter
+    Filter (..),
+    newFilter,
+    filter_field,
+    filter_operator,
+    filter_value,
+
+    -- * Highlight
+    Highlight (..),
+    newHighlight,
+    highlight_beginOffsetInclusive,
+    highlight_endOffsetExclusive,
+
+    -- * KnowledgeBaseAssociationData
+    KnowledgeBaseAssociationData (..),
+    newKnowledgeBaseAssociationData,
+    knowledgeBaseAssociationData_knowledgeBaseArn,
+    knowledgeBaseAssociationData_knowledgeBaseId,
+
+    -- * KnowledgeBaseData
+    KnowledgeBaseData (..),
+    newKnowledgeBaseData,
+    knowledgeBaseData_description,
+    knowledgeBaseData_lastContentModificationTime,
+    knowledgeBaseData_renderingConfiguration,
+    knowledgeBaseData_serverSideEncryptionConfiguration,
+    knowledgeBaseData_sourceConfiguration,
+    knowledgeBaseData_tags,
+    knowledgeBaseData_knowledgeBaseArn,
+    knowledgeBaseData_knowledgeBaseId,
+    knowledgeBaseData_knowledgeBaseType,
+    knowledgeBaseData_name,
+    knowledgeBaseData_status,
+
+    -- * KnowledgeBaseSummary
+    KnowledgeBaseSummary (..),
+    newKnowledgeBaseSummary,
+    knowledgeBaseSummary_description,
+    knowledgeBaseSummary_renderingConfiguration,
+    knowledgeBaseSummary_serverSideEncryptionConfiguration,
+    knowledgeBaseSummary_sourceConfiguration,
+    knowledgeBaseSummary_tags,
+    knowledgeBaseSummary_knowledgeBaseArn,
+    knowledgeBaseSummary_knowledgeBaseId,
+    knowledgeBaseSummary_knowledgeBaseType,
+    knowledgeBaseSummary_name,
+    knowledgeBaseSummary_status,
+
+    -- * NotifyRecommendationsReceivedError
+    NotifyRecommendationsReceivedError (..),
+    newNotifyRecommendationsReceivedError,
+    notifyRecommendationsReceivedError_message,
+    notifyRecommendationsReceivedError_recommendationId,
+
+    -- * QueryRecommendationTriggerData
+    QueryRecommendationTriggerData (..),
+    newQueryRecommendationTriggerData,
+    queryRecommendationTriggerData_text,
+
+    -- * RecommendationData
+    RecommendationData (..),
+    newRecommendationData,
+    recommendationData_relevanceLevel,
+    recommendationData_relevanceScore,
+    recommendationData_type,
+    recommendationData_document,
+    recommendationData_recommendationId,
+
+    -- * RecommendationTrigger
+    RecommendationTrigger (..),
+    newRecommendationTrigger,
+    recommendationTrigger_data,
+    recommendationTrigger_id,
+    recommendationTrigger_recommendationIds,
+    recommendationTrigger_source,
+    recommendationTrigger_type,
+
+    -- * RecommendationTriggerData
+    RecommendationTriggerData (..),
+    newRecommendationTriggerData,
+    recommendationTriggerData_query,
+
+    -- * RenderingConfiguration
+    RenderingConfiguration (..),
+    newRenderingConfiguration,
+    renderingConfiguration_templateUri,
+
+    -- * ResultData
+    ResultData (..),
+    newResultData,
+    resultData_relevanceScore,
+    resultData_document,
+    resultData_resultId,
+
+    -- * SearchExpression
+    SearchExpression (..),
+    newSearchExpression,
+    searchExpression_filters,
+
+    -- * ServerSideEncryptionConfiguration
+    ServerSideEncryptionConfiguration (..),
+    newServerSideEncryptionConfiguration,
+    serverSideEncryptionConfiguration_kmsKeyId,
+
+    -- * SessionData
+    SessionData (..),
+    newSessionData,
+    sessionData_description,
+    sessionData_tags,
+    sessionData_name,
+    sessionData_sessionArn,
+    sessionData_sessionId,
+
+    -- * SessionSummary
+    SessionSummary (..),
+    newSessionSummary,
+    sessionSummary_assistantArn,
+    sessionSummary_assistantId,
+    sessionSummary_sessionArn,
+    sessionSummary_sessionId,
+
+    -- * SourceConfiguration
+    SourceConfiguration (..),
+    newSourceConfiguration,
+    sourceConfiguration_appIntegrations,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+import Amazonka.Wisdom.Types.AppIntegrationsConfiguration
+import Amazonka.Wisdom.Types.AssistantAssociationData
+import Amazonka.Wisdom.Types.AssistantAssociationInputData
+import Amazonka.Wisdom.Types.AssistantAssociationOutputData
+import Amazonka.Wisdom.Types.AssistantAssociationSummary
+import Amazonka.Wisdom.Types.AssistantData
+import Amazonka.Wisdom.Types.AssistantStatus
+import Amazonka.Wisdom.Types.AssistantSummary
+import Amazonka.Wisdom.Types.AssistantType
+import Amazonka.Wisdom.Types.AssociationType
+import Amazonka.Wisdom.Types.ContentData
+import Amazonka.Wisdom.Types.ContentReference
+import Amazonka.Wisdom.Types.ContentStatus
+import Amazonka.Wisdom.Types.ContentSummary
+import Amazonka.Wisdom.Types.Document
+import Amazonka.Wisdom.Types.DocumentText
+import Amazonka.Wisdom.Types.Filter
+import Amazonka.Wisdom.Types.FilterField
+import Amazonka.Wisdom.Types.FilterOperator
+import Amazonka.Wisdom.Types.Highlight
+import Amazonka.Wisdom.Types.KnowledgeBaseAssociationData
+import Amazonka.Wisdom.Types.KnowledgeBaseData
+import Amazonka.Wisdom.Types.KnowledgeBaseStatus
+import Amazonka.Wisdom.Types.KnowledgeBaseSummary
+import Amazonka.Wisdom.Types.KnowledgeBaseType
+import Amazonka.Wisdom.Types.NotifyRecommendationsReceivedError
+import Amazonka.Wisdom.Types.QueryRecommendationTriggerData
+import Amazonka.Wisdom.Types.RecommendationData
+import Amazonka.Wisdom.Types.RecommendationSourceType
+import Amazonka.Wisdom.Types.RecommendationTrigger
+import Amazonka.Wisdom.Types.RecommendationTriggerData
+import Amazonka.Wisdom.Types.RecommendationTriggerType
+import Amazonka.Wisdom.Types.RecommendationType
+import Amazonka.Wisdom.Types.RelevanceLevel
+import Amazonka.Wisdom.Types.RenderingConfiguration
+import Amazonka.Wisdom.Types.ResultData
+import Amazonka.Wisdom.Types.SearchExpression
+import Amazonka.Wisdom.Types.ServerSideEncryptionConfiguration
+import Amazonka.Wisdom.Types.SessionData
+import Amazonka.Wisdom.Types.SessionSummary
+import Amazonka.Wisdom.Types.SourceConfiguration
+
+-- | API version @2020-10-19@ of the Amazon Connect Wisdom Service SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "Wisdom",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "wisdom",
+      Core.signingName = "wisdom",
+      Core.version = "2020-10-19",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "Wisdom",
+      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 do not have sufficient access to perform this action.
+_AccessDeniedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccessDeniedException =
+  Core._MatchServiceError
+    defaultService
+    "AccessDeniedException"
+    Prelude.. Core.hasStatus 403
+
+-- | The request could not be processed because of conflict in the current
+-- state of the resource. For example, if you\'re using a @Create@ API
+-- (such as @CreateAssistant@) that accepts name, a conflicting resource
+-- (usually with the same name) is being created or mutated.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+    Prelude.. Core.hasStatus 409
+
+-- | The provided @revisionId@ does not match, indicating the content has
+-- been modified since it was last read.
+_PreconditionFailedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_PreconditionFailedException =
+  Core._MatchServiceError
+    defaultService
+    "PreconditionFailedException"
+    Prelude.. Core.hasStatus 412
+
+-- | The specified resource does not exist.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | You\'ve exceeded your service quota. To perform the requested action,
+-- remove some of the relevant resources, or use service quotas to request
+-- a service quota increase.
+_ServiceQuotaExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceQuotaExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceQuotaExceededException"
+    Prelude.. Core.hasStatus 402
+
+-- | Amazon Connect Wisdom throws this exception if you have too many tags in
+-- your tag set.
+_TooManyTagsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_TooManyTagsException =
+  Core._MatchServiceError
+    defaultService
+    "TooManyTagsException"
+    Prelude.. Core.hasStatus 400
+
+-- | The input fails to satisfy the constraints specified by a service.
+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ValidationException =
+  Core._MatchServiceError
+    defaultService
+    "ValidationException"
+    Prelude.. Core.hasStatus 400
diff --git a/gen/Amazonka/Wisdom/Types/AppIntegrationsConfiguration.hs b/gen/Amazonka/Wisdom/Types/AppIntegrationsConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/AppIntegrationsConfiguration.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.Wisdom.Types.AppIntegrationsConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.AppIntegrationsConfiguration 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
+
+-- | Configuration information for Amazon AppIntegrations to automatically
+-- ingest content.
+--
+-- /See:/ 'newAppIntegrationsConfiguration' smart constructor.
+data AppIntegrationsConfiguration = AppIntegrationsConfiguration'
+  { -- | The Amazon Resource Name (ARN) of the AppIntegrations DataIntegration to
+    -- use for ingesting content.
+    appIntegrationArn :: Prelude.Text,
+    -- | The fields from the source that are made available to your agents in
+    -- Wisdom.
+    --
+    -- -   For
+    --     <https://developer.salesforce.com/docs/atlas.en-us.knowledge_dev.meta/knowledge_dev/sforce_api_objects_knowledge__kav.htm Salesforce>,
+    --     you must include at least @Id@, @ArticleNumber@, @VersionNumber@,
+    --     @Title@, @PublishStatus@, and @IsDeleted@.
+    --
+    -- -   For
+    --     <https://developer.servicenow.com/dev.do#!/reference/api/rome/rest/knowledge-management-api ServiceNow>,
+    --     you must include at least @number@, @short_description@,
+    --     @sys_mod_count@, @workflow_state@, and @active@.
+    --
+    -- Make sure to include additional fields. These fields are indexed and
+    -- used to source recommendations.
+    objectFields :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AppIntegrationsConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appIntegrationArn', 'appIntegrationsConfiguration_appIntegrationArn' - The Amazon Resource Name (ARN) of the AppIntegrations DataIntegration to
+-- use for ingesting content.
+--
+-- 'objectFields', 'appIntegrationsConfiguration_objectFields' - The fields from the source that are made available to your agents in
+-- Wisdom.
+--
+-- -   For
+--     <https://developer.salesforce.com/docs/atlas.en-us.knowledge_dev.meta/knowledge_dev/sforce_api_objects_knowledge__kav.htm Salesforce>,
+--     you must include at least @Id@, @ArticleNumber@, @VersionNumber@,
+--     @Title@, @PublishStatus@, and @IsDeleted@.
+--
+-- -   For
+--     <https://developer.servicenow.com/dev.do#!/reference/api/rome/rest/knowledge-management-api ServiceNow>,
+--     you must include at least @number@, @short_description@,
+--     @sys_mod_count@, @workflow_state@, and @active@.
+--
+-- Make sure to include additional fields. These fields are indexed and
+-- used to source recommendations.
+newAppIntegrationsConfiguration ::
+  -- | 'appIntegrationArn'
+  Prelude.Text ->
+  -- | 'objectFields'
+  Prelude.NonEmpty Prelude.Text ->
+  AppIntegrationsConfiguration
+newAppIntegrationsConfiguration
+  pAppIntegrationArn_
+  pObjectFields_ =
+    AppIntegrationsConfiguration'
+      { appIntegrationArn =
+          pAppIntegrationArn_,
+        objectFields =
+          Lens.coerced Lens.# pObjectFields_
+      }
+
+-- | The Amazon Resource Name (ARN) of the AppIntegrations DataIntegration to
+-- use for ingesting content.
+appIntegrationsConfiguration_appIntegrationArn :: Lens.Lens' AppIntegrationsConfiguration Prelude.Text
+appIntegrationsConfiguration_appIntegrationArn = Lens.lens (\AppIntegrationsConfiguration' {appIntegrationArn} -> appIntegrationArn) (\s@AppIntegrationsConfiguration' {} a -> s {appIntegrationArn = a} :: AppIntegrationsConfiguration)
+
+-- | The fields from the source that are made available to your agents in
+-- Wisdom.
+--
+-- -   For
+--     <https://developer.salesforce.com/docs/atlas.en-us.knowledge_dev.meta/knowledge_dev/sforce_api_objects_knowledge__kav.htm Salesforce>,
+--     you must include at least @Id@, @ArticleNumber@, @VersionNumber@,
+--     @Title@, @PublishStatus@, and @IsDeleted@.
+--
+-- -   For
+--     <https://developer.servicenow.com/dev.do#!/reference/api/rome/rest/knowledge-management-api ServiceNow>,
+--     you must include at least @number@, @short_description@,
+--     @sys_mod_count@, @workflow_state@, and @active@.
+--
+-- Make sure to include additional fields. These fields are indexed and
+-- used to source recommendations.
+appIntegrationsConfiguration_objectFields :: Lens.Lens' AppIntegrationsConfiguration (Prelude.NonEmpty Prelude.Text)
+appIntegrationsConfiguration_objectFields = Lens.lens (\AppIntegrationsConfiguration' {objectFields} -> objectFields) (\s@AppIntegrationsConfiguration' {} a -> s {objectFields = a} :: AppIntegrationsConfiguration) Prelude.. Lens.coerced
+
+instance Data.FromJSON AppIntegrationsConfiguration where
+  parseJSON =
+    Data.withObject
+      "AppIntegrationsConfiguration"
+      ( \x ->
+          AppIntegrationsConfiguration'
+            Prelude.<$> (x Data..: "appIntegrationArn")
+            Prelude.<*> (x Data..: "objectFields")
+      )
+
+instance
+  Prelude.Hashable
+    AppIntegrationsConfiguration
+  where
+  hashWithSalt _salt AppIntegrationsConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` appIntegrationArn
+      `Prelude.hashWithSalt` objectFields
+
+instance Prelude.NFData AppIntegrationsConfiguration where
+  rnf AppIntegrationsConfiguration' {..} =
+    Prelude.rnf appIntegrationArn
+      `Prelude.seq` Prelude.rnf objectFields
+
+instance Data.ToJSON AppIntegrationsConfiguration where
+  toJSON AppIntegrationsConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("appIntegrationArn" Data..= appIntegrationArn),
+            Prelude.Just ("objectFields" Data..= objectFields)
+          ]
+      )
diff --git a/gen/Amazonka/Wisdom/Types/AssistantAssociationData.hs b/gen/Amazonka/Wisdom/Types/AssistantAssociationData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/AssistantAssociationData.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.Wisdom.Types.AssistantAssociationData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.AssistantAssociationData where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.Wisdom.Types.AssistantAssociationOutputData
+import Amazonka.Wisdom.Types.AssociationType
+
+-- | Information about the assistant association.
+--
+-- /See:/ 'newAssistantAssociationData' smart constructor.
+data AssistantAssociationData = AssistantAssociationData'
+  { -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The Amazon Resource Name (ARN) of the Wisdom assistant.
+    assistantArn :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the assistant association.
+    assistantAssociationArn :: Prelude.Text,
+    -- | The identifier of the assistant association.
+    assistantAssociationId :: Prelude.Text,
+    -- | The identifier of the Wisdom assistant.
+    assistantId :: Prelude.Text,
+    -- | A union type that currently has a single argument, the knowledge base
+    -- ID.
+    associationData :: AssistantAssociationOutputData,
+    -- | The type of association.
+    associationType :: AssociationType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssistantAssociationData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'assistantAssociationData_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'assistantArn', 'assistantAssociationData_assistantArn' - The Amazon Resource Name (ARN) of the Wisdom assistant.
+--
+-- 'assistantAssociationArn', 'assistantAssociationData_assistantAssociationArn' - The Amazon Resource Name (ARN) of the assistant association.
+--
+-- 'assistantAssociationId', 'assistantAssociationData_assistantAssociationId' - The identifier of the assistant association.
+--
+-- 'assistantId', 'assistantAssociationData_assistantId' - The identifier of the Wisdom assistant.
+--
+-- 'associationData', 'assistantAssociationData_associationData' - A union type that currently has a single argument, the knowledge base
+-- ID.
+--
+-- 'associationType', 'assistantAssociationData_associationType' - The type of association.
+newAssistantAssociationData ::
+  -- | 'assistantArn'
+  Prelude.Text ->
+  -- | 'assistantAssociationArn'
+  Prelude.Text ->
+  -- | 'assistantAssociationId'
+  Prelude.Text ->
+  -- | 'assistantId'
+  Prelude.Text ->
+  -- | 'associationData'
+  AssistantAssociationOutputData ->
+  -- | 'associationType'
+  AssociationType ->
+  AssistantAssociationData
+newAssistantAssociationData
+  pAssistantArn_
+  pAssistantAssociationArn_
+  pAssistantAssociationId_
+  pAssistantId_
+  pAssociationData_
+  pAssociationType_ =
+    AssistantAssociationData'
+      { tags = Prelude.Nothing,
+        assistantArn = pAssistantArn_,
+        assistantAssociationArn =
+          pAssistantAssociationArn_,
+        assistantAssociationId = pAssistantAssociationId_,
+        assistantId = pAssistantId_,
+        associationData = pAssociationData_,
+        associationType = pAssociationType_
+      }
+
+-- | The tags used to organize, track, or control access for this resource.
+assistantAssociationData_tags :: Lens.Lens' AssistantAssociationData (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+assistantAssociationData_tags = Lens.lens (\AssistantAssociationData' {tags} -> tags) (\s@AssistantAssociationData' {} a -> s {tags = a} :: AssistantAssociationData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the Wisdom assistant.
+assistantAssociationData_assistantArn :: Lens.Lens' AssistantAssociationData Prelude.Text
+assistantAssociationData_assistantArn = Lens.lens (\AssistantAssociationData' {assistantArn} -> assistantArn) (\s@AssistantAssociationData' {} a -> s {assistantArn = a} :: AssistantAssociationData)
+
+-- | The Amazon Resource Name (ARN) of the assistant association.
+assistantAssociationData_assistantAssociationArn :: Lens.Lens' AssistantAssociationData Prelude.Text
+assistantAssociationData_assistantAssociationArn = Lens.lens (\AssistantAssociationData' {assistantAssociationArn} -> assistantAssociationArn) (\s@AssistantAssociationData' {} a -> s {assistantAssociationArn = a} :: AssistantAssociationData)
+
+-- | The identifier of the assistant association.
+assistantAssociationData_assistantAssociationId :: Lens.Lens' AssistantAssociationData Prelude.Text
+assistantAssociationData_assistantAssociationId = Lens.lens (\AssistantAssociationData' {assistantAssociationId} -> assistantAssociationId) (\s@AssistantAssociationData' {} a -> s {assistantAssociationId = a} :: AssistantAssociationData)
+
+-- | The identifier of the Wisdom assistant.
+assistantAssociationData_assistantId :: Lens.Lens' AssistantAssociationData Prelude.Text
+assistantAssociationData_assistantId = Lens.lens (\AssistantAssociationData' {assistantId} -> assistantId) (\s@AssistantAssociationData' {} a -> s {assistantId = a} :: AssistantAssociationData)
+
+-- | A union type that currently has a single argument, the knowledge base
+-- ID.
+assistantAssociationData_associationData :: Lens.Lens' AssistantAssociationData AssistantAssociationOutputData
+assistantAssociationData_associationData = Lens.lens (\AssistantAssociationData' {associationData} -> associationData) (\s@AssistantAssociationData' {} a -> s {associationData = a} :: AssistantAssociationData)
+
+-- | The type of association.
+assistantAssociationData_associationType :: Lens.Lens' AssistantAssociationData AssociationType
+assistantAssociationData_associationType = Lens.lens (\AssistantAssociationData' {associationType} -> associationType) (\s@AssistantAssociationData' {} a -> s {associationType = a} :: AssistantAssociationData)
+
+instance Data.FromJSON AssistantAssociationData where
+  parseJSON =
+    Data.withObject
+      "AssistantAssociationData"
+      ( \x ->
+          AssistantAssociationData'
+            Prelude.<$> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "assistantArn")
+            Prelude.<*> (x Data..: "assistantAssociationArn")
+            Prelude.<*> (x Data..: "assistantAssociationId")
+            Prelude.<*> (x Data..: "assistantId")
+            Prelude.<*> (x Data..: "associationData")
+            Prelude.<*> (x Data..: "associationType")
+      )
+
+instance Prelude.Hashable AssistantAssociationData where
+  hashWithSalt _salt AssistantAssociationData' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` assistantArn
+      `Prelude.hashWithSalt` assistantAssociationArn
+      `Prelude.hashWithSalt` assistantAssociationId
+      `Prelude.hashWithSalt` assistantId
+      `Prelude.hashWithSalt` associationData
+      `Prelude.hashWithSalt` associationType
+
+instance Prelude.NFData AssistantAssociationData where
+  rnf AssistantAssociationData' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf assistantArn
+      `Prelude.seq` Prelude.rnf assistantAssociationArn
+      `Prelude.seq` Prelude.rnf assistantAssociationId
+      `Prelude.seq` Prelude.rnf assistantId
+      `Prelude.seq` Prelude.rnf associationData
+      `Prelude.seq` Prelude.rnf associationType
diff --git a/gen/Amazonka/Wisdom/Types/AssistantAssociationInputData.hs b/gen/Amazonka/Wisdom/Types/AssistantAssociationInputData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/AssistantAssociationInputData.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.Wisdom.Types.AssistantAssociationInputData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.AssistantAssociationInputData 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 data that is input into Wisdom as a result of the assistant
+-- association.
+--
+-- /See:/ 'newAssistantAssociationInputData' smart constructor.
+data AssistantAssociationInputData = AssistantAssociationInputData'
+  { -- | The identifier of the knowledge base.
+    knowledgeBaseId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssistantAssociationInputData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'knowledgeBaseId', 'assistantAssociationInputData_knowledgeBaseId' - The identifier of the knowledge base.
+newAssistantAssociationInputData ::
+  AssistantAssociationInputData
+newAssistantAssociationInputData =
+  AssistantAssociationInputData'
+    { knowledgeBaseId =
+        Prelude.Nothing
+    }
+
+-- | The identifier of the knowledge base.
+assistantAssociationInputData_knowledgeBaseId :: Lens.Lens' AssistantAssociationInputData (Prelude.Maybe Prelude.Text)
+assistantAssociationInputData_knowledgeBaseId = Lens.lens (\AssistantAssociationInputData' {knowledgeBaseId} -> knowledgeBaseId) (\s@AssistantAssociationInputData' {} a -> s {knowledgeBaseId = a} :: AssistantAssociationInputData)
+
+instance
+  Prelude.Hashable
+    AssistantAssociationInputData
+  where
+  hashWithSalt _salt AssistantAssociationInputData' {..} =
+    _salt `Prelude.hashWithSalt` knowledgeBaseId
+
+instance Prelude.NFData AssistantAssociationInputData where
+  rnf AssistantAssociationInputData' {..} =
+    Prelude.rnf knowledgeBaseId
+
+instance Data.ToJSON AssistantAssociationInputData where
+  toJSON AssistantAssociationInputData' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("knowledgeBaseId" Data..=)
+              Prelude.<$> knowledgeBaseId
+          ]
+      )
diff --git a/gen/Amazonka/Wisdom/Types/AssistantAssociationOutputData.hs b/gen/Amazonka/Wisdom/Types/AssistantAssociationOutputData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/AssistantAssociationOutputData.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Wisdom.Types.AssistantAssociationOutputData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.AssistantAssociationOutputData where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.Wisdom.Types.KnowledgeBaseAssociationData
+
+-- | The data that is output as a result of the assistant association.
+--
+-- /See:/ 'newAssistantAssociationOutputData' smart constructor.
+data AssistantAssociationOutputData = AssistantAssociationOutputData'
+  { -- | The knowledge base where output data is sent.
+    knowledgeBaseAssociation :: Prelude.Maybe KnowledgeBaseAssociationData
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssistantAssociationOutputData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'knowledgeBaseAssociation', 'assistantAssociationOutputData_knowledgeBaseAssociation' - The knowledge base where output data is sent.
+newAssistantAssociationOutputData ::
+  AssistantAssociationOutputData
+newAssistantAssociationOutputData =
+  AssistantAssociationOutputData'
+    { knowledgeBaseAssociation =
+        Prelude.Nothing
+    }
+
+-- | The knowledge base where output data is sent.
+assistantAssociationOutputData_knowledgeBaseAssociation :: Lens.Lens' AssistantAssociationOutputData (Prelude.Maybe KnowledgeBaseAssociationData)
+assistantAssociationOutputData_knowledgeBaseAssociation = Lens.lens (\AssistantAssociationOutputData' {knowledgeBaseAssociation} -> knowledgeBaseAssociation) (\s@AssistantAssociationOutputData' {} a -> s {knowledgeBaseAssociation = a} :: AssistantAssociationOutputData)
+
+instance Data.FromJSON AssistantAssociationOutputData where
+  parseJSON =
+    Data.withObject
+      "AssistantAssociationOutputData"
+      ( \x ->
+          AssistantAssociationOutputData'
+            Prelude.<$> (x Data..:? "knowledgeBaseAssociation")
+      )
+
+instance
+  Prelude.Hashable
+    AssistantAssociationOutputData
+  where
+  hashWithSalt
+    _salt
+    AssistantAssociationOutputData' {..} =
+      _salt
+        `Prelude.hashWithSalt` knowledgeBaseAssociation
+
+instance
+  Prelude.NFData
+    AssistantAssociationOutputData
+  where
+  rnf AssistantAssociationOutputData' {..} =
+    Prelude.rnf knowledgeBaseAssociation
diff --git a/gen/Amazonka/Wisdom/Types/AssistantAssociationSummary.hs b/gen/Amazonka/Wisdom/Types/AssistantAssociationSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/AssistantAssociationSummary.hs
@@ -0,0 +1,167 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Wisdom.Types.AssistantAssociationSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.AssistantAssociationSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.Wisdom.Types.AssistantAssociationOutputData
+import Amazonka.Wisdom.Types.AssociationType
+
+-- | Summary information about the assistant association.
+--
+-- /See:/ 'newAssistantAssociationSummary' smart constructor.
+data AssistantAssociationSummary = AssistantAssociationSummary'
+  { -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The Amazon Resource Name (ARN) of the Wisdom assistant.
+    assistantArn :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the assistant association.
+    assistantAssociationArn :: Prelude.Text,
+    -- | The identifier of the assistant association.
+    assistantAssociationId :: Prelude.Text,
+    -- | The identifier of the Wisdom assistant.
+    assistantId :: Prelude.Text,
+    -- | The association data.
+    associationData :: AssistantAssociationOutputData,
+    -- | The type of association.
+    associationType :: AssociationType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssistantAssociationSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'assistantAssociationSummary_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'assistantArn', 'assistantAssociationSummary_assistantArn' - The Amazon Resource Name (ARN) of the Wisdom assistant.
+--
+-- 'assistantAssociationArn', 'assistantAssociationSummary_assistantAssociationArn' - The Amazon Resource Name (ARN) of the assistant association.
+--
+-- 'assistantAssociationId', 'assistantAssociationSummary_assistantAssociationId' - The identifier of the assistant association.
+--
+-- 'assistantId', 'assistantAssociationSummary_assistantId' - The identifier of the Wisdom assistant.
+--
+-- 'associationData', 'assistantAssociationSummary_associationData' - The association data.
+--
+-- 'associationType', 'assistantAssociationSummary_associationType' - The type of association.
+newAssistantAssociationSummary ::
+  -- | 'assistantArn'
+  Prelude.Text ->
+  -- | 'assistantAssociationArn'
+  Prelude.Text ->
+  -- | 'assistantAssociationId'
+  Prelude.Text ->
+  -- | 'assistantId'
+  Prelude.Text ->
+  -- | 'associationData'
+  AssistantAssociationOutputData ->
+  -- | 'associationType'
+  AssociationType ->
+  AssistantAssociationSummary
+newAssistantAssociationSummary
+  pAssistantArn_
+  pAssistantAssociationArn_
+  pAssistantAssociationId_
+  pAssistantId_
+  pAssociationData_
+  pAssociationType_ =
+    AssistantAssociationSummary'
+      { tags =
+          Prelude.Nothing,
+        assistantArn = pAssistantArn_,
+        assistantAssociationArn =
+          pAssistantAssociationArn_,
+        assistantAssociationId =
+          pAssistantAssociationId_,
+        assistantId = pAssistantId_,
+        associationData = pAssociationData_,
+        associationType = pAssociationType_
+      }
+
+-- | The tags used to organize, track, or control access for this resource.
+assistantAssociationSummary_tags :: Lens.Lens' AssistantAssociationSummary (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+assistantAssociationSummary_tags = Lens.lens (\AssistantAssociationSummary' {tags} -> tags) (\s@AssistantAssociationSummary' {} a -> s {tags = a} :: AssistantAssociationSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the Wisdom assistant.
+assistantAssociationSummary_assistantArn :: Lens.Lens' AssistantAssociationSummary Prelude.Text
+assistantAssociationSummary_assistantArn = Lens.lens (\AssistantAssociationSummary' {assistantArn} -> assistantArn) (\s@AssistantAssociationSummary' {} a -> s {assistantArn = a} :: AssistantAssociationSummary)
+
+-- | The Amazon Resource Name (ARN) of the assistant association.
+assistantAssociationSummary_assistantAssociationArn :: Lens.Lens' AssistantAssociationSummary Prelude.Text
+assistantAssociationSummary_assistantAssociationArn = Lens.lens (\AssistantAssociationSummary' {assistantAssociationArn} -> assistantAssociationArn) (\s@AssistantAssociationSummary' {} a -> s {assistantAssociationArn = a} :: AssistantAssociationSummary)
+
+-- | The identifier of the assistant association.
+assistantAssociationSummary_assistantAssociationId :: Lens.Lens' AssistantAssociationSummary Prelude.Text
+assistantAssociationSummary_assistantAssociationId = Lens.lens (\AssistantAssociationSummary' {assistantAssociationId} -> assistantAssociationId) (\s@AssistantAssociationSummary' {} a -> s {assistantAssociationId = a} :: AssistantAssociationSummary)
+
+-- | The identifier of the Wisdom assistant.
+assistantAssociationSummary_assistantId :: Lens.Lens' AssistantAssociationSummary Prelude.Text
+assistantAssociationSummary_assistantId = Lens.lens (\AssistantAssociationSummary' {assistantId} -> assistantId) (\s@AssistantAssociationSummary' {} a -> s {assistantId = a} :: AssistantAssociationSummary)
+
+-- | The association data.
+assistantAssociationSummary_associationData :: Lens.Lens' AssistantAssociationSummary AssistantAssociationOutputData
+assistantAssociationSummary_associationData = Lens.lens (\AssistantAssociationSummary' {associationData} -> associationData) (\s@AssistantAssociationSummary' {} a -> s {associationData = a} :: AssistantAssociationSummary)
+
+-- | The type of association.
+assistantAssociationSummary_associationType :: Lens.Lens' AssistantAssociationSummary AssociationType
+assistantAssociationSummary_associationType = Lens.lens (\AssistantAssociationSummary' {associationType} -> associationType) (\s@AssistantAssociationSummary' {} a -> s {associationType = a} :: AssistantAssociationSummary)
+
+instance Data.FromJSON AssistantAssociationSummary where
+  parseJSON =
+    Data.withObject
+      "AssistantAssociationSummary"
+      ( \x ->
+          AssistantAssociationSummary'
+            Prelude.<$> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "assistantArn")
+            Prelude.<*> (x Data..: "assistantAssociationArn")
+            Prelude.<*> (x Data..: "assistantAssociationId")
+            Prelude.<*> (x Data..: "assistantId")
+            Prelude.<*> (x Data..: "associationData")
+            Prelude.<*> (x Data..: "associationType")
+      )
+
+instance Prelude.Hashable AssistantAssociationSummary where
+  hashWithSalt _salt AssistantAssociationSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` assistantArn
+      `Prelude.hashWithSalt` assistantAssociationArn
+      `Prelude.hashWithSalt` assistantAssociationId
+      `Prelude.hashWithSalt` assistantId
+      `Prelude.hashWithSalt` associationData
+      `Prelude.hashWithSalt` associationType
+
+instance Prelude.NFData AssistantAssociationSummary where
+  rnf AssistantAssociationSummary' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf assistantArn
+      `Prelude.seq` Prelude.rnf assistantAssociationArn
+      `Prelude.seq` Prelude.rnf assistantAssociationId
+      `Prelude.seq` Prelude.rnf assistantId
+      `Prelude.seq` Prelude.rnf associationData
+      `Prelude.seq` Prelude.rnf associationType
diff --git a/gen/Amazonka/Wisdom/Types/AssistantData.hs b/gen/Amazonka/Wisdom/Types/AssistantData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/AssistantData.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Wisdom.Types.AssistantData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.AssistantData where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.Wisdom.Types.AssistantStatus
+import Amazonka.Wisdom.Types.AssistantType
+import Amazonka.Wisdom.Types.ServerSideEncryptionConfiguration
+
+-- | The assistant data.
+--
+-- /See:/ 'newAssistantData' smart constructor.
+data AssistantData = AssistantData'
+  { -- | The description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The KMS key used for encryption.
+    serverSideEncryptionConfiguration :: Prelude.Maybe ServerSideEncryptionConfiguration,
+    -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The Amazon Resource Name (ARN) of the Wisdom assistant.
+    assistantArn :: Prelude.Text,
+    -- | The identifier of the Wisdom assistant.
+    assistantId :: Prelude.Text,
+    -- | The name.
+    name :: Prelude.Text,
+    -- | The status of the assistant.
+    status :: AssistantStatus,
+    -- | The type of assistant.
+    type' :: AssistantType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssistantData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'assistantData_description' - The description.
+--
+-- 'serverSideEncryptionConfiguration', 'assistantData_serverSideEncryptionConfiguration' - The KMS key used for encryption.
+--
+-- 'tags', 'assistantData_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'assistantArn', 'assistantData_assistantArn' - The Amazon Resource Name (ARN) of the Wisdom assistant.
+--
+-- 'assistantId', 'assistantData_assistantId' - The identifier of the Wisdom assistant.
+--
+-- 'name', 'assistantData_name' - The name.
+--
+-- 'status', 'assistantData_status' - The status of the assistant.
+--
+-- 'type'', 'assistantData_type' - The type of assistant.
+newAssistantData ::
+  -- | 'assistantArn'
+  Prelude.Text ->
+  -- | 'assistantId'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'status'
+  AssistantStatus ->
+  -- | 'type''
+  AssistantType ->
+  AssistantData
+newAssistantData
+  pAssistantArn_
+  pAssistantId_
+  pName_
+  pStatus_
+  pType_ =
+    AssistantData'
+      { description = Prelude.Nothing,
+        serverSideEncryptionConfiguration = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        assistantArn = pAssistantArn_,
+        assistantId = pAssistantId_,
+        name = pName_,
+        status = pStatus_,
+        type' = pType_
+      }
+
+-- | The description.
+assistantData_description :: Lens.Lens' AssistantData (Prelude.Maybe Prelude.Text)
+assistantData_description = Lens.lens (\AssistantData' {description} -> description) (\s@AssistantData' {} a -> s {description = a} :: AssistantData)
+
+-- | The KMS key used for encryption.
+assistantData_serverSideEncryptionConfiguration :: Lens.Lens' AssistantData (Prelude.Maybe ServerSideEncryptionConfiguration)
+assistantData_serverSideEncryptionConfiguration = Lens.lens (\AssistantData' {serverSideEncryptionConfiguration} -> serverSideEncryptionConfiguration) (\s@AssistantData' {} a -> s {serverSideEncryptionConfiguration = a} :: AssistantData)
+
+-- | The tags used to organize, track, or control access for this resource.
+assistantData_tags :: Lens.Lens' AssistantData (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+assistantData_tags = Lens.lens (\AssistantData' {tags} -> tags) (\s@AssistantData' {} a -> s {tags = a} :: AssistantData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the Wisdom assistant.
+assistantData_assistantArn :: Lens.Lens' AssistantData Prelude.Text
+assistantData_assistantArn = Lens.lens (\AssistantData' {assistantArn} -> assistantArn) (\s@AssistantData' {} a -> s {assistantArn = a} :: AssistantData)
+
+-- | The identifier of the Wisdom assistant.
+assistantData_assistantId :: Lens.Lens' AssistantData Prelude.Text
+assistantData_assistantId = Lens.lens (\AssistantData' {assistantId} -> assistantId) (\s@AssistantData' {} a -> s {assistantId = a} :: AssistantData)
+
+-- | The name.
+assistantData_name :: Lens.Lens' AssistantData Prelude.Text
+assistantData_name = Lens.lens (\AssistantData' {name} -> name) (\s@AssistantData' {} a -> s {name = a} :: AssistantData)
+
+-- | The status of the assistant.
+assistantData_status :: Lens.Lens' AssistantData AssistantStatus
+assistantData_status = Lens.lens (\AssistantData' {status} -> status) (\s@AssistantData' {} a -> s {status = a} :: AssistantData)
+
+-- | The type of assistant.
+assistantData_type :: Lens.Lens' AssistantData AssistantType
+assistantData_type = Lens.lens (\AssistantData' {type'} -> type') (\s@AssistantData' {} a -> s {type' = a} :: AssistantData)
+
+instance Data.FromJSON AssistantData where
+  parseJSON =
+    Data.withObject
+      "AssistantData"
+      ( \x ->
+          AssistantData'
+            Prelude.<$> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "serverSideEncryptionConfiguration")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "assistantArn")
+            Prelude.<*> (x Data..: "assistantId")
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..: "status")
+            Prelude.<*> (x Data..: "type")
+      )
+
+instance Prelude.Hashable AssistantData where
+  hashWithSalt _salt AssistantData' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` serverSideEncryptionConfiguration
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` assistantArn
+      `Prelude.hashWithSalt` assistantId
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData AssistantData where
+  rnf AssistantData' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf serverSideEncryptionConfiguration
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf assistantArn
+      `Prelude.seq` Prelude.rnf assistantId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/Wisdom/Types/AssistantStatus.hs b/gen/Amazonka/Wisdom/Types/AssistantStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/AssistantStatus.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.Wisdom.Types.AssistantStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.AssistantStatus
+  ( AssistantStatus
+      ( ..,
+        AssistantStatus_ACTIVE,
+        AssistantStatus_CREATE_FAILED,
+        AssistantStatus_CREATE_IN_PROGRESS,
+        AssistantStatus_DELETED,
+        AssistantStatus_DELETE_FAILED,
+        AssistantStatus_DELETE_IN_PROGRESS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AssistantStatus = AssistantStatus'
+  { fromAssistantStatus ::
+      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 AssistantStatus_ACTIVE :: AssistantStatus
+pattern AssistantStatus_ACTIVE = AssistantStatus' "ACTIVE"
+
+pattern AssistantStatus_CREATE_FAILED :: AssistantStatus
+pattern AssistantStatus_CREATE_FAILED = AssistantStatus' "CREATE_FAILED"
+
+pattern AssistantStatus_CREATE_IN_PROGRESS :: AssistantStatus
+pattern AssistantStatus_CREATE_IN_PROGRESS = AssistantStatus' "CREATE_IN_PROGRESS"
+
+pattern AssistantStatus_DELETED :: AssistantStatus
+pattern AssistantStatus_DELETED = AssistantStatus' "DELETED"
+
+pattern AssistantStatus_DELETE_FAILED :: AssistantStatus
+pattern AssistantStatus_DELETE_FAILED = AssistantStatus' "DELETE_FAILED"
+
+pattern AssistantStatus_DELETE_IN_PROGRESS :: AssistantStatus
+pattern AssistantStatus_DELETE_IN_PROGRESS = AssistantStatus' "DELETE_IN_PROGRESS"
+
+{-# COMPLETE
+  AssistantStatus_ACTIVE,
+  AssistantStatus_CREATE_FAILED,
+  AssistantStatus_CREATE_IN_PROGRESS,
+  AssistantStatus_DELETED,
+  AssistantStatus_DELETE_FAILED,
+  AssistantStatus_DELETE_IN_PROGRESS,
+  AssistantStatus'
+  #-}
diff --git a/gen/Amazonka/Wisdom/Types/AssistantSummary.hs b/gen/Amazonka/Wisdom/Types/AssistantSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/AssistantSummary.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Wisdom.Types.AssistantSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.AssistantSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.Wisdom.Types.AssistantStatus
+import Amazonka.Wisdom.Types.AssistantType
+import Amazonka.Wisdom.Types.ServerSideEncryptionConfiguration
+
+-- | Summary information about the assistant.
+--
+-- /See:/ 'newAssistantSummary' smart constructor.
+data AssistantSummary = AssistantSummary'
+  { -- | The description of the assistant.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The KMS key used for encryption.
+    serverSideEncryptionConfiguration :: Prelude.Maybe ServerSideEncryptionConfiguration,
+    -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The Amazon Resource Name (ARN) of the Wisdom assistant.
+    assistantArn :: Prelude.Text,
+    -- | The identifier of the Wisdom assistant.
+    assistantId :: Prelude.Text,
+    -- | The name of the assistant.
+    name :: Prelude.Text,
+    -- | The status of the assistant.
+    status :: AssistantStatus,
+    -- | The type of the assistant.
+    type' :: AssistantType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssistantSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'assistantSummary_description' - The description of the assistant.
+--
+-- 'serverSideEncryptionConfiguration', 'assistantSummary_serverSideEncryptionConfiguration' - The KMS key used for encryption.
+--
+-- 'tags', 'assistantSummary_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'assistantArn', 'assistantSummary_assistantArn' - The Amazon Resource Name (ARN) of the Wisdom assistant.
+--
+-- 'assistantId', 'assistantSummary_assistantId' - The identifier of the Wisdom assistant.
+--
+-- 'name', 'assistantSummary_name' - The name of the assistant.
+--
+-- 'status', 'assistantSummary_status' - The status of the assistant.
+--
+-- 'type'', 'assistantSummary_type' - The type of the assistant.
+newAssistantSummary ::
+  -- | 'assistantArn'
+  Prelude.Text ->
+  -- | 'assistantId'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'status'
+  AssistantStatus ->
+  -- | 'type''
+  AssistantType ->
+  AssistantSummary
+newAssistantSummary
+  pAssistantArn_
+  pAssistantId_
+  pName_
+  pStatus_
+  pType_ =
+    AssistantSummary'
+      { description = Prelude.Nothing,
+        serverSideEncryptionConfiguration = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        assistantArn = pAssistantArn_,
+        assistantId = pAssistantId_,
+        name = pName_,
+        status = pStatus_,
+        type' = pType_
+      }
+
+-- | The description of the assistant.
+assistantSummary_description :: Lens.Lens' AssistantSummary (Prelude.Maybe Prelude.Text)
+assistantSummary_description = Lens.lens (\AssistantSummary' {description} -> description) (\s@AssistantSummary' {} a -> s {description = a} :: AssistantSummary)
+
+-- | The KMS key used for encryption.
+assistantSummary_serverSideEncryptionConfiguration :: Lens.Lens' AssistantSummary (Prelude.Maybe ServerSideEncryptionConfiguration)
+assistantSummary_serverSideEncryptionConfiguration = Lens.lens (\AssistantSummary' {serverSideEncryptionConfiguration} -> serverSideEncryptionConfiguration) (\s@AssistantSummary' {} a -> s {serverSideEncryptionConfiguration = a} :: AssistantSummary)
+
+-- | The tags used to organize, track, or control access for this resource.
+assistantSummary_tags :: Lens.Lens' AssistantSummary (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+assistantSummary_tags = Lens.lens (\AssistantSummary' {tags} -> tags) (\s@AssistantSummary' {} a -> s {tags = a} :: AssistantSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the Wisdom assistant.
+assistantSummary_assistantArn :: Lens.Lens' AssistantSummary Prelude.Text
+assistantSummary_assistantArn = Lens.lens (\AssistantSummary' {assistantArn} -> assistantArn) (\s@AssistantSummary' {} a -> s {assistantArn = a} :: AssistantSummary)
+
+-- | The identifier of the Wisdom assistant.
+assistantSummary_assistantId :: Lens.Lens' AssistantSummary Prelude.Text
+assistantSummary_assistantId = Lens.lens (\AssistantSummary' {assistantId} -> assistantId) (\s@AssistantSummary' {} a -> s {assistantId = a} :: AssistantSummary)
+
+-- | The name of the assistant.
+assistantSummary_name :: Lens.Lens' AssistantSummary Prelude.Text
+assistantSummary_name = Lens.lens (\AssistantSummary' {name} -> name) (\s@AssistantSummary' {} a -> s {name = a} :: AssistantSummary)
+
+-- | The status of the assistant.
+assistantSummary_status :: Lens.Lens' AssistantSummary AssistantStatus
+assistantSummary_status = Lens.lens (\AssistantSummary' {status} -> status) (\s@AssistantSummary' {} a -> s {status = a} :: AssistantSummary)
+
+-- | The type of the assistant.
+assistantSummary_type :: Lens.Lens' AssistantSummary AssistantType
+assistantSummary_type = Lens.lens (\AssistantSummary' {type'} -> type') (\s@AssistantSummary' {} a -> s {type' = a} :: AssistantSummary)
+
+instance Data.FromJSON AssistantSummary where
+  parseJSON =
+    Data.withObject
+      "AssistantSummary"
+      ( \x ->
+          AssistantSummary'
+            Prelude.<$> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "serverSideEncryptionConfiguration")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "assistantArn")
+            Prelude.<*> (x Data..: "assistantId")
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..: "status")
+            Prelude.<*> (x Data..: "type")
+      )
+
+instance Prelude.Hashable AssistantSummary where
+  hashWithSalt _salt AssistantSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` serverSideEncryptionConfiguration
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` assistantArn
+      `Prelude.hashWithSalt` assistantId
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData AssistantSummary where
+  rnf AssistantSummary' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf serverSideEncryptionConfiguration
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf assistantArn
+      `Prelude.seq` Prelude.rnf assistantId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/Wisdom/Types/AssistantType.hs b/gen/Amazonka/Wisdom/Types/AssistantType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/AssistantType.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.Wisdom.Types.AssistantType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.AssistantType
+  ( AssistantType
+      ( ..,
+        AssistantType_AGENT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AssistantType = AssistantType'
+  { fromAssistantType ::
+      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 AssistantType_AGENT :: AssistantType
+pattern AssistantType_AGENT = AssistantType' "AGENT"
+
+{-# COMPLETE
+  AssistantType_AGENT,
+  AssistantType'
+  #-}
diff --git a/gen/Amazonka/Wisdom/Types/AssociationType.hs b/gen/Amazonka/Wisdom/Types/AssociationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/AssociationType.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.Wisdom.Types.AssociationType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.AssociationType
+  ( AssociationType
+      ( ..,
+        AssociationType_KNOWLEDGE_BASE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AssociationType = AssociationType'
+  { fromAssociationType ::
+      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 AssociationType_KNOWLEDGE_BASE :: AssociationType
+pattern AssociationType_KNOWLEDGE_BASE = AssociationType' "KNOWLEDGE_BASE"
+
+{-# COMPLETE
+  AssociationType_KNOWLEDGE_BASE,
+  AssociationType'
+  #-}
diff --git a/gen/Amazonka/Wisdom/Types/ContentData.hs b/gen/Amazonka/Wisdom/Types/ContentData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/ContentData.hs
@@ -0,0 +1,271 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Wisdom.Types.ContentData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.ContentData where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.Wisdom.Types.ContentStatus
+
+-- | Information about the content.
+--
+-- /See:/ 'newContentData' smart constructor.
+data ContentData = ContentData'
+  { -- | The URI of the content.
+    linkOutUri :: Prelude.Maybe Prelude.Text,
+    -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The Amazon Resource Name (ARN) of the content.
+    contentArn :: Prelude.Text,
+    -- | The identifier of the content.
+    contentId :: Prelude.Text,
+    -- | The media type of the content.
+    contentType :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the knowledge base.
+    knowledgeBaseArn :: Prelude.Text,
+    -- | The identifier of the knowledge base.
+    knowledgeBaseId :: Prelude.Text,
+    -- | A key\/value map to store attributes without affecting tagging or
+    -- recommendations. For example, when synchronizing data between an
+    -- external system and Wisdom, you can store an external version identifier
+    -- as metadata to utilize for determining drift.
+    metadata :: Prelude.HashMap Prelude.Text Prelude.Text,
+    -- | The name of the content.
+    name :: Prelude.Text,
+    -- | The identifier of the content revision.
+    revisionId :: Prelude.Text,
+    -- | The status of the content.
+    status :: ContentStatus,
+    -- | The title of the content.
+    title :: Prelude.Text,
+    -- | The URL of the content.
+    url :: Data.Sensitive Prelude.Text,
+    -- | The expiration time of the URL as an epoch timestamp.
+    urlExpiry :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ContentData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'linkOutUri', 'contentData_linkOutUri' - The URI of the content.
+--
+-- 'tags', 'contentData_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'contentArn', 'contentData_contentArn' - The Amazon Resource Name (ARN) of the content.
+--
+-- 'contentId', 'contentData_contentId' - The identifier of the content.
+--
+-- 'contentType', 'contentData_contentType' - The media type of the content.
+--
+-- 'knowledgeBaseArn', 'contentData_knowledgeBaseArn' - The Amazon Resource Name (ARN) of the knowledge base.
+--
+-- 'knowledgeBaseId', 'contentData_knowledgeBaseId' - The identifier of the knowledge base.
+--
+-- 'metadata', 'contentData_metadata' - A key\/value map to store attributes without affecting tagging or
+-- recommendations. For example, when synchronizing data between an
+-- external system and Wisdom, you can store an external version identifier
+-- as metadata to utilize for determining drift.
+--
+-- 'name', 'contentData_name' - The name of the content.
+--
+-- 'revisionId', 'contentData_revisionId' - The identifier of the content revision.
+--
+-- 'status', 'contentData_status' - The status of the content.
+--
+-- 'title', 'contentData_title' - The title of the content.
+--
+-- 'url', 'contentData_url' - The URL of the content.
+--
+-- 'urlExpiry', 'contentData_urlExpiry' - The expiration time of the URL as an epoch timestamp.
+newContentData ::
+  -- | 'contentArn'
+  Prelude.Text ->
+  -- | 'contentId'
+  Prelude.Text ->
+  -- | 'contentType'
+  Prelude.Text ->
+  -- | 'knowledgeBaseArn'
+  Prelude.Text ->
+  -- | 'knowledgeBaseId'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  -- | 'status'
+  ContentStatus ->
+  -- | 'title'
+  Prelude.Text ->
+  -- | 'url'
+  Prelude.Text ->
+  -- | 'urlExpiry'
+  Prelude.UTCTime ->
+  ContentData
+newContentData
+  pContentArn_
+  pContentId_
+  pContentType_
+  pKnowledgeBaseArn_
+  pKnowledgeBaseId_
+  pName_
+  pRevisionId_
+  pStatus_
+  pTitle_
+  pUrl_
+  pUrlExpiry_ =
+    ContentData'
+      { linkOutUri = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        contentArn = pContentArn_,
+        contentId = pContentId_,
+        contentType = pContentType_,
+        knowledgeBaseArn = pKnowledgeBaseArn_,
+        knowledgeBaseId = pKnowledgeBaseId_,
+        metadata = Prelude.mempty,
+        name = pName_,
+        revisionId = pRevisionId_,
+        status = pStatus_,
+        title = pTitle_,
+        url = Data._Sensitive Lens.# pUrl_,
+        urlExpiry = Data._Time Lens.# pUrlExpiry_
+      }
+
+-- | The URI of the content.
+contentData_linkOutUri :: Lens.Lens' ContentData (Prelude.Maybe Prelude.Text)
+contentData_linkOutUri = Lens.lens (\ContentData' {linkOutUri} -> linkOutUri) (\s@ContentData' {} a -> s {linkOutUri = a} :: ContentData)
+
+-- | The tags used to organize, track, or control access for this resource.
+contentData_tags :: Lens.Lens' ContentData (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+contentData_tags = Lens.lens (\ContentData' {tags} -> tags) (\s@ContentData' {} a -> s {tags = a} :: ContentData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the content.
+contentData_contentArn :: Lens.Lens' ContentData Prelude.Text
+contentData_contentArn = Lens.lens (\ContentData' {contentArn} -> contentArn) (\s@ContentData' {} a -> s {contentArn = a} :: ContentData)
+
+-- | The identifier of the content.
+contentData_contentId :: Lens.Lens' ContentData Prelude.Text
+contentData_contentId = Lens.lens (\ContentData' {contentId} -> contentId) (\s@ContentData' {} a -> s {contentId = a} :: ContentData)
+
+-- | The media type of the content.
+contentData_contentType :: Lens.Lens' ContentData Prelude.Text
+contentData_contentType = Lens.lens (\ContentData' {contentType} -> contentType) (\s@ContentData' {} a -> s {contentType = a} :: ContentData)
+
+-- | The Amazon Resource Name (ARN) of the knowledge base.
+contentData_knowledgeBaseArn :: Lens.Lens' ContentData Prelude.Text
+contentData_knowledgeBaseArn = Lens.lens (\ContentData' {knowledgeBaseArn} -> knowledgeBaseArn) (\s@ContentData' {} a -> s {knowledgeBaseArn = a} :: ContentData)
+
+-- | The identifier of the knowledge base.
+contentData_knowledgeBaseId :: Lens.Lens' ContentData Prelude.Text
+contentData_knowledgeBaseId = Lens.lens (\ContentData' {knowledgeBaseId} -> knowledgeBaseId) (\s@ContentData' {} a -> s {knowledgeBaseId = a} :: ContentData)
+
+-- | A key\/value map to store attributes without affecting tagging or
+-- recommendations. For example, when synchronizing data between an
+-- external system and Wisdom, you can store an external version identifier
+-- as metadata to utilize for determining drift.
+contentData_metadata :: Lens.Lens' ContentData (Prelude.HashMap Prelude.Text Prelude.Text)
+contentData_metadata = Lens.lens (\ContentData' {metadata} -> metadata) (\s@ContentData' {} a -> s {metadata = a} :: ContentData) Prelude.. Lens.coerced
+
+-- | The name of the content.
+contentData_name :: Lens.Lens' ContentData Prelude.Text
+contentData_name = Lens.lens (\ContentData' {name} -> name) (\s@ContentData' {} a -> s {name = a} :: ContentData)
+
+-- | The identifier of the content revision.
+contentData_revisionId :: Lens.Lens' ContentData Prelude.Text
+contentData_revisionId = Lens.lens (\ContentData' {revisionId} -> revisionId) (\s@ContentData' {} a -> s {revisionId = a} :: ContentData)
+
+-- | The status of the content.
+contentData_status :: Lens.Lens' ContentData ContentStatus
+contentData_status = Lens.lens (\ContentData' {status} -> status) (\s@ContentData' {} a -> s {status = a} :: ContentData)
+
+-- | The title of the content.
+contentData_title :: Lens.Lens' ContentData Prelude.Text
+contentData_title = Lens.lens (\ContentData' {title} -> title) (\s@ContentData' {} a -> s {title = a} :: ContentData)
+
+-- | The URL of the content.
+contentData_url :: Lens.Lens' ContentData Prelude.Text
+contentData_url = Lens.lens (\ContentData' {url} -> url) (\s@ContentData' {} a -> s {url = a} :: ContentData) Prelude.. Data._Sensitive
+
+-- | The expiration time of the URL as an epoch timestamp.
+contentData_urlExpiry :: Lens.Lens' ContentData Prelude.UTCTime
+contentData_urlExpiry = Lens.lens (\ContentData' {urlExpiry} -> urlExpiry) (\s@ContentData' {} a -> s {urlExpiry = a} :: ContentData) Prelude.. Data._Time
+
+instance Data.FromJSON ContentData where
+  parseJSON =
+    Data.withObject
+      "ContentData"
+      ( \x ->
+          ContentData'
+            Prelude.<$> (x Data..:? "linkOutUri")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "contentArn")
+            Prelude.<*> (x Data..: "contentId")
+            Prelude.<*> (x Data..: "contentType")
+            Prelude.<*> (x Data..: "knowledgeBaseArn")
+            Prelude.<*> (x Data..: "knowledgeBaseId")
+            Prelude.<*> (x Data..:? "metadata" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..: "revisionId")
+            Prelude.<*> (x Data..: "status")
+            Prelude.<*> (x Data..: "title")
+            Prelude.<*> (x Data..: "url")
+            Prelude.<*> (x Data..: "urlExpiry")
+      )
+
+instance Prelude.Hashable ContentData where
+  hashWithSalt _salt ContentData' {..} =
+    _salt
+      `Prelude.hashWithSalt` linkOutUri
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` contentArn
+      `Prelude.hashWithSalt` contentId
+      `Prelude.hashWithSalt` contentType
+      `Prelude.hashWithSalt` knowledgeBaseArn
+      `Prelude.hashWithSalt` knowledgeBaseId
+      `Prelude.hashWithSalt` metadata
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` revisionId
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` title
+      `Prelude.hashWithSalt` url
+      `Prelude.hashWithSalt` urlExpiry
+
+instance Prelude.NFData ContentData where
+  rnf ContentData' {..} =
+    Prelude.rnf linkOutUri
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf contentArn
+      `Prelude.seq` Prelude.rnf contentId
+      `Prelude.seq` Prelude.rnf contentType
+      `Prelude.seq` Prelude.rnf knowledgeBaseArn
+      `Prelude.seq` Prelude.rnf knowledgeBaseId
+      `Prelude.seq` Prelude.rnf metadata
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf revisionId
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf title
+      `Prelude.seq` Prelude.rnf url
+      `Prelude.seq` Prelude.rnf urlExpiry
diff --git a/gen/Amazonka/Wisdom/Types/ContentReference.hs b/gen/Amazonka/Wisdom/Types/ContentReference.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/ContentReference.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.Wisdom.Types.ContentReference
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.ContentReference 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
+
+-- | Reference information about the content.
+--
+-- /See:/ 'newContentReference' smart constructor.
+data ContentReference = ContentReference'
+  { -- | The Amazon Resource Name (ARN) of the content.
+    contentArn :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the content.
+    contentId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the knowledge base.
+    knowledgeBaseArn :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the knowledge base.
+    knowledgeBaseId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ContentReference' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contentArn', 'contentReference_contentArn' - The Amazon Resource Name (ARN) of the content.
+--
+-- 'contentId', 'contentReference_contentId' - The identifier of the content.
+--
+-- 'knowledgeBaseArn', 'contentReference_knowledgeBaseArn' - The Amazon Resource Name (ARN) of the knowledge base.
+--
+-- 'knowledgeBaseId', 'contentReference_knowledgeBaseId' - The identifier of the knowledge base.
+newContentReference ::
+  ContentReference
+newContentReference =
+  ContentReference'
+    { contentArn = Prelude.Nothing,
+      contentId = Prelude.Nothing,
+      knowledgeBaseArn = Prelude.Nothing,
+      knowledgeBaseId = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the content.
+contentReference_contentArn :: Lens.Lens' ContentReference (Prelude.Maybe Prelude.Text)
+contentReference_contentArn = Lens.lens (\ContentReference' {contentArn} -> contentArn) (\s@ContentReference' {} a -> s {contentArn = a} :: ContentReference)
+
+-- | The identifier of the content.
+contentReference_contentId :: Lens.Lens' ContentReference (Prelude.Maybe Prelude.Text)
+contentReference_contentId = Lens.lens (\ContentReference' {contentId} -> contentId) (\s@ContentReference' {} a -> s {contentId = a} :: ContentReference)
+
+-- | The Amazon Resource Name (ARN) of the knowledge base.
+contentReference_knowledgeBaseArn :: Lens.Lens' ContentReference (Prelude.Maybe Prelude.Text)
+contentReference_knowledgeBaseArn = Lens.lens (\ContentReference' {knowledgeBaseArn} -> knowledgeBaseArn) (\s@ContentReference' {} a -> s {knowledgeBaseArn = a} :: ContentReference)
+
+-- | The identifier of the knowledge base.
+contentReference_knowledgeBaseId :: Lens.Lens' ContentReference (Prelude.Maybe Prelude.Text)
+contentReference_knowledgeBaseId = Lens.lens (\ContentReference' {knowledgeBaseId} -> knowledgeBaseId) (\s@ContentReference' {} a -> s {knowledgeBaseId = a} :: ContentReference)
+
+instance Data.FromJSON ContentReference where
+  parseJSON =
+    Data.withObject
+      "ContentReference"
+      ( \x ->
+          ContentReference'
+            Prelude.<$> (x Data..:? "contentArn")
+            Prelude.<*> (x Data..:? "contentId")
+            Prelude.<*> (x Data..:? "knowledgeBaseArn")
+            Prelude.<*> (x Data..:? "knowledgeBaseId")
+      )
+
+instance Prelude.Hashable ContentReference where
+  hashWithSalt _salt ContentReference' {..} =
+    _salt
+      `Prelude.hashWithSalt` contentArn
+      `Prelude.hashWithSalt` contentId
+      `Prelude.hashWithSalt` knowledgeBaseArn
+      `Prelude.hashWithSalt` knowledgeBaseId
+
+instance Prelude.NFData ContentReference where
+  rnf ContentReference' {..} =
+    Prelude.rnf contentArn
+      `Prelude.seq` Prelude.rnf contentId
+      `Prelude.seq` Prelude.rnf knowledgeBaseArn
+      `Prelude.seq` Prelude.rnf knowledgeBaseId
diff --git a/gen/Amazonka/Wisdom/Types/ContentStatus.hs b/gen/Amazonka/Wisdom/Types/ContentStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/ContentStatus.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.Wisdom.Types.ContentStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.ContentStatus
+  ( ContentStatus
+      ( ..,
+        ContentStatus_ACTIVE,
+        ContentStatus_CREATE_FAILED,
+        ContentStatus_CREATE_IN_PROGRESS,
+        ContentStatus_DELETED,
+        ContentStatus_DELETE_FAILED,
+        ContentStatus_DELETE_IN_PROGRESS,
+        ContentStatus_UPDATE_FAILED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ContentStatus = ContentStatus'
+  { fromContentStatus ::
+      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 ContentStatus_ACTIVE :: ContentStatus
+pattern ContentStatus_ACTIVE = ContentStatus' "ACTIVE"
+
+pattern ContentStatus_CREATE_FAILED :: ContentStatus
+pattern ContentStatus_CREATE_FAILED = ContentStatus' "CREATE_FAILED"
+
+pattern ContentStatus_CREATE_IN_PROGRESS :: ContentStatus
+pattern ContentStatus_CREATE_IN_PROGRESS = ContentStatus' "CREATE_IN_PROGRESS"
+
+pattern ContentStatus_DELETED :: ContentStatus
+pattern ContentStatus_DELETED = ContentStatus' "DELETED"
+
+pattern ContentStatus_DELETE_FAILED :: ContentStatus
+pattern ContentStatus_DELETE_FAILED = ContentStatus' "DELETE_FAILED"
+
+pattern ContentStatus_DELETE_IN_PROGRESS :: ContentStatus
+pattern ContentStatus_DELETE_IN_PROGRESS = ContentStatus' "DELETE_IN_PROGRESS"
+
+pattern ContentStatus_UPDATE_FAILED :: ContentStatus
+pattern ContentStatus_UPDATE_FAILED = ContentStatus' "UPDATE_FAILED"
+
+{-# COMPLETE
+  ContentStatus_ACTIVE,
+  ContentStatus_CREATE_FAILED,
+  ContentStatus_CREATE_IN_PROGRESS,
+  ContentStatus_DELETED,
+  ContentStatus_DELETE_FAILED,
+  ContentStatus_DELETE_IN_PROGRESS,
+  ContentStatus_UPDATE_FAILED,
+  ContentStatus'
+  #-}
diff --git a/gen/Amazonka/Wisdom/Types/ContentSummary.hs b/gen/Amazonka/Wisdom/Types/ContentSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/ContentSummary.hs
@@ -0,0 +1,229 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Wisdom.Types.ContentSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.ContentSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.Wisdom.Types.ContentStatus
+
+-- | Summary information about the content.
+--
+-- /See:/ 'newContentSummary' smart constructor.
+data ContentSummary = ContentSummary'
+  { -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The Amazon Resource Name (ARN) of the content.
+    contentArn :: Prelude.Text,
+    -- | The identifier of the content.
+    contentId :: Prelude.Text,
+    -- | The media type of the content.
+    contentType :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the knowledge base.
+    knowledgeBaseArn :: Prelude.Text,
+    -- | The identifier of the knowledge base.
+    knowledgeBaseId :: Prelude.Text,
+    -- | A key\/value map to store attributes without affecting tagging or
+    -- recommendations. For example, when synchronizing data between an
+    -- external system and Wisdom, you can store an external version identifier
+    -- as metadata to utilize for determining drift.
+    metadata :: Prelude.HashMap Prelude.Text Prelude.Text,
+    -- | The name of the content.
+    name :: Prelude.Text,
+    -- | The identifier of the revision of the content.
+    revisionId :: Prelude.Text,
+    -- | The status of the content.
+    status :: ContentStatus,
+    -- | The title of the content.
+    title :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ContentSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'contentSummary_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'contentArn', 'contentSummary_contentArn' - The Amazon Resource Name (ARN) of the content.
+--
+-- 'contentId', 'contentSummary_contentId' - The identifier of the content.
+--
+-- 'contentType', 'contentSummary_contentType' - The media type of the content.
+--
+-- 'knowledgeBaseArn', 'contentSummary_knowledgeBaseArn' - The Amazon Resource Name (ARN) of the knowledge base.
+--
+-- 'knowledgeBaseId', 'contentSummary_knowledgeBaseId' - The identifier of the knowledge base.
+--
+-- 'metadata', 'contentSummary_metadata' - A key\/value map to store attributes without affecting tagging or
+-- recommendations. For example, when synchronizing data between an
+-- external system and Wisdom, you can store an external version identifier
+-- as metadata to utilize for determining drift.
+--
+-- 'name', 'contentSummary_name' - The name of the content.
+--
+-- 'revisionId', 'contentSummary_revisionId' - The identifier of the revision of the content.
+--
+-- 'status', 'contentSummary_status' - The status of the content.
+--
+-- 'title', 'contentSummary_title' - The title of the content.
+newContentSummary ::
+  -- | 'contentArn'
+  Prelude.Text ->
+  -- | 'contentId'
+  Prelude.Text ->
+  -- | 'contentType'
+  Prelude.Text ->
+  -- | 'knowledgeBaseArn'
+  Prelude.Text ->
+  -- | 'knowledgeBaseId'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  -- | 'status'
+  ContentStatus ->
+  -- | 'title'
+  Prelude.Text ->
+  ContentSummary
+newContentSummary
+  pContentArn_
+  pContentId_
+  pContentType_
+  pKnowledgeBaseArn_
+  pKnowledgeBaseId_
+  pName_
+  pRevisionId_
+  pStatus_
+  pTitle_ =
+    ContentSummary'
+      { tags = Prelude.Nothing,
+        contentArn = pContentArn_,
+        contentId = pContentId_,
+        contentType = pContentType_,
+        knowledgeBaseArn = pKnowledgeBaseArn_,
+        knowledgeBaseId = pKnowledgeBaseId_,
+        metadata = Prelude.mempty,
+        name = pName_,
+        revisionId = pRevisionId_,
+        status = pStatus_,
+        title = pTitle_
+      }
+
+-- | The tags used to organize, track, or control access for this resource.
+contentSummary_tags :: Lens.Lens' ContentSummary (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+contentSummary_tags = Lens.lens (\ContentSummary' {tags} -> tags) (\s@ContentSummary' {} a -> s {tags = a} :: ContentSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the content.
+contentSummary_contentArn :: Lens.Lens' ContentSummary Prelude.Text
+contentSummary_contentArn = Lens.lens (\ContentSummary' {contentArn} -> contentArn) (\s@ContentSummary' {} a -> s {contentArn = a} :: ContentSummary)
+
+-- | The identifier of the content.
+contentSummary_contentId :: Lens.Lens' ContentSummary Prelude.Text
+contentSummary_contentId = Lens.lens (\ContentSummary' {contentId} -> contentId) (\s@ContentSummary' {} a -> s {contentId = a} :: ContentSummary)
+
+-- | The media type of the content.
+contentSummary_contentType :: Lens.Lens' ContentSummary Prelude.Text
+contentSummary_contentType = Lens.lens (\ContentSummary' {contentType} -> contentType) (\s@ContentSummary' {} a -> s {contentType = a} :: ContentSummary)
+
+-- | The Amazon Resource Name (ARN) of the knowledge base.
+contentSummary_knowledgeBaseArn :: Lens.Lens' ContentSummary Prelude.Text
+contentSummary_knowledgeBaseArn = Lens.lens (\ContentSummary' {knowledgeBaseArn} -> knowledgeBaseArn) (\s@ContentSummary' {} a -> s {knowledgeBaseArn = a} :: ContentSummary)
+
+-- | The identifier of the knowledge base.
+contentSummary_knowledgeBaseId :: Lens.Lens' ContentSummary Prelude.Text
+contentSummary_knowledgeBaseId = Lens.lens (\ContentSummary' {knowledgeBaseId} -> knowledgeBaseId) (\s@ContentSummary' {} a -> s {knowledgeBaseId = a} :: ContentSummary)
+
+-- | A key\/value map to store attributes without affecting tagging or
+-- recommendations. For example, when synchronizing data between an
+-- external system and Wisdom, you can store an external version identifier
+-- as metadata to utilize for determining drift.
+contentSummary_metadata :: Lens.Lens' ContentSummary (Prelude.HashMap Prelude.Text Prelude.Text)
+contentSummary_metadata = Lens.lens (\ContentSummary' {metadata} -> metadata) (\s@ContentSummary' {} a -> s {metadata = a} :: ContentSummary) Prelude.. Lens.coerced
+
+-- | The name of the content.
+contentSummary_name :: Lens.Lens' ContentSummary Prelude.Text
+contentSummary_name = Lens.lens (\ContentSummary' {name} -> name) (\s@ContentSummary' {} a -> s {name = a} :: ContentSummary)
+
+-- | The identifier of the revision of the content.
+contentSummary_revisionId :: Lens.Lens' ContentSummary Prelude.Text
+contentSummary_revisionId = Lens.lens (\ContentSummary' {revisionId} -> revisionId) (\s@ContentSummary' {} a -> s {revisionId = a} :: ContentSummary)
+
+-- | The status of the content.
+contentSummary_status :: Lens.Lens' ContentSummary ContentStatus
+contentSummary_status = Lens.lens (\ContentSummary' {status} -> status) (\s@ContentSummary' {} a -> s {status = a} :: ContentSummary)
+
+-- | The title of the content.
+contentSummary_title :: Lens.Lens' ContentSummary Prelude.Text
+contentSummary_title = Lens.lens (\ContentSummary' {title} -> title) (\s@ContentSummary' {} a -> s {title = a} :: ContentSummary)
+
+instance Data.FromJSON ContentSummary where
+  parseJSON =
+    Data.withObject
+      "ContentSummary"
+      ( \x ->
+          ContentSummary'
+            Prelude.<$> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "contentArn")
+            Prelude.<*> (x Data..: "contentId")
+            Prelude.<*> (x Data..: "contentType")
+            Prelude.<*> (x Data..: "knowledgeBaseArn")
+            Prelude.<*> (x Data..: "knowledgeBaseId")
+            Prelude.<*> (x Data..:? "metadata" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..: "revisionId")
+            Prelude.<*> (x Data..: "status")
+            Prelude.<*> (x Data..: "title")
+      )
+
+instance Prelude.Hashable ContentSummary where
+  hashWithSalt _salt ContentSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` contentArn
+      `Prelude.hashWithSalt` contentId
+      `Prelude.hashWithSalt` contentType
+      `Prelude.hashWithSalt` knowledgeBaseArn
+      `Prelude.hashWithSalt` knowledgeBaseId
+      `Prelude.hashWithSalt` metadata
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` revisionId
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` title
+
+instance Prelude.NFData ContentSummary where
+  rnf ContentSummary' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf contentArn
+      `Prelude.seq` Prelude.rnf contentId
+      `Prelude.seq` Prelude.rnf contentType
+      `Prelude.seq` Prelude.rnf knowledgeBaseArn
+      `Prelude.seq` Prelude.rnf knowledgeBaseId
+      `Prelude.seq` Prelude.rnf metadata
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf revisionId
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf title
diff --git a/gen/Amazonka/Wisdom/Types/Document.hs b/gen/Amazonka/Wisdom/Types/Document.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/Document.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Wisdom.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.Wisdom.Types.Document where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.Wisdom.Types.ContentReference
+import Amazonka.Wisdom.Types.DocumentText
+
+-- | The document.
+--
+-- /See:/ 'newDocument' smart constructor.
+data Document = Document'
+  { -- | The excerpt from the document.
+    excerpt :: Prelude.Maybe DocumentText,
+    -- | The title of the document.
+    title :: Prelude.Maybe DocumentText,
+    -- | A reference to the content resource.
+    contentReference :: ContentReference
+  }
+  deriving (Prelude.Eq, 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:
+--
+-- 'excerpt', 'document_excerpt' - The excerpt from the document.
+--
+-- 'title', 'document_title' - The title of the document.
+--
+-- 'contentReference', 'document_contentReference' - A reference to the content resource.
+newDocument ::
+  -- | 'contentReference'
+  ContentReference ->
+  Document
+newDocument pContentReference_ =
+  Document'
+    { excerpt = Prelude.Nothing,
+      title = Prelude.Nothing,
+      contentReference = pContentReference_
+    }
+
+-- | The excerpt from the document.
+document_excerpt :: Lens.Lens' Document (Prelude.Maybe DocumentText)
+document_excerpt = Lens.lens (\Document' {excerpt} -> excerpt) (\s@Document' {} a -> s {excerpt = a} :: Document)
+
+-- | The title of the document.
+document_title :: Lens.Lens' Document (Prelude.Maybe DocumentText)
+document_title = Lens.lens (\Document' {title} -> title) (\s@Document' {} a -> s {title = a} :: Document)
+
+-- | A reference to the content resource.
+document_contentReference :: Lens.Lens' Document ContentReference
+document_contentReference = Lens.lens (\Document' {contentReference} -> contentReference) (\s@Document' {} a -> s {contentReference = a} :: Document)
+
+instance Data.FromJSON Document where
+  parseJSON =
+    Data.withObject
+      "Document"
+      ( \x ->
+          Document'
+            Prelude.<$> (x Data..:? "excerpt")
+            Prelude.<*> (x Data..:? "title")
+            Prelude.<*> (x Data..: "contentReference")
+      )
+
+instance Prelude.Hashable Document where
+  hashWithSalt _salt Document' {..} =
+    _salt
+      `Prelude.hashWithSalt` excerpt
+      `Prelude.hashWithSalt` title
+      `Prelude.hashWithSalt` contentReference
+
+instance Prelude.NFData Document where
+  rnf Document' {..} =
+    Prelude.rnf excerpt
+      `Prelude.seq` Prelude.rnf title
+      `Prelude.seq` Prelude.rnf contentReference
diff --git a/gen/Amazonka/Wisdom/Types/DocumentText.hs b/gen/Amazonka/Wisdom/Types/DocumentText.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/DocumentText.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.Wisdom.Types.DocumentText
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.DocumentText where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.Wisdom.Types.Highlight
+
+-- | The text of the document.
+--
+-- /See:/ 'newDocumentText' smart constructor.
+data DocumentText = DocumentText'
+  { -- | Highlights in the document text.
+    highlights :: Prelude.Maybe [Highlight],
+    -- | Text in the document.
+    text :: Prelude.Maybe (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DocumentText' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'documentText_highlights' - Highlights in the document text.
+--
+-- 'text', 'documentText_text' - Text in the document.
+newDocumentText ::
+  DocumentText
+newDocumentText =
+  DocumentText'
+    { highlights = Prelude.Nothing,
+      text = Prelude.Nothing
+    }
+
+-- | Highlights in the document text.
+documentText_highlights :: Lens.Lens' DocumentText (Prelude.Maybe [Highlight])
+documentText_highlights = Lens.lens (\DocumentText' {highlights} -> highlights) (\s@DocumentText' {} a -> s {highlights = a} :: DocumentText) Prelude.. Lens.mapping Lens.coerced
+
+-- | Text in the document.
+documentText_text :: Lens.Lens' DocumentText (Prelude.Maybe Prelude.Text)
+documentText_text = Lens.lens (\DocumentText' {text} -> text) (\s@DocumentText' {} a -> s {text = a} :: DocumentText) Prelude.. Lens.mapping Data._Sensitive
+
+instance Data.FromJSON DocumentText where
+  parseJSON =
+    Data.withObject
+      "DocumentText"
+      ( \x ->
+          DocumentText'
+            Prelude.<$> (x Data..:? "highlights" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "text")
+      )
+
+instance Prelude.Hashable DocumentText where
+  hashWithSalt _salt DocumentText' {..} =
+    _salt
+      `Prelude.hashWithSalt` highlights
+      `Prelude.hashWithSalt` text
+
+instance Prelude.NFData DocumentText where
+  rnf DocumentText' {..} =
+    Prelude.rnf highlights
+      `Prelude.seq` Prelude.rnf text
diff --git a/gen/Amazonka/Wisdom/Types/Filter.hs b/gen/Amazonka/Wisdom/Types/Filter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/Filter.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.Wisdom.Types.Filter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.Filter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.Wisdom.Types.FilterField
+import Amazonka.Wisdom.Types.FilterOperator
+
+-- | A search filter.
+--
+-- /See:/ 'newFilter' smart constructor.
+data Filter = Filter'
+  { -- | The field on which to filter.
+    field :: FilterField,
+    -- | The operator to use for comparing the field’s value with the provided
+    -- value.
+    operator :: FilterOperator,
+    -- | The desired field value on which to filter.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Filter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'field', 'filter_field' - The field on which to filter.
+--
+-- 'operator', 'filter_operator' - The operator to use for comparing the field’s value with the provided
+-- value.
+--
+-- 'value', 'filter_value' - The desired field value on which to filter.
+newFilter ::
+  -- | 'field'
+  FilterField ->
+  -- | 'operator'
+  FilterOperator ->
+  -- | 'value'
+  Prelude.Text ->
+  Filter
+newFilter pField_ pOperator_ pValue_ =
+  Filter'
+    { field = pField_,
+      operator = pOperator_,
+      value = pValue_
+    }
+
+-- | The field on which to filter.
+filter_field :: Lens.Lens' Filter FilterField
+filter_field = Lens.lens (\Filter' {field} -> field) (\s@Filter' {} a -> s {field = a} :: Filter)
+
+-- | The operator to use for comparing the field’s value with the provided
+-- value.
+filter_operator :: Lens.Lens' Filter FilterOperator
+filter_operator = Lens.lens (\Filter' {operator} -> operator) (\s@Filter' {} a -> s {operator = a} :: Filter)
+
+-- | The desired field value on which to filter.
+filter_value :: Lens.Lens' Filter Prelude.Text
+filter_value = Lens.lens (\Filter' {value} -> value) (\s@Filter' {} a -> s {value = a} :: Filter)
+
+instance Prelude.Hashable Filter where
+  hashWithSalt _salt Filter' {..} =
+    _salt
+      `Prelude.hashWithSalt` field
+      `Prelude.hashWithSalt` operator
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData Filter where
+  rnf Filter' {..} =
+    Prelude.rnf field
+      `Prelude.seq` Prelude.rnf operator
+      `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON Filter where
+  toJSON Filter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("field" Data..= field),
+            Prelude.Just ("operator" Data..= operator),
+            Prelude.Just ("value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/Wisdom/Types/FilterField.hs b/gen/Amazonka/Wisdom/Types/FilterField.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/FilterField.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.Wisdom.Types.FilterField
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.FilterField
+  ( FilterField
+      ( ..,
+        FilterField_NAME
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FilterField = FilterField'
+  { fromFilterField ::
+      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 FilterField_NAME :: FilterField
+pattern FilterField_NAME = FilterField' "NAME"
+
+{-# COMPLETE
+  FilterField_NAME,
+  FilterField'
+  #-}
diff --git a/gen/Amazonka/Wisdom/Types/FilterOperator.hs b/gen/Amazonka/Wisdom/Types/FilterOperator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/FilterOperator.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.Wisdom.Types.FilterOperator
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.FilterOperator
+  ( FilterOperator
+      ( ..,
+        FilterOperator_EQUALS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FilterOperator = FilterOperator'
+  { fromFilterOperator ::
+      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 FilterOperator_EQUALS :: FilterOperator
+pattern FilterOperator_EQUALS = FilterOperator' "EQUALS"
+
+{-# COMPLETE
+  FilterOperator_EQUALS,
+  FilterOperator'
+  #-}
diff --git a/gen/Amazonka/Wisdom/Types/Highlight.hs b/gen/Amazonka/Wisdom/Types/Highlight.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/Highlight.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.Wisdom.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.Wisdom.Types.Highlight 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
+
+-- | Offset specification to describe highlighting of document excerpts for
+-- rendering search results and recommendations.
+--
+-- /See:/ 'newHighlight' smart constructor.
+data Highlight = Highlight'
+  { -- | The offset for the start of the highlight.
+    beginOffsetInclusive :: Prelude.Maybe Prelude.Int,
+    -- | The offset for the end of the highlight.
+    endOffsetExclusive :: Prelude.Maybe 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:
+--
+-- 'beginOffsetInclusive', 'highlight_beginOffsetInclusive' - The offset for the start of the highlight.
+--
+-- 'endOffsetExclusive', 'highlight_endOffsetExclusive' - The offset for the end of the highlight.
+newHighlight ::
+  Highlight
+newHighlight =
+  Highlight'
+    { beginOffsetInclusive = Prelude.Nothing,
+      endOffsetExclusive = Prelude.Nothing
+    }
+
+-- | The offset for the start of the highlight.
+highlight_beginOffsetInclusive :: Lens.Lens' Highlight (Prelude.Maybe Prelude.Int)
+highlight_beginOffsetInclusive = Lens.lens (\Highlight' {beginOffsetInclusive} -> beginOffsetInclusive) (\s@Highlight' {} a -> s {beginOffsetInclusive = a} :: Highlight)
+
+-- | The offset for the end of the highlight.
+highlight_endOffsetExclusive :: Lens.Lens' Highlight (Prelude.Maybe Prelude.Int)
+highlight_endOffsetExclusive = Lens.lens (\Highlight' {endOffsetExclusive} -> endOffsetExclusive) (\s@Highlight' {} a -> s {endOffsetExclusive = a} :: Highlight)
+
+instance Data.FromJSON Highlight where
+  parseJSON =
+    Data.withObject
+      "Highlight"
+      ( \x ->
+          Highlight'
+            Prelude.<$> (x Data..:? "beginOffsetInclusive")
+            Prelude.<*> (x Data..:? "endOffsetExclusive")
+      )
+
+instance Prelude.Hashable Highlight where
+  hashWithSalt _salt Highlight' {..} =
+    _salt
+      `Prelude.hashWithSalt` beginOffsetInclusive
+      `Prelude.hashWithSalt` endOffsetExclusive
+
+instance Prelude.NFData Highlight where
+  rnf Highlight' {..} =
+    Prelude.rnf beginOffsetInclusive
+      `Prelude.seq` Prelude.rnf endOffsetExclusive
diff --git a/gen/Amazonka/Wisdom/Types/KnowledgeBaseAssociationData.hs b/gen/Amazonka/Wisdom/Types/KnowledgeBaseAssociationData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/KnowledgeBaseAssociationData.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.Wisdom.Types.KnowledgeBaseAssociationData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.KnowledgeBaseAssociationData 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
+
+-- | Association information about the knowledge base.
+--
+-- /See:/ 'newKnowledgeBaseAssociationData' smart constructor.
+data KnowledgeBaseAssociationData = KnowledgeBaseAssociationData'
+  { -- | The Amazon Resource Name (ARN) of the knowledge base.
+    knowledgeBaseArn :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the knowledge base.
+    knowledgeBaseId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'KnowledgeBaseAssociationData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'knowledgeBaseArn', 'knowledgeBaseAssociationData_knowledgeBaseArn' - The Amazon Resource Name (ARN) of the knowledge base.
+--
+-- 'knowledgeBaseId', 'knowledgeBaseAssociationData_knowledgeBaseId' - The identifier of the knowledge base.
+newKnowledgeBaseAssociationData ::
+  KnowledgeBaseAssociationData
+newKnowledgeBaseAssociationData =
+  KnowledgeBaseAssociationData'
+    { knowledgeBaseArn =
+        Prelude.Nothing,
+      knowledgeBaseId = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the knowledge base.
+knowledgeBaseAssociationData_knowledgeBaseArn :: Lens.Lens' KnowledgeBaseAssociationData (Prelude.Maybe Prelude.Text)
+knowledgeBaseAssociationData_knowledgeBaseArn = Lens.lens (\KnowledgeBaseAssociationData' {knowledgeBaseArn} -> knowledgeBaseArn) (\s@KnowledgeBaseAssociationData' {} a -> s {knowledgeBaseArn = a} :: KnowledgeBaseAssociationData)
+
+-- | The identifier of the knowledge base.
+knowledgeBaseAssociationData_knowledgeBaseId :: Lens.Lens' KnowledgeBaseAssociationData (Prelude.Maybe Prelude.Text)
+knowledgeBaseAssociationData_knowledgeBaseId = Lens.lens (\KnowledgeBaseAssociationData' {knowledgeBaseId} -> knowledgeBaseId) (\s@KnowledgeBaseAssociationData' {} a -> s {knowledgeBaseId = a} :: KnowledgeBaseAssociationData)
+
+instance Data.FromJSON KnowledgeBaseAssociationData where
+  parseJSON =
+    Data.withObject
+      "KnowledgeBaseAssociationData"
+      ( \x ->
+          KnowledgeBaseAssociationData'
+            Prelude.<$> (x Data..:? "knowledgeBaseArn")
+            Prelude.<*> (x Data..:? "knowledgeBaseId")
+      )
+
+instance
+  Prelude.Hashable
+    KnowledgeBaseAssociationData
+  where
+  hashWithSalt _salt KnowledgeBaseAssociationData' {..} =
+    _salt
+      `Prelude.hashWithSalt` knowledgeBaseArn
+      `Prelude.hashWithSalt` knowledgeBaseId
+
+instance Prelude.NFData KnowledgeBaseAssociationData where
+  rnf KnowledgeBaseAssociationData' {..} =
+    Prelude.rnf knowledgeBaseArn
+      `Prelude.seq` Prelude.rnf knowledgeBaseId
diff --git a/gen/Amazonka/Wisdom/Types/KnowledgeBaseData.hs b/gen/Amazonka/Wisdom/Types/KnowledgeBaseData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/KnowledgeBaseData.hs
@@ -0,0 +1,218 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Wisdom.Types.KnowledgeBaseData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.KnowledgeBaseData where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.Wisdom.Types.KnowledgeBaseStatus
+import Amazonka.Wisdom.Types.KnowledgeBaseType
+import Amazonka.Wisdom.Types.RenderingConfiguration
+import Amazonka.Wisdom.Types.ServerSideEncryptionConfiguration
+import Amazonka.Wisdom.Types.SourceConfiguration
+
+-- | Information about the knowledge base.
+--
+-- /See:/ 'newKnowledgeBaseData' smart constructor.
+data KnowledgeBaseData = KnowledgeBaseData'
+  { -- | The description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | An epoch timestamp indicating the most recent content modification
+    -- inside the knowledge base. If no content exists in a knowledge base,
+    -- this value is unset.
+    lastContentModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | Information about how to render the content.
+    renderingConfiguration :: Prelude.Maybe RenderingConfiguration,
+    -- | The KMS key used for encryption.
+    serverSideEncryptionConfiguration :: Prelude.Maybe ServerSideEncryptionConfiguration,
+    -- | Source configuration information about the knowledge base.
+    sourceConfiguration :: Prelude.Maybe SourceConfiguration,
+    -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The Amazon Resource Name (ARN) of the knowledge base.
+    knowledgeBaseArn :: Prelude.Text,
+    -- | The identifier of the knowledge base.
+    knowledgeBaseId :: Prelude.Text,
+    -- | The type of knowledge base.
+    knowledgeBaseType :: KnowledgeBaseType,
+    -- | The name of the knowledge base.
+    name :: Prelude.Text,
+    -- | The status of the knowledge base.
+    status :: KnowledgeBaseStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'KnowledgeBaseData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'knowledgeBaseData_description' - The description.
+--
+-- 'lastContentModificationTime', 'knowledgeBaseData_lastContentModificationTime' - An epoch timestamp indicating the most recent content modification
+-- inside the knowledge base. If no content exists in a knowledge base,
+-- this value is unset.
+--
+-- 'renderingConfiguration', 'knowledgeBaseData_renderingConfiguration' - Information about how to render the content.
+--
+-- 'serverSideEncryptionConfiguration', 'knowledgeBaseData_serverSideEncryptionConfiguration' - The KMS key used for encryption.
+--
+-- 'sourceConfiguration', 'knowledgeBaseData_sourceConfiguration' - Source configuration information about the knowledge base.
+--
+-- 'tags', 'knowledgeBaseData_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'knowledgeBaseArn', 'knowledgeBaseData_knowledgeBaseArn' - The Amazon Resource Name (ARN) of the knowledge base.
+--
+-- 'knowledgeBaseId', 'knowledgeBaseData_knowledgeBaseId' - The identifier of the knowledge base.
+--
+-- 'knowledgeBaseType', 'knowledgeBaseData_knowledgeBaseType' - The type of knowledge base.
+--
+-- 'name', 'knowledgeBaseData_name' - The name of the knowledge base.
+--
+-- 'status', 'knowledgeBaseData_status' - The status of the knowledge base.
+newKnowledgeBaseData ::
+  -- | 'knowledgeBaseArn'
+  Prelude.Text ->
+  -- | 'knowledgeBaseId'
+  Prelude.Text ->
+  -- | 'knowledgeBaseType'
+  KnowledgeBaseType ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'status'
+  KnowledgeBaseStatus ->
+  KnowledgeBaseData
+newKnowledgeBaseData
+  pKnowledgeBaseArn_
+  pKnowledgeBaseId_
+  pKnowledgeBaseType_
+  pName_
+  pStatus_ =
+    KnowledgeBaseData'
+      { description = Prelude.Nothing,
+        lastContentModificationTime = Prelude.Nothing,
+        renderingConfiguration = Prelude.Nothing,
+        serverSideEncryptionConfiguration = Prelude.Nothing,
+        sourceConfiguration = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        knowledgeBaseArn = pKnowledgeBaseArn_,
+        knowledgeBaseId = pKnowledgeBaseId_,
+        knowledgeBaseType = pKnowledgeBaseType_,
+        name = pName_,
+        status = pStatus_
+      }
+
+-- | The description.
+knowledgeBaseData_description :: Lens.Lens' KnowledgeBaseData (Prelude.Maybe Prelude.Text)
+knowledgeBaseData_description = Lens.lens (\KnowledgeBaseData' {description} -> description) (\s@KnowledgeBaseData' {} a -> s {description = a} :: KnowledgeBaseData)
+
+-- | An epoch timestamp indicating the most recent content modification
+-- inside the knowledge base. If no content exists in a knowledge base,
+-- this value is unset.
+knowledgeBaseData_lastContentModificationTime :: Lens.Lens' KnowledgeBaseData (Prelude.Maybe Prelude.UTCTime)
+knowledgeBaseData_lastContentModificationTime = Lens.lens (\KnowledgeBaseData' {lastContentModificationTime} -> lastContentModificationTime) (\s@KnowledgeBaseData' {} a -> s {lastContentModificationTime = a} :: KnowledgeBaseData) Prelude.. Lens.mapping Data._Time
+
+-- | Information about how to render the content.
+knowledgeBaseData_renderingConfiguration :: Lens.Lens' KnowledgeBaseData (Prelude.Maybe RenderingConfiguration)
+knowledgeBaseData_renderingConfiguration = Lens.lens (\KnowledgeBaseData' {renderingConfiguration} -> renderingConfiguration) (\s@KnowledgeBaseData' {} a -> s {renderingConfiguration = a} :: KnowledgeBaseData)
+
+-- | The KMS key used for encryption.
+knowledgeBaseData_serverSideEncryptionConfiguration :: Lens.Lens' KnowledgeBaseData (Prelude.Maybe ServerSideEncryptionConfiguration)
+knowledgeBaseData_serverSideEncryptionConfiguration = Lens.lens (\KnowledgeBaseData' {serverSideEncryptionConfiguration} -> serverSideEncryptionConfiguration) (\s@KnowledgeBaseData' {} a -> s {serverSideEncryptionConfiguration = a} :: KnowledgeBaseData)
+
+-- | Source configuration information about the knowledge base.
+knowledgeBaseData_sourceConfiguration :: Lens.Lens' KnowledgeBaseData (Prelude.Maybe SourceConfiguration)
+knowledgeBaseData_sourceConfiguration = Lens.lens (\KnowledgeBaseData' {sourceConfiguration} -> sourceConfiguration) (\s@KnowledgeBaseData' {} a -> s {sourceConfiguration = a} :: KnowledgeBaseData)
+
+-- | The tags used to organize, track, or control access for this resource.
+knowledgeBaseData_tags :: Lens.Lens' KnowledgeBaseData (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+knowledgeBaseData_tags = Lens.lens (\KnowledgeBaseData' {tags} -> tags) (\s@KnowledgeBaseData' {} a -> s {tags = a} :: KnowledgeBaseData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the knowledge base.
+knowledgeBaseData_knowledgeBaseArn :: Lens.Lens' KnowledgeBaseData Prelude.Text
+knowledgeBaseData_knowledgeBaseArn = Lens.lens (\KnowledgeBaseData' {knowledgeBaseArn} -> knowledgeBaseArn) (\s@KnowledgeBaseData' {} a -> s {knowledgeBaseArn = a} :: KnowledgeBaseData)
+
+-- | The identifier of the knowledge base.
+knowledgeBaseData_knowledgeBaseId :: Lens.Lens' KnowledgeBaseData Prelude.Text
+knowledgeBaseData_knowledgeBaseId = Lens.lens (\KnowledgeBaseData' {knowledgeBaseId} -> knowledgeBaseId) (\s@KnowledgeBaseData' {} a -> s {knowledgeBaseId = a} :: KnowledgeBaseData)
+
+-- | The type of knowledge base.
+knowledgeBaseData_knowledgeBaseType :: Lens.Lens' KnowledgeBaseData KnowledgeBaseType
+knowledgeBaseData_knowledgeBaseType = Lens.lens (\KnowledgeBaseData' {knowledgeBaseType} -> knowledgeBaseType) (\s@KnowledgeBaseData' {} a -> s {knowledgeBaseType = a} :: KnowledgeBaseData)
+
+-- | The name of the knowledge base.
+knowledgeBaseData_name :: Lens.Lens' KnowledgeBaseData Prelude.Text
+knowledgeBaseData_name = Lens.lens (\KnowledgeBaseData' {name} -> name) (\s@KnowledgeBaseData' {} a -> s {name = a} :: KnowledgeBaseData)
+
+-- | The status of the knowledge base.
+knowledgeBaseData_status :: Lens.Lens' KnowledgeBaseData KnowledgeBaseStatus
+knowledgeBaseData_status = Lens.lens (\KnowledgeBaseData' {status} -> status) (\s@KnowledgeBaseData' {} a -> s {status = a} :: KnowledgeBaseData)
+
+instance Data.FromJSON KnowledgeBaseData where
+  parseJSON =
+    Data.withObject
+      "KnowledgeBaseData"
+      ( \x ->
+          KnowledgeBaseData'
+            Prelude.<$> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "lastContentModificationTime")
+            Prelude.<*> (x Data..:? "renderingConfiguration")
+            Prelude.<*> (x Data..:? "serverSideEncryptionConfiguration")
+            Prelude.<*> (x Data..:? "sourceConfiguration")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "knowledgeBaseArn")
+            Prelude.<*> (x Data..: "knowledgeBaseId")
+            Prelude.<*> (x Data..: "knowledgeBaseType")
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..: "status")
+      )
+
+instance Prelude.Hashable KnowledgeBaseData where
+  hashWithSalt _salt KnowledgeBaseData' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` lastContentModificationTime
+      `Prelude.hashWithSalt` renderingConfiguration
+      `Prelude.hashWithSalt` serverSideEncryptionConfiguration
+      `Prelude.hashWithSalt` sourceConfiguration
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` knowledgeBaseArn
+      `Prelude.hashWithSalt` knowledgeBaseId
+      `Prelude.hashWithSalt` knowledgeBaseType
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData KnowledgeBaseData where
+  rnf KnowledgeBaseData' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastContentModificationTime
+      `Prelude.seq` Prelude.rnf renderingConfiguration
+      `Prelude.seq` Prelude.rnf serverSideEncryptionConfiguration
+      `Prelude.seq` Prelude.rnf sourceConfiguration
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf knowledgeBaseArn
+      `Prelude.seq` Prelude.rnf knowledgeBaseId
+      `Prelude.seq` Prelude.rnf knowledgeBaseType
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/Wisdom/Types/KnowledgeBaseStatus.hs b/gen/Amazonka/Wisdom/Types/KnowledgeBaseStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/KnowledgeBaseStatus.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.Wisdom.Types.KnowledgeBaseStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.KnowledgeBaseStatus
+  ( KnowledgeBaseStatus
+      ( ..,
+        KnowledgeBaseStatus_ACTIVE,
+        KnowledgeBaseStatus_CREATE_FAILED,
+        KnowledgeBaseStatus_CREATE_IN_PROGRESS,
+        KnowledgeBaseStatus_DELETED,
+        KnowledgeBaseStatus_DELETE_FAILED,
+        KnowledgeBaseStatus_DELETE_IN_PROGRESS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype KnowledgeBaseStatus = KnowledgeBaseStatus'
+  { fromKnowledgeBaseStatus ::
+      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 KnowledgeBaseStatus_ACTIVE :: KnowledgeBaseStatus
+pattern KnowledgeBaseStatus_ACTIVE = KnowledgeBaseStatus' "ACTIVE"
+
+pattern KnowledgeBaseStatus_CREATE_FAILED :: KnowledgeBaseStatus
+pattern KnowledgeBaseStatus_CREATE_FAILED = KnowledgeBaseStatus' "CREATE_FAILED"
+
+pattern KnowledgeBaseStatus_CREATE_IN_PROGRESS :: KnowledgeBaseStatus
+pattern KnowledgeBaseStatus_CREATE_IN_PROGRESS = KnowledgeBaseStatus' "CREATE_IN_PROGRESS"
+
+pattern KnowledgeBaseStatus_DELETED :: KnowledgeBaseStatus
+pattern KnowledgeBaseStatus_DELETED = KnowledgeBaseStatus' "DELETED"
+
+pattern KnowledgeBaseStatus_DELETE_FAILED :: KnowledgeBaseStatus
+pattern KnowledgeBaseStatus_DELETE_FAILED = KnowledgeBaseStatus' "DELETE_FAILED"
+
+pattern KnowledgeBaseStatus_DELETE_IN_PROGRESS :: KnowledgeBaseStatus
+pattern KnowledgeBaseStatus_DELETE_IN_PROGRESS = KnowledgeBaseStatus' "DELETE_IN_PROGRESS"
+
+{-# COMPLETE
+  KnowledgeBaseStatus_ACTIVE,
+  KnowledgeBaseStatus_CREATE_FAILED,
+  KnowledgeBaseStatus_CREATE_IN_PROGRESS,
+  KnowledgeBaseStatus_DELETED,
+  KnowledgeBaseStatus_DELETE_FAILED,
+  KnowledgeBaseStatus_DELETE_IN_PROGRESS,
+  KnowledgeBaseStatus'
+  #-}
diff --git a/gen/Amazonka/Wisdom/Types/KnowledgeBaseSummary.hs b/gen/Amazonka/Wisdom/Types/KnowledgeBaseSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/KnowledgeBaseSummary.hs
@@ -0,0 +1,201 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Wisdom.Types.KnowledgeBaseSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.KnowledgeBaseSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.Wisdom.Types.KnowledgeBaseStatus
+import Amazonka.Wisdom.Types.KnowledgeBaseType
+import Amazonka.Wisdom.Types.RenderingConfiguration
+import Amazonka.Wisdom.Types.ServerSideEncryptionConfiguration
+import Amazonka.Wisdom.Types.SourceConfiguration
+
+-- | Summary information about the knowledge base.
+--
+-- /See:/ 'newKnowledgeBaseSummary' smart constructor.
+data KnowledgeBaseSummary = KnowledgeBaseSummary'
+  { -- | The description of the knowledge base.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Information about how to render the content.
+    renderingConfiguration :: Prelude.Maybe RenderingConfiguration,
+    -- | The KMS key used for encryption.
+    serverSideEncryptionConfiguration :: Prelude.Maybe ServerSideEncryptionConfiguration,
+    -- | Configuration information about the external data source.
+    sourceConfiguration :: Prelude.Maybe SourceConfiguration,
+    -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The Amazon Resource Name (ARN) of the knowledge base.
+    knowledgeBaseArn :: Prelude.Text,
+    -- | The identifier of the knowledge base.
+    knowledgeBaseId :: Prelude.Text,
+    -- | The type of knowledge base.
+    knowledgeBaseType :: KnowledgeBaseType,
+    -- | The name of the knowledge base.
+    name :: Prelude.Text,
+    -- | The status of the knowledge base summary.
+    status :: KnowledgeBaseStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'KnowledgeBaseSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'knowledgeBaseSummary_description' - The description of the knowledge base.
+--
+-- 'renderingConfiguration', 'knowledgeBaseSummary_renderingConfiguration' - Information about how to render the content.
+--
+-- 'serverSideEncryptionConfiguration', 'knowledgeBaseSummary_serverSideEncryptionConfiguration' - The KMS key used for encryption.
+--
+-- 'sourceConfiguration', 'knowledgeBaseSummary_sourceConfiguration' - Configuration information about the external data source.
+--
+-- 'tags', 'knowledgeBaseSummary_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'knowledgeBaseArn', 'knowledgeBaseSummary_knowledgeBaseArn' - The Amazon Resource Name (ARN) of the knowledge base.
+--
+-- 'knowledgeBaseId', 'knowledgeBaseSummary_knowledgeBaseId' - The identifier of the knowledge base.
+--
+-- 'knowledgeBaseType', 'knowledgeBaseSummary_knowledgeBaseType' - The type of knowledge base.
+--
+-- 'name', 'knowledgeBaseSummary_name' - The name of the knowledge base.
+--
+-- 'status', 'knowledgeBaseSummary_status' - The status of the knowledge base summary.
+newKnowledgeBaseSummary ::
+  -- | 'knowledgeBaseArn'
+  Prelude.Text ->
+  -- | 'knowledgeBaseId'
+  Prelude.Text ->
+  -- | 'knowledgeBaseType'
+  KnowledgeBaseType ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'status'
+  KnowledgeBaseStatus ->
+  KnowledgeBaseSummary
+newKnowledgeBaseSummary
+  pKnowledgeBaseArn_
+  pKnowledgeBaseId_
+  pKnowledgeBaseType_
+  pName_
+  pStatus_ =
+    KnowledgeBaseSummary'
+      { description =
+          Prelude.Nothing,
+        renderingConfiguration = Prelude.Nothing,
+        serverSideEncryptionConfiguration = Prelude.Nothing,
+        sourceConfiguration = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        knowledgeBaseArn = pKnowledgeBaseArn_,
+        knowledgeBaseId = pKnowledgeBaseId_,
+        knowledgeBaseType = pKnowledgeBaseType_,
+        name = pName_,
+        status = pStatus_
+      }
+
+-- | The description of the knowledge base.
+knowledgeBaseSummary_description :: Lens.Lens' KnowledgeBaseSummary (Prelude.Maybe Prelude.Text)
+knowledgeBaseSummary_description = Lens.lens (\KnowledgeBaseSummary' {description} -> description) (\s@KnowledgeBaseSummary' {} a -> s {description = a} :: KnowledgeBaseSummary)
+
+-- | Information about how to render the content.
+knowledgeBaseSummary_renderingConfiguration :: Lens.Lens' KnowledgeBaseSummary (Prelude.Maybe RenderingConfiguration)
+knowledgeBaseSummary_renderingConfiguration = Lens.lens (\KnowledgeBaseSummary' {renderingConfiguration} -> renderingConfiguration) (\s@KnowledgeBaseSummary' {} a -> s {renderingConfiguration = a} :: KnowledgeBaseSummary)
+
+-- | The KMS key used for encryption.
+knowledgeBaseSummary_serverSideEncryptionConfiguration :: Lens.Lens' KnowledgeBaseSummary (Prelude.Maybe ServerSideEncryptionConfiguration)
+knowledgeBaseSummary_serverSideEncryptionConfiguration = Lens.lens (\KnowledgeBaseSummary' {serverSideEncryptionConfiguration} -> serverSideEncryptionConfiguration) (\s@KnowledgeBaseSummary' {} a -> s {serverSideEncryptionConfiguration = a} :: KnowledgeBaseSummary)
+
+-- | Configuration information about the external data source.
+knowledgeBaseSummary_sourceConfiguration :: Lens.Lens' KnowledgeBaseSummary (Prelude.Maybe SourceConfiguration)
+knowledgeBaseSummary_sourceConfiguration = Lens.lens (\KnowledgeBaseSummary' {sourceConfiguration} -> sourceConfiguration) (\s@KnowledgeBaseSummary' {} a -> s {sourceConfiguration = a} :: KnowledgeBaseSummary)
+
+-- | The tags used to organize, track, or control access for this resource.
+knowledgeBaseSummary_tags :: Lens.Lens' KnowledgeBaseSummary (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+knowledgeBaseSummary_tags = Lens.lens (\KnowledgeBaseSummary' {tags} -> tags) (\s@KnowledgeBaseSummary' {} a -> s {tags = a} :: KnowledgeBaseSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the knowledge base.
+knowledgeBaseSummary_knowledgeBaseArn :: Lens.Lens' KnowledgeBaseSummary Prelude.Text
+knowledgeBaseSummary_knowledgeBaseArn = Lens.lens (\KnowledgeBaseSummary' {knowledgeBaseArn} -> knowledgeBaseArn) (\s@KnowledgeBaseSummary' {} a -> s {knowledgeBaseArn = a} :: KnowledgeBaseSummary)
+
+-- | The identifier of the knowledge base.
+knowledgeBaseSummary_knowledgeBaseId :: Lens.Lens' KnowledgeBaseSummary Prelude.Text
+knowledgeBaseSummary_knowledgeBaseId = Lens.lens (\KnowledgeBaseSummary' {knowledgeBaseId} -> knowledgeBaseId) (\s@KnowledgeBaseSummary' {} a -> s {knowledgeBaseId = a} :: KnowledgeBaseSummary)
+
+-- | The type of knowledge base.
+knowledgeBaseSummary_knowledgeBaseType :: Lens.Lens' KnowledgeBaseSummary KnowledgeBaseType
+knowledgeBaseSummary_knowledgeBaseType = Lens.lens (\KnowledgeBaseSummary' {knowledgeBaseType} -> knowledgeBaseType) (\s@KnowledgeBaseSummary' {} a -> s {knowledgeBaseType = a} :: KnowledgeBaseSummary)
+
+-- | The name of the knowledge base.
+knowledgeBaseSummary_name :: Lens.Lens' KnowledgeBaseSummary Prelude.Text
+knowledgeBaseSummary_name = Lens.lens (\KnowledgeBaseSummary' {name} -> name) (\s@KnowledgeBaseSummary' {} a -> s {name = a} :: KnowledgeBaseSummary)
+
+-- | The status of the knowledge base summary.
+knowledgeBaseSummary_status :: Lens.Lens' KnowledgeBaseSummary KnowledgeBaseStatus
+knowledgeBaseSummary_status = Lens.lens (\KnowledgeBaseSummary' {status} -> status) (\s@KnowledgeBaseSummary' {} a -> s {status = a} :: KnowledgeBaseSummary)
+
+instance Data.FromJSON KnowledgeBaseSummary where
+  parseJSON =
+    Data.withObject
+      "KnowledgeBaseSummary"
+      ( \x ->
+          KnowledgeBaseSummary'
+            Prelude.<$> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "renderingConfiguration")
+            Prelude.<*> (x Data..:? "serverSideEncryptionConfiguration")
+            Prelude.<*> (x Data..:? "sourceConfiguration")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "knowledgeBaseArn")
+            Prelude.<*> (x Data..: "knowledgeBaseId")
+            Prelude.<*> (x Data..: "knowledgeBaseType")
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..: "status")
+      )
+
+instance Prelude.Hashable KnowledgeBaseSummary where
+  hashWithSalt _salt KnowledgeBaseSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` renderingConfiguration
+      `Prelude.hashWithSalt` serverSideEncryptionConfiguration
+      `Prelude.hashWithSalt` sourceConfiguration
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` knowledgeBaseArn
+      `Prelude.hashWithSalt` knowledgeBaseId
+      `Prelude.hashWithSalt` knowledgeBaseType
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData KnowledgeBaseSummary where
+  rnf KnowledgeBaseSummary' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf renderingConfiguration
+      `Prelude.seq` Prelude.rnf serverSideEncryptionConfiguration
+      `Prelude.seq` Prelude.rnf sourceConfiguration
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf knowledgeBaseArn
+      `Prelude.seq` Prelude.rnf knowledgeBaseId
+      `Prelude.seq` Prelude.rnf knowledgeBaseType
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/Wisdom/Types/KnowledgeBaseType.hs b/gen/Amazonka/Wisdom/Types/KnowledgeBaseType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/KnowledgeBaseType.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.Wisdom.Types.KnowledgeBaseType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.KnowledgeBaseType
+  ( KnowledgeBaseType
+      ( ..,
+        KnowledgeBaseType_CUSTOM,
+        KnowledgeBaseType_EXTERNAL
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype KnowledgeBaseType = KnowledgeBaseType'
+  { fromKnowledgeBaseType ::
+      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 KnowledgeBaseType_CUSTOM :: KnowledgeBaseType
+pattern KnowledgeBaseType_CUSTOM = KnowledgeBaseType' "CUSTOM"
+
+pattern KnowledgeBaseType_EXTERNAL :: KnowledgeBaseType
+pattern KnowledgeBaseType_EXTERNAL = KnowledgeBaseType' "EXTERNAL"
+
+{-# COMPLETE
+  KnowledgeBaseType_CUSTOM,
+  KnowledgeBaseType_EXTERNAL,
+  KnowledgeBaseType'
+  #-}
diff --git a/gen/Amazonka/Wisdom/Types/NotifyRecommendationsReceivedError.hs b/gen/Amazonka/Wisdom/Types/NotifyRecommendationsReceivedError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/NotifyRecommendationsReceivedError.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.Wisdom.Types.NotifyRecommendationsReceivedError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.NotifyRecommendationsReceivedError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An error occurred when creating a recommendation.
+--
+-- /See:/ 'newNotifyRecommendationsReceivedError' smart constructor.
+data NotifyRecommendationsReceivedError = NotifyRecommendationsReceivedError'
+  { -- | A recommendation is causing an error.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the recommendation that is in error.
+    recommendationId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NotifyRecommendationsReceivedError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'message', 'notifyRecommendationsReceivedError_message' - A recommendation is causing an error.
+--
+-- 'recommendationId', 'notifyRecommendationsReceivedError_recommendationId' - The identifier of the recommendation that is in error.
+newNotifyRecommendationsReceivedError ::
+  NotifyRecommendationsReceivedError
+newNotifyRecommendationsReceivedError =
+  NotifyRecommendationsReceivedError'
+    { message =
+        Prelude.Nothing,
+      recommendationId = Prelude.Nothing
+    }
+
+-- | A recommendation is causing an error.
+notifyRecommendationsReceivedError_message :: Lens.Lens' NotifyRecommendationsReceivedError (Prelude.Maybe Prelude.Text)
+notifyRecommendationsReceivedError_message = Lens.lens (\NotifyRecommendationsReceivedError' {message} -> message) (\s@NotifyRecommendationsReceivedError' {} a -> s {message = a} :: NotifyRecommendationsReceivedError)
+
+-- | The identifier of the recommendation that is in error.
+notifyRecommendationsReceivedError_recommendationId :: Lens.Lens' NotifyRecommendationsReceivedError (Prelude.Maybe Prelude.Text)
+notifyRecommendationsReceivedError_recommendationId = Lens.lens (\NotifyRecommendationsReceivedError' {recommendationId} -> recommendationId) (\s@NotifyRecommendationsReceivedError' {} a -> s {recommendationId = a} :: NotifyRecommendationsReceivedError)
+
+instance
+  Data.FromJSON
+    NotifyRecommendationsReceivedError
+  where
+  parseJSON =
+    Data.withObject
+      "NotifyRecommendationsReceivedError"
+      ( \x ->
+          NotifyRecommendationsReceivedError'
+            Prelude.<$> (x Data..:? "message")
+            Prelude.<*> (x Data..:? "recommendationId")
+      )
+
+instance
+  Prelude.Hashable
+    NotifyRecommendationsReceivedError
+  where
+  hashWithSalt
+    _salt
+    NotifyRecommendationsReceivedError' {..} =
+      _salt
+        `Prelude.hashWithSalt` message
+        `Prelude.hashWithSalt` recommendationId
+
+instance
+  Prelude.NFData
+    NotifyRecommendationsReceivedError
+  where
+  rnf NotifyRecommendationsReceivedError' {..} =
+    Prelude.rnf message
+      `Prelude.seq` Prelude.rnf recommendationId
diff --git a/gen/Amazonka/Wisdom/Types/QueryRecommendationTriggerData.hs b/gen/Amazonka/Wisdom/Types/QueryRecommendationTriggerData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/QueryRecommendationTriggerData.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Wisdom.Types.QueryRecommendationTriggerData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.QueryRecommendationTriggerData 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 associated with the QUERY RecommendationTriggerType.
+--
+-- /See:/ 'newQueryRecommendationTriggerData' smart constructor.
+data QueryRecommendationTriggerData = QueryRecommendationTriggerData'
+  { -- | The text associated with the recommendation trigger.
+    text :: Prelude.Maybe (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'QueryRecommendationTriggerData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'queryRecommendationTriggerData_text' - The text associated with the recommendation trigger.
+newQueryRecommendationTriggerData ::
+  QueryRecommendationTriggerData
+newQueryRecommendationTriggerData =
+  QueryRecommendationTriggerData'
+    { text =
+        Prelude.Nothing
+    }
+
+-- | The text associated with the recommendation trigger.
+queryRecommendationTriggerData_text :: Lens.Lens' QueryRecommendationTriggerData (Prelude.Maybe Prelude.Text)
+queryRecommendationTriggerData_text = Lens.lens (\QueryRecommendationTriggerData' {text} -> text) (\s@QueryRecommendationTriggerData' {} a -> s {text = a} :: QueryRecommendationTriggerData) Prelude.. Lens.mapping Data._Sensitive
+
+instance Data.FromJSON QueryRecommendationTriggerData where
+  parseJSON =
+    Data.withObject
+      "QueryRecommendationTriggerData"
+      ( \x ->
+          QueryRecommendationTriggerData'
+            Prelude.<$> (x Data..:? "text")
+      )
+
+instance
+  Prelude.Hashable
+    QueryRecommendationTriggerData
+  where
+  hashWithSalt
+    _salt
+    QueryRecommendationTriggerData' {..} =
+      _salt `Prelude.hashWithSalt` text
+
+instance
+  Prelude.NFData
+    QueryRecommendationTriggerData
+  where
+  rnf QueryRecommendationTriggerData' {..} =
+    Prelude.rnf text
diff --git a/gen/Amazonka/Wisdom/Types/RecommendationData.hs b/gen/Amazonka/Wisdom/Types/RecommendationData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/RecommendationData.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.Wisdom.Types.RecommendationData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.RecommendationData where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.Wisdom.Types.Document
+import Amazonka.Wisdom.Types.RecommendationType
+import Amazonka.Wisdom.Types.RelevanceLevel
+
+-- | Information about the recommendation.
+--
+-- /See:/ 'newRecommendationData' smart constructor.
+data RecommendationData = RecommendationData'
+  { -- | The relevance level of the recommendation.
+    relevanceLevel :: Prelude.Maybe RelevanceLevel,
+    -- | The relevance score of the recommendation.
+    relevanceScore :: Prelude.Maybe Prelude.Double,
+    -- | The type of recommendation.
+    type' :: Prelude.Maybe RecommendationType,
+    -- | The recommended document.
+    document :: Document,
+    -- | The identifier of the recommendation.
+    recommendationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecommendationData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'relevanceLevel', 'recommendationData_relevanceLevel' - The relevance level of the recommendation.
+--
+-- 'relevanceScore', 'recommendationData_relevanceScore' - The relevance score of the recommendation.
+--
+-- 'type'', 'recommendationData_type' - The type of recommendation.
+--
+-- 'document', 'recommendationData_document' - The recommended document.
+--
+-- 'recommendationId', 'recommendationData_recommendationId' - The identifier of the recommendation.
+newRecommendationData ::
+  -- | 'document'
+  Document ->
+  -- | 'recommendationId'
+  Prelude.Text ->
+  RecommendationData
+newRecommendationData pDocument_ pRecommendationId_ =
+  RecommendationData'
+    { relevanceLevel =
+        Prelude.Nothing,
+      relevanceScore = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      document = pDocument_,
+      recommendationId = pRecommendationId_
+    }
+
+-- | The relevance level of the recommendation.
+recommendationData_relevanceLevel :: Lens.Lens' RecommendationData (Prelude.Maybe RelevanceLevel)
+recommendationData_relevanceLevel = Lens.lens (\RecommendationData' {relevanceLevel} -> relevanceLevel) (\s@RecommendationData' {} a -> s {relevanceLevel = a} :: RecommendationData)
+
+-- | The relevance score of the recommendation.
+recommendationData_relevanceScore :: Lens.Lens' RecommendationData (Prelude.Maybe Prelude.Double)
+recommendationData_relevanceScore = Lens.lens (\RecommendationData' {relevanceScore} -> relevanceScore) (\s@RecommendationData' {} a -> s {relevanceScore = a} :: RecommendationData)
+
+-- | The type of recommendation.
+recommendationData_type :: Lens.Lens' RecommendationData (Prelude.Maybe RecommendationType)
+recommendationData_type = Lens.lens (\RecommendationData' {type'} -> type') (\s@RecommendationData' {} a -> s {type' = a} :: RecommendationData)
+
+-- | The recommended document.
+recommendationData_document :: Lens.Lens' RecommendationData Document
+recommendationData_document = Lens.lens (\RecommendationData' {document} -> document) (\s@RecommendationData' {} a -> s {document = a} :: RecommendationData)
+
+-- | The identifier of the recommendation.
+recommendationData_recommendationId :: Lens.Lens' RecommendationData Prelude.Text
+recommendationData_recommendationId = Lens.lens (\RecommendationData' {recommendationId} -> recommendationId) (\s@RecommendationData' {} a -> s {recommendationId = a} :: RecommendationData)
+
+instance Data.FromJSON RecommendationData where
+  parseJSON =
+    Data.withObject
+      "RecommendationData"
+      ( \x ->
+          RecommendationData'
+            Prelude.<$> (x Data..:? "relevanceLevel")
+            Prelude.<*> (x Data..:? "relevanceScore")
+            Prelude.<*> (x Data..:? "type")
+            Prelude.<*> (x Data..: "document")
+            Prelude.<*> (x Data..: "recommendationId")
+      )
+
+instance Prelude.Hashable RecommendationData where
+  hashWithSalt _salt RecommendationData' {..} =
+    _salt
+      `Prelude.hashWithSalt` relevanceLevel
+      `Prelude.hashWithSalt` relevanceScore
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` document
+      `Prelude.hashWithSalt` recommendationId
+
+instance Prelude.NFData RecommendationData where
+  rnf RecommendationData' {..} =
+    Prelude.rnf relevanceLevel
+      `Prelude.seq` Prelude.rnf relevanceScore
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf document
+      `Prelude.seq` Prelude.rnf recommendationId
diff --git a/gen/Amazonka/Wisdom/Types/RecommendationSourceType.hs b/gen/Amazonka/Wisdom/Types/RecommendationSourceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/RecommendationSourceType.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.Wisdom.Types.RecommendationSourceType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.RecommendationSourceType
+  ( RecommendationSourceType
+      ( ..,
+        RecommendationSourceType_ISSUE_DETECTION,
+        RecommendationSourceType_OTHER,
+        RecommendationSourceType_RULE_EVALUATION
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RecommendationSourceType = RecommendationSourceType'
+  { fromRecommendationSourceType ::
+      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 RecommendationSourceType_ISSUE_DETECTION :: RecommendationSourceType
+pattern RecommendationSourceType_ISSUE_DETECTION = RecommendationSourceType' "ISSUE_DETECTION"
+
+pattern RecommendationSourceType_OTHER :: RecommendationSourceType
+pattern RecommendationSourceType_OTHER = RecommendationSourceType' "OTHER"
+
+pattern RecommendationSourceType_RULE_EVALUATION :: RecommendationSourceType
+pattern RecommendationSourceType_RULE_EVALUATION = RecommendationSourceType' "RULE_EVALUATION"
+
+{-# COMPLETE
+  RecommendationSourceType_ISSUE_DETECTION,
+  RecommendationSourceType_OTHER,
+  RecommendationSourceType_RULE_EVALUATION,
+  RecommendationSourceType'
+  #-}
diff --git a/gen/Amazonka/Wisdom/Types/RecommendationTrigger.hs b/gen/Amazonka/Wisdom/Types/RecommendationTrigger.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/RecommendationTrigger.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.Wisdom.Types.RecommendationTrigger
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.RecommendationTrigger where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.Wisdom.Types.RecommendationSourceType
+import Amazonka.Wisdom.Types.RecommendationTriggerData
+import Amazonka.Wisdom.Types.RecommendationTriggerType
+
+-- | A recommendation trigger provides context on the event that produced the
+-- referenced recommendations. Recommendations are only referenced in
+-- @recommendationIds@ by a single RecommendationTrigger.
+--
+-- /See:/ 'newRecommendationTrigger' smart constructor.
+data RecommendationTrigger = RecommendationTrigger'
+  { -- | A union type containing information related to the trigger.
+    data' :: RecommendationTriggerData,
+    -- | The identifier of the recommendation trigger.
+    id :: Prelude.Text,
+    -- | The identifiers of the recommendations.
+    recommendationIds :: [Prelude.Text],
+    -- | The source of the recommendation trigger.
+    --
+    -- -   ISSUE_DETECTION: The corresponding recommendations were triggered by
+    --     a Contact Lens issue.
+    --
+    -- -   RULE_EVALUATION: The corresponding recommendations were triggered by
+    --     a Contact Lens rule.
+    source :: RecommendationSourceType,
+    -- | The type of recommendation trigger.
+    type' :: RecommendationTriggerType
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecommendationTrigger' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'data'', 'recommendationTrigger_data' - A union type containing information related to the trigger.
+--
+-- 'id', 'recommendationTrigger_id' - The identifier of the recommendation trigger.
+--
+-- 'recommendationIds', 'recommendationTrigger_recommendationIds' - The identifiers of the recommendations.
+--
+-- 'source', 'recommendationTrigger_source' - The source of the recommendation trigger.
+--
+-- -   ISSUE_DETECTION: The corresponding recommendations were triggered by
+--     a Contact Lens issue.
+--
+-- -   RULE_EVALUATION: The corresponding recommendations were triggered by
+--     a Contact Lens rule.
+--
+-- 'type'', 'recommendationTrigger_type' - The type of recommendation trigger.
+newRecommendationTrigger ::
+  -- | 'data''
+  RecommendationTriggerData ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'source'
+  RecommendationSourceType ->
+  -- | 'type''
+  RecommendationTriggerType ->
+  RecommendationTrigger
+newRecommendationTrigger pData_ pId_ pSource_ pType_ =
+  RecommendationTrigger'
+    { data' = pData_,
+      id = pId_,
+      recommendationIds = Prelude.mempty,
+      source = pSource_,
+      type' = pType_
+    }
+
+-- | A union type containing information related to the trigger.
+recommendationTrigger_data :: Lens.Lens' RecommendationTrigger RecommendationTriggerData
+recommendationTrigger_data = Lens.lens (\RecommendationTrigger' {data'} -> data') (\s@RecommendationTrigger' {} a -> s {data' = a} :: RecommendationTrigger)
+
+-- | The identifier of the recommendation trigger.
+recommendationTrigger_id :: Lens.Lens' RecommendationTrigger Prelude.Text
+recommendationTrigger_id = Lens.lens (\RecommendationTrigger' {id} -> id) (\s@RecommendationTrigger' {} a -> s {id = a} :: RecommendationTrigger)
+
+-- | The identifiers of the recommendations.
+recommendationTrigger_recommendationIds :: Lens.Lens' RecommendationTrigger [Prelude.Text]
+recommendationTrigger_recommendationIds = Lens.lens (\RecommendationTrigger' {recommendationIds} -> recommendationIds) (\s@RecommendationTrigger' {} a -> s {recommendationIds = a} :: RecommendationTrigger) Prelude.. Lens.coerced
+
+-- | The source of the recommendation trigger.
+--
+-- -   ISSUE_DETECTION: The corresponding recommendations were triggered by
+--     a Contact Lens issue.
+--
+-- -   RULE_EVALUATION: The corresponding recommendations were triggered by
+--     a Contact Lens rule.
+recommendationTrigger_source :: Lens.Lens' RecommendationTrigger RecommendationSourceType
+recommendationTrigger_source = Lens.lens (\RecommendationTrigger' {source} -> source) (\s@RecommendationTrigger' {} a -> s {source = a} :: RecommendationTrigger)
+
+-- | The type of recommendation trigger.
+recommendationTrigger_type :: Lens.Lens' RecommendationTrigger RecommendationTriggerType
+recommendationTrigger_type = Lens.lens (\RecommendationTrigger' {type'} -> type') (\s@RecommendationTrigger' {} a -> s {type' = a} :: RecommendationTrigger)
+
+instance Data.FromJSON RecommendationTrigger where
+  parseJSON =
+    Data.withObject
+      "RecommendationTrigger"
+      ( \x ->
+          RecommendationTrigger'
+            Prelude.<$> (x Data..: "data")
+            Prelude.<*> (x Data..: "id")
+            Prelude.<*> ( x
+                            Data..:? "recommendationIds"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "source")
+            Prelude.<*> (x Data..: "type")
+      )
+
+instance Prelude.Hashable RecommendationTrigger where
+  hashWithSalt _salt RecommendationTrigger' {..} =
+    _salt
+      `Prelude.hashWithSalt` data'
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` recommendationIds
+      `Prelude.hashWithSalt` source
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData RecommendationTrigger where
+  rnf RecommendationTrigger' {..} =
+    Prelude.rnf data'
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf recommendationIds
+      `Prelude.seq` Prelude.rnf source
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/Wisdom/Types/RecommendationTriggerData.hs b/gen/Amazonka/Wisdom/Types/RecommendationTriggerData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/RecommendationTriggerData.hs
@@ -0,0 +1,70 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Wisdom.Types.RecommendationTriggerData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.RecommendationTriggerData where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.Wisdom.Types.QueryRecommendationTriggerData
+
+-- | A union type containing information related to the trigger.
+--
+-- /See:/ 'newRecommendationTriggerData' smart constructor.
+data RecommendationTriggerData = RecommendationTriggerData'
+  { -- | Data associated with the QUERY RecommendationTriggerType.
+    query :: Prelude.Maybe QueryRecommendationTriggerData
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecommendationTriggerData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'query', 'recommendationTriggerData_query' - Data associated with the QUERY RecommendationTriggerType.
+newRecommendationTriggerData ::
+  RecommendationTriggerData
+newRecommendationTriggerData =
+  RecommendationTriggerData' {query = Prelude.Nothing}
+
+-- | Data associated with the QUERY RecommendationTriggerType.
+recommendationTriggerData_query :: Lens.Lens' RecommendationTriggerData (Prelude.Maybe QueryRecommendationTriggerData)
+recommendationTriggerData_query = Lens.lens (\RecommendationTriggerData' {query} -> query) (\s@RecommendationTriggerData' {} a -> s {query = a} :: RecommendationTriggerData)
+
+instance Data.FromJSON RecommendationTriggerData where
+  parseJSON =
+    Data.withObject
+      "RecommendationTriggerData"
+      ( \x ->
+          RecommendationTriggerData'
+            Prelude.<$> (x Data..:? "query")
+      )
+
+instance Prelude.Hashable RecommendationTriggerData where
+  hashWithSalt _salt RecommendationTriggerData' {..} =
+    _salt `Prelude.hashWithSalt` query
+
+instance Prelude.NFData RecommendationTriggerData where
+  rnf RecommendationTriggerData' {..} =
+    Prelude.rnf query
diff --git a/gen/Amazonka/Wisdom/Types/RecommendationTriggerType.hs b/gen/Amazonka/Wisdom/Types/RecommendationTriggerType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/RecommendationTriggerType.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.Wisdom.Types.RecommendationTriggerType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.RecommendationTriggerType
+  ( RecommendationTriggerType
+      ( ..,
+        RecommendationTriggerType_QUERY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RecommendationTriggerType = RecommendationTriggerType'
+  { fromRecommendationTriggerType ::
+      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 RecommendationTriggerType_QUERY :: RecommendationTriggerType
+pattern RecommendationTriggerType_QUERY = RecommendationTriggerType' "QUERY"
+
+{-# COMPLETE
+  RecommendationTriggerType_QUERY,
+  RecommendationTriggerType'
+  #-}
diff --git a/gen/Amazonka/Wisdom/Types/RecommendationType.hs b/gen/Amazonka/Wisdom/Types/RecommendationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/RecommendationType.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.Wisdom.Types.RecommendationType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.RecommendationType
+  ( RecommendationType
+      ( ..,
+        RecommendationType_KNOWLEDGE_CONTENT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RecommendationType = RecommendationType'
+  { fromRecommendationType ::
+      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 RecommendationType_KNOWLEDGE_CONTENT :: RecommendationType
+pattern RecommendationType_KNOWLEDGE_CONTENT = RecommendationType' "KNOWLEDGE_CONTENT"
+
+{-# COMPLETE
+  RecommendationType_KNOWLEDGE_CONTENT,
+  RecommendationType'
+  #-}
diff --git a/gen/Amazonka/Wisdom/Types/RelevanceLevel.hs b/gen/Amazonka/Wisdom/Types/RelevanceLevel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/RelevanceLevel.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.Wisdom.Types.RelevanceLevel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.RelevanceLevel
+  ( RelevanceLevel
+      ( ..,
+        RelevanceLevel_HIGH,
+        RelevanceLevel_LOW,
+        RelevanceLevel_MEDIUM
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RelevanceLevel = RelevanceLevel'
+  { fromRelevanceLevel ::
+      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 RelevanceLevel_HIGH :: RelevanceLevel
+pattern RelevanceLevel_HIGH = RelevanceLevel' "HIGH"
+
+pattern RelevanceLevel_LOW :: RelevanceLevel
+pattern RelevanceLevel_LOW = RelevanceLevel' "LOW"
+
+pattern RelevanceLevel_MEDIUM :: RelevanceLevel
+pattern RelevanceLevel_MEDIUM = RelevanceLevel' "MEDIUM"
+
+{-# COMPLETE
+  RelevanceLevel_HIGH,
+  RelevanceLevel_LOW,
+  RelevanceLevel_MEDIUM,
+  RelevanceLevel'
+  #-}
diff --git a/gen/Amazonka/Wisdom/Types/RenderingConfiguration.hs b/gen/Amazonka/Wisdom/Types/RenderingConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/RenderingConfiguration.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.Wisdom.Types.RenderingConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.RenderingConfiguration 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 how to render the content.
+--
+-- /See:/ 'newRenderingConfiguration' smart constructor.
+data RenderingConfiguration = RenderingConfiguration'
+  { -- | A URI template containing exactly one variable in
+    -- @${variableName} @format. This can only be set for @EXTERNAL@ knowledge
+    -- bases. For Salesforce and ServiceNow, the variable must be one of the
+    -- following:
+    --
+    -- -   Salesforce: @Id@, @ArticleNumber@, @VersionNumber@, @Title@,
+    --     @PublishStatus@, or @IsDeleted@
+    --
+    -- -   ServiceNow: @number@, @short_description@, @sys_mod_count@,
+    --     @workflow_state@, or @active@
+    --
+    -- >  <p>The variable is replaced with the actual value for a piece of content when calling <a href="https://docs.aws.amazon.com/wisdom/latest/APIReference/API_GetContent.html">GetContent</a>. </p>
+    templateUri :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RenderingConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'templateUri', 'renderingConfiguration_templateUri' - A URI template containing exactly one variable in
+-- @${variableName} @format. This can only be set for @EXTERNAL@ knowledge
+-- bases. For Salesforce and ServiceNow, the variable must be one of the
+-- following:
+--
+-- -   Salesforce: @Id@, @ArticleNumber@, @VersionNumber@, @Title@,
+--     @PublishStatus@, or @IsDeleted@
+--
+-- -   ServiceNow: @number@, @short_description@, @sys_mod_count@,
+--     @workflow_state@, or @active@
+--
+-- >  <p>The variable is replaced with the actual value for a piece of content when calling <a href="https://docs.aws.amazon.com/wisdom/latest/APIReference/API_GetContent.html">GetContent</a>. </p>
+newRenderingConfiguration ::
+  RenderingConfiguration
+newRenderingConfiguration =
+  RenderingConfiguration'
+    { templateUri =
+        Prelude.Nothing
+    }
+
+-- | A URI template containing exactly one variable in
+-- @${variableName} @format. This can only be set for @EXTERNAL@ knowledge
+-- bases. For Salesforce and ServiceNow, the variable must be one of the
+-- following:
+--
+-- -   Salesforce: @Id@, @ArticleNumber@, @VersionNumber@, @Title@,
+--     @PublishStatus@, or @IsDeleted@
+--
+-- -   ServiceNow: @number@, @short_description@, @sys_mod_count@,
+--     @workflow_state@, or @active@
+--
+-- >  <p>The variable is replaced with the actual value for a piece of content when calling <a href="https://docs.aws.amazon.com/wisdom/latest/APIReference/API_GetContent.html">GetContent</a>. </p>
+renderingConfiguration_templateUri :: Lens.Lens' RenderingConfiguration (Prelude.Maybe Prelude.Text)
+renderingConfiguration_templateUri = Lens.lens (\RenderingConfiguration' {templateUri} -> templateUri) (\s@RenderingConfiguration' {} a -> s {templateUri = a} :: RenderingConfiguration)
+
+instance Data.FromJSON RenderingConfiguration where
+  parseJSON =
+    Data.withObject
+      "RenderingConfiguration"
+      ( \x ->
+          RenderingConfiguration'
+            Prelude.<$> (x Data..:? "templateUri")
+      )
+
+instance Prelude.Hashable RenderingConfiguration where
+  hashWithSalt _salt RenderingConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` templateUri
+
+instance Prelude.NFData RenderingConfiguration where
+  rnf RenderingConfiguration' {..} =
+    Prelude.rnf templateUri
+
+instance Data.ToJSON RenderingConfiguration where
+  toJSON RenderingConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("templateUri" Data..=) Prelude.<$> templateUri]
+      )
diff --git a/gen/Amazonka/Wisdom/Types/ResultData.hs b/gen/Amazonka/Wisdom/Types/ResultData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/ResultData.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.Wisdom.Types.ResultData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.ResultData where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.Wisdom.Types.Document
+
+-- | Information about the result.
+--
+-- /See:/ 'newResultData' smart constructor.
+data ResultData = ResultData'
+  { -- | The relevance score of the results.
+    relevanceScore :: Prelude.Maybe Prelude.Double,
+    -- | The document.
+    document :: Document,
+    -- | The identifier of the result data.
+    resultId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResultData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'relevanceScore', 'resultData_relevanceScore' - The relevance score of the results.
+--
+-- 'document', 'resultData_document' - The document.
+--
+-- 'resultId', 'resultData_resultId' - The identifier of the result data.
+newResultData ::
+  -- | 'document'
+  Document ->
+  -- | 'resultId'
+  Prelude.Text ->
+  ResultData
+newResultData pDocument_ pResultId_ =
+  ResultData'
+    { relevanceScore = Prelude.Nothing,
+      document = pDocument_,
+      resultId = pResultId_
+    }
+
+-- | The relevance score of the results.
+resultData_relevanceScore :: Lens.Lens' ResultData (Prelude.Maybe Prelude.Double)
+resultData_relevanceScore = Lens.lens (\ResultData' {relevanceScore} -> relevanceScore) (\s@ResultData' {} a -> s {relevanceScore = a} :: ResultData)
+
+-- | The document.
+resultData_document :: Lens.Lens' ResultData Document
+resultData_document = Lens.lens (\ResultData' {document} -> document) (\s@ResultData' {} a -> s {document = a} :: ResultData)
+
+-- | The identifier of the result data.
+resultData_resultId :: Lens.Lens' ResultData Prelude.Text
+resultData_resultId = Lens.lens (\ResultData' {resultId} -> resultId) (\s@ResultData' {} a -> s {resultId = a} :: ResultData)
+
+instance Data.FromJSON ResultData where
+  parseJSON =
+    Data.withObject
+      "ResultData"
+      ( \x ->
+          ResultData'
+            Prelude.<$> (x Data..:? "relevanceScore")
+            Prelude.<*> (x Data..: "document")
+            Prelude.<*> (x Data..: "resultId")
+      )
+
+instance Prelude.Hashable ResultData where
+  hashWithSalt _salt ResultData' {..} =
+    _salt
+      `Prelude.hashWithSalt` relevanceScore
+      `Prelude.hashWithSalt` document
+      `Prelude.hashWithSalt` resultId
+
+instance Prelude.NFData ResultData where
+  rnf ResultData' {..} =
+    Prelude.rnf relevanceScore
+      `Prelude.seq` Prelude.rnf document
+      `Prelude.seq` Prelude.rnf resultId
diff --git a/gen/Amazonka/Wisdom/Types/SearchExpression.hs b/gen/Amazonka/Wisdom/Types/SearchExpression.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/SearchExpression.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Wisdom.Types.SearchExpression
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.SearchExpression where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.Wisdom.Types.Filter
+
+-- | The search expression.
+--
+-- /See:/ 'newSearchExpression' smart constructor.
+data SearchExpression = SearchExpression'
+  { -- | The search expression filters.
+    filters :: [Filter]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchExpression' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'searchExpression_filters' - The search expression filters.
+newSearchExpression ::
+  SearchExpression
+newSearchExpression =
+  SearchExpression' {filters = Prelude.mempty}
+
+-- | The search expression filters.
+searchExpression_filters :: Lens.Lens' SearchExpression [Filter]
+searchExpression_filters = Lens.lens (\SearchExpression' {filters} -> filters) (\s@SearchExpression' {} a -> s {filters = a} :: SearchExpression) Prelude.. Lens.coerced
+
+instance Prelude.Hashable SearchExpression where
+  hashWithSalt _salt SearchExpression' {..} =
+    _salt `Prelude.hashWithSalt` filters
+
+instance Prelude.NFData SearchExpression where
+  rnf SearchExpression' {..} = Prelude.rnf filters
+
+instance Data.ToJSON SearchExpression where
+  toJSON SearchExpression' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("filters" Data..= filters)]
+      )
diff --git a/gen/Amazonka/Wisdom/Types/ServerSideEncryptionConfiguration.hs b/gen/Amazonka/Wisdom/Types/ServerSideEncryptionConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/ServerSideEncryptionConfiguration.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.Wisdom.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.Wisdom.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
+
+-- | The KMS key used for encryption.
+--
+-- /See:/ 'newServerSideEncryptionConfiguration' smart constructor.
+data ServerSideEncryptionConfiguration = ServerSideEncryptionConfiguration'
+  { -- | The KMS key. For information about valid ID values, see
+    -- <https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id Key identifiers (KeyId)>.
+    kmsKeyId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, 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 KMS key. For information about valid ID values, see
+-- <https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id Key identifiers (KeyId)>.
+newServerSideEncryptionConfiguration ::
+  ServerSideEncryptionConfiguration
+newServerSideEncryptionConfiguration =
+  ServerSideEncryptionConfiguration'
+    { kmsKeyId =
+        Prelude.Nothing
+    }
+
+-- | The KMS key. For information about valid ID values, see
+-- <https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id Key identifiers (KeyId)>.
+serverSideEncryptionConfiguration_kmsKeyId :: Lens.Lens' ServerSideEncryptionConfiguration (Prelude.Maybe Prelude.Text)
+serverSideEncryptionConfiguration_kmsKeyId = Lens.lens (\ServerSideEncryptionConfiguration' {kmsKeyId} -> kmsKeyId) (\s@ServerSideEncryptionConfiguration' {} a -> s {kmsKeyId = a} :: ServerSideEncryptionConfiguration)
+
+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/Wisdom/Types/SessionData.hs b/gen/Amazonka/Wisdom/Types/SessionData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/SessionData.hs
@@ -0,0 +1,126 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Wisdom.Types.SessionData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.SessionData 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 session.
+--
+-- /See:/ 'newSessionData' smart constructor.
+data SessionData = SessionData'
+  { -- | The description of the session.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The tags used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the session.
+    name :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the session.
+    sessionArn :: Prelude.Text,
+    -- | The identifier of the session.
+    sessionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SessionData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'sessionData_description' - The description of the session.
+--
+-- 'tags', 'sessionData_tags' - The tags used to organize, track, or control access for this resource.
+--
+-- 'name', 'sessionData_name' - The name of the session.
+--
+-- 'sessionArn', 'sessionData_sessionArn' - The Amazon Resource Name (ARN) of the session.
+--
+-- 'sessionId', 'sessionData_sessionId' - The identifier of the session.
+newSessionData ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'sessionArn'
+  Prelude.Text ->
+  -- | 'sessionId'
+  Prelude.Text ->
+  SessionData
+newSessionData pName_ pSessionArn_ pSessionId_ =
+  SessionData'
+    { description = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_,
+      sessionArn = pSessionArn_,
+      sessionId = pSessionId_
+    }
+
+-- | The description of the session.
+sessionData_description :: Lens.Lens' SessionData (Prelude.Maybe Prelude.Text)
+sessionData_description = Lens.lens (\SessionData' {description} -> description) (\s@SessionData' {} a -> s {description = a} :: SessionData)
+
+-- | The tags used to organize, track, or control access for this resource.
+sessionData_tags :: Lens.Lens' SessionData (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+sessionData_tags = Lens.lens (\SessionData' {tags} -> tags) (\s@SessionData' {} a -> s {tags = a} :: SessionData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the session.
+sessionData_name :: Lens.Lens' SessionData Prelude.Text
+sessionData_name = Lens.lens (\SessionData' {name} -> name) (\s@SessionData' {} a -> s {name = a} :: SessionData)
+
+-- | The Amazon Resource Name (ARN) of the session.
+sessionData_sessionArn :: Lens.Lens' SessionData Prelude.Text
+sessionData_sessionArn = Lens.lens (\SessionData' {sessionArn} -> sessionArn) (\s@SessionData' {} a -> s {sessionArn = a} :: SessionData)
+
+-- | The identifier of the session.
+sessionData_sessionId :: Lens.Lens' SessionData Prelude.Text
+sessionData_sessionId = Lens.lens (\SessionData' {sessionId} -> sessionId) (\s@SessionData' {} a -> s {sessionId = a} :: SessionData)
+
+instance Data.FromJSON SessionData where
+  parseJSON =
+    Data.withObject
+      "SessionData"
+      ( \x ->
+          SessionData'
+            Prelude.<$> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..: "sessionArn")
+            Prelude.<*> (x Data..: "sessionId")
+      )
+
+instance Prelude.Hashable SessionData where
+  hashWithSalt _salt SessionData' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` sessionArn
+      `Prelude.hashWithSalt` sessionId
+
+instance Prelude.NFData SessionData where
+  rnf SessionData' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf sessionArn
+      `Prelude.seq` Prelude.rnf sessionId
diff --git a/gen/Amazonka/Wisdom/Types/SessionSummary.hs b/gen/Amazonka/Wisdom/Types/SessionSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/SessionSummary.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.Wisdom.Types.SessionSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.SessionSummary 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 about the session.
+--
+-- /See:/ 'newSessionSummary' smart constructor.
+data SessionSummary = SessionSummary'
+  { -- | The Amazon Resource Name (ARN) of the Wisdom assistant.
+    assistantArn :: Prelude.Text,
+    -- | The identifier of the Wisdom assistant.
+    assistantId :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the session.
+    sessionArn :: Prelude.Text,
+    -- | The identifier of the session.
+    sessionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SessionSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assistantArn', 'sessionSummary_assistantArn' - The Amazon Resource Name (ARN) of the Wisdom assistant.
+--
+-- 'assistantId', 'sessionSummary_assistantId' - The identifier of the Wisdom assistant.
+--
+-- 'sessionArn', 'sessionSummary_sessionArn' - The Amazon Resource Name (ARN) of the session.
+--
+-- 'sessionId', 'sessionSummary_sessionId' - The identifier of the session.
+newSessionSummary ::
+  -- | 'assistantArn'
+  Prelude.Text ->
+  -- | 'assistantId'
+  Prelude.Text ->
+  -- | 'sessionArn'
+  Prelude.Text ->
+  -- | 'sessionId'
+  Prelude.Text ->
+  SessionSummary
+newSessionSummary
+  pAssistantArn_
+  pAssistantId_
+  pSessionArn_
+  pSessionId_ =
+    SessionSummary'
+      { assistantArn = pAssistantArn_,
+        assistantId = pAssistantId_,
+        sessionArn = pSessionArn_,
+        sessionId = pSessionId_
+      }
+
+-- | The Amazon Resource Name (ARN) of the Wisdom assistant.
+sessionSummary_assistantArn :: Lens.Lens' SessionSummary Prelude.Text
+sessionSummary_assistantArn = Lens.lens (\SessionSummary' {assistantArn} -> assistantArn) (\s@SessionSummary' {} a -> s {assistantArn = a} :: SessionSummary)
+
+-- | The identifier of the Wisdom assistant.
+sessionSummary_assistantId :: Lens.Lens' SessionSummary Prelude.Text
+sessionSummary_assistantId = Lens.lens (\SessionSummary' {assistantId} -> assistantId) (\s@SessionSummary' {} a -> s {assistantId = a} :: SessionSummary)
+
+-- | The Amazon Resource Name (ARN) of the session.
+sessionSummary_sessionArn :: Lens.Lens' SessionSummary Prelude.Text
+sessionSummary_sessionArn = Lens.lens (\SessionSummary' {sessionArn} -> sessionArn) (\s@SessionSummary' {} a -> s {sessionArn = a} :: SessionSummary)
+
+-- | The identifier of the session.
+sessionSummary_sessionId :: Lens.Lens' SessionSummary Prelude.Text
+sessionSummary_sessionId = Lens.lens (\SessionSummary' {sessionId} -> sessionId) (\s@SessionSummary' {} a -> s {sessionId = a} :: SessionSummary)
+
+instance Data.FromJSON SessionSummary where
+  parseJSON =
+    Data.withObject
+      "SessionSummary"
+      ( \x ->
+          SessionSummary'
+            Prelude.<$> (x Data..: "assistantArn")
+            Prelude.<*> (x Data..: "assistantId")
+            Prelude.<*> (x Data..: "sessionArn")
+            Prelude.<*> (x Data..: "sessionId")
+      )
+
+instance Prelude.Hashable SessionSummary where
+  hashWithSalt _salt SessionSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` assistantArn
+      `Prelude.hashWithSalt` assistantId
+      `Prelude.hashWithSalt` sessionArn
+      `Prelude.hashWithSalt` sessionId
+
+instance Prelude.NFData SessionSummary where
+  rnf SessionSummary' {..} =
+    Prelude.rnf assistantArn
+      `Prelude.seq` Prelude.rnf assistantId
+      `Prelude.seq` Prelude.rnf sessionArn
+      `Prelude.seq` Prelude.rnf sessionId
diff --git a/gen/Amazonka/Wisdom/Types/SourceConfiguration.hs b/gen/Amazonka/Wisdom/Types/SourceConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/Types/SourceConfiguration.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.Wisdom.Types.SourceConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Wisdom.Types.SourceConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.Wisdom.Types.AppIntegrationsConfiguration
+
+-- | Configuration information about the external data source.
+--
+-- /See:/ 'newSourceConfiguration' smart constructor.
+data SourceConfiguration = SourceConfiguration'
+  { -- | Configuration information for Amazon AppIntegrations to automatically
+    -- ingest content.
+    appIntegrations :: Prelude.Maybe AppIntegrationsConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SourceConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appIntegrations', 'sourceConfiguration_appIntegrations' - Configuration information for Amazon AppIntegrations to automatically
+-- ingest content.
+newSourceConfiguration ::
+  SourceConfiguration
+newSourceConfiguration =
+  SourceConfiguration'
+    { appIntegrations =
+        Prelude.Nothing
+    }
+
+-- | Configuration information for Amazon AppIntegrations to automatically
+-- ingest content.
+sourceConfiguration_appIntegrations :: Lens.Lens' SourceConfiguration (Prelude.Maybe AppIntegrationsConfiguration)
+sourceConfiguration_appIntegrations = Lens.lens (\SourceConfiguration' {appIntegrations} -> appIntegrations) (\s@SourceConfiguration' {} a -> s {appIntegrations = a} :: SourceConfiguration)
+
+instance Data.FromJSON SourceConfiguration where
+  parseJSON =
+    Data.withObject
+      "SourceConfiguration"
+      ( \x ->
+          SourceConfiguration'
+            Prelude.<$> (x Data..:? "appIntegrations")
+      )
+
+instance Prelude.Hashable SourceConfiguration where
+  hashWithSalt _salt SourceConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` appIntegrations
+
+instance Prelude.NFData SourceConfiguration where
+  rnf SourceConfiguration' {..} =
+    Prelude.rnf appIntegrations
+
+instance Data.ToJSON SourceConfiguration where
+  toJSON SourceConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("appIntegrations" Data..=)
+              Prelude.<$> appIntegrations
+          ]
+      )
diff --git a/gen/Amazonka/Wisdom/UntagResource.hs b/gen/Amazonka/Wisdom/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/UntagResource.hs
@@ -0,0 +1,163 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Wisdom.UntagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes the specified tags from the specified resource.
+module Amazonka.Wisdom.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+
+    -- * Response Lenses
+    untagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The Amazon Resource Name (ARN) of the resource.
+    resourceArn :: Prelude.Text,
+    -- | The tag keys.
+    tagKeys :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The tag keys.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  -- | 'tagKeys'
+  Prelude.NonEmpty Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ pTagKeys_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Lens.coerced Lens.# pTagKeys_
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | The tag keys.
+untagResource_tagKeys :: Lens.Lens' UntagResource (Prelude.NonEmpty Prelude.Text)
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath UntagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery UntagResource where
+  toQuery UntagResource' {..} =
+    Prelude.mconcat
+      ["tagKeys" Data.=: Data.toQueryList "member" tagKeys]
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'untagResourceResponse_httpStatus' - The response's http status code.
+newUntagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourceResponse
+newUntagResourceResponse pHttpStatus_ =
+  UntagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int
+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf UntagResourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Wisdom/UpdateContent.hs b/gen/Amazonka/Wisdom/UpdateContent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/UpdateContent.hs
@@ -0,0 +1,303 @@
+{-# 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.Wisdom.UpdateContent
+-- 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 information about the content.
+module Amazonka.Wisdom.UpdateContent
+  ( -- * Creating a Request
+    UpdateContent (..),
+    newUpdateContent,
+
+    -- * Request Lenses
+    updateContent_metadata,
+    updateContent_overrideLinkOutUri,
+    updateContent_removeOverrideLinkOutUri,
+    updateContent_revisionId,
+    updateContent_title,
+    updateContent_uploadId,
+    updateContent_contentId,
+    updateContent_knowledgeBaseId,
+
+    -- * Destructuring the Response
+    UpdateContentResponse (..),
+    newUpdateContentResponse,
+
+    -- * Response Lenses
+    updateContentResponse_content,
+    updateContentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newUpdateContent' smart constructor.
+data UpdateContent = UpdateContent'
+  { -- | A key\/value map to store attributes without affecting tagging or
+    -- recommendations. For example, when synchronizing data between an
+    -- external system and Wisdom, you can store an external version identifier
+    -- as metadata to utilize for determining drift.
+    metadata :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The URI for the article. If the knowledge base has a templateUri,
+    -- setting this argument overrides it for this piece of content. To remove
+    -- an existing @overrideLinkOurUri@, exclude this argument and set
+    -- @removeOverrideLinkOutUri@ to true.
+    overrideLinkOutUri :: Prelude.Maybe Prelude.Text,
+    -- | Unset the existing @overrideLinkOutUri@ if it exists.
+    removeOverrideLinkOutUri :: Prelude.Maybe Prelude.Bool,
+    -- | The @revisionId@ of the content resource to update, taken from an
+    -- earlier call to @GetContent@, @GetContentSummary@, @SearchContent@, or
+    -- @ListContents@. If included, this argument acts as an optimistic lock to
+    -- ensure content was not modified since it was last read. If it has been
+    -- modified, this API throws a @PreconditionFailedException@.
+    revisionId :: Prelude.Maybe Prelude.Text,
+    -- | The title of the content.
+    title :: Prelude.Maybe Prelude.Text,
+    -- | A pointer to the uploaded asset. This value is returned by
+    -- <https://docs.aws.amazon.com/wisdom/latest/APIReference/API_StartContentUpload.html StartContentUpload>.
+    uploadId :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the content. Can be either the ID or the ARN. URLs
+    -- cannot contain the ARN.
+    contentId :: Prelude.Text,
+    -- | The identifier of the knowledge base. Can be either the ID or the ARN
+    knowledgeBaseId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateContent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'metadata', 'updateContent_metadata' - A key\/value map to store attributes without affecting tagging or
+-- recommendations. For example, when synchronizing data between an
+-- external system and Wisdom, you can store an external version identifier
+-- as metadata to utilize for determining drift.
+--
+-- 'overrideLinkOutUri', 'updateContent_overrideLinkOutUri' - The URI for the article. If the knowledge base has a templateUri,
+-- setting this argument overrides it for this piece of content. To remove
+-- an existing @overrideLinkOurUri@, exclude this argument and set
+-- @removeOverrideLinkOutUri@ to true.
+--
+-- 'removeOverrideLinkOutUri', 'updateContent_removeOverrideLinkOutUri' - Unset the existing @overrideLinkOutUri@ if it exists.
+--
+-- 'revisionId', 'updateContent_revisionId' - The @revisionId@ of the content resource to update, taken from an
+-- earlier call to @GetContent@, @GetContentSummary@, @SearchContent@, or
+-- @ListContents@. If included, this argument acts as an optimistic lock to
+-- ensure content was not modified since it was last read. If it has been
+-- modified, this API throws a @PreconditionFailedException@.
+--
+-- 'title', 'updateContent_title' - The title of the content.
+--
+-- 'uploadId', 'updateContent_uploadId' - A pointer to the uploaded asset. This value is returned by
+-- <https://docs.aws.amazon.com/wisdom/latest/APIReference/API_StartContentUpload.html StartContentUpload>.
+--
+-- 'contentId', 'updateContent_contentId' - The identifier of the content. Can be either the ID or the ARN. URLs
+-- cannot contain the ARN.
+--
+-- 'knowledgeBaseId', 'updateContent_knowledgeBaseId' - The identifier of the knowledge base. Can be either the ID or the ARN
+newUpdateContent ::
+  -- | 'contentId'
+  Prelude.Text ->
+  -- | 'knowledgeBaseId'
+  Prelude.Text ->
+  UpdateContent
+newUpdateContent pContentId_ pKnowledgeBaseId_ =
+  UpdateContent'
+    { metadata = Prelude.Nothing,
+      overrideLinkOutUri = Prelude.Nothing,
+      removeOverrideLinkOutUri = Prelude.Nothing,
+      revisionId = Prelude.Nothing,
+      title = Prelude.Nothing,
+      uploadId = Prelude.Nothing,
+      contentId = pContentId_,
+      knowledgeBaseId = pKnowledgeBaseId_
+    }
+
+-- | A key\/value map to store attributes without affecting tagging or
+-- recommendations. For example, when synchronizing data between an
+-- external system and Wisdom, you can store an external version identifier
+-- as metadata to utilize for determining drift.
+updateContent_metadata :: Lens.Lens' UpdateContent (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateContent_metadata = Lens.lens (\UpdateContent' {metadata} -> metadata) (\s@UpdateContent' {} a -> s {metadata = a} :: UpdateContent) Prelude.. Lens.mapping Lens.coerced
+
+-- | The URI for the article. If the knowledge base has a templateUri,
+-- setting this argument overrides it for this piece of content. To remove
+-- an existing @overrideLinkOurUri@, exclude this argument and set
+-- @removeOverrideLinkOutUri@ to true.
+updateContent_overrideLinkOutUri :: Lens.Lens' UpdateContent (Prelude.Maybe Prelude.Text)
+updateContent_overrideLinkOutUri = Lens.lens (\UpdateContent' {overrideLinkOutUri} -> overrideLinkOutUri) (\s@UpdateContent' {} a -> s {overrideLinkOutUri = a} :: UpdateContent)
+
+-- | Unset the existing @overrideLinkOutUri@ if it exists.
+updateContent_removeOverrideLinkOutUri :: Lens.Lens' UpdateContent (Prelude.Maybe Prelude.Bool)
+updateContent_removeOverrideLinkOutUri = Lens.lens (\UpdateContent' {removeOverrideLinkOutUri} -> removeOverrideLinkOutUri) (\s@UpdateContent' {} a -> s {removeOverrideLinkOutUri = a} :: UpdateContent)
+
+-- | The @revisionId@ of the content resource to update, taken from an
+-- earlier call to @GetContent@, @GetContentSummary@, @SearchContent@, or
+-- @ListContents@. If included, this argument acts as an optimistic lock to
+-- ensure content was not modified since it was last read. If it has been
+-- modified, this API throws a @PreconditionFailedException@.
+updateContent_revisionId :: Lens.Lens' UpdateContent (Prelude.Maybe Prelude.Text)
+updateContent_revisionId = Lens.lens (\UpdateContent' {revisionId} -> revisionId) (\s@UpdateContent' {} a -> s {revisionId = a} :: UpdateContent)
+
+-- | The title of the content.
+updateContent_title :: Lens.Lens' UpdateContent (Prelude.Maybe Prelude.Text)
+updateContent_title = Lens.lens (\UpdateContent' {title} -> title) (\s@UpdateContent' {} a -> s {title = a} :: UpdateContent)
+
+-- | A pointer to the uploaded asset. This value is returned by
+-- <https://docs.aws.amazon.com/wisdom/latest/APIReference/API_StartContentUpload.html StartContentUpload>.
+updateContent_uploadId :: Lens.Lens' UpdateContent (Prelude.Maybe Prelude.Text)
+updateContent_uploadId = Lens.lens (\UpdateContent' {uploadId} -> uploadId) (\s@UpdateContent' {} a -> s {uploadId = a} :: UpdateContent)
+
+-- | The identifier of the content. Can be either the ID or the ARN. URLs
+-- cannot contain the ARN.
+updateContent_contentId :: Lens.Lens' UpdateContent Prelude.Text
+updateContent_contentId = Lens.lens (\UpdateContent' {contentId} -> contentId) (\s@UpdateContent' {} a -> s {contentId = a} :: UpdateContent)
+
+-- | The identifier of the knowledge base. Can be either the ID or the ARN
+updateContent_knowledgeBaseId :: Lens.Lens' UpdateContent Prelude.Text
+updateContent_knowledgeBaseId = Lens.lens (\UpdateContent' {knowledgeBaseId} -> knowledgeBaseId) (\s@UpdateContent' {} a -> s {knowledgeBaseId = a} :: UpdateContent)
+
+instance Core.AWSRequest UpdateContent where
+  type
+    AWSResponse UpdateContent =
+      UpdateContentResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateContentResponse'
+            Prelude.<$> (x Data..?> "content")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateContent where
+  hashWithSalt _salt UpdateContent' {..} =
+    _salt
+      `Prelude.hashWithSalt` metadata
+      `Prelude.hashWithSalt` overrideLinkOutUri
+      `Prelude.hashWithSalt` removeOverrideLinkOutUri
+      `Prelude.hashWithSalt` revisionId
+      `Prelude.hashWithSalt` title
+      `Prelude.hashWithSalt` uploadId
+      `Prelude.hashWithSalt` contentId
+      `Prelude.hashWithSalt` knowledgeBaseId
+
+instance Prelude.NFData UpdateContent where
+  rnf UpdateContent' {..} =
+    Prelude.rnf metadata
+      `Prelude.seq` Prelude.rnf overrideLinkOutUri
+      `Prelude.seq` Prelude.rnf removeOverrideLinkOutUri
+      `Prelude.seq` Prelude.rnf revisionId
+      `Prelude.seq` Prelude.rnf title
+      `Prelude.seq` Prelude.rnf uploadId
+      `Prelude.seq` Prelude.rnf contentId
+      `Prelude.seq` Prelude.rnf knowledgeBaseId
+
+instance Data.ToHeaders UpdateContent where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateContent where
+  toJSON UpdateContent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("metadata" Data..=) Prelude.<$> metadata,
+            ("overrideLinkOutUri" Data..=)
+              Prelude.<$> overrideLinkOutUri,
+            ("removeOverrideLinkOutUri" Data..=)
+              Prelude.<$> removeOverrideLinkOutUri,
+            ("revisionId" Data..=) Prelude.<$> revisionId,
+            ("title" Data..=) Prelude.<$> title,
+            ("uploadId" Data..=) Prelude.<$> uploadId
+          ]
+      )
+
+instance Data.ToPath UpdateContent where
+  toPath UpdateContent' {..} =
+    Prelude.mconcat
+      [ "/knowledgeBases/",
+        Data.toBS knowledgeBaseId,
+        "/contents/",
+        Data.toBS contentId
+      ]
+
+instance Data.ToQuery UpdateContent where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateContentResponse' smart constructor.
+data UpdateContentResponse = UpdateContentResponse'
+  { -- | The content.
+    content :: Prelude.Maybe ContentData,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateContentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'content', 'updateContentResponse_content' - The content.
+--
+-- 'httpStatus', 'updateContentResponse_httpStatus' - The response's http status code.
+newUpdateContentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateContentResponse
+newUpdateContentResponse pHttpStatus_ =
+  UpdateContentResponse'
+    { content = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The content.
+updateContentResponse_content :: Lens.Lens' UpdateContentResponse (Prelude.Maybe ContentData)
+updateContentResponse_content = Lens.lens (\UpdateContentResponse' {content} -> content) (\s@UpdateContentResponse' {} a -> s {content = a} :: UpdateContentResponse)
+
+-- | The response's http status code.
+updateContentResponse_httpStatus :: Lens.Lens' UpdateContentResponse Prelude.Int
+updateContentResponse_httpStatus = Lens.lens (\UpdateContentResponse' {httpStatus} -> httpStatus) (\s@UpdateContentResponse' {} a -> s {httpStatus = a} :: UpdateContentResponse)
+
+instance Prelude.NFData UpdateContentResponse where
+  rnf UpdateContentResponse' {..} =
+    Prelude.rnf content
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Wisdom/UpdateKnowledgeBaseTemplateUri.hs b/gen/Amazonka/Wisdom/UpdateKnowledgeBaseTemplateUri.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/UpdateKnowledgeBaseTemplateUri.hs
@@ -0,0 +1,216 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Wisdom.UpdateKnowledgeBaseTemplateUri
+-- 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 template URI of a knowledge base. This is only supported for
+-- knowledge bases of type EXTERNAL. Include a single variable in
+-- @${variable}@ format; this interpolated by Wisdom using ingested
+-- content. For example, if you ingest a Salesforce article, it has an @Id@
+-- value, and you can set the template URI to
+-- @https:\/\/myInstanceName.lightning.force.com\/lightning\/r\/Knowledge__kav\/*${Id}*\/view@.
+module Amazonka.Wisdom.UpdateKnowledgeBaseTemplateUri
+  ( -- * Creating a Request
+    UpdateKnowledgeBaseTemplateUri (..),
+    newUpdateKnowledgeBaseTemplateUri,
+
+    -- * Request Lenses
+    updateKnowledgeBaseTemplateUri_knowledgeBaseId,
+    updateKnowledgeBaseTemplateUri_templateUri,
+
+    -- * Destructuring the Response
+    UpdateKnowledgeBaseTemplateUriResponse (..),
+    newUpdateKnowledgeBaseTemplateUriResponse,
+
+    -- * Response Lenses
+    updateKnowledgeBaseTemplateUriResponse_knowledgeBase,
+    updateKnowledgeBaseTemplateUriResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Wisdom.Types
+
+-- | /See:/ 'newUpdateKnowledgeBaseTemplateUri' smart constructor.
+data UpdateKnowledgeBaseTemplateUri = UpdateKnowledgeBaseTemplateUri'
+  { -- | The identifier of the knowledge base. Can be either the ID or the ARN.
+    -- URLs cannot contain the ARN.
+    knowledgeBaseId :: Prelude.Text,
+    -- | The template URI to update.
+    templateUri :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateKnowledgeBaseTemplateUri' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'knowledgeBaseId', 'updateKnowledgeBaseTemplateUri_knowledgeBaseId' - The identifier of the knowledge base. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+--
+-- 'templateUri', 'updateKnowledgeBaseTemplateUri_templateUri' - The template URI to update.
+newUpdateKnowledgeBaseTemplateUri ::
+  -- | 'knowledgeBaseId'
+  Prelude.Text ->
+  -- | 'templateUri'
+  Prelude.Text ->
+  UpdateKnowledgeBaseTemplateUri
+newUpdateKnowledgeBaseTemplateUri
+  pKnowledgeBaseId_
+  pTemplateUri_ =
+    UpdateKnowledgeBaseTemplateUri'
+      { knowledgeBaseId =
+          pKnowledgeBaseId_,
+        templateUri = pTemplateUri_
+      }
+
+-- | The identifier of the knowledge base. Can be either the ID or the ARN.
+-- URLs cannot contain the ARN.
+updateKnowledgeBaseTemplateUri_knowledgeBaseId :: Lens.Lens' UpdateKnowledgeBaseTemplateUri Prelude.Text
+updateKnowledgeBaseTemplateUri_knowledgeBaseId = Lens.lens (\UpdateKnowledgeBaseTemplateUri' {knowledgeBaseId} -> knowledgeBaseId) (\s@UpdateKnowledgeBaseTemplateUri' {} a -> s {knowledgeBaseId = a} :: UpdateKnowledgeBaseTemplateUri)
+
+-- | The template URI to update.
+updateKnowledgeBaseTemplateUri_templateUri :: Lens.Lens' UpdateKnowledgeBaseTemplateUri Prelude.Text
+updateKnowledgeBaseTemplateUri_templateUri = Lens.lens (\UpdateKnowledgeBaseTemplateUri' {templateUri} -> templateUri) (\s@UpdateKnowledgeBaseTemplateUri' {} a -> s {templateUri = a} :: UpdateKnowledgeBaseTemplateUri)
+
+instance
+  Core.AWSRequest
+    UpdateKnowledgeBaseTemplateUri
+  where
+  type
+    AWSResponse UpdateKnowledgeBaseTemplateUri =
+      UpdateKnowledgeBaseTemplateUriResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateKnowledgeBaseTemplateUriResponse'
+            Prelude.<$> (x Data..?> "knowledgeBase")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    UpdateKnowledgeBaseTemplateUri
+  where
+  hashWithSalt
+    _salt
+    UpdateKnowledgeBaseTemplateUri' {..} =
+      _salt
+        `Prelude.hashWithSalt` knowledgeBaseId
+        `Prelude.hashWithSalt` templateUri
+
+instance
+  Prelude.NFData
+    UpdateKnowledgeBaseTemplateUri
+  where
+  rnf UpdateKnowledgeBaseTemplateUri' {..} =
+    Prelude.rnf knowledgeBaseId
+      `Prelude.seq` Prelude.rnf templateUri
+
+instance
+  Data.ToHeaders
+    UpdateKnowledgeBaseTemplateUri
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateKnowledgeBaseTemplateUri where
+  toJSON UpdateKnowledgeBaseTemplateUri' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("templateUri" Data..= templateUri)]
+      )
+
+instance Data.ToPath UpdateKnowledgeBaseTemplateUri where
+  toPath UpdateKnowledgeBaseTemplateUri' {..} =
+    Prelude.mconcat
+      [ "/knowledgeBases/",
+        Data.toBS knowledgeBaseId,
+        "/templateUri"
+      ]
+
+instance Data.ToQuery UpdateKnowledgeBaseTemplateUri where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateKnowledgeBaseTemplateUriResponse' smart constructor.
+data UpdateKnowledgeBaseTemplateUriResponse = UpdateKnowledgeBaseTemplateUriResponse'
+  { -- | The knowledge base to update.
+    knowledgeBase :: Prelude.Maybe KnowledgeBaseData,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateKnowledgeBaseTemplateUriResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'knowledgeBase', 'updateKnowledgeBaseTemplateUriResponse_knowledgeBase' - The knowledge base to update.
+--
+-- 'httpStatus', 'updateKnowledgeBaseTemplateUriResponse_httpStatus' - The response's http status code.
+newUpdateKnowledgeBaseTemplateUriResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateKnowledgeBaseTemplateUriResponse
+newUpdateKnowledgeBaseTemplateUriResponse
+  pHttpStatus_ =
+    UpdateKnowledgeBaseTemplateUriResponse'
+      { knowledgeBase =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The knowledge base to update.
+updateKnowledgeBaseTemplateUriResponse_knowledgeBase :: Lens.Lens' UpdateKnowledgeBaseTemplateUriResponse (Prelude.Maybe KnowledgeBaseData)
+updateKnowledgeBaseTemplateUriResponse_knowledgeBase = Lens.lens (\UpdateKnowledgeBaseTemplateUriResponse' {knowledgeBase} -> knowledgeBase) (\s@UpdateKnowledgeBaseTemplateUriResponse' {} a -> s {knowledgeBase = a} :: UpdateKnowledgeBaseTemplateUriResponse)
+
+-- | The response's http status code.
+updateKnowledgeBaseTemplateUriResponse_httpStatus :: Lens.Lens' UpdateKnowledgeBaseTemplateUriResponse Prelude.Int
+updateKnowledgeBaseTemplateUriResponse_httpStatus = Lens.lens (\UpdateKnowledgeBaseTemplateUriResponse' {httpStatus} -> httpStatus) (\s@UpdateKnowledgeBaseTemplateUriResponse' {} a -> s {httpStatus = a} :: UpdateKnowledgeBaseTemplateUriResponse)
+
+instance
+  Prelude.NFData
+    UpdateKnowledgeBaseTemplateUriResponse
+  where
+  rnf UpdateKnowledgeBaseTemplateUriResponse' {..} =
+    Prelude.rnf knowledgeBase
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Wisdom/Waiters.hs b/gen/Amazonka/Wisdom/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Wisdom/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.Wisdom.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.Wisdom.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.Wisdom.Lens
+import Amazonka.Wisdom.Types
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,23 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Main (main) where
+
+import Test.Amazonka.Wisdom
+import Test.Amazonka.Wisdom.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "Wisdom"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/Wisdom.hs b/test/Test/Amazonka/Gen/Wisdom.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/Wisdom.hs
@@ -0,0 +1,658 @@
+{-# 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.Wisdom
+-- Copyright   : (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.Wisdom where
+
+import Amazonka.Wisdom
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.Prelude
+import Test.Amazonka.Wisdom.Internal
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestCreateAssistant $
+--             newCreateAssistant
+--
+--         , requestCreateAssistantAssociation $
+--             newCreateAssistantAssociation
+--
+--         , requestCreateContent $
+--             newCreateContent
+--
+--         , requestCreateKnowledgeBase $
+--             newCreateKnowledgeBase
+--
+--         , requestCreateSession $
+--             newCreateSession
+--
+--         , requestDeleteAssistant $
+--             newDeleteAssistant
+--
+--         , requestDeleteAssistantAssociation $
+--             newDeleteAssistantAssociation
+--
+--         , requestDeleteContent $
+--             newDeleteContent
+--
+--         , requestDeleteKnowledgeBase $
+--             newDeleteKnowledgeBase
+--
+--         , requestGetAssistant $
+--             newGetAssistant
+--
+--         , requestGetAssistantAssociation $
+--             newGetAssistantAssociation
+--
+--         , requestGetContent $
+--             newGetContent
+--
+--         , requestGetContentSummary $
+--             newGetContentSummary
+--
+--         , requestGetKnowledgeBase $
+--             newGetKnowledgeBase
+--
+--         , requestGetRecommendations $
+--             newGetRecommendations
+--
+--         , requestGetSession $
+--             newGetSession
+--
+--         , requestListAssistantAssociations $
+--             newListAssistantAssociations
+--
+--         , requestListAssistants $
+--             newListAssistants
+--
+--         , requestListContents $
+--             newListContents
+--
+--         , requestListKnowledgeBases $
+--             newListKnowledgeBases
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestNotifyRecommendationsReceived $
+--             newNotifyRecommendationsReceived
+--
+--         , requestQueryAssistant $
+--             newQueryAssistant
+--
+--         , requestRemoveKnowledgeBaseTemplateUri $
+--             newRemoveKnowledgeBaseTemplateUri
+--
+--         , requestSearchContent $
+--             newSearchContent
+--
+--         , requestSearchSessions $
+--             newSearchSessions
+--
+--         , requestStartContentUpload $
+--             newStartContentUpload
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateContent $
+--             newUpdateContent
+--
+--         , requestUpdateKnowledgeBaseTemplateUri $
+--             newUpdateKnowledgeBaseTemplateUri
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseCreateAssistant $
+--             newCreateAssistantResponse
+--
+--         , responseCreateAssistantAssociation $
+--             newCreateAssistantAssociationResponse
+--
+--         , responseCreateContent $
+--             newCreateContentResponse
+--
+--         , responseCreateKnowledgeBase $
+--             newCreateKnowledgeBaseResponse
+--
+--         , responseCreateSession $
+--             newCreateSessionResponse
+--
+--         , responseDeleteAssistant $
+--             newDeleteAssistantResponse
+--
+--         , responseDeleteAssistantAssociation $
+--             newDeleteAssistantAssociationResponse
+--
+--         , responseDeleteContent $
+--             newDeleteContentResponse
+--
+--         , responseDeleteKnowledgeBase $
+--             newDeleteKnowledgeBaseResponse
+--
+--         , responseGetAssistant $
+--             newGetAssistantResponse
+--
+--         , responseGetAssistantAssociation $
+--             newGetAssistantAssociationResponse
+--
+--         , responseGetContent $
+--             newGetContentResponse
+--
+--         , responseGetContentSummary $
+--             newGetContentSummaryResponse
+--
+--         , responseGetKnowledgeBase $
+--             newGetKnowledgeBaseResponse
+--
+--         , responseGetRecommendations $
+--             newGetRecommendationsResponse
+--
+--         , responseGetSession $
+--             newGetSessionResponse
+--
+--         , responseListAssistantAssociations $
+--             newListAssistantAssociationsResponse
+--
+--         , responseListAssistants $
+--             newListAssistantsResponse
+--
+--         , responseListContents $
+--             newListContentsResponse
+--
+--         , responseListKnowledgeBases $
+--             newListKnowledgeBasesResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseNotifyRecommendationsReceived $
+--             newNotifyRecommendationsReceivedResponse
+--
+--         , responseQueryAssistant $
+--             newQueryAssistantResponse
+--
+--         , responseRemoveKnowledgeBaseTemplateUri $
+--             newRemoveKnowledgeBaseTemplateUriResponse
+--
+--         , responseSearchContent $
+--             newSearchContentResponse
+--
+--         , responseSearchSessions $
+--             newSearchSessionsResponse
+--
+--         , responseStartContentUpload $
+--             newStartContentUploadResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateContent $
+--             newUpdateContentResponse
+--
+--         , responseUpdateKnowledgeBaseTemplateUri $
+--             newUpdateKnowledgeBaseTemplateUriResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestCreateAssistant :: CreateAssistant -> TestTree
+requestCreateAssistant =
+  req
+    "CreateAssistant"
+    "fixture/CreateAssistant.yaml"
+
+requestCreateAssistantAssociation :: CreateAssistantAssociation -> TestTree
+requestCreateAssistantAssociation =
+  req
+    "CreateAssistantAssociation"
+    "fixture/CreateAssistantAssociation.yaml"
+
+requestCreateContent :: CreateContent -> TestTree
+requestCreateContent =
+  req
+    "CreateContent"
+    "fixture/CreateContent.yaml"
+
+requestCreateKnowledgeBase :: CreateKnowledgeBase -> TestTree
+requestCreateKnowledgeBase =
+  req
+    "CreateKnowledgeBase"
+    "fixture/CreateKnowledgeBase.yaml"
+
+requestCreateSession :: CreateSession -> TestTree
+requestCreateSession =
+  req
+    "CreateSession"
+    "fixture/CreateSession.yaml"
+
+requestDeleteAssistant :: DeleteAssistant -> TestTree
+requestDeleteAssistant =
+  req
+    "DeleteAssistant"
+    "fixture/DeleteAssistant.yaml"
+
+requestDeleteAssistantAssociation :: DeleteAssistantAssociation -> TestTree
+requestDeleteAssistantAssociation =
+  req
+    "DeleteAssistantAssociation"
+    "fixture/DeleteAssistantAssociation.yaml"
+
+requestDeleteContent :: DeleteContent -> TestTree
+requestDeleteContent =
+  req
+    "DeleteContent"
+    "fixture/DeleteContent.yaml"
+
+requestDeleteKnowledgeBase :: DeleteKnowledgeBase -> TestTree
+requestDeleteKnowledgeBase =
+  req
+    "DeleteKnowledgeBase"
+    "fixture/DeleteKnowledgeBase.yaml"
+
+requestGetAssistant :: GetAssistant -> TestTree
+requestGetAssistant =
+  req
+    "GetAssistant"
+    "fixture/GetAssistant.yaml"
+
+requestGetAssistantAssociation :: GetAssistantAssociation -> TestTree
+requestGetAssistantAssociation =
+  req
+    "GetAssistantAssociation"
+    "fixture/GetAssistantAssociation.yaml"
+
+requestGetContent :: GetContent -> TestTree
+requestGetContent =
+  req
+    "GetContent"
+    "fixture/GetContent.yaml"
+
+requestGetContentSummary :: GetContentSummary -> TestTree
+requestGetContentSummary =
+  req
+    "GetContentSummary"
+    "fixture/GetContentSummary.yaml"
+
+requestGetKnowledgeBase :: GetKnowledgeBase -> TestTree
+requestGetKnowledgeBase =
+  req
+    "GetKnowledgeBase"
+    "fixture/GetKnowledgeBase.yaml"
+
+requestGetRecommendations :: GetRecommendations -> TestTree
+requestGetRecommendations =
+  req
+    "GetRecommendations"
+    "fixture/GetRecommendations.yaml"
+
+requestGetSession :: GetSession -> TestTree
+requestGetSession =
+  req
+    "GetSession"
+    "fixture/GetSession.yaml"
+
+requestListAssistantAssociations :: ListAssistantAssociations -> TestTree
+requestListAssistantAssociations =
+  req
+    "ListAssistantAssociations"
+    "fixture/ListAssistantAssociations.yaml"
+
+requestListAssistants :: ListAssistants -> TestTree
+requestListAssistants =
+  req
+    "ListAssistants"
+    "fixture/ListAssistants.yaml"
+
+requestListContents :: ListContents -> TestTree
+requestListContents =
+  req
+    "ListContents"
+    "fixture/ListContents.yaml"
+
+requestListKnowledgeBases :: ListKnowledgeBases -> TestTree
+requestListKnowledgeBases =
+  req
+    "ListKnowledgeBases"
+    "fixture/ListKnowledgeBases.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestNotifyRecommendationsReceived :: NotifyRecommendationsReceived -> TestTree
+requestNotifyRecommendationsReceived =
+  req
+    "NotifyRecommendationsReceived"
+    "fixture/NotifyRecommendationsReceived.yaml"
+
+requestQueryAssistant :: QueryAssistant -> TestTree
+requestQueryAssistant =
+  req
+    "QueryAssistant"
+    "fixture/QueryAssistant.yaml"
+
+requestRemoveKnowledgeBaseTemplateUri :: RemoveKnowledgeBaseTemplateUri -> TestTree
+requestRemoveKnowledgeBaseTemplateUri =
+  req
+    "RemoveKnowledgeBaseTemplateUri"
+    "fixture/RemoveKnowledgeBaseTemplateUri.yaml"
+
+requestSearchContent :: SearchContent -> TestTree
+requestSearchContent =
+  req
+    "SearchContent"
+    "fixture/SearchContent.yaml"
+
+requestSearchSessions :: SearchSessions -> TestTree
+requestSearchSessions =
+  req
+    "SearchSessions"
+    "fixture/SearchSessions.yaml"
+
+requestStartContentUpload :: StartContentUpload -> TestTree
+requestStartContentUpload =
+  req
+    "StartContentUpload"
+    "fixture/StartContentUpload.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateContent :: UpdateContent -> TestTree
+requestUpdateContent =
+  req
+    "UpdateContent"
+    "fixture/UpdateContent.yaml"
+
+requestUpdateKnowledgeBaseTemplateUri :: UpdateKnowledgeBaseTemplateUri -> TestTree
+requestUpdateKnowledgeBaseTemplateUri =
+  req
+    "UpdateKnowledgeBaseTemplateUri"
+    "fixture/UpdateKnowledgeBaseTemplateUri.yaml"
+
+-- Responses
+
+responseCreateAssistant :: CreateAssistantResponse -> TestTree
+responseCreateAssistant =
+  res
+    "CreateAssistantResponse"
+    "fixture/CreateAssistantResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateAssistant)
+
+responseCreateAssistantAssociation :: CreateAssistantAssociationResponse -> TestTree
+responseCreateAssistantAssociation =
+  res
+    "CreateAssistantAssociationResponse"
+    "fixture/CreateAssistantAssociationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateAssistantAssociation)
+
+responseCreateContent :: CreateContentResponse -> TestTree
+responseCreateContent =
+  res
+    "CreateContentResponse"
+    "fixture/CreateContentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateContent)
+
+responseCreateKnowledgeBase :: CreateKnowledgeBaseResponse -> TestTree
+responseCreateKnowledgeBase =
+  res
+    "CreateKnowledgeBaseResponse"
+    "fixture/CreateKnowledgeBaseResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateKnowledgeBase)
+
+responseCreateSession :: CreateSessionResponse -> TestTree
+responseCreateSession =
+  res
+    "CreateSessionResponse"
+    "fixture/CreateSessionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateSession)
+
+responseDeleteAssistant :: DeleteAssistantResponse -> TestTree
+responseDeleteAssistant =
+  res
+    "DeleteAssistantResponse"
+    "fixture/DeleteAssistantResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAssistant)
+
+responseDeleteAssistantAssociation :: DeleteAssistantAssociationResponse -> TestTree
+responseDeleteAssistantAssociation =
+  res
+    "DeleteAssistantAssociationResponse"
+    "fixture/DeleteAssistantAssociationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAssistantAssociation)
+
+responseDeleteContent :: DeleteContentResponse -> TestTree
+responseDeleteContent =
+  res
+    "DeleteContentResponse"
+    "fixture/DeleteContentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteContent)
+
+responseDeleteKnowledgeBase :: DeleteKnowledgeBaseResponse -> TestTree
+responseDeleteKnowledgeBase =
+  res
+    "DeleteKnowledgeBaseResponse"
+    "fixture/DeleteKnowledgeBaseResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteKnowledgeBase)
+
+responseGetAssistant :: GetAssistantResponse -> TestTree
+responseGetAssistant =
+  res
+    "GetAssistantResponse"
+    "fixture/GetAssistantResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAssistant)
+
+responseGetAssistantAssociation :: GetAssistantAssociationResponse -> TestTree
+responseGetAssistantAssociation =
+  res
+    "GetAssistantAssociationResponse"
+    "fixture/GetAssistantAssociationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAssistantAssociation)
+
+responseGetContent :: GetContentResponse -> TestTree
+responseGetContent =
+  res
+    "GetContentResponse"
+    "fixture/GetContentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetContent)
+
+responseGetContentSummary :: GetContentSummaryResponse -> TestTree
+responseGetContentSummary =
+  res
+    "GetContentSummaryResponse"
+    "fixture/GetContentSummaryResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetContentSummary)
+
+responseGetKnowledgeBase :: GetKnowledgeBaseResponse -> TestTree
+responseGetKnowledgeBase =
+  res
+    "GetKnowledgeBaseResponse"
+    "fixture/GetKnowledgeBaseResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetKnowledgeBase)
+
+responseGetRecommendations :: GetRecommendationsResponse -> TestTree
+responseGetRecommendations =
+  res
+    "GetRecommendationsResponse"
+    "fixture/GetRecommendationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetRecommendations)
+
+responseGetSession :: GetSessionResponse -> TestTree
+responseGetSession =
+  res
+    "GetSessionResponse"
+    "fixture/GetSessionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetSession)
+
+responseListAssistantAssociations :: ListAssistantAssociationsResponse -> TestTree
+responseListAssistantAssociations =
+  res
+    "ListAssistantAssociationsResponse"
+    "fixture/ListAssistantAssociationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAssistantAssociations)
+
+responseListAssistants :: ListAssistantsResponse -> TestTree
+responseListAssistants =
+  res
+    "ListAssistantsResponse"
+    "fixture/ListAssistantsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAssistants)
+
+responseListContents :: ListContentsResponse -> TestTree
+responseListContents =
+  res
+    "ListContentsResponse"
+    "fixture/ListContentsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListContents)
+
+responseListKnowledgeBases :: ListKnowledgeBasesResponse -> TestTree
+responseListKnowledgeBases =
+  res
+    "ListKnowledgeBasesResponse"
+    "fixture/ListKnowledgeBasesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListKnowledgeBases)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseNotifyRecommendationsReceived :: NotifyRecommendationsReceivedResponse -> TestTree
+responseNotifyRecommendationsReceived =
+  res
+    "NotifyRecommendationsReceivedResponse"
+    "fixture/NotifyRecommendationsReceivedResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy NotifyRecommendationsReceived)
+
+responseQueryAssistant :: QueryAssistantResponse -> TestTree
+responseQueryAssistant =
+  res
+    "QueryAssistantResponse"
+    "fixture/QueryAssistantResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy QueryAssistant)
+
+responseRemoveKnowledgeBaseTemplateUri :: RemoveKnowledgeBaseTemplateUriResponse -> TestTree
+responseRemoveKnowledgeBaseTemplateUri =
+  res
+    "RemoveKnowledgeBaseTemplateUriResponse"
+    "fixture/RemoveKnowledgeBaseTemplateUriResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RemoveKnowledgeBaseTemplateUri)
+
+responseSearchContent :: SearchContentResponse -> TestTree
+responseSearchContent =
+  res
+    "SearchContentResponse"
+    "fixture/SearchContentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SearchContent)
+
+responseSearchSessions :: SearchSessionsResponse -> TestTree
+responseSearchSessions =
+  res
+    "SearchSessionsResponse"
+    "fixture/SearchSessionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SearchSessions)
+
+responseStartContentUpload :: StartContentUploadResponse -> TestTree
+responseStartContentUpload =
+  res
+    "StartContentUploadResponse"
+    "fixture/StartContentUploadResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartContentUpload)
+
+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)
+
+responseUpdateContent :: UpdateContentResponse -> TestTree
+responseUpdateContent =
+  res
+    "UpdateContentResponse"
+    "fixture/UpdateContentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateContent)
+
+responseUpdateKnowledgeBaseTemplateUri :: UpdateKnowledgeBaseTemplateUriResponse -> TestTree
+responseUpdateKnowledgeBaseTemplateUri =
+  res
+    "UpdateKnowledgeBaseTemplateUriResponse"
+    "fixture/UpdateKnowledgeBaseTemplateUriResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateKnowledgeBaseTemplateUri)
diff --git a/test/Test/Amazonka/Wisdom.hs b/test/Test/Amazonka/Wisdom.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Wisdom.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.Wisdom
+-- Copyright   : (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.Wisdom
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/Wisdom/Internal.hs b/test/Test/Amazonka/Wisdom/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Wisdom/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.Wisdom.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.Wisdom.Internal where
