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 Cases SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2022-10-03@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-connectcases)
+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.ConnectCases](http://hackage.haskell.org/package/amazonka-connectcases/docs/Amazonka-ConnectCases.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-connectcases` 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-connectcases.cabal b/amazonka-connectcases.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-connectcases.cabal
@@ -0,0 +1,156 @@
+cabal-version:      2.2
+name:               amazonka-connectcases
+version:            2.0
+synopsis:           Amazon Connect Cases 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 @2022-10-03@ of the AWS service descriptions, licensed under Apache 2.0.
+  .
+  The types from this library are intended to be used with <http://hackage.haskell.org/package/amazonka amazonka>,
+  which provides mechanisms for specifying AuthN/AuthZ information, sending requests, and receiving responses.
+  .
+  It is recommended to use generic lenses or optics from packages such as <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify optional fields and deconstruct responses.
+  .
+  Generated lenses can be found in "Amazonka.ConnectCases.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.ConnectCases" 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-connectcases
+
+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.ConnectCases
+    Amazonka.ConnectCases.BatchGetField
+    Amazonka.ConnectCases.BatchPutFieldOptions
+    Amazonka.ConnectCases.CreateCase
+    Amazonka.ConnectCases.CreateDomain
+    Amazonka.ConnectCases.CreateField
+    Amazonka.ConnectCases.CreateLayout
+    Amazonka.ConnectCases.CreateRelatedItem
+    Amazonka.ConnectCases.CreateTemplate
+    Amazonka.ConnectCases.GetCase
+    Amazonka.ConnectCases.GetCaseEventConfiguration
+    Amazonka.ConnectCases.GetDomain
+    Amazonka.ConnectCases.GetLayout
+    Amazonka.ConnectCases.GetTemplate
+    Amazonka.ConnectCases.Lens
+    Amazonka.ConnectCases.ListCasesForContact
+    Amazonka.ConnectCases.ListDomains
+    Amazonka.ConnectCases.ListFieldOptions
+    Amazonka.ConnectCases.ListFields
+    Amazonka.ConnectCases.ListLayouts
+    Amazonka.ConnectCases.ListTagsForResource
+    Amazonka.ConnectCases.ListTemplates
+    Amazonka.ConnectCases.PutCaseEventConfiguration
+    Amazonka.ConnectCases.SearchCases
+    Amazonka.ConnectCases.SearchRelatedItems
+    Amazonka.ConnectCases.TagResource
+    Amazonka.ConnectCases.Types
+    Amazonka.ConnectCases.Types.BasicLayout
+    Amazonka.ConnectCases.Types.CaseEventIncludedData
+    Amazonka.ConnectCases.Types.CaseFilter
+    Amazonka.ConnectCases.Types.CaseSummary
+    Amazonka.ConnectCases.Types.CommentBodyTextType
+    Amazonka.ConnectCases.Types.CommentContent
+    Amazonka.ConnectCases.Types.CommentFilter
+    Amazonka.ConnectCases.Types.Contact
+    Amazonka.ConnectCases.Types.ContactContent
+    Amazonka.ConnectCases.Types.ContactFilter
+    Amazonka.ConnectCases.Types.DomainStatus
+    Amazonka.ConnectCases.Types.DomainSummary
+    Amazonka.ConnectCases.Types.EventBridgeConfiguration
+    Amazonka.ConnectCases.Types.EventIncludedData
+    Amazonka.ConnectCases.Types.FieldError
+    Amazonka.ConnectCases.Types.FieldFilter
+    Amazonka.ConnectCases.Types.FieldGroup
+    Amazonka.ConnectCases.Types.FieldIdentifier
+    Amazonka.ConnectCases.Types.FieldItem
+    Amazonka.ConnectCases.Types.FieldNamespace
+    Amazonka.ConnectCases.Types.FieldOption
+    Amazonka.ConnectCases.Types.FieldOptionError
+    Amazonka.ConnectCases.Types.FieldSummary
+    Amazonka.ConnectCases.Types.FieldType
+    Amazonka.ConnectCases.Types.FieldValue
+    Amazonka.ConnectCases.Types.FieldValueUnion
+    Amazonka.ConnectCases.Types.GetFieldResponse
+    Amazonka.ConnectCases.Types.LayoutConfiguration
+    Amazonka.ConnectCases.Types.LayoutContent
+    Amazonka.ConnectCases.Types.LayoutSections
+    Amazonka.ConnectCases.Types.LayoutSummary
+    Amazonka.ConnectCases.Types.Order
+    Amazonka.ConnectCases.Types.RelatedItemContent
+    Amazonka.ConnectCases.Types.RelatedItemEventIncludedData
+    Amazonka.ConnectCases.Types.RelatedItemInputContent
+    Amazonka.ConnectCases.Types.RelatedItemType
+    Amazonka.ConnectCases.Types.RelatedItemTypeFilter
+    Amazonka.ConnectCases.Types.RequiredField
+    Amazonka.ConnectCases.Types.SearchCasesResponseItem
+    Amazonka.ConnectCases.Types.SearchRelatedItemsResponseItem
+    Amazonka.ConnectCases.Types.Section
+    Amazonka.ConnectCases.Types.Sort
+    Amazonka.ConnectCases.Types.TemplateStatus
+    Amazonka.ConnectCases.Types.TemplateSummary
+    Amazonka.ConnectCases.UntagResource
+    Amazonka.ConnectCases.UpdateCase
+    Amazonka.ConnectCases.UpdateField
+    Amazonka.ConnectCases.UpdateLayout
+    Amazonka.ConnectCases.UpdateTemplate
+    Amazonka.ConnectCases.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-connectcases-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.ConnectCases
+    Test.Amazonka.ConnectCases.Internal
+    Test.Amazonka.Gen.ConnectCases
+
+  build-depends:
+    , amazonka-connectcases
+    , amazonka-core          >=2.0 && <2.1
+    , amazonka-test          >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/BatchGetField.yaml b/fixture/BatchGetField.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchGetField.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/BatchGetFieldResponse.proto b/fixture/BatchGetFieldResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchGetFieldResponse.proto
diff --git a/fixture/BatchPutFieldOptions.yaml b/fixture/BatchPutFieldOptions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchPutFieldOptions.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/BatchPutFieldOptionsResponse.proto b/fixture/BatchPutFieldOptionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchPutFieldOptionsResponse.proto
diff --git a/fixture/CreateCase.yaml b/fixture/CreateCase.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCase.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/CreateCaseResponse.proto b/fixture/CreateCaseResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCaseResponse.proto
diff --git a/fixture/CreateDomain.yaml b/fixture/CreateDomain.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDomain.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/CreateDomainResponse.proto b/fixture/CreateDomainResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDomainResponse.proto
diff --git a/fixture/CreateField.yaml b/fixture/CreateField.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateField.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/CreateFieldResponse.proto b/fixture/CreateFieldResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateFieldResponse.proto
diff --git a/fixture/CreateLayout.yaml b/fixture/CreateLayout.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLayout.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/CreateLayoutResponse.proto b/fixture/CreateLayoutResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLayoutResponse.proto
diff --git a/fixture/CreateRelatedItem.yaml b/fixture/CreateRelatedItem.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRelatedItem.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/CreateRelatedItemResponse.proto b/fixture/CreateRelatedItemResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRelatedItemResponse.proto
diff --git a/fixture/CreateTemplate.yaml b/fixture/CreateTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/CreateTemplateResponse.proto b/fixture/CreateTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTemplateResponse.proto
diff --git a/fixture/GetCase.yaml b/fixture/GetCase.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetCase.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/GetCaseEventConfiguration.yaml b/fixture/GetCaseEventConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetCaseEventConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/GetCaseEventConfigurationResponse.proto b/fixture/GetCaseEventConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetCaseEventConfigurationResponse.proto
diff --git a/fixture/GetCaseResponse.proto b/fixture/GetCaseResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetCaseResponse.proto
diff --git a/fixture/GetDomain.yaml b/fixture/GetDomain.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDomain.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/GetDomainResponse.proto b/fixture/GetDomainResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDomainResponse.proto
diff --git a/fixture/GetLayout.yaml b/fixture/GetLayout.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetLayout.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/GetLayoutResponse.proto b/fixture/GetLayoutResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetLayoutResponse.proto
diff --git a/fixture/GetTemplate.yaml b/fixture/GetTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/GetTemplateResponse.proto b/fixture/GetTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetTemplateResponse.proto
diff --git a/fixture/ListCasesForContact.yaml b/fixture/ListCasesForContact.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListCasesForContact.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/ListCasesForContactResponse.proto b/fixture/ListCasesForContactResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListCasesForContactResponse.proto
diff --git a/fixture/ListDomains.yaml b/fixture/ListDomains.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDomains.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/ListDomainsResponse.proto b/fixture/ListDomainsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDomainsResponse.proto
diff --git a/fixture/ListFieldOptions.yaml b/fixture/ListFieldOptions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListFieldOptions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/ListFieldOptionsResponse.proto b/fixture/ListFieldOptionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListFieldOptionsResponse.proto
diff --git a/fixture/ListFields.yaml b/fixture/ListFields.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListFields.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/ListFieldsResponse.proto b/fixture/ListFieldsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListFieldsResponse.proto
diff --git a/fixture/ListLayouts.yaml b/fixture/ListLayouts.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListLayouts.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/ListLayoutsResponse.proto b/fixture/ListLayoutsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListLayoutsResponse.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/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/ListTemplates.yaml b/fixture/ListTemplates.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTemplates.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/ListTemplatesResponse.proto b/fixture/ListTemplatesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTemplatesResponse.proto
diff --git a/fixture/PutCaseEventConfiguration.yaml b/fixture/PutCaseEventConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutCaseEventConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/PutCaseEventConfigurationResponse.proto b/fixture/PutCaseEventConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutCaseEventConfigurationResponse.proto
diff --git a/fixture/SearchCases.yaml b/fixture/SearchCases.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SearchCases.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/SearchCasesResponse.proto b/fixture/SearchCasesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SearchCasesResponse.proto
diff --git a/fixture/SearchRelatedItems.yaml b/fixture/SearchRelatedItems.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SearchRelatedItems.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/SearchRelatedItemsResponse.proto b/fixture/SearchRelatedItemsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SearchRelatedItemsResponse.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/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/UpdateCase.yaml b/fixture/UpdateCase.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateCase.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/UpdateCaseResponse.proto b/fixture/UpdateCaseResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateCaseResponse.proto
diff --git a/fixture/UpdateField.yaml b/fixture/UpdateField.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateField.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/UpdateFieldResponse.proto b/fixture/UpdateFieldResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateFieldResponse.proto
diff --git a/fixture/UpdateLayout.yaml b/fixture/UpdateLayout.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateLayout.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/UpdateLayoutResponse.proto b/fixture/UpdateLayoutResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateLayoutResponse.proto
diff --git a/fixture/UpdateTemplate.yaml b/fixture/UpdateTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cases/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cases.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/UpdateTemplateResponse.proto b/fixture/UpdateTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateTemplateResponse.proto
diff --git a/gen/Amazonka/ConnectCases.hs b/gen/Amazonka/ConnectCases.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases.hs
@@ -0,0 +1,459 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.ConnectCases
+-- 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 @2022-10-03@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Welcome to the Amazon Connect Cases API Reference. This guide provides
+-- information about the Amazon Connect Cases API, which you can use to
+-- create, update, get, and list Cases domains, fields, field options,
+-- layouts, templates, cases, related items, and tags.
+--
+-- >  <p>For more information about Amazon Connect Cases, see <a href="https://docs.aws.amazon.com/connect/latest/adminguide/cases.html">Amazon Connect Cases</a> in the <i>Amazon Connect Administrator Guide</i>. </p>
+module Amazonka.ConnectCases
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceQuotaExceededException
+    _ServiceQuotaExceededException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** BatchGetField
+    BatchGetField (BatchGetField'),
+    newBatchGetField,
+    BatchGetFieldResponse (BatchGetFieldResponse'),
+    newBatchGetFieldResponse,
+
+    -- ** BatchPutFieldOptions
+    BatchPutFieldOptions (BatchPutFieldOptions'),
+    newBatchPutFieldOptions,
+    BatchPutFieldOptionsResponse (BatchPutFieldOptionsResponse'),
+    newBatchPutFieldOptionsResponse,
+
+    -- ** CreateCase
+    CreateCase (CreateCase'),
+    newCreateCase,
+    CreateCaseResponse (CreateCaseResponse'),
+    newCreateCaseResponse,
+
+    -- ** CreateDomain
+    CreateDomain (CreateDomain'),
+    newCreateDomain,
+    CreateDomainResponse (CreateDomainResponse'),
+    newCreateDomainResponse,
+
+    -- ** CreateField
+    CreateField (CreateField'),
+    newCreateField,
+    CreateFieldResponse (CreateFieldResponse'),
+    newCreateFieldResponse,
+
+    -- ** CreateLayout
+    CreateLayout (CreateLayout'),
+    newCreateLayout,
+    CreateLayoutResponse (CreateLayoutResponse'),
+    newCreateLayoutResponse,
+
+    -- ** CreateRelatedItem
+    CreateRelatedItem (CreateRelatedItem'),
+    newCreateRelatedItem,
+    CreateRelatedItemResponse (CreateRelatedItemResponse'),
+    newCreateRelatedItemResponse,
+
+    -- ** CreateTemplate
+    CreateTemplate (CreateTemplate'),
+    newCreateTemplate,
+    CreateTemplateResponse (CreateTemplateResponse'),
+    newCreateTemplateResponse,
+
+    -- ** GetCase
+    GetCase (GetCase'),
+    newGetCase,
+    GetCaseResponse (GetCaseResponse'),
+    newGetCaseResponse,
+
+    -- ** GetCaseEventConfiguration
+    GetCaseEventConfiguration (GetCaseEventConfiguration'),
+    newGetCaseEventConfiguration,
+    GetCaseEventConfigurationResponse (GetCaseEventConfigurationResponse'),
+    newGetCaseEventConfigurationResponse,
+
+    -- ** GetDomain
+    GetDomain (GetDomain'),
+    newGetDomain,
+    GetDomainResponse (GetDomainResponse'),
+    newGetDomainResponse,
+
+    -- ** GetLayout
+    GetLayout (GetLayout'),
+    newGetLayout,
+    GetLayoutResponse (GetLayoutResponse'),
+    newGetLayoutResponse,
+
+    -- ** GetTemplate
+    GetTemplate (GetTemplate'),
+    newGetTemplate,
+    GetTemplateResponse (GetTemplateResponse'),
+    newGetTemplateResponse,
+
+    -- ** ListCasesForContact
+    ListCasesForContact (ListCasesForContact'),
+    newListCasesForContact,
+    ListCasesForContactResponse (ListCasesForContactResponse'),
+    newListCasesForContactResponse,
+
+    -- ** ListDomains
+    ListDomains (ListDomains'),
+    newListDomains,
+    ListDomainsResponse (ListDomainsResponse'),
+    newListDomainsResponse,
+
+    -- ** ListFieldOptions
+    ListFieldOptions (ListFieldOptions'),
+    newListFieldOptions,
+    ListFieldOptionsResponse (ListFieldOptionsResponse'),
+    newListFieldOptionsResponse,
+
+    -- ** ListFields
+    ListFields (ListFields'),
+    newListFields,
+    ListFieldsResponse (ListFieldsResponse'),
+    newListFieldsResponse,
+
+    -- ** ListLayouts
+    ListLayouts (ListLayouts'),
+    newListLayouts,
+    ListLayoutsResponse (ListLayoutsResponse'),
+    newListLayoutsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** ListTemplates
+    ListTemplates (ListTemplates'),
+    newListTemplates,
+    ListTemplatesResponse (ListTemplatesResponse'),
+    newListTemplatesResponse,
+
+    -- ** PutCaseEventConfiguration
+    PutCaseEventConfiguration (PutCaseEventConfiguration'),
+    newPutCaseEventConfiguration,
+    PutCaseEventConfigurationResponse (PutCaseEventConfigurationResponse'),
+    newPutCaseEventConfigurationResponse,
+
+    -- ** SearchCases (Paginated)
+    SearchCases (SearchCases'),
+    newSearchCases,
+    SearchCasesResponse (SearchCasesResponse'),
+    newSearchCasesResponse,
+
+    -- ** SearchRelatedItems (Paginated)
+    SearchRelatedItems (SearchRelatedItems'),
+    newSearchRelatedItems,
+    SearchRelatedItemsResponse (SearchRelatedItemsResponse'),
+    newSearchRelatedItemsResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateCase
+    UpdateCase (UpdateCase'),
+    newUpdateCase,
+    UpdateCaseResponse (UpdateCaseResponse'),
+    newUpdateCaseResponse,
+
+    -- ** UpdateField
+    UpdateField (UpdateField'),
+    newUpdateField,
+    UpdateFieldResponse (UpdateFieldResponse'),
+    newUpdateFieldResponse,
+
+    -- ** UpdateLayout
+    UpdateLayout (UpdateLayout'),
+    newUpdateLayout,
+    UpdateLayoutResponse (UpdateLayoutResponse'),
+    newUpdateLayoutResponse,
+
+    -- ** UpdateTemplate
+    UpdateTemplate (UpdateTemplate'),
+    newUpdateTemplate,
+    UpdateTemplateResponse (UpdateTemplateResponse'),
+    newUpdateTemplateResponse,
+
+    -- * Types
+
+    -- ** CommentBodyTextType
+    CommentBodyTextType (..),
+
+    -- ** DomainStatus
+    DomainStatus (..),
+
+    -- ** FieldNamespace
+    FieldNamespace (..),
+
+    -- ** FieldType
+    FieldType (..),
+
+    -- ** Order
+    Order (..),
+
+    -- ** RelatedItemType
+    RelatedItemType (..),
+
+    -- ** TemplateStatus
+    TemplateStatus (..),
+
+    -- ** BasicLayout
+    BasicLayout (BasicLayout'),
+    newBasicLayout,
+
+    -- ** CaseEventIncludedData
+    CaseEventIncludedData (CaseEventIncludedData'),
+    newCaseEventIncludedData,
+
+    -- ** CaseFilter
+    CaseFilter (CaseFilter'),
+    newCaseFilter,
+
+    -- ** CaseSummary
+    CaseSummary (CaseSummary'),
+    newCaseSummary,
+
+    -- ** CommentContent
+    CommentContent (CommentContent'),
+    newCommentContent,
+
+    -- ** CommentFilter
+    CommentFilter (CommentFilter'),
+    newCommentFilter,
+
+    -- ** Contact
+    Contact (Contact'),
+    newContact,
+
+    -- ** ContactContent
+    ContactContent (ContactContent'),
+    newContactContent,
+
+    -- ** ContactFilter
+    ContactFilter (ContactFilter'),
+    newContactFilter,
+
+    -- ** DomainSummary
+    DomainSummary (DomainSummary'),
+    newDomainSummary,
+
+    -- ** EventBridgeConfiguration
+    EventBridgeConfiguration (EventBridgeConfiguration'),
+    newEventBridgeConfiguration,
+
+    -- ** EventIncludedData
+    EventIncludedData (EventIncludedData'),
+    newEventIncludedData,
+
+    -- ** FieldError
+    FieldError (FieldError'),
+    newFieldError,
+
+    -- ** FieldFilter
+    FieldFilter (FieldFilter'),
+    newFieldFilter,
+
+    -- ** FieldGroup
+    FieldGroup (FieldGroup'),
+    newFieldGroup,
+
+    -- ** FieldIdentifier
+    FieldIdentifier (FieldIdentifier'),
+    newFieldIdentifier,
+
+    -- ** FieldItem
+    FieldItem (FieldItem'),
+    newFieldItem,
+
+    -- ** FieldOption
+    FieldOption (FieldOption'),
+    newFieldOption,
+
+    -- ** FieldOptionError
+    FieldOptionError (FieldOptionError'),
+    newFieldOptionError,
+
+    -- ** FieldSummary
+    FieldSummary (FieldSummary'),
+    newFieldSummary,
+
+    -- ** FieldValue
+    FieldValue (FieldValue'),
+    newFieldValue,
+
+    -- ** FieldValueUnion
+    FieldValueUnion (FieldValueUnion'),
+    newFieldValueUnion,
+
+    -- ** GetFieldResponse
+    GetFieldResponse (GetFieldResponse'),
+    newGetFieldResponse,
+
+    -- ** LayoutConfiguration
+    LayoutConfiguration (LayoutConfiguration'),
+    newLayoutConfiguration,
+
+    -- ** LayoutContent
+    LayoutContent (LayoutContent'),
+    newLayoutContent,
+
+    -- ** LayoutSections
+    LayoutSections (LayoutSections'),
+    newLayoutSections,
+
+    -- ** LayoutSummary
+    LayoutSummary (LayoutSummary'),
+    newLayoutSummary,
+
+    -- ** RelatedItemContent
+    RelatedItemContent (RelatedItemContent'),
+    newRelatedItemContent,
+
+    -- ** RelatedItemEventIncludedData
+    RelatedItemEventIncludedData (RelatedItemEventIncludedData'),
+    newRelatedItemEventIncludedData,
+
+    -- ** RelatedItemInputContent
+    RelatedItemInputContent (RelatedItemInputContent'),
+    newRelatedItemInputContent,
+
+    -- ** RelatedItemTypeFilter
+    RelatedItemTypeFilter (RelatedItemTypeFilter'),
+    newRelatedItemTypeFilter,
+
+    -- ** RequiredField
+    RequiredField (RequiredField'),
+    newRequiredField,
+
+    -- ** SearchCasesResponseItem
+    SearchCasesResponseItem (SearchCasesResponseItem'),
+    newSearchCasesResponseItem,
+
+    -- ** SearchRelatedItemsResponseItem
+    SearchRelatedItemsResponseItem (SearchRelatedItemsResponseItem'),
+    newSearchRelatedItemsResponseItem,
+
+    -- ** Section
+    Section (Section'),
+    newSection,
+
+    -- ** Sort
+    Sort (Sort'),
+    newSort,
+
+    -- ** TemplateSummary
+    TemplateSummary (TemplateSummary'),
+    newTemplateSummary,
+  )
+where
+
+import Amazonka.ConnectCases.BatchGetField
+import Amazonka.ConnectCases.BatchPutFieldOptions
+import Amazonka.ConnectCases.CreateCase
+import Amazonka.ConnectCases.CreateDomain
+import Amazonka.ConnectCases.CreateField
+import Amazonka.ConnectCases.CreateLayout
+import Amazonka.ConnectCases.CreateRelatedItem
+import Amazonka.ConnectCases.CreateTemplate
+import Amazonka.ConnectCases.GetCase
+import Amazonka.ConnectCases.GetCaseEventConfiguration
+import Amazonka.ConnectCases.GetDomain
+import Amazonka.ConnectCases.GetLayout
+import Amazonka.ConnectCases.GetTemplate
+import Amazonka.ConnectCases.Lens
+import Amazonka.ConnectCases.ListCasesForContact
+import Amazonka.ConnectCases.ListDomains
+import Amazonka.ConnectCases.ListFieldOptions
+import Amazonka.ConnectCases.ListFields
+import Amazonka.ConnectCases.ListLayouts
+import Amazonka.ConnectCases.ListTagsForResource
+import Amazonka.ConnectCases.ListTemplates
+import Amazonka.ConnectCases.PutCaseEventConfiguration
+import Amazonka.ConnectCases.SearchCases
+import Amazonka.ConnectCases.SearchRelatedItems
+import Amazonka.ConnectCases.TagResource
+import Amazonka.ConnectCases.Types
+import Amazonka.ConnectCases.UntagResource
+import Amazonka.ConnectCases.UpdateCase
+import Amazonka.ConnectCases.UpdateField
+import Amazonka.ConnectCases.UpdateLayout
+import Amazonka.ConnectCases.UpdateTemplate
+import Amazonka.ConnectCases.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 'ConnectCases'.
+
+-- $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/ConnectCases/BatchGetField.hs b/gen/Amazonka/ConnectCases/BatchGetField.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/BatchGetField.hs
@@ -0,0 +1,196 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.BatchGetField
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the description for the list of fields in the request
+-- parameters.
+module Amazonka.ConnectCases.BatchGetField
+  ( -- * Creating a Request
+    BatchGetField (..),
+    newBatchGetField,
+
+    -- * Request Lenses
+    batchGetField_domainId,
+    batchGetField_fields,
+
+    -- * Destructuring the Response
+    BatchGetFieldResponse (..),
+    newBatchGetFieldResponse,
+
+    -- * Response Lenses
+    batchGetFieldResponse_httpStatus,
+    batchGetFieldResponse_errors,
+    batchGetFieldResponse_fields,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newBatchGetField' smart constructor.
+data BatchGetField = BatchGetField'
+  { -- | The unique identifier of the Cases domain.
+    domainId :: Prelude.Text,
+    -- | A list of unique field identifiers.
+    fields :: Prelude.NonEmpty FieldIdentifier
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchGetField' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainId', 'batchGetField_domainId' - The unique identifier of the Cases domain.
+--
+-- 'fields', 'batchGetField_fields' - A list of unique field identifiers.
+newBatchGetField ::
+  -- | 'domainId'
+  Prelude.Text ->
+  -- | 'fields'
+  Prelude.NonEmpty FieldIdentifier ->
+  BatchGetField
+newBatchGetField pDomainId_ pFields_ =
+  BatchGetField'
+    { domainId = pDomainId_,
+      fields = Lens.coerced Lens.# pFields_
+    }
+
+-- | The unique identifier of the Cases domain.
+batchGetField_domainId :: Lens.Lens' BatchGetField Prelude.Text
+batchGetField_domainId = Lens.lens (\BatchGetField' {domainId} -> domainId) (\s@BatchGetField' {} a -> s {domainId = a} :: BatchGetField)
+
+-- | A list of unique field identifiers.
+batchGetField_fields :: Lens.Lens' BatchGetField (Prelude.NonEmpty FieldIdentifier)
+batchGetField_fields = Lens.lens (\BatchGetField' {fields} -> fields) (\s@BatchGetField' {} a -> s {fields = a} :: BatchGetField) Prelude.. Lens.coerced
+
+instance Core.AWSRequest BatchGetField where
+  type
+    AWSResponse BatchGetField =
+      BatchGetFieldResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchGetFieldResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "errors" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "fields" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable BatchGetField where
+  hashWithSalt _salt BatchGetField' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainId
+      `Prelude.hashWithSalt` fields
+
+instance Prelude.NFData BatchGetField where
+  rnf BatchGetField' {..} =
+    Prelude.rnf domainId
+      `Prelude.seq` Prelude.rnf fields
+
+instance Data.ToHeaders BatchGetField where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BatchGetField where
+  toJSON BatchGetField' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("fields" Data..= fields)]
+      )
+
+instance Data.ToPath BatchGetField where
+  toPath BatchGetField' {..} =
+    Prelude.mconcat
+      ["/domains/", Data.toBS domainId, "/fields-batch"]
+
+instance Data.ToQuery BatchGetField where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newBatchGetFieldResponse' smart constructor.
+data BatchGetFieldResponse = BatchGetFieldResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A list of field errors.
+    errors :: [FieldError],
+    -- | A list of detailed field information.
+    fields :: [GetFieldResponse]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchGetFieldResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'batchGetFieldResponse_httpStatus' - The response's http status code.
+--
+-- 'errors', 'batchGetFieldResponse_errors' - A list of field errors.
+--
+-- 'fields', 'batchGetFieldResponse_fields' - A list of detailed field information.
+newBatchGetFieldResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BatchGetFieldResponse
+newBatchGetFieldResponse pHttpStatus_ =
+  BatchGetFieldResponse'
+    { httpStatus = pHttpStatus_,
+      errors = Prelude.mempty,
+      fields = Prelude.mempty
+    }
+
+-- | The response's http status code.
+batchGetFieldResponse_httpStatus :: Lens.Lens' BatchGetFieldResponse Prelude.Int
+batchGetFieldResponse_httpStatus = Lens.lens (\BatchGetFieldResponse' {httpStatus} -> httpStatus) (\s@BatchGetFieldResponse' {} a -> s {httpStatus = a} :: BatchGetFieldResponse)
+
+-- | A list of field errors.
+batchGetFieldResponse_errors :: Lens.Lens' BatchGetFieldResponse [FieldError]
+batchGetFieldResponse_errors = Lens.lens (\BatchGetFieldResponse' {errors} -> errors) (\s@BatchGetFieldResponse' {} a -> s {errors = a} :: BatchGetFieldResponse) Prelude.. Lens.coerced
+
+-- | A list of detailed field information.
+batchGetFieldResponse_fields :: Lens.Lens' BatchGetFieldResponse [GetFieldResponse]
+batchGetFieldResponse_fields = Lens.lens (\BatchGetFieldResponse' {fields} -> fields) (\s@BatchGetFieldResponse' {} a -> s {fields = a} :: BatchGetFieldResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData BatchGetFieldResponse where
+  rnf BatchGetFieldResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf errors
+      `Prelude.seq` Prelude.rnf fields
diff --git a/gen/Amazonka/ConnectCases/BatchPutFieldOptions.hs b/gen/Amazonka/ConnectCases/BatchPutFieldOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/BatchPutFieldOptions.hs
@@ -0,0 +1,202 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.BatchPutFieldOptions
+-- 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 and updates a set of field options for a single select field in
+-- a Cases domain.
+module Amazonka.ConnectCases.BatchPutFieldOptions
+  ( -- * Creating a Request
+    BatchPutFieldOptions (..),
+    newBatchPutFieldOptions,
+
+    -- * Request Lenses
+    batchPutFieldOptions_domainId,
+    batchPutFieldOptions_fieldId,
+    batchPutFieldOptions_options,
+
+    -- * Destructuring the Response
+    BatchPutFieldOptionsResponse (..),
+    newBatchPutFieldOptionsResponse,
+
+    -- * Response Lenses
+    batchPutFieldOptionsResponse_errors,
+    batchPutFieldOptionsResponse_httpStatus,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newBatchPutFieldOptions' smart constructor.
+data BatchPutFieldOptions = BatchPutFieldOptions'
+  { -- | The unique identifier of the Cases domain.
+    domainId :: Prelude.Text,
+    -- | The unique identifier of a field.
+    fieldId :: Prelude.Text,
+    -- | A list of @FieldOption@ objects.
+    options :: [FieldOption]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchPutFieldOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainId', 'batchPutFieldOptions_domainId' - The unique identifier of the Cases domain.
+--
+-- 'fieldId', 'batchPutFieldOptions_fieldId' - The unique identifier of a field.
+--
+-- 'options', 'batchPutFieldOptions_options' - A list of @FieldOption@ objects.
+newBatchPutFieldOptions ::
+  -- | 'domainId'
+  Prelude.Text ->
+  -- | 'fieldId'
+  Prelude.Text ->
+  BatchPutFieldOptions
+newBatchPutFieldOptions pDomainId_ pFieldId_ =
+  BatchPutFieldOptions'
+    { domainId = pDomainId_,
+      fieldId = pFieldId_,
+      options = Prelude.mempty
+    }
+
+-- | The unique identifier of the Cases domain.
+batchPutFieldOptions_domainId :: Lens.Lens' BatchPutFieldOptions Prelude.Text
+batchPutFieldOptions_domainId = Lens.lens (\BatchPutFieldOptions' {domainId} -> domainId) (\s@BatchPutFieldOptions' {} a -> s {domainId = a} :: BatchPutFieldOptions)
+
+-- | The unique identifier of a field.
+batchPutFieldOptions_fieldId :: Lens.Lens' BatchPutFieldOptions Prelude.Text
+batchPutFieldOptions_fieldId = Lens.lens (\BatchPutFieldOptions' {fieldId} -> fieldId) (\s@BatchPutFieldOptions' {} a -> s {fieldId = a} :: BatchPutFieldOptions)
+
+-- | A list of @FieldOption@ objects.
+batchPutFieldOptions_options :: Lens.Lens' BatchPutFieldOptions [FieldOption]
+batchPutFieldOptions_options = Lens.lens (\BatchPutFieldOptions' {options} -> options) (\s@BatchPutFieldOptions' {} a -> s {options = a} :: BatchPutFieldOptions) Prelude.. Lens.coerced
+
+instance Core.AWSRequest BatchPutFieldOptions where
+  type
+    AWSResponse BatchPutFieldOptions =
+      BatchPutFieldOptionsResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchPutFieldOptionsResponse'
+            Prelude.<$> (x Data..?> "errors" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable BatchPutFieldOptions where
+  hashWithSalt _salt BatchPutFieldOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainId
+      `Prelude.hashWithSalt` fieldId
+      `Prelude.hashWithSalt` options
+
+instance Prelude.NFData BatchPutFieldOptions where
+  rnf BatchPutFieldOptions' {..} =
+    Prelude.rnf domainId
+      `Prelude.seq` Prelude.rnf fieldId
+      `Prelude.seq` Prelude.rnf options
+
+instance Data.ToHeaders BatchPutFieldOptions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BatchPutFieldOptions where
+  toJSON BatchPutFieldOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("options" Data..= options)]
+      )
+
+instance Data.ToPath BatchPutFieldOptions where
+  toPath BatchPutFieldOptions' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainId,
+        "/fields/",
+        Data.toBS fieldId,
+        "/options"
+      ]
+
+instance Data.ToQuery BatchPutFieldOptions where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newBatchPutFieldOptionsResponse' smart constructor.
+data BatchPutFieldOptionsResponse = BatchPutFieldOptionsResponse'
+  { -- | A list of field errors.
+    errors :: Prelude.Maybe [FieldOptionError],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchPutFieldOptionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'batchPutFieldOptionsResponse_errors' - A list of field errors.
+--
+-- 'httpStatus', 'batchPutFieldOptionsResponse_httpStatus' - The response's http status code.
+newBatchPutFieldOptionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BatchPutFieldOptionsResponse
+newBatchPutFieldOptionsResponse pHttpStatus_ =
+  BatchPutFieldOptionsResponse'
+    { errors =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of field errors.
+batchPutFieldOptionsResponse_errors :: Lens.Lens' BatchPutFieldOptionsResponse (Prelude.Maybe [FieldOptionError])
+batchPutFieldOptionsResponse_errors = Lens.lens (\BatchPutFieldOptionsResponse' {errors} -> errors) (\s@BatchPutFieldOptionsResponse' {} a -> s {errors = a} :: BatchPutFieldOptionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+batchPutFieldOptionsResponse_httpStatus :: Lens.Lens' BatchPutFieldOptionsResponse Prelude.Int
+batchPutFieldOptionsResponse_httpStatus = Lens.lens (\BatchPutFieldOptionsResponse' {httpStatus} -> httpStatus) (\s@BatchPutFieldOptionsResponse' {} a -> s {httpStatus = a} :: BatchPutFieldOptionsResponse)
+
+instance Prelude.NFData BatchPutFieldOptionsResponse where
+  rnf BatchPutFieldOptionsResponse' {..} =
+    Prelude.rnf errors
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ConnectCases/CreateCase.hs b/gen/Amazonka/ConnectCases/CreateCase.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/CreateCase.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.ConnectCases.CreateCase
+-- 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 case in the specified Cases domain. Case system and custom
+-- fields are taken as an array id\/value pairs with a declared data types.
+--
+-- @customer_id@ is a required field when creating a case.
+module Amazonka.ConnectCases.CreateCase
+  ( -- * Creating a Request
+    CreateCase (..),
+    newCreateCase,
+
+    -- * Request Lenses
+    createCase_clientToken,
+    createCase_domainId,
+    createCase_fields,
+    createCase_templateId,
+
+    -- * Destructuring the Response
+    CreateCaseResponse (..),
+    newCreateCaseResponse,
+
+    -- * Response Lenses
+    createCaseResponse_httpStatus,
+    createCaseResponse_caseArn,
+    createCaseResponse_caseId,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateCase' smart constructor.
+data CreateCase = CreateCase'
+  { -- | A unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. If not provided, the Amazon Web Services SDK
+    -- populates this field. For more information about idempotency, see
+    -- <https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/ Making retries safe with idempotent APIs>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the Cases domain.
+    domainId :: Prelude.Text,
+    -- | An array of objects with field ID (matching ListFields\/DescribeField)
+    -- and value union data.
+    fields :: [FieldValue],
+    -- | A unique identifier of a template.
+    templateId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCase' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createCase_clientToken' - A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If not provided, the Amazon Web Services SDK
+-- populates this field. For more information about idempotency, see
+-- <https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/ Making retries safe with idempotent APIs>.
+--
+-- 'domainId', 'createCase_domainId' - The unique identifier of the Cases domain.
+--
+-- 'fields', 'createCase_fields' - An array of objects with field ID (matching ListFields\/DescribeField)
+-- and value union data.
+--
+-- 'templateId', 'createCase_templateId' - A unique identifier of a template.
+newCreateCase ::
+  -- | 'domainId'
+  Prelude.Text ->
+  -- | 'templateId'
+  Prelude.Text ->
+  CreateCase
+newCreateCase pDomainId_ pTemplateId_ =
+  CreateCase'
+    { clientToken = Prelude.Nothing,
+      domainId = pDomainId_,
+      fields = Prelude.mempty,
+      templateId = pTemplateId_
+    }
+
+-- | A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. If not provided, the Amazon Web Services SDK
+-- populates this field. For more information about idempotency, see
+-- <https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/ Making retries safe with idempotent APIs>.
+createCase_clientToken :: Lens.Lens' CreateCase (Prelude.Maybe Prelude.Text)
+createCase_clientToken = Lens.lens (\CreateCase' {clientToken} -> clientToken) (\s@CreateCase' {} a -> s {clientToken = a} :: CreateCase)
+
+-- | The unique identifier of the Cases domain.
+createCase_domainId :: Lens.Lens' CreateCase Prelude.Text
+createCase_domainId = Lens.lens (\CreateCase' {domainId} -> domainId) (\s@CreateCase' {} a -> s {domainId = a} :: CreateCase)
+
+-- | An array of objects with field ID (matching ListFields\/DescribeField)
+-- and value union data.
+createCase_fields :: Lens.Lens' CreateCase [FieldValue]
+createCase_fields = Lens.lens (\CreateCase' {fields} -> fields) (\s@CreateCase' {} a -> s {fields = a} :: CreateCase) Prelude.. Lens.coerced
+
+-- | A unique identifier of a template.
+createCase_templateId :: Lens.Lens' CreateCase Prelude.Text
+createCase_templateId = Lens.lens (\CreateCase' {templateId} -> templateId) (\s@CreateCase' {} a -> s {templateId = a} :: CreateCase)
+
+instance Core.AWSRequest CreateCase where
+  type AWSResponse CreateCase = CreateCaseResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateCaseResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "caseArn")
+            Prelude.<*> (x Data..:> "caseId")
+      )
+
+instance Prelude.Hashable CreateCase where
+  hashWithSalt _salt CreateCase' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` domainId
+      `Prelude.hashWithSalt` fields
+      `Prelude.hashWithSalt` templateId
+
+instance Prelude.NFData CreateCase where
+  rnf CreateCase' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf domainId
+      `Prelude.seq` Prelude.rnf fields
+      `Prelude.seq` Prelude.rnf templateId
+
+instance Data.ToHeaders CreateCase where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateCase where
+  toJSON CreateCase' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            Prelude.Just ("fields" Data..= fields),
+            Prelude.Just ("templateId" Data..= templateId)
+          ]
+      )
+
+instance Data.ToPath CreateCase where
+  toPath CreateCase' {..} =
+    Prelude.mconcat
+      ["/domains/", Data.toBS domainId, "/cases"]
+
+instance Data.ToQuery CreateCase where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateCaseResponse' smart constructor.
+data CreateCaseResponse = CreateCaseResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Amazon Resource Name (ARN) of the case.
+    caseArn :: Prelude.Text,
+    -- | A unique identifier of the case.
+    caseId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCaseResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createCaseResponse_httpStatus' - The response's http status code.
+--
+-- 'caseArn', 'createCaseResponse_caseArn' - The Amazon Resource Name (ARN) of the case.
+--
+-- 'caseId', 'createCaseResponse_caseId' - A unique identifier of the case.
+newCreateCaseResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'caseArn'
+  Prelude.Text ->
+  -- | 'caseId'
+  Prelude.Text ->
+  CreateCaseResponse
+newCreateCaseResponse pHttpStatus_ pCaseArn_ pCaseId_ =
+  CreateCaseResponse'
+    { httpStatus = pHttpStatus_,
+      caseArn = pCaseArn_,
+      caseId = pCaseId_
+    }
+
+-- | The response's http status code.
+createCaseResponse_httpStatus :: Lens.Lens' CreateCaseResponse Prelude.Int
+createCaseResponse_httpStatus = Lens.lens (\CreateCaseResponse' {httpStatus} -> httpStatus) (\s@CreateCaseResponse' {} a -> s {httpStatus = a} :: CreateCaseResponse)
+
+-- | The Amazon Resource Name (ARN) of the case.
+createCaseResponse_caseArn :: Lens.Lens' CreateCaseResponse Prelude.Text
+createCaseResponse_caseArn = Lens.lens (\CreateCaseResponse' {caseArn} -> caseArn) (\s@CreateCaseResponse' {} a -> s {caseArn = a} :: CreateCaseResponse)
+
+-- | A unique identifier of the case.
+createCaseResponse_caseId :: Lens.Lens' CreateCaseResponse Prelude.Text
+createCaseResponse_caseId = Lens.lens (\CreateCaseResponse' {caseId} -> caseId) (\s@CreateCaseResponse' {} a -> s {caseId = a} :: CreateCaseResponse)
+
+instance Prelude.NFData CreateCaseResponse where
+  rnf CreateCaseResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf caseArn
+      `Prelude.seq` Prelude.rnf caseId
diff --git a/gen/Amazonka/ConnectCases/CreateDomain.hs b/gen/Amazonka/ConnectCases/CreateDomain.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/CreateDomain.hs
@@ -0,0 +1,204 @@
+{-# 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.ConnectCases.CreateDomain
+-- 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 domain, which is a container for all case data, such as cases,
+-- fields, templates and layouts. Each Amazon Connect instance can be
+-- associated with only one Cases domain.
+--
+-- This will not associate your connect instance to Cases domain. Instead,
+-- use the Amazon Connect
+-- <https://docs.aws.amazon.com/connect/latest/APIReference/API_CreateIntegrationAssociation.html CreateIntegrationAssociation>
+-- API.
+module Amazonka.ConnectCases.CreateDomain
+  ( -- * Creating a Request
+    CreateDomain (..),
+    newCreateDomain,
+
+    -- * Request Lenses
+    createDomain_name,
+
+    -- * Destructuring the Response
+    CreateDomainResponse (..),
+    newCreateDomainResponse,
+
+    -- * Response Lenses
+    createDomainResponse_httpStatus,
+    createDomainResponse_domainArn,
+    createDomainResponse_domainId,
+    createDomainResponse_domainStatus,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateDomain' smart constructor.
+data CreateDomain = CreateDomain'
+  { -- | The name for your Cases domain. It must be unique for your Amazon Web
+    -- Services account.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDomain' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'createDomain_name' - The name for your Cases domain. It must be unique for your Amazon Web
+-- Services account.
+newCreateDomain ::
+  -- | 'name'
+  Prelude.Text ->
+  CreateDomain
+newCreateDomain pName_ = CreateDomain' {name = pName_}
+
+-- | The name for your Cases domain. It must be unique for your Amazon Web
+-- Services account.
+createDomain_name :: Lens.Lens' CreateDomain Prelude.Text
+createDomain_name = Lens.lens (\CreateDomain' {name} -> name) (\s@CreateDomain' {} a -> s {name = a} :: CreateDomain)
+
+instance Core.AWSRequest CreateDomain where
+  type AWSResponse CreateDomain = CreateDomainResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateDomainResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "domainArn")
+            Prelude.<*> (x Data..:> "domainId")
+            Prelude.<*> (x Data..:> "domainStatus")
+      )
+
+instance Prelude.Hashable CreateDomain where
+  hashWithSalt _salt CreateDomain' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateDomain where
+  rnf CreateDomain' {..} = Prelude.rnf name
+
+instance Data.ToHeaders CreateDomain where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateDomain where
+  toJSON CreateDomain' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("name" Data..= name)]
+      )
+
+instance Data.ToPath CreateDomain where
+  toPath = Prelude.const "/domains"
+
+instance Data.ToQuery CreateDomain where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateDomainResponse' smart constructor.
+data CreateDomainResponse = CreateDomainResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Amazon Resource Name (ARN) for the Cases domain.
+    domainArn :: Prelude.Text,
+    -- | The unique identifier of the Cases domain.
+    domainId :: Prelude.Text,
+    -- | The status of the domain.
+    domainStatus :: DomainStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDomainResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createDomainResponse_httpStatus' - The response's http status code.
+--
+-- 'domainArn', 'createDomainResponse_domainArn' - The Amazon Resource Name (ARN) for the Cases domain.
+--
+-- 'domainId', 'createDomainResponse_domainId' - The unique identifier of the Cases domain.
+--
+-- 'domainStatus', 'createDomainResponse_domainStatus' - The status of the domain.
+newCreateDomainResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'domainArn'
+  Prelude.Text ->
+  -- | 'domainId'
+  Prelude.Text ->
+  -- | 'domainStatus'
+  DomainStatus ->
+  CreateDomainResponse
+newCreateDomainResponse
+  pHttpStatus_
+  pDomainArn_
+  pDomainId_
+  pDomainStatus_ =
+    CreateDomainResponse'
+      { httpStatus = pHttpStatus_,
+        domainArn = pDomainArn_,
+        domainId = pDomainId_,
+        domainStatus = pDomainStatus_
+      }
+
+-- | The response's http status code.
+createDomainResponse_httpStatus :: Lens.Lens' CreateDomainResponse Prelude.Int
+createDomainResponse_httpStatus = Lens.lens (\CreateDomainResponse' {httpStatus} -> httpStatus) (\s@CreateDomainResponse' {} a -> s {httpStatus = a} :: CreateDomainResponse)
+
+-- | The Amazon Resource Name (ARN) for the Cases domain.
+createDomainResponse_domainArn :: Lens.Lens' CreateDomainResponse Prelude.Text
+createDomainResponse_domainArn = Lens.lens (\CreateDomainResponse' {domainArn} -> domainArn) (\s@CreateDomainResponse' {} a -> s {domainArn = a} :: CreateDomainResponse)
+
+-- | The unique identifier of the Cases domain.
+createDomainResponse_domainId :: Lens.Lens' CreateDomainResponse Prelude.Text
+createDomainResponse_domainId = Lens.lens (\CreateDomainResponse' {domainId} -> domainId) (\s@CreateDomainResponse' {} a -> s {domainId = a} :: CreateDomainResponse)
+
+-- | The status of the domain.
+createDomainResponse_domainStatus :: Lens.Lens' CreateDomainResponse DomainStatus
+createDomainResponse_domainStatus = Lens.lens (\CreateDomainResponse' {domainStatus} -> domainStatus) (\s@CreateDomainResponse' {} a -> s {domainStatus = a} :: CreateDomainResponse)
+
+instance Prelude.NFData CreateDomainResponse where
+  rnf CreateDomainResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf domainArn
+      `Prelude.seq` Prelude.rnf domainId
+      `Prelude.seq` Prelude.rnf domainStatus
diff --git a/gen/Amazonka/ConnectCases/CreateField.hs b/gen/Amazonka/ConnectCases/CreateField.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/CreateField.hs
@@ -0,0 +1,234 @@
+{-# 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.ConnectCases.CreateField
+-- 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 field in the Cases domain. This field is used to define the
+-- case object model (that is, defines what data can be captured on cases)
+-- in a Cases domain.
+module Amazonka.ConnectCases.CreateField
+  ( -- * Creating a Request
+    CreateField (..),
+    newCreateField,
+
+    -- * Request Lenses
+    createField_description,
+    createField_domainId,
+    createField_name,
+    createField_type,
+
+    -- * Destructuring the Response
+    CreateFieldResponse (..),
+    newCreateFieldResponse,
+
+    -- * Response Lenses
+    createFieldResponse_httpStatus,
+    createFieldResponse_fieldArn,
+    createFieldResponse_fieldId,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateField' smart constructor.
+data CreateField = CreateField'
+  { -- | The description of the field.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the Cases domain.
+    domainId :: Prelude.Text,
+    -- | The name of the field.
+    name :: Prelude.Text,
+    -- | Defines the data type, some system constraints, and default display of
+    -- the field.
+    type' :: FieldType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateField' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createField_description' - The description of the field.
+--
+-- 'domainId', 'createField_domainId' - The unique identifier of the Cases domain.
+--
+-- 'name', 'createField_name' - The name of the field.
+--
+-- 'type'', 'createField_type' - Defines the data type, some system constraints, and default display of
+-- the field.
+newCreateField ::
+  -- | 'domainId'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'type''
+  FieldType ->
+  CreateField
+newCreateField pDomainId_ pName_ pType_ =
+  CreateField'
+    { description = Prelude.Nothing,
+      domainId = pDomainId_,
+      name = pName_,
+      type' = pType_
+    }
+
+-- | The description of the field.
+createField_description :: Lens.Lens' CreateField (Prelude.Maybe Prelude.Text)
+createField_description = Lens.lens (\CreateField' {description} -> description) (\s@CreateField' {} a -> s {description = a} :: CreateField)
+
+-- | The unique identifier of the Cases domain.
+createField_domainId :: Lens.Lens' CreateField Prelude.Text
+createField_domainId = Lens.lens (\CreateField' {domainId} -> domainId) (\s@CreateField' {} a -> s {domainId = a} :: CreateField)
+
+-- | The name of the field.
+createField_name :: Lens.Lens' CreateField Prelude.Text
+createField_name = Lens.lens (\CreateField' {name} -> name) (\s@CreateField' {} a -> s {name = a} :: CreateField)
+
+-- | Defines the data type, some system constraints, and default display of
+-- the field.
+createField_type :: Lens.Lens' CreateField FieldType
+createField_type = Lens.lens (\CreateField' {type'} -> type') (\s@CreateField' {} a -> s {type' = a} :: CreateField)
+
+instance Core.AWSRequest CreateField where
+  type AWSResponse CreateField = CreateFieldResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateFieldResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "fieldArn")
+            Prelude.<*> (x Data..:> "fieldId")
+      )
+
+instance Prelude.Hashable CreateField where
+  hashWithSalt _salt CreateField' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` domainId
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData CreateField where
+  rnf CreateField' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf domainId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToHeaders CreateField where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateField where
+  toJSON CreateField' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("type" Data..= type')
+          ]
+      )
+
+instance Data.ToPath CreateField where
+  toPath CreateField' {..} =
+    Prelude.mconcat
+      ["/domains/", Data.toBS domainId, "/fields"]
+
+instance Data.ToQuery CreateField where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateFieldResponse' smart constructor.
+data CreateFieldResponse = CreateFieldResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Amazon Resource Name (ARN) of the field.
+    fieldArn :: Prelude.Text,
+    -- | The unique identifier of a field.
+    fieldId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateFieldResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createFieldResponse_httpStatus' - The response's http status code.
+--
+-- 'fieldArn', 'createFieldResponse_fieldArn' - The Amazon Resource Name (ARN) of the field.
+--
+-- 'fieldId', 'createFieldResponse_fieldId' - The unique identifier of a field.
+newCreateFieldResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'fieldArn'
+  Prelude.Text ->
+  -- | 'fieldId'
+  Prelude.Text ->
+  CreateFieldResponse
+newCreateFieldResponse
+  pHttpStatus_
+  pFieldArn_
+  pFieldId_ =
+    CreateFieldResponse'
+      { httpStatus = pHttpStatus_,
+        fieldArn = pFieldArn_,
+        fieldId = pFieldId_
+      }
+
+-- | The response's http status code.
+createFieldResponse_httpStatus :: Lens.Lens' CreateFieldResponse Prelude.Int
+createFieldResponse_httpStatus = Lens.lens (\CreateFieldResponse' {httpStatus} -> httpStatus) (\s@CreateFieldResponse' {} a -> s {httpStatus = a} :: CreateFieldResponse)
+
+-- | The Amazon Resource Name (ARN) of the field.
+createFieldResponse_fieldArn :: Lens.Lens' CreateFieldResponse Prelude.Text
+createFieldResponse_fieldArn = Lens.lens (\CreateFieldResponse' {fieldArn} -> fieldArn) (\s@CreateFieldResponse' {} a -> s {fieldArn = a} :: CreateFieldResponse)
+
+-- | The unique identifier of a field.
+createFieldResponse_fieldId :: Lens.Lens' CreateFieldResponse Prelude.Text
+createFieldResponse_fieldId = Lens.lens (\CreateFieldResponse' {fieldId} -> fieldId) (\s@CreateFieldResponse' {} a -> s {fieldId = a} :: CreateFieldResponse)
+
+instance Prelude.NFData CreateFieldResponse where
+  rnf CreateFieldResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf fieldArn
+      `Prelude.seq` Prelude.rnf fieldId
diff --git a/gen/Amazonka/ConnectCases/CreateLayout.hs b/gen/Amazonka/ConnectCases/CreateLayout.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/CreateLayout.hs
@@ -0,0 +1,228 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.CreateLayout
+-- 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 layout in the Cases domain. Layouts define the following
+-- configuration in the top section and More Info tab of the Cases user
+-- interface:
+--
+-- -   Fields to display to the users
+--
+-- -   Field ordering
+--
+-- Title and Status fields cannot be part of layouts since they are not
+-- configurable.
+module Amazonka.ConnectCases.CreateLayout
+  ( -- * Creating a Request
+    CreateLayout (..),
+    newCreateLayout,
+
+    -- * Request Lenses
+    createLayout_content,
+    createLayout_domainId,
+    createLayout_name,
+
+    -- * Destructuring the Response
+    CreateLayoutResponse (..),
+    newCreateLayoutResponse,
+
+    -- * Response Lenses
+    createLayoutResponse_httpStatus,
+    createLayoutResponse_layoutArn,
+    createLayoutResponse_layoutId,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateLayout' smart constructor.
+data CreateLayout = CreateLayout'
+  { -- | Information about which fields will be present in the layout, and
+    -- information about the order of the fields.
+    content :: LayoutContent,
+    -- | The unique identifier of the Cases domain.
+    domainId :: Prelude.Text,
+    -- | The name of the layout. It must be unique for the Cases domain.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLayout' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createLayout_content' - Information about which fields will be present in the layout, and
+-- information about the order of the fields.
+--
+-- 'domainId', 'createLayout_domainId' - The unique identifier of the Cases domain.
+--
+-- 'name', 'createLayout_name' - The name of the layout. It must be unique for the Cases domain.
+newCreateLayout ::
+  -- | 'content'
+  LayoutContent ->
+  -- | 'domainId'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateLayout
+newCreateLayout pContent_ pDomainId_ pName_ =
+  CreateLayout'
+    { content = pContent_,
+      domainId = pDomainId_,
+      name = pName_
+    }
+
+-- | Information about which fields will be present in the layout, and
+-- information about the order of the fields.
+createLayout_content :: Lens.Lens' CreateLayout LayoutContent
+createLayout_content = Lens.lens (\CreateLayout' {content} -> content) (\s@CreateLayout' {} a -> s {content = a} :: CreateLayout)
+
+-- | The unique identifier of the Cases domain.
+createLayout_domainId :: Lens.Lens' CreateLayout Prelude.Text
+createLayout_domainId = Lens.lens (\CreateLayout' {domainId} -> domainId) (\s@CreateLayout' {} a -> s {domainId = a} :: CreateLayout)
+
+-- | The name of the layout. It must be unique for the Cases domain.
+createLayout_name :: Lens.Lens' CreateLayout Prelude.Text
+createLayout_name = Lens.lens (\CreateLayout' {name} -> name) (\s@CreateLayout' {} a -> s {name = a} :: CreateLayout)
+
+instance Core.AWSRequest CreateLayout where
+  type AWSResponse CreateLayout = CreateLayoutResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateLayoutResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "layoutArn")
+            Prelude.<*> (x Data..:> "layoutId")
+      )
+
+instance Prelude.Hashable CreateLayout where
+  hashWithSalt _salt CreateLayout' {..} =
+    _salt
+      `Prelude.hashWithSalt` content
+      `Prelude.hashWithSalt` domainId
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateLayout where
+  rnf CreateLayout' {..} =
+    Prelude.rnf content
+      `Prelude.seq` Prelude.rnf domainId
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateLayout where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateLayout where
+  toJSON CreateLayout' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("content" Data..= content),
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateLayout where
+  toPath CreateLayout' {..} =
+    Prelude.mconcat
+      ["/domains/", Data.toBS domainId, "/layouts"]
+
+instance Data.ToQuery CreateLayout where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateLayoutResponse' smart constructor.
+data CreateLayoutResponse = CreateLayoutResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Amazon Resource Name (ARN) of the newly created layout.
+    layoutArn :: Prelude.Text,
+    -- | The unique identifier of the layout.
+    layoutId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLayoutResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createLayoutResponse_httpStatus' - The response's http status code.
+--
+-- 'layoutArn', 'createLayoutResponse_layoutArn' - The Amazon Resource Name (ARN) of the newly created layout.
+--
+-- 'layoutId', 'createLayoutResponse_layoutId' - The unique identifier of the layout.
+newCreateLayoutResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'layoutArn'
+  Prelude.Text ->
+  -- | 'layoutId'
+  Prelude.Text ->
+  CreateLayoutResponse
+newCreateLayoutResponse
+  pHttpStatus_
+  pLayoutArn_
+  pLayoutId_ =
+    CreateLayoutResponse'
+      { httpStatus = pHttpStatus_,
+        layoutArn = pLayoutArn_,
+        layoutId = pLayoutId_
+      }
+
+-- | The response's http status code.
+createLayoutResponse_httpStatus :: Lens.Lens' CreateLayoutResponse Prelude.Int
+createLayoutResponse_httpStatus = Lens.lens (\CreateLayoutResponse' {httpStatus} -> httpStatus) (\s@CreateLayoutResponse' {} a -> s {httpStatus = a} :: CreateLayoutResponse)
+
+-- | The Amazon Resource Name (ARN) of the newly created layout.
+createLayoutResponse_layoutArn :: Lens.Lens' CreateLayoutResponse Prelude.Text
+createLayoutResponse_layoutArn = Lens.lens (\CreateLayoutResponse' {layoutArn} -> layoutArn) (\s@CreateLayoutResponse' {} a -> s {layoutArn = a} :: CreateLayoutResponse)
+
+-- | The unique identifier of the layout.
+createLayoutResponse_layoutId :: Lens.Lens' CreateLayoutResponse Prelude.Text
+createLayoutResponse_layoutId = Lens.lens (\CreateLayoutResponse' {layoutId} -> layoutId) (\s@CreateLayoutResponse' {} a -> s {layoutId = a} :: CreateLayoutResponse)
+
+instance Prelude.NFData CreateLayoutResponse where
+  rnf CreateLayoutResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf layoutArn
+      `Prelude.seq` Prelude.rnf layoutId
diff --git a/gen/Amazonka/ConnectCases/CreateRelatedItem.hs b/gen/Amazonka/ConnectCases/CreateRelatedItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/CreateRelatedItem.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.ConnectCases.CreateRelatedItem
+-- 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 related item (comments, tasks, and contacts) and associates it
+-- with a case.
+--
+-- A Related Item is a resource that is associated with a case. It may or
+-- may not have an external identifier linking it to an external resource
+-- (for example, a @contactArn@). All Related Items have their own internal
+-- identifier, the @relatedItemArn@. Examples of related items include
+-- @comments@ and @contacts@.
+module Amazonka.ConnectCases.CreateRelatedItem
+  ( -- * Creating a Request
+    CreateRelatedItem (..),
+    newCreateRelatedItem,
+
+    -- * Request Lenses
+    createRelatedItem_caseId,
+    createRelatedItem_content,
+    createRelatedItem_domainId,
+    createRelatedItem_type,
+
+    -- * Destructuring the Response
+    CreateRelatedItemResponse (..),
+    newCreateRelatedItemResponse,
+
+    -- * Response Lenses
+    createRelatedItemResponse_httpStatus,
+    createRelatedItemResponse_relatedItemArn,
+    createRelatedItemResponse_relatedItemId,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateRelatedItem' smart constructor.
+data CreateRelatedItem = CreateRelatedItem'
+  { -- | A unique identifier of the case.
+    caseId :: Prelude.Text,
+    -- | The content of a related item to be created.
+    content :: RelatedItemInputContent,
+    -- | The unique identifier of the Cases domain.
+    domainId :: Prelude.Text,
+    -- | The type of a related item.
+    type' :: RelatedItemType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRelatedItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'caseId', 'createRelatedItem_caseId' - A unique identifier of the case.
+--
+-- 'content', 'createRelatedItem_content' - The content of a related item to be created.
+--
+-- 'domainId', 'createRelatedItem_domainId' - The unique identifier of the Cases domain.
+--
+-- 'type'', 'createRelatedItem_type' - The type of a related item.
+newCreateRelatedItem ::
+  -- | 'caseId'
+  Prelude.Text ->
+  -- | 'content'
+  RelatedItemInputContent ->
+  -- | 'domainId'
+  Prelude.Text ->
+  -- | 'type''
+  RelatedItemType ->
+  CreateRelatedItem
+newCreateRelatedItem
+  pCaseId_
+  pContent_
+  pDomainId_
+  pType_ =
+    CreateRelatedItem'
+      { caseId = pCaseId_,
+        content = pContent_,
+        domainId = pDomainId_,
+        type' = pType_
+      }
+
+-- | A unique identifier of the case.
+createRelatedItem_caseId :: Lens.Lens' CreateRelatedItem Prelude.Text
+createRelatedItem_caseId = Lens.lens (\CreateRelatedItem' {caseId} -> caseId) (\s@CreateRelatedItem' {} a -> s {caseId = a} :: CreateRelatedItem)
+
+-- | The content of a related item to be created.
+createRelatedItem_content :: Lens.Lens' CreateRelatedItem RelatedItemInputContent
+createRelatedItem_content = Lens.lens (\CreateRelatedItem' {content} -> content) (\s@CreateRelatedItem' {} a -> s {content = a} :: CreateRelatedItem)
+
+-- | The unique identifier of the Cases domain.
+createRelatedItem_domainId :: Lens.Lens' CreateRelatedItem Prelude.Text
+createRelatedItem_domainId = Lens.lens (\CreateRelatedItem' {domainId} -> domainId) (\s@CreateRelatedItem' {} a -> s {domainId = a} :: CreateRelatedItem)
+
+-- | The type of a related item.
+createRelatedItem_type :: Lens.Lens' CreateRelatedItem RelatedItemType
+createRelatedItem_type = Lens.lens (\CreateRelatedItem' {type'} -> type') (\s@CreateRelatedItem' {} a -> s {type' = a} :: CreateRelatedItem)
+
+instance Core.AWSRequest CreateRelatedItem where
+  type
+    AWSResponse CreateRelatedItem =
+      CreateRelatedItemResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateRelatedItemResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "relatedItemArn")
+            Prelude.<*> (x Data..:> "relatedItemId")
+      )
+
+instance Prelude.Hashable CreateRelatedItem where
+  hashWithSalt _salt CreateRelatedItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` caseId
+      `Prelude.hashWithSalt` content
+      `Prelude.hashWithSalt` domainId
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData CreateRelatedItem where
+  rnf CreateRelatedItem' {..} =
+    Prelude.rnf caseId
+      `Prelude.seq` Prelude.rnf content
+      `Prelude.seq` Prelude.rnf domainId
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToHeaders CreateRelatedItem where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateRelatedItem where
+  toJSON CreateRelatedItem' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("content" Data..= content),
+            Prelude.Just ("type" Data..= type')
+          ]
+      )
+
+instance Data.ToPath CreateRelatedItem where
+  toPath CreateRelatedItem' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainId,
+        "/cases/",
+        Data.toBS caseId,
+        "/related-items/"
+      ]
+
+instance Data.ToQuery CreateRelatedItem where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateRelatedItemResponse' smart constructor.
+data CreateRelatedItemResponse = CreateRelatedItemResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Amazon Resource Name (ARN) of the related item.
+    relatedItemArn :: Prelude.Text,
+    -- | The unique identifier of the related item.
+    relatedItemId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRelatedItemResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createRelatedItemResponse_httpStatus' - The response's http status code.
+--
+-- 'relatedItemArn', 'createRelatedItemResponse_relatedItemArn' - The Amazon Resource Name (ARN) of the related item.
+--
+-- 'relatedItemId', 'createRelatedItemResponse_relatedItemId' - The unique identifier of the related item.
+newCreateRelatedItemResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'relatedItemArn'
+  Prelude.Text ->
+  -- | 'relatedItemId'
+  Prelude.Text ->
+  CreateRelatedItemResponse
+newCreateRelatedItemResponse
+  pHttpStatus_
+  pRelatedItemArn_
+  pRelatedItemId_ =
+    CreateRelatedItemResponse'
+      { httpStatus =
+          pHttpStatus_,
+        relatedItemArn = pRelatedItemArn_,
+        relatedItemId = pRelatedItemId_
+      }
+
+-- | The response's http status code.
+createRelatedItemResponse_httpStatus :: Lens.Lens' CreateRelatedItemResponse Prelude.Int
+createRelatedItemResponse_httpStatus = Lens.lens (\CreateRelatedItemResponse' {httpStatus} -> httpStatus) (\s@CreateRelatedItemResponse' {} a -> s {httpStatus = a} :: CreateRelatedItemResponse)
+
+-- | The Amazon Resource Name (ARN) of the related item.
+createRelatedItemResponse_relatedItemArn :: Lens.Lens' CreateRelatedItemResponse Prelude.Text
+createRelatedItemResponse_relatedItemArn = Lens.lens (\CreateRelatedItemResponse' {relatedItemArn} -> relatedItemArn) (\s@CreateRelatedItemResponse' {} a -> s {relatedItemArn = a} :: CreateRelatedItemResponse)
+
+-- | The unique identifier of the related item.
+createRelatedItemResponse_relatedItemId :: Lens.Lens' CreateRelatedItemResponse Prelude.Text
+createRelatedItemResponse_relatedItemId = Lens.lens (\CreateRelatedItemResponse' {relatedItemId} -> relatedItemId) (\s@CreateRelatedItemResponse' {} a -> s {relatedItemId = a} :: CreateRelatedItemResponse)
+
+instance Prelude.NFData CreateRelatedItemResponse where
+  rnf CreateRelatedItemResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf relatedItemArn
+      `Prelude.seq` Prelude.rnf relatedItemId
diff --git a/gen/Amazonka/ConnectCases/CreateTemplate.hs b/gen/Amazonka/ConnectCases/CreateTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/CreateTemplate.hs
@@ -0,0 +1,266 @@
+{-# 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.ConnectCases.CreateTemplate
+-- 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 template in the Cases domain. This template is used to define
+-- the case object model (that is, to define what data can be captured on
+-- cases) in a Cases domain. A template must have a unique name within a
+-- domain, and it must reference existing field IDs and layout IDs.
+-- Additionally, multiple fields with same IDs are not allowed within the
+-- same Template. A template can be either Active or Inactive, as indicated
+-- by its status. Inactive templates cannot be used to create cases.
+module Amazonka.ConnectCases.CreateTemplate
+  ( -- * Creating a Request
+    CreateTemplate (..),
+    newCreateTemplate,
+
+    -- * Request Lenses
+    createTemplate_description,
+    createTemplate_layoutConfiguration,
+    createTemplate_requiredFields,
+    createTemplate_status,
+    createTemplate_domainId,
+    createTemplate_name,
+
+    -- * Destructuring the Response
+    CreateTemplateResponse (..),
+    newCreateTemplateResponse,
+
+    -- * Response Lenses
+    createTemplateResponse_httpStatus,
+    createTemplateResponse_templateArn,
+    createTemplateResponse_templateId,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateTemplate' smart constructor.
+data CreateTemplate = CreateTemplate'
+  { -- | A brief description of the template.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Configuration of layouts associated to the template.
+    layoutConfiguration :: Prelude.Maybe LayoutConfiguration,
+    -- | A list of fields that must contain a value for a case to be successfully
+    -- created with this template.
+    requiredFields :: Prelude.Maybe [RequiredField],
+    -- | The status of the template.
+    status :: Prelude.Maybe TemplateStatus,
+    -- | The unique identifier of the Cases domain.
+    domainId :: Prelude.Text,
+    -- | A name for the template. It must be unique per domain.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createTemplate_description' - A brief description of the template.
+--
+-- 'layoutConfiguration', 'createTemplate_layoutConfiguration' - Configuration of layouts associated to the template.
+--
+-- 'requiredFields', 'createTemplate_requiredFields' - A list of fields that must contain a value for a case to be successfully
+-- created with this template.
+--
+-- 'status', 'createTemplate_status' - The status of the template.
+--
+-- 'domainId', 'createTemplate_domainId' - The unique identifier of the Cases domain.
+--
+-- 'name', 'createTemplate_name' - A name for the template. It must be unique per domain.
+newCreateTemplate ::
+  -- | 'domainId'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateTemplate
+newCreateTemplate pDomainId_ pName_ =
+  CreateTemplate'
+    { description = Prelude.Nothing,
+      layoutConfiguration = Prelude.Nothing,
+      requiredFields = Prelude.Nothing,
+      status = Prelude.Nothing,
+      domainId = pDomainId_,
+      name = pName_
+    }
+
+-- | A brief description of the template.
+createTemplate_description :: Lens.Lens' CreateTemplate (Prelude.Maybe Prelude.Text)
+createTemplate_description = Lens.lens (\CreateTemplate' {description} -> description) (\s@CreateTemplate' {} a -> s {description = a} :: CreateTemplate)
+
+-- | Configuration of layouts associated to the template.
+createTemplate_layoutConfiguration :: Lens.Lens' CreateTemplate (Prelude.Maybe LayoutConfiguration)
+createTemplate_layoutConfiguration = Lens.lens (\CreateTemplate' {layoutConfiguration} -> layoutConfiguration) (\s@CreateTemplate' {} a -> s {layoutConfiguration = a} :: CreateTemplate)
+
+-- | A list of fields that must contain a value for a case to be successfully
+-- created with this template.
+createTemplate_requiredFields :: Lens.Lens' CreateTemplate (Prelude.Maybe [RequiredField])
+createTemplate_requiredFields = Lens.lens (\CreateTemplate' {requiredFields} -> requiredFields) (\s@CreateTemplate' {} a -> s {requiredFields = a} :: CreateTemplate) Prelude.. Lens.mapping Lens.coerced
+
+-- | The status of the template.
+createTemplate_status :: Lens.Lens' CreateTemplate (Prelude.Maybe TemplateStatus)
+createTemplate_status = Lens.lens (\CreateTemplate' {status} -> status) (\s@CreateTemplate' {} a -> s {status = a} :: CreateTemplate)
+
+-- | The unique identifier of the Cases domain.
+createTemplate_domainId :: Lens.Lens' CreateTemplate Prelude.Text
+createTemplate_domainId = Lens.lens (\CreateTemplate' {domainId} -> domainId) (\s@CreateTemplate' {} a -> s {domainId = a} :: CreateTemplate)
+
+-- | A name for the template. It must be unique per domain.
+createTemplate_name :: Lens.Lens' CreateTemplate Prelude.Text
+createTemplate_name = Lens.lens (\CreateTemplate' {name} -> name) (\s@CreateTemplate' {} a -> s {name = a} :: CreateTemplate)
+
+instance Core.AWSRequest CreateTemplate where
+  type
+    AWSResponse CreateTemplate =
+      CreateTemplateResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateTemplateResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "templateArn")
+            Prelude.<*> (x Data..:> "templateId")
+      )
+
+instance Prelude.Hashable CreateTemplate where
+  hashWithSalt _salt CreateTemplate' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` layoutConfiguration
+      `Prelude.hashWithSalt` requiredFields
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` domainId
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateTemplate where
+  rnf CreateTemplate' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf layoutConfiguration
+      `Prelude.seq` Prelude.rnf requiredFields
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf domainId
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateTemplate where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateTemplate where
+  toJSON CreateTemplate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("layoutConfiguration" Data..=)
+              Prelude.<$> layoutConfiguration,
+            ("requiredFields" Data..=)
+              Prelude.<$> requiredFields,
+            ("status" Data..=) Prelude.<$> status,
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateTemplate where
+  toPath CreateTemplate' {..} =
+    Prelude.mconcat
+      ["/domains/", Data.toBS domainId, "/templates"]
+
+instance Data.ToQuery CreateTemplate where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateTemplateResponse' smart constructor.
+data CreateTemplateResponse = CreateTemplateResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Amazon Resource Name (ARN) of the newly created template.
+    templateArn :: Prelude.Text,
+    -- | A unique identifier of a template.
+    templateId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTemplateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createTemplateResponse_httpStatus' - The response's http status code.
+--
+-- 'templateArn', 'createTemplateResponse_templateArn' - The Amazon Resource Name (ARN) of the newly created template.
+--
+-- 'templateId', 'createTemplateResponse_templateId' - A unique identifier of a template.
+newCreateTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'templateArn'
+  Prelude.Text ->
+  -- | 'templateId'
+  Prelude.Text ->
+  CreateTemplateResponse
+newCreateTemplateResponse
+  pHttpStatus_
+  pTemplateArn_
+  pTemplateId_ =
+    CreateTemplateResponse'
+      { httpStatus = pHttpStatus_,
+        templateArn = pTemplateArn_,
+        templateId = pTemplateId_
+      }
+
+-- | The response's http status code.
+createTemplateResponse_httpStatus :: Lens.Lens' CreateTemplateResponse Prelude.Int
+createTemplateResponse_httpStatus = Lens.lens (\CreateTemplateResponse' {httpStatus} -> httpStatus) (\s@CreateTemplateResponse' {} a -> s {httpStatus = a} :: CreateTemplateResponse)
+
+-- | The Amazon Resource Name (ARN) of the newly created template.
+createTemplateResponse_templateArn :: Lens.Lens' CreateTemplateResponse Prelude.Text
+createTemplateResponse_templateArn = Lens.lens (\CreateTemplateResponse' {templateArn} -> templateArn) (\s@CreateTemplateResponse' {} a -> s {templateArn = a} :: CreateTemplateResponse)
+
+-- | A unique identifier of a template.
+createTemplateResponse_templateId :: Lens.Lens' CreateTemplateResponse Prelude.Text
+createTemplateResponse_templateId = Lens.lens (\CreateTemplateResponse' {templateId} -> templateId) (\s@CreateTemplateResponse' {} a -> s {templateId = a} :: CreateTemplateResponse)
+
+instance Prelude.NFData CreateTemplateResponse where
+  rnf CreateTemplateResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf templateArn
+      `Prelude.seq` Prelude.rnf templateId
diff --git a/gen/Amazonka/ConnectCases/GetCase.hs b/gen/Amazonka/ConnectCases/GetCase.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/GetCase.hs
@@ -0,0 +1,263 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.GetCase
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns information about a specific case if it exists.
+module Amazonka.ConnectCases.GetCase
+  ( -- * Creating a Request
+    GetCase (..),
+    newGetCase,
+
+    -- * Request Lenses
+    getCase_nextToken,
+    getCase_caseId,
+    getCase_domainId,
+    getCase_fields,
+
+    -- * Destructuring the Response
+    GetCaseResponse (..),
+    newGetCaseResponse,
+
+    -- * Response Lenses
+    getCaseResponse_nextToken,
+    getCaseResponse_tags,
+    getCaseResponse_httpStatus,
+    getCaseResponse_fields,
+    getCaseResponse_templateId,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetCase' smart constructor.
+data GetCase = GetCase'
+  { -- | 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,
+    -- | A unique identifier of the case.
+    caseId :: Prelude.Text,
+    -- | The unique identifier of the Cases domain.
+    domainId :: Prelude.Text,
+    -- | A list of unique field identifiers.
+    fields :: Prelude.NonEmpty FieldIdentifier
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetCase' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getCase_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.
+--
+-- 'caseId', 'getCase_caseId' - A unique identifier of the case.
+--
+-- 'domainId', 'getCase_domainId' - The unique identifier of the Cases domain.
+--
+-- 'fields', 'getCase_fields' - A list of unique field identifiers.
+newGetCase ::
+  -- | 'caseId'
+  Prelude.Text ->
+  -- | 'domainId'
+  Prelude.Text ->
+  -- | 'fields'
+  Prelude.NonEmpty FieldIdentifier ->
+  GetCase
+newGetCase pCaseId_ pDomainId_ pFields_ =
+  GetCase'
+    { nextToken = Prelude.Nothing,
+      caseId = pCaseId_,
+      domainId = pDomainId_,
+      fields = Lens.coerced Lens.# pFields_
+    }
+
+-- | 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.
+getCase_nextToken :: Lens.Lens' GetCase (Prelude.Maybe Prelude.Text)
+getCase_nextToken = Lens.lens (\GetCase' {nextToken} -> nextToken) (\s@GetCase' {} a -> s {nextToken = a} :: GetCase)
+
+-- | A unique identifier of the case.
+getCase_caseId :: Lens.Lens' GetCase Prelude.Text
+getCase_caseId = Lens.lens (\GetCase' {caseId} -> caseId) (\s@GetCase' {} a -> s {caseId = a} :: GetCase)
+
+-- | The unique identifier of the Cases domain.
+getCase_domainId :: Lens.Lens' GetCase Prelude.Text
+getCase_domainId = Lens.lens (\GetCase' {domainId} -> domainId) (\s@GetCase' {} a -> s {domainId = a} :: GetCase)
+
+-- | A list of unique field identifiers.
+getCase_fields :: Lens.Lens' GetCase (Prelude.NonEmpty FieldIdentifier)
+getCase_fields = Lens.lens (\GetCase' {fields} -> fields) (\s@GetCase' {} a -> s {fields = a} :: GetCase) Prelude.. Lens.coerced
+
+instance Core.AWSRequest GetCase where
+  type AWSResponse GetCase = GetCaseResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetCaseResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "fields" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..:> "templateId")
+      )
+
+instance Prelude.Hashable GetCase where
+  hashWithSalt _salt GetCase' {..} =
+    _salt
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` caseId
+      `Prelude.hashWithSalt` domainId
+      `Prelude.hashWithSalt` fields
+
+instance Prelude.NFData GetCase where
+  rnf GetCase' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf caseId
+      `Prelude.seq` Prelude.rnf domainId
+      `Prelude.seq` Prelude.rnf fields
+
+instance Data.ToHeaders GetCase where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetCase where
+  toJSON GetCase' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("fields" Data..= fields)
+          ]
+      )
+
+instance Data.ToPath GetCase where
+  toPath GetCase' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainId,
+        "/cases/",
+        Data.toBS caseId
+      ]
+
+instance Data.ToQuery GetCase where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetCaseResponse' smart constructor.
+data GetCaseResponse = GetCaseResponse'
+  { -- | The token for the next set of results. This is null if there are no more
+    -- results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A map of of key-value pairs that represent tags on a resource. Tags are
+    -- 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,
+    -- | A list of detailed field information.
+    fields :: [FieldValue],
+    -- | A unique identifier of a template.
+    templateId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetCaseResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getCaseResponse_nextToken' - The token for the next set of results. This is null if there are no more
+-- results to return.
+--
+-- 'tags', 'getCaseResponse_tags' - A map of of key-value pairs that represent tags on a resource. Tags are
+-- used to organize, track, or control access for this resource.
+--
+-- 'httpStatus', 'getCaseResponse_httpStatus' - The response's http status code.
+--
+-- 'fields', 'getCaseResponse_fields' - A list of detailed field information.
+--
+-- 'templateId', 'getCaseResponse_templateId' - A unique identifier of a template.
+newGetCaseResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'templateId'
+  Prelude.Text ->
+  GetCaseResponse
+newGetCaseResponse pHttpStatus_ pTemplateId_ =
+  GetCaseResponse'
+    { nextToken = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      fields = Prelude.mempty,
+      templateId = pTemplateId_
+    }
+
+-- | The token for the next set of results. This is null if there are no more
+-- results to return.
+getCaseResponse_nextToken :: Lens.Lens' GetCaseResponse (Prelude.Maybe Prelude.Text)
+getCaseResponse_nextToken = Lens.lens (\GetCaseResponse' {nextToken} -> nextToken) (\s@GetCaseResponse' {} a -> s {nextToken = a} :: GetCaseResponse)
+
+-- | A map of of key-value pairs that represent tags on a resource. Tags are
+-- used to organize, track, or control access for this resource.
+getCaseResponse_tags :: Lens.Lens' GetCaseResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getCaseResponse_tags = Lens.lens (\GetCaseResponse' {tags} -> tags) (\s@GetCaseResponse' {} a -> s {tags = a} :: GetCaseResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getCaseResponse_httpStatus :: Lens.Lens' GetCaseResponse Prelude.Int
+getCaseResponse_httpStatus = Lens.lens (\GetCaseResponse' {httpStatus} -> httpStatus) (\s@GetCaseResponse' {} a -> s {httpStatus = a} :: GetCaseResponse)
+
+-- | A list of detailed field information.
+getCaseResponse_fields :: Lens.Lens' GetCaseResponse [FieldValue]
+getCaseResponse_fields = Lens.lens (\GetCaseResponse' {fields} -> fields) (\s@GetCaseResponse' {} a -> s {fields = a} :: GetCaseResponse) Prelude.. Lens.coerced
+
+-- | A unique identifier of a template.
+getCaseResponse_templateId :: Lens.Lens' GetCaseResponse Prelude.Text
+getCaseResponse_templateId = Lens.lens (\GetCaseResponse' {templateId} -> templateId) (\s@GetCaseResponse' {} a -> s {templateId = a} :: GetCaseResponse)
+
+instance Prelude.NFData GetCaseResponse where
+  rnf GetCaseResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf fields
+      `Prelude.seq` Prelude.rnf templateId
diff --git a/gen/Amazonka/ConnectCases/GetCaseEventConfiguration.hs b/gen/Amazonka/ConnectCases/GetCaseEventConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/GetCaseEventConfiguration.hs
@@ -0,0 +1,176 @@
+{-# 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.ConnectCases.GetCaseEventConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the case event publishing configuration.
+module Amazonka.ConnectCases.GetCaseEventConfiguration
+  ( -- * Creating a Request
+    GetCaseEventConfiguration (..),
+    newGetCaseEventConfiguration,
+
+    -- * Request Lenses
+    getCaseEventConfiguration_domainId,
+
+    -- * Destructuring the Response
+    GetCaseEventConfigurationResponse (..),
+    newGetCaseEventConfigurationResponse,
+
+    -- * Response Lenses
+    getCaseEventConfigurationResponse_httpStatus,
+    getCaseEventConfigurationResponse_eventBridge,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetCaseEventConfiguration' smart constructor.
+data GetCaseEventConfiguration = GetCaseEventConfiguration'
+  { -- | The unique identifier of the Cases domain.
+    domainId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetCaseEventConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainId', 'getCaseEventConfiguration_domainId' - The unique identifier of the Cases domain.
+newGetCaseEventConfiguration ::
+  -- | 'domainId'
+  Prelude.Text ->
+  GetCaseEventConfiguration
+newGetCaseEventConfiguration pDomainId_ =
+  GetCaseEventConfiguration' {domainId = pDomainId_}
+
+-- | The unique identifier of the Cases domain.
+getCaseEventConfiguration_domainId :: Lens.Lens' GetCaseEventConfiguration Prelude.Text
+getCaseEventConfiguration_domainId = Lens.lens (\GetCaseEventConfiguration' {domainId} -> domainId) (\s@GetCaseEventConfiguration' {} a -> s {domainId = a} :: GetCaseEventConfiguration)
+
+instance Core.AWSRequest GetCaseEventConfiguration where
+  type
+    AWSResponse GetCaseEventConfiguration =
+      GetCaseEventConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetCaseEventConfigurationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "eventBridge")
+      )
+
+instance Prelude.Hashable GetCaseEventConfiguration where
+  hashWithSalt _salt GetCaseEventConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` domainId
+
+instance Prelude.NFData GetCaseEventConfiguration where
+  rnf GetCaseEventConfiguration' {..} =
+    Prelude.rnf domainId
+
+instance Data.ToHeaders GetCaseEventConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetCaseEventConfiguration where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath GetCaseEventConfiguration where
+  toPath GetCaseEventConfiguration' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainId,
+        "/case-event-configuration"
+      ]
+
+instance Data.ToQuery GetCaseEventConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetCaseEventConfigurationResponse' smart constructor.
+data GetCaseEventConfigurationResponse = GetCaseEventConfigurationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Configuration to enable EventBridge case event delivery and determine
+    -- what data is delivered.
+    eventBridge :: EventBridgeConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetCaseEventConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getCaseEventConfigurationResponse_httpStatus' - The response's http status code.
+--
+-- 'eventBridge', 'getCaseEventConfigurationResponse_eventBridge' - Configuration to enable EventBridge case event delivery and determine
+-- what data is delivered.
+newGetCaseEventConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'eventBridge'
+  EventBridgeConfiguration ->
+  GetCaseEventConfigurationResponse
+newGetCaseEventConfigurationResponse
+  pHttpStatus_
+  pEventBridge_ =
+    GetCaseEventConfigurationResponse'
+      { httpStatus =
+          pHttpStatus_,
+        eventBridge = pEventBridge_
+      }
+
+-- | The response's http status code.
+getCaseEventConfigurationResponse_httpStatus :: Lens.Lens' GetCaseEventConfigurationResponse Prelude.Int
+getCaseEventConfigurationResponse_httpStatus = Lens.lens (\GetCaseEventConfigurationResponse' {httpStatus} -> httpStatus) (\s@GetCaseEventConfigurationResponse' {} a -> s {httpStatus = a} :: GetCaseEventConfigurationResponse)
+
+-- | Configuration to enable EventBridge case event delivery and determine
+-- what data is delivered.
+getCaseEventConfigurationResponse_eventBridge :: Lens.Lens' GetCaseEventConfigurationResponse EventBridgeConfiguration
+getCaseEventConfigurationResponse_eventBridge = Lens.lens (\GetCaseEventConfigurationResponse' {eventBridge} -> eventBridge) (\s@GetCaseEventConfigurationResponse' {} a -> s {eventBridge = a} :: GetCaseEventConfigurationResponse)
+
+instance
+  Prelude.NFData
+    GetCaseEventConfigurationResponse
+  where
+  rnf GetCaseEventConfigurationResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf eventBridge
diff --git a/gen/Amazonka/ConnectCases/GetDomain.hs b/gen/Amazonka/ConnectCases/GetDomain.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/GetDomain.hs
@@ -0,0 +1,237 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.GetDomain
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns information about a specific domain if it exists.
+module Amazonka.ConnectCases.GetDomain
+  ( -- * Creating a Request
+    GetDomain (..),
+    newGetDomain,
+
+    -- * Request Lenses
+    getDomain_domainId,
+
+    -- * Destructuring the Response
+    GetDomainResponse (..),
+    newGetDomainResponse,
+
+    -- * Response Lenses
+    getDomainResponse_tags,
+    getDomainResponse_httpStatus,
+    getDomainResponse_createdTime,
+    getDomainResponse_domainArn,
+    getDomainResponse_domainId,
+    getDomainResponse_domainStatus,
+    getDomainResponse_name,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDomain' smart constructor.
+data GetDomain = GetDomain'
+  { -- | The unique identifier of the Cases domain.
+    domainId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDomain' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainId', 'getDomain_domainId' - The unique identifier of the Cases domain.
+newGetDomain ::
+  -- | 'domainId'
+  Prelude.Text ->
+  GetDomain
+newGetDomain pDomainId_ =
+  GetDomain' {domainId = pDomainId_}
+
+-- | The unique identifier of the Cases domain.
+getDomain_domainId :: Lens.Lens' GetDomain Prelude.Text
+getDomain_domainId = Lens.lens (\GetDomain' {domainId} -> domainId) (\s@GetDomain' {} a -> s {domainId = a} :: GetDomain)
+
+instance Core.AWSRequest GetDomain where
+  type AWSResponse GetDomain = GetDomainResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDomainResponse'
+            Prelude.<$> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "createdTime")
+            Prelude.<*> (x Data..:> "domainArn")
+            Prelude.<*> (x Data..:> "domainId")
+            Prelude.<*> (x Data..:> "domainStatus")
+            Prelude.<*> (x Data..:> "name")
+      )
+
+instance Prelude.Hashable GetDomain where
+  hashWithSalt _salt GetDomain' {..} =
+    _salt `Prelude.hashWithSalt` domainId
+
+instance Prelude.NFData GetDomain where
+  rnf GetDomain' {..} = Prelude.rnf domainId
+
+instance Data.ToHeaders GetDomain where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetDomain where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath GetDomain where
+  toPath GetDomain' {..} =
+    Prelude.mconcat ["/domains/", Data.toBS domainId]
+
+instance Data.ToQuery GetDomain where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetDomainResponse' smart constructor.
+data GetDomainResponse = GetDomainResponse'
+  { -- | A map of of key-value pairs that represent tags on a resource. Tags are
+    -- 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,
+    -- | The timestamp when the Cases domain was created.
+    createdTime :: Data.ISO8601,
+    -- | The Amazon Resource Name (ARN) for the Cases domain.
+    domainArn :: Prelude.Text,
+    -- | The unique identifier of the Cases domain.
+    domainId :: Prelude.Text,
+    -- | The status of the Cases domain.
+    domainStatus :: DomainStatus,
+    -- | The name of the Cases domain.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDomainResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getDomainResponse_tags' - A map of of key-value pairs that represent tags on a resource. Tags are
+-- used to organize, track, or control access for this resource.
+--
+-- 'httpStatus', 'getDomainResponse_httpStatus' - The response's http status code.
+--
+-- 'createdTime', 'getDomainResponse_createdTime' - The timestamp when the Cases domain was created.
+--
+-- 'domainArn', 'getDomainResponse_domainArn' - The Amazon Resource Name (ARN) for the Cases domain.
+--
+-- 'domainId', 'getDomainResponse_domainId' - The unique identifier of the Cases domain.
+--
+-- 'domainStatus', 'getDomainResponse_domainStatus' - The status of the Cases domain.
+--
+-- 'name', 'getDomainResponse_name' - The name of the Cases domain.
+newGetDomainResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'createdTime'
+  Prelude.UTCTime ->
+  -- | 'domainArn'
+  Prelude.Text ->
+  -- | 'domainId'
+  Prelude.Text ->
+  -- | 'domainStatus'
+  DomainStatus ->
+  -- | 'name'
+  Prelude.Text ->
+  GetDomainResponse
+newGetDomainResponse
+  pHttpStatus_
+  pCreatedTime_
+  pDomainArn_
+  pDomainId_
+  pDomainStatus_
+  pName_ =
+    GetDomainResponse'
+      { tags = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        createdTime = Data._Time Lens.# pCreatedTime_,
+        domainArn = pDomainArn_,
+        domainId = pDomainId_,
+        domainStatus = pDomainStatus_,
+        name = pName_
+      }
+
+-- | A map of of key-value pairs that represent tags on a resource. Tags are
+-- used to organize, track, or control access for this resource.
+getDomainResponse_tags :: Lens.Lens' GetDomainResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getDomainResponse_tags = Lens.lens (\GetDomainResponse' {tags} -> tags) (\s@GetDomainResponse' {} a -> s {tags = a} :: GetDomainResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getDomainResponse_httpStatus :: Lens.Lens' GetDomainResponse Prelude.Int
+getDomainResponse_httpStatus = Lens.lens (\GetDomainResponse' {httpStatus} -> httpStatus) (\s@GetDomainResponse' {} a -> s {httpStatus = a} :: GetDomainResponse)
+
+-- | The timestamp when the Cases domain was created.
+getDomainResponse_createdTime :: Lens.Lens' GetDomainResponse Prelude.UTCTime
+getDomainResponse_createdTime = Lens.lens (\GetDomainResponse' {createdTime} -> createdTime) (\s@GetDomainResponse' {} a -> s {createdTime = a} :: GetDomainResponse) Prelude.. Data._Time
+
+-- | The Amazon Resource Name (ARN) for the Cases domain.
+getDomainResponse_domainArn :: Lens.Lens' GetDomainResponse Prelude.Text
+getDomainResponse_domainArn = Lens.lens (\GetDomainResponse' {domainArn} -> domainArn) (\s@GetDomainResponse' {} a -> s {domainArn = a} :: GetDomainResponse)
+
+-- | The unique identifier of the Cases domain.
+getDomainResponse_domainId :: Lens.Lens' GetDomainResponse Prelude.Text
+getDomainResponse_domainId = Lens.lens (\GetDomainResponse' {domainId} -> domainId) (\s@GetDomainResponse' {} a -> s {domainId = a} :: GetDomainResponse)
+
+-- | The status of the Cases domain.
+getDomainResponse_domainStatus :: Lens.Lens' GetDomainResponse DomainStatus
+getDomainResponse_domainStatus = Lens.lens (\GetDomainResponse' {domainStatus} -> domainStatus) (\s@GetDomainResponse' {} a -> s {domainStatus = a} :: GetDomainResponse)
+
+-- | The name of the Cases domain.
+getDomainResponse_name :: Lens.Lens' GetDomainResponse Prelude.Text
+getDomainResponse_name = Lens.lens (\GetDomainResponse' {name} -> name) (\s@GetDomainResponse' {} a -> s {name = a} :: GetDomainResponse)
+
+instance Prelude.NFData GetDomainResponse where
+  rnf GetDomainResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf createdTime
+      `Prelude.seq` Prelude.rnf domainArn
+      `Prelude.seq` Prelude.rnf domainId
+      `Prelude.seq` Prelude.rnf domainStatus
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/ConnectCases/GetLayout.hs b/gen/Amazonka/ConnectCases/GetLayout.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/GetLayout.hs
@@ -0,0 +1,248 @@
+{-# 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.ConnectCases.GetLayout
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the details for the requested layout.
+module Amazonka.ConnectCases.GetLayout
+  ( -- * Creating a Request
+    GetLayout (..),
+    newGetLayout,
+
+    -- * Request Lenses
+    getLayout_domainId,
+    getLayout_layoutId,
+
+    -- * Destructuring the Response
+    GetLayoutResponse (..),
+    newGetLayoutResponse,
+
+    -- * Response Lenses
+    getLayoutResponse_tags,
+    getLayoutResponse_httpStatus,
+    getLayoutResponse_content,
+    getLayoutResponse_layoutArn,
+    getLayoutResponse_layoutId,
+    getLayoutResponse_name,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetLayout' smart constructor.
+data GetLayout = GetLayout'
+  { -- | The unique identifier of the Cases domain.
+    domainId :: Prelude.Text,
+    -- | The unique identifier of the layout.
+    layoutId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetLayout' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainId', 'getLayout_domainId' - The unique identifier of the Cases domain.
+--
+-- 'layoutId', 'getLayout_layoutId' - The unique identifier of the layout.
+newGetLayout ::
+  -- | 'domainId'
+  Prelude.Text ->
+  -- | 'layoutId'
+  Prelude.Text ->
+  GetLayout
+newGetLayout pDomainId_ pLayoutId_ =
+  GetLayout'
+    { domainId = pDomainId_,
+      layoutId = pLayoutId_
+    }
+
+-- | The unique identifier of the Cases domain.
+getLayout_domainId :: Lens.Lens' GetLayout Prelude.Text
+getLayout_domainId = Lens.lens (\GetLayout' {domainId} -> domainId) (\s@GetLayout' {} a -> s {domainId = a} :: GetLayout)
+
+-- | The unique identifier of the layout.
+getLayout_layoutId :: Lens.Lens' GetLayout Prelude.Text
+getLayout_layoutId = Lens.lens (\GetLayout' {layoutId} -> layoutId) (\s@GetLayout' {} a -> s {layoutId = a} :: GetLayout)
+
+instance Core.AWSRequest GetLayout where
+  type AWSResponse GetLayout = GetLayoutResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetLayoutResponse'
+            Prelude.<$> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "content")
+            Prelude.<*> (x Data..:> "layoutArn")
+            Prelude.<*> (x Data..:> "layoutId")
+            Prelude.<*> (x Data..:> "name")
+      )
+
+instance Prelude.Hashable GetLayout where
+  hashWithSalt _salt GetLayout' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainId
+      `Prelude.hashWithSalt` layoutId
+
+instance Prelude.NFData GetLayout where
+  rnf GetLayout' {..} =
+    Prelude.rnf domainId
+      `Prelude.seq` Prelude.rnf layoutId
+
+instance Data.ToHeaders GetLayout where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetLayout where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath GetLayout where
+  toPath GetLayout' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainId,
+        "/layouts/",
+        Data.toBS layoutId
+      ]
+
+instance Data.ToQuery GetLayout where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetLayoutResponse' smart constructor.
+data GetLayoutResponse = GetLayoutResponse'
+  { -- | A map of of key-value pairs that represent tags on a resource. Tags are
+    -- 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,
+    -- | Information about which fields will be present in the layout, the order
+    -- of the fields, and read-only attribute of the field.
+    content :: LayoutContent,
+    -- | The Amazon Resource Name (ARN) of the newly created layout.
+    layoutArn :: Prelude.Text,
+    -- | The unique identifier of the layout.
+    layoutId :: Prelude.Text,
+    -- | The name of the layout. It must be unique.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetLayoutResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getLayoutResponse_tags' - A map of of key-value pairs that represent tags on a resource. Tags are
+-- used to organize, track, or control access for this resource.
+--
+-- 'httpStatus', 'getLayoutResponse_httpStatus' - The response's http status code.
+--
+-- 'content', 'getLayoutResponse_content' - Information about which fields will be present in the layout, the order
+-- of the fields, and read-only attribute of the field.
+--
+-- 'layoutArn', 'getLayoutResponse_layoutArn' - The Amazon Resource Name (ARN) of the newly created layout.
+--
+-- 'layoutId', 'getLayoutResponse_layoutId' - The unique identifier of the layout.
+--
+-- 'name', 'getLayoutResponse_name' - The name of the layout. It must be unique.
+newGetLayoutResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'content'
+  LayoutContent ->
+  -- | 'layoutArn'
+  Prelude.Text ->
+  -- | 'layoutId'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  GetLayoutResponse
+newGetLayoutResponse
+  pHttpStatus_
+  pContent_
+  pLayoutArn_
+  pLayoutId_
+  pName_ =
+    GetLayoutResponse'
+      { tags = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        content = pContent_,
+        layoutArn = pLayoutArn_,
+        layoutId = pLayoutId_,
+        name = pName_
+      }
+
+-- | A map of of key-value pairs that represent tags on a resource. Tags are
+-- used to organize, track, or control access for this resource.
+getLayoutResponse_tags :: Lens.Lens' GetLayoutResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getLayoutResponse_tags = Lens.lens (\GetLayoutResponse' {tags} -> tags) (\s@GetLayoutResponse' {} a -> s {tags = a} :: GetLayoutResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getLayoutResponse_httpStatus :: Lens.Lens' GetLayoutResponse Prelude.Int
+getLayoutResponse_httpStatus = Lens.lens (\GetLayoutResponse' {httpStatus} -> httpStatus) (\s@GetLayoutResponse' {} a -> s {httpStatus = a} :: GetLayoutResponse)
+
+-- | Information about which fields will be present in the layout, the order
+-- of the fields, and read-only attribute of the field.
+getLayoutResponse_content :: Lens.Lens' GetLayoutResponse LayoutContent
+getLayoutResponse_content = Lens.lens (\GetLayoutResponse' {content} -> content) (\s@GetLayoutResponse' {} a -> s {content = a} :: GetLayoutResponse)
+
+-- | The Amazon Resource Name (ARN) of the newly created layout.
+getLayoutResponse_layoutArn :: Lens.Lens' GetLayoutResponse Prelude.Text
+getLayoutResponse_layoutArn = Lens.lens (\GetLayoutResponse' {layoutArn} -> layoutArn) (\s@GetLayoutResponse' {} a -> s {layoutArn = a} :: GetLayoutResponse)
+
+-- | The unique identifier of the layout.
+getLayoutResponse_layoutId :: Lens.Lens' GetLayoutResponse Prelude.Text
+getLayoutResponse_layoutId = Lens.lens (\GetLayoutResponse' {layoutId} -> layoutId) (\s@GetLayoutResponse' {} a -> s {layoutId = a} :: GetLayoutResponse)
+
+-- | The name of the layout. It must be unique.
+getLayoutResponse_name :: Lens.Lens' GetLayoutResponse Prelude.Text
+getLayoutResponse_name = Lens.lens (\GetLayoutResponse' {name} -> name) (\s@GetLayoutResponse' {} a -> s {name = a} :: GetLayoutResponse)
+
+instance Prelude.NFData GetLayoutResponse where
+  rnf GetLayoutResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf content
+      `Prelude.seq` Prelude.rnf layoutArn
+      `Prelude.seq` Prelude.rnf layoutId
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/ConnectCases/GetTemplate.hs b/gen/Amazonka/ConnectCases/GetTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/GetTemplate.hs
@@ -0,0 +1,284 @@
+{-# 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.ConnectCases.GetTemplate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the details for the requested template.
+module Amazonka.ConnectCases.GetTemplate
+  ( -- * Creating a Request
+    GetTemplate (..),
+    newGetTemplate,
+
+    -- * Request Lenses
+    getTemplate_domainId,
+    getTemplate_templateId,
+
+    -- * Destructuring the Response
+    GetTemplateResponse (..),
+    newGetTemplateResponse,
+
+    -- * Response Lenses
+    getTemplateResponse_description,
+    getTemplateResponse_layoutConfiguration,
+    getTemplateResponse_requiredFields,
+    getTemplateResponse_tags,
+    getTemplateResponse_httpStatus,
+    getTemplateResponse_name,
+    getTemplateResponse_status,
+    getTemplateResponse_templateArn,
+    getTemplateResponse_templateId,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetTemplate' smart constructor.
+data GetTemplate = GetTemplate'
+  { -- | The unique identifier of the Cases domain.
+    domainId :: Prelude.Text,
+    -- | A unique identifier of a template.
+    templateId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainId', 'getTemplate_domainId' - The unique identifier of the Cases domain.
+--
+-- 'templateId', 'getTemplate_templateId' - A unique identifier of a template.
+newGetTemplate ::
+  -- | 'domainId'
+  Prelude.Text ->
+  -- | 'templateId'
+  Prelude.Text ->
+  GetTemplate
+newGetTemplate pDomainId_ pTemplateId_ =
+  GetTemplate'
+    { domainId = pDomainId_,
+      templateId = pTemplateId_
+    }
+
+-- | The unique identifier of the Cases domain.
+getTemplate_domainId :: Lens.Lens' GetTemplate Prelude.Text
+getTemplate_domainId = Lens.lens (\GetTemplate' {domainId} -> domainId) (\s@GetTemplate' {} a -> s {domainId = a} :: GetTemplate)
+
+-- | A unique identifier of a template.
+getTemplate_templateId :: Lens.Lens' GetTemplate Prelude.Text
+getTemplate_templateId = Lens.lens (\GetTemplate' {templateId} -> templateId) (\s@GetTemplate' {} a -> s {templateId = a} :: GetTemplate)
+
+instance Core.AWSRequest GetTemplate where
+  type AWSResponse GetTemplate = GetTemplateResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetTemplateResponse'
+            Prelude.<$> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "layoutConfiguration")
+            Prelude.<*> (x Data..?> "requiredFields" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "name")
+            Prelude.<*> (x Data..:> "status")
+            Prelude.<*> (x Data..:> "templateArn")
+            Prelude.<*> (x Data..:> "templateId")
+      )
+
+instance Prelude.Hashable GetTemplate where
+  hashWithSalt _salt GetTemplate' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainId
+      `Prelude.hashWithSalt` templateId
+
+instance Prelude.NFData GetTemplate where
+  rnf GetTemplate' {..} =
+    Prelude.rnf domainId
+      `Prelude.seq` Prelude.rnf templateId
+
+instance Data.ToHeaders GetTemplate where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetTemplate where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath GetTemplate where
+  toPath GetTemplate' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainId,
+        "/templates/",
+        Data.toBS templateId
+      ]
+
+instance Data.ToQuery GetTemplate where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetTemplateResponse' smart constructor.
+data GetTemplateResponse = GetTemplateResponse'
+  { -- | A brief description of the template.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Configuration of layouts associated to the template.
+    layoutConfiguration :: Prelude.Maybe LayoutConfiguration,
+    -- | A list of fields that must contain a value for a case to be successfully
+    -- created with this template.
+    requiredFields :: Prelude.Maybe [RequiredField],
+    -- | A map of of key-value pairs that represent tags on a resource. Tags are
+    -- 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,
+    -- | The name of the template.
+    name :: Prelude.Text,
+    -- | The status of the template.
+    status :: TemplateStatus,
+    -- | The Amazon Resource Name (ARN) of the template.
+    templateArn :: Prelude.Text,
+    -- | A unique identifier of a template.
+    templateId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetTemplateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getTemplateResponse_description' - A brief description of the template.
+--
+-- 'layoutConfiguration', 'getTemplateResponse_layoutConfiguration' - Configuration of layouts associated to the template.
+--
+-- 'requiredFields', 'getTemplateResponse_requiredFields' - A list of fields that must contain a value for a case to be successfully
+-- created with this template.
+--
+-- 'tags', 'getTemplateResponse_tags' - A map of of key-value pairs that represent tags on a resource. Tags are
+-- used to organize, track, or control access for this resource.
+--
+-- 'httpStatus', 'getTemplateResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'getTemplateResponse_name' - The name of the template.
+--
+-- 'status', 'getTemplateResponse_status' - The status of the template.
+--
+-- 'templateArn', 'getTemplateResponse_templateArn' - The Amazon Resource Name (ARN) of the template.
+--
+-- 'templateId', 'getTemplateResponse_templateId' - A unique identifier of a template.
+newGetTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'status'
+  TemplateStatus ->
+  -- | 'templateArn'
+  Prelude.Text ->
+  -- | 'templateId'
+  Prelude.Text ->
+  GetTemplateResponse
+newGetTemplateResponse
+  pHttpStatus_
+  pName_
+  pStatus_
+  pTemplateArn_
+  pTemplateId_ =
+    GetTemplateResponse'
+      { description = Prelude.Nothing,
+        layoutConfiguration = Prelude.Nothing,
+        requiredFields = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        name = pName_,
+        status = pStatus_,
+        templateArn = pTemplateArn_,
+        templateId = pTemplateId_
+      }
+
+-- | A brief description of the template.
+getTemplateResponse_description :: Lens.Lens' GetTemplateResponse (Prelude.Maybe Prelude.Text)
+getTemplateResponse_description = Lens.lens (\GetTemplateResponse' {description} -> description) (\s@GetTemplateResponse' {} a -> s {description = a} :: GetTemplateResponse)
+
+-- | Configuration of layouts associated to the template.
+getTemplateResponse_layoutConfiguration :: Lens.Lens' GetTemplateResponse (Prelude.Maybe LayoutConfiguration)
+getTemplateResponse_layoutConfiguration = Lens.lens (\GetTemplateResponse' {layoutConfiguration} -> layoutConfiguration) (\s@GetTemplateResponse' {} a -> s {layoutConfiguration = a} :: GetTemplateResponse)
+
+-- | A list of fields that must contain a value for a case to be successfully
+-- created with this template.
+getTemplateResponse_requiredFields :: Lens.Lens' GetTemplateResponse (Prelude.Maybe [RequiredField])
+getTemplateResponse_requiredFields = Lens.lens (\GetTemplateResponse' {requiredFields} -> requiredFields) (\s@GetTemplateResponse' {} a -> s {requiredFields = a} :: GetTemplateResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A map of of key-value pairs that represent tags on a resource. Tags are
+-- used to organize, track, or control access for this resource.
+getTemplateResponse_tags :: Lens.Lens' GetTemplateResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getTemplateResponse_tags = Lens.lens (\GetTemplateResponse' {tags} -> tags) (\s@GetTemplateResponse' {} a -> s {tags = a} :: GetTemplateResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getTemplateResponse_httpStatus :: Lens.Lens' GetTemplateResponse Prelude.Int
+getTemplateResponse_httpStatus = Lens.lens (\GetTemplateResponse' {httpStatus} -> httpStatus) (\s@GetTemplateResponse' {} a -> s {httpStatus = a} :: GetTemplateResponse)
+
+-- | The name of the template.
+getTemplateResponse_name :: Lens.Lens' GetTemplateResponse Prelude.Text
+getTemplateResponse_name = Lens.lens (\GetTemplateResponse' {name} -> name) (\s@GetTemplateResponse' {} a -> s {name = a} :: GetTemplateResponse)
+
+-- | The status of the template.
+getTemplateResponse_status :: Lens.Lens' GetTemplateResponse TemplateStatus
+getTemplateResponse_status = Lens.lens (\GetTemplateResponse' {status} -> status) (\s@GetTemplateResponse' {} a -> s {status = a} :: GetTemplateResponse)
+
+-- | The Amazon Resource Name (ARN) of the template.
+getTemplateResponse_templateArn :: Lens.Lens' GetTemplateResponse Prelude.Text
+getTemplateResponse_templateArn = Lens.lens (\GetTemplateResponse' {templateArn} -> templateArn) (\s@GetTemplateResponse' {} a -> s {templateArn = a} :: GetTemplateResponse)
+
+-- | A unique identifier of a template.
+getTemplateResponse_templateId :: Lens.Lens' GetTemplateResponse Prelude.Text
+getTemplateResponse_templateId = Lens.lens (\GetTemplateResponse' {templateId} -> templateId) (\s@GetTemplateResponse' {} a -> s {templateId = a} :: GetTemplateResponse)
+
+instance Prelude.NFData GetTemplateResponse where
+  rnf GetTemplateResponse' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf layoutConfiguration
+      `Prelude.seq` Prelude.rnf requiredFields
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf templateArn
+      `Prelude.seq` Prelude.rnf templateId
diff --git a/gen/Amazonka/ConnectCases/Lens.hs b/gen/Amazonka/ConnectCases/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Lens.hs
@@ -0,0 +1,486 @@
+{-# 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.ConnectCases.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.ConnectCases.Lens
+  ( -- * Operations
+
+    -- ** BatchGetField
+    batchGetField_domainId,
+    batchGetField_fields,
+    batchGetFieldResponse_httpStatus,
+    batchGetFieldResponse_errors,
+    batchGetFieldResponse_fields,
+
+    -- ** BatchPutFieldOptions
+    batchPutFieldOptions_domainId,
+    batchPutFieldOptions_fieldId,
+    batchPutFieldOptions_options,
+    batchPutFieldOptionsResponse_errors,
+    batchPutFieldOptionsResponse_httpStatus,
+
+    -- ** CreateCase
+    createCase_clientToken,
+    createCase_domainId,
+    createCase_fields,
+    createCase_templateId,
+    createCaseResponse_httpStatus,
+    createCaseResponse_caseArn,
+    createCaseResponse_caseId,
+
+    -- ** CreateDomain
+    createDomain_name,
+    createDomainResponse_httpStatus,
+    createDomainResponse_domainArn,
+    createDomainResponse_domainId,
+    createDomainResponse_domainStatus,
+
+    -- ** CreateField
+    createField_description,
+    createField_domainId,
+    createField_name,
+    createField_type,
+    createFieldResponse_httpStatus,
+    createFieldResponse_fieldArn,
+    createFieldResponse_fieldId,
+
+    -- ** CreateLayout
+    createLayout_content,
+    createLayout_domainId,
+    createLayout_name,
+    createLayoutResponse_httpStatus,
+    createLayoutResponse_layoutArn,
+    createLayoutResponse_layoutId,
+
+    -- ** CreateRelatedItem
+    createRelatedItem_caseId,
+    createRelatedItem_content,
+    createRelatedItem_domainId,
+    createRelatedItem_type,
+    createRelatedItemResponse_httpStatus,
+    createRelatedItemResponse_relatedItemArn,
+    createRelatedItemResponse_relatedItemId,
+
+    -- ** CreateTemplate
+    createTemplate_description,
+    createTemplate_layoutConfiguration,
+    createTemplate_requiredFields,
+    createTemplate_status,
+    createTemplate_domainId,
+    createTemplate_name,
+    createTemplateResponse_httpStatus,
+    createTemplateResponse_templateArn,
+    createTemplateResponse_templateId,
+
+    -- ** GetCase
+    getCase_nextToken,
+    getCase_caseId,
+    getCase_domainId,
+    getCase_fields,
+    getCaseResponse_nextToken,
+    getCaseResponse_tags,
+    getCaseResponse_httpStatus,
+    getCaseResponse_fields,
+    getCaseResponse_templateId,
+
+    -- ** GetCaseEventConfiguration
+    getCaseEventConfiguration_domainId,
+    getCaseEventConfigurationResponse_httpStatus,
+    getCaseEventConfigurationResponse_eventBridge,
+
+    -- ** GetDomain
+    getDomain_domainId,
+    getDomainResponse_tags,
+    getDomainResponse_httpStatus,
+    getDomainResponse_createdTime,
+    getDomainResponse_domainArn,
+    getDomainResponse_domainId,
+    getDomainResponse_domainStatus,
+    getDomainResponse_name,
+
+    -- ** GetLayout
+    getLayout_domainId,
+    getLayout_layoutId,
+    getLayoutResponse_tags,
+    getLayoutResponse_httpStatus,
+    getLayoutResponse_content,
+    getLayoutResponse_layoutArn,
+    getLayoutResponse_layoutId,
+    getLayoutResponse_name,
+
+    -- ** GetTemplate
+    getTemplate_domainId,
+    getTemplate_templateId,
+    getTemplateResponse_description,
+    getTemplateResponse_layoutConfiguration,
+    getTemplateResponse_requiredFields,
+    getTemplateResponse_tags,
+    getTemplateResponse_httpStatus,
+    getTemplateResponse_name,
+    getTemplateResponse_status,
+    getTemplateResponse_templateArn,
+    getTemplateResponse_templateId,
+
+    -- ** ListCasesForContact
+    listCasesForContact_maxResults,
+    listCasesForContact_nextToken,
+    listCasesForContact_contactArn,
+    listCasesForContact_domainId,
+    listCasesForContactResponse_nextToken,
+    listCasesForContactResponse_httpStatus,
+    listCasesForContactResponse_cases,
+
+    -- ** ListDomains
+    listDomains_maxResults,
+    listDomains_nextToken,
+    listDomainsResponse_nextToken,
+    listDomainsResponse_httpStatus,
+    listDomainsResponse_domains,
+
+    -- ** ListFieldOptions
+    listFieldOptions_maxResults,
+    listFieldOptions_nextToken,
+    listFieldOptions_values,
+    listFieldOptions_domainId,
+    listFieldOptions_fieldId,
+    listFieldOptionsResponse_nextToken,
+    listFieldOptionsResponse_httpStatus,
+    listFieldOptionsResponse_options,
+
+    -- ** ListFields
+    listFields_maxResults,
+    listFields_nextToken,
+    listFields_domainId,
+    listFieldsResponse_nextToken,
+    listFieldsResponse_httpStatus,
+    listFieldsResponse_fields,
+
+    -- ** ListLayouts
+    listLayouts_maxResults,
+    listLayouts_nextToken,
+    listLayouts_domainId,
+    listLayoutsResponse_nextToken,
+    listLayoutsResponse_httpStatus,
+    listLayoutsResponse_layouts,
+
+    -- ** ListTagsForResource
+    listTagsForResource_arn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** ListTemplates
+    listTemplates_maxResults,
+    listTemplates_nextToken,
+    listTemplates_status,
+    listTemplates_domainId,
+    listTemplatesResponse_nextToken,
+    listTemplatesResponse_httpStatus,
+    listTemplatesResponse_templates,
+
+    -- ** PutCaseEventConfiguration
+    putCaseEventConfiguration_domainId,
+    putCaseEventConfiguration_eventBridge,
+    putCaseEventConfigurationResponse_httpStatus,
+
+    -- ** SearchCases
+    searchCases_fields,
+    searchCases_filter,
+    searchCases_maxResults,
+    searchCases_nextToken,
+    searchCases_searchTerm,
+    searchCases_sorts,
+    searchCases_domainId,
+    searchCasesResponse_nextToken,
+    searchCasesResponse_httpStatus,
+    searchCasesResponse_cases,
+
+    -- ** SearchRelatedItems
+    searchRelatedItems_filters,
+    searchRelatedItems_maxResults,
+    searchRelatedItems_nextToken,
+    searchRelatedItems_caseId,
+    searchRelatedItems_domainId,
+    searchRelatedItemsResponse_nextToken,
+    searchRelatedItemsResponse_httpStatus,
+    searchRelatedItemsResponse_relatedItems,
+
+    -- ** TagResource
+    tagResource_arn,
+    tagResource_tags,
+
+    -- ** UntagResource
+    untagResource_arn,
+    untagResource_tagKeys,
+
+    -- ** UpdateCase
+    updateCase_caseId,
+    updateCase_domainId,
+    updateCase_fields,
+    updateCaseResponse_httpStatus,
+
+    -- ** UpdateField
+    updateField_description,
+    updateField_name,
+    updateField_domainId,
+    updateField_fieldId,
+    updateFieldResponse_httpStatus,
+
+    -- ** UpdateLayout
+    updateLayout_content,
+    updateLayout_name,
+    updateLayout_domainId,
+    updateLayout_layoutId,
+    updateLayoutResponse_httpStatus,
+
+    -- ** UpdateTemplate
+    updateTemplate_description,
+    updateTemplate_layoutConfiguration,
+    updateTemplate_name,
+    updateTemplate_requiredFields,
+    updateTemplate_status,
+    updateTemplate_domainId,
+    updateTemplate_templateId,
+    updateTemplateResponse_httpStatus,
+
+    -- * Types
+
+    -- ** BasicLayout
+    basicLayout_moreInfo,
+    basicLayout_topPanel,
+
+    -- ** CaseEventIncludedData
+    caseEventIncludedData_fields,
+
+    -- ** CaseFilter
+    caseFilter_andAll,
+    caseFilter_field,
+    caseFilter_not,
+
+    -- ** CaseSummary
+    caseSummary_caseId,
+    caseSummary_templateId,
+
+    -- ** CommentContent
+    commentContent_body,
+    commentContent_contentType,
+
+    -- ** CommentFilter
+
+    -- ** Contact
+    contact_contactArn,
+
+    -- ** ContactContent
+    contactContent_channel,
+    contactContent_connectedToSystemTime,
+    contactContent_contactArn,
+
+    -- ** ContactFilter
+    contactFilter_channel,
+    contactFilter_contactArn,
+
+    -- ** DomainSummary
+    domainSummary_domainArn,
+    domainSummary_domainId,
+    domainSummary_name,
+
+    -- ** EventBridgeConfiguration
+    eventBridgeConfiguration_includedData,
+    eventBridgeConfiguration_enabled,
+
+    -- ** EventIncludedData
+    eventIncludedData_caseData,
+    eventIncludedData_relatedItemData,
+
+    -- ** FieldError
+    fieldError_message,
+    fieldError_errorCode,
+    fieldError_id,
+
+    -- ** FieldFilter
+    fieldFilter_contains,
+    fieldFilter_equalTo,
+    fieldFilter_greaterThan,
+    fieldFilter_greaterThanOrEqualTo,
+    fieldFilter_lessThan,
+    fieldFilter_lessThanOrEqualTo,
+
+    -- ** FieldGroup
+    fieldGroup_name,
+    fieldGroup_fields,
+
+    -- ** FieldIdentifier
+    fieldIdentifier_id,
+
+    -- ** FieldItem
+    fieldItem_id,
+
+    -- ** FieldOption
+    fieldOption_active,
+    fieldOption_name,
+    fieldOption_value,
+
+    -- ** FieldOptionError
+    fieldOptionError_errorCode,
+    fieldOptionError_message,
+    fieldOptionError_value,
+
+    -- ** FieldSummary
+    fieldSummary_fieldArn,
+    fieldSummary_fieldId,
+    fieldSummary_name,
+    fieldSummary_namespace,
+    fieldSummary_type,
+
+    -- ** FieldValue
+    fieldValue_id,
+    fieldValue_value,
+
+    -- ** FieldValueUnion
+    fieldValueUnion_booleanValue,
+    fieldValueUnion_doubleValue,
+    fieldValueUnion_stringValue,
+
+    -- ** GetFieldResponse
+    getFieldResponse_description,
+    getFieldResponse_tags,
+    getFieldResponse_fieldArn,
+    getFieldResponse_fieldId,
+    getFieldResponse_name,
+    getFieldResponse_namespace,
+    getFieldResponse_type,
+
+    -- ** LayoutConfiguration
+    layoutConfiguration_defaultLayout,
+
+    -- ** LayoutContent
+    layoutContent_basic,
+
+    -- ** LayoutSections
+    layoutSections_sections,
+
+    -- ** LayoutSummary
+    layoutSummary_layoutArn,
+    layoutSummary_layoutId,
+    layoutSummary_name,
+
+    -- ** RelatedItemContent
+    relatedItemContent_comment,
+    relatedItemContent_contact,
+
+    -- ** RelatedItemEventIncludedData
+    relatedItemEventIncludedData_includeContent,
+
+    -- ** RelatedItemInputContent
+    relatedItemInputContent_comment,
+    relatedItemInputContent_contact,
+
+    -- ** RelatedItemTypeFilter
+    relatedItemTypeFilter_comment,
+    relatedItemTypeFilter_contact,
+
+    -- ** RequiredField
+    requiredField_fieldId,
+
+    -- ** SearchCasesResponseItem
+    searchCasesResponseItem_tags,
+    searchCasesResponseItem_caseId,
+    searchCasesResponseItem_fields,
+    searchCasesResponseItem_templateId,
+
+    -- ** SearchRelatedItemsResponseItem
+    searchRelatedItemsResponseItem_tags,
+    searchRelatedItemsResponseItem_associationTime,
+    searchRelatedItemsResponseItem_content,
+    searchRelatedItemsResponseItem_relatedItemId,
+    searchRelatedItemsResponseItem_type,
+
+    -- ** Section
+    section_fieldGroup,
+
+    -- ** Sort
+    sort_fieldId,
+    sort_sortOrder,
+
+    -- ** TemplateSummary
+    templateSummary_name,
+    templateSummary_status,
+    templateSummary_templateArn,
+    templateSummary_templateId,
+  )
+where
+
+import Amazonka.ConnectCases.BatchGetField
+import Amazonka.ConnectCases.BatchPutFieldOptions
+import Amazonka.ConnectCases.CreateCase
+import Amazonka.ConnectCases.CreateDomain
+import Amazonka.ConnectCases.CreateField
+import Amazonka.ConnectCases.CreateLayout
+import Amazonka.ConnectCases.CreateRelatedItem
+import Amazonka.ConnectCases.CreateTemplate
+import Amazonka.ConnectCases.GetCase
+import Amazonka.ConnectCases.GetCaseEventConfiguration
+import Amazonka.ConnectCases.GetDomain
+import Amazonka.ConnectCases.GetLayout
+import Amazonka.ConnectCases.GetTemplate
+import Amazonka.ConnectCases.ListCasesForContact
+import Amazonka.ConnectCases.ListDomains
+import Amazonka.ConnectCases.ListFieldOptions
+import Amazonka.ConnectCases.ListFields
+import Amazonka.ConnectCases.ListLayouts
+import Amazonka.ConnectCases.ListTagsForResource
+import Amazonka.ConnectCases.ListTemplates
+import Amazonka.ConnectCases.PutCaseEventConfiguration
+import Amazonka.ConnectCases.SearchCases
+import Amazonka.ConnectCases.SearchRelatedItems
+import Amazonka.ConnectCases.TagResource
+import Amazonka.ConnectCases.Types.BasicLayout
+import Amazonka.ConnectCases.Types.CaseEventIncludedData
+import Amazonka.ConnectCases.Types.CaseFilter
+import Amazonka.ConnectCases.Types.CaseSummary
+import Amazonka.ConnectCases.Types.CommentContent
+import Amazonka.ConnectCases.Types.CommentFilter
+import Amazonka.ConnectCases.Types.Contact
+import Amazonka.ConnectCases.Types.ContactContent
+import Amazonka.ConnectCases.Types.ContactFilter
+import Amazonka.ConnectCases.Types.DomainSummary
+import Amazonka.ConnectCases.Types.EventBridgeConfiguration
+import Amazonka.ConnectCases.Types.EventIncludedData
+import Amazonka.ConnectCases.Types.FieldError
+import Amazonka.ConnectCases.Types.FieldFilter
+import Amazonka.ConnectCases.Types.FieldGroup
+import Amazonka.ConnectCases.Types.FieldIdentifier
+import Amazonka.ConnectCases.Types.FieldItem
+import Amazonka.ConnectCases.Types.FieldOption
+import Amazonka.ConnectCases.Types.FieldOptionError
+import Amazonka.ConnectCases.Types.FieldSummary
+import Amazonka.ConnectCases.Types.FieldValue
+import Amazonka.ConnectCases.Types.FieldValueUnion
+import Amazonka.ConnectCases.Types.GetFieldResponse
+import Amazonka.ConnectCases.Types.LayoutConfiguration
+import Amazonka.ConnectCases.Types.LayoutContent
+import Amazonka.ConnectCases.Types.LayoutSections
+import Amazonka.ConnectCases.Types.LayoutSummary
+import Amazonka.ConnectCases.Types.RelatedItemContent
+import Amazonka.ConnectCases.Types.RelatedItemEventIncludedData
+import Amazonka.ConnectCases.Types.RelatedItemInputContent
+import Amazonka.ConnectCases.Types.RelatedItemTypeFilter
+import Amazonka.ConnectCases.Types.RequiredField
+import Amazonka.ConnectCases.Types.SearchCasesResponseItem
+import Amazonka.ConnectCases.Types.SearchRelatedItemsResponseItem
+import Amazonka.ConnectCases.Types.Section
+import Amazonka.ConnectCases.Types.Sort
+import Amazonka.ConnectCases.Types.TemplateSummary
+import Amazonka.ConnectCases.UntagResource
+import Amazonka.ConnectCases.UpdateCase
+import Amazonka.ConnectCases.UpdateField
+import Amazonka.ConnectCases.UpdateLayout
+import Amazonka.ConnectCases.UpdateTemplate
diff --git a/gen/Amazonka/ConnectCases/ListCasesForContact.hs b/gen/Amazonka/ConnectCases/ListCasesForContact.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/ListCasesForContact.hs
@@ -0,0 +1,235 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.ListCasesForContact
+-- 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 cases for a given contact.
+module Amazonka.ConnectCases.ListCasesForContact
+  ( -- * Creating a Request
+    ListCasesForContact (..),
+    newListCasesForContact,
+
+    -- * Request Lenses
+    listCasesForContact_maxResults,
+    listCasesForContact_nextToken,
+    listCasesForContact_contactArn,
+    listCasesForContact_domainId,
+
+    -- * Destructuring the Response
+    ListCasesForContactResponse (..),
+    newListCasesForContactResponse,
+
+    -- * Response Lenses
+    listCasesForContactResponse_nextToken,
+    listCasesForContactResponse_httpStatus,
+    listCasesForContactResponse_cases,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListCasesForContact' smart constructor.
+data ListCasesForContact = ListCasesForContact'
+  { -- | 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,
+    -- | A unique identifier of a contact in Amazon Connect.
+    contactArn :: Prelude.Text,
+    -- | The unique identifier of the Cases domain.
+    domainId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListCasesForContact' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listCasesForContact_maxResults' - The maximum number of results to return per page.
+--
+-- 'nextToken', 'listCasesForContact_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.
+--
+-- 'contactArn', 'listCasesForContact_contactArn' - A unique identifier of a contact in Amazon Connect.
+--
+-- 'domainId', 'listCasesForContact_domainId' - The unique identifier of the Cases domain.
+newListCasesForContact ::
+  -- | 'contactArn'
+  Prelude.Text ->
+  -- | 'domainId'
+  Prelude.Text ->
+  ListCasesForContact
+newListCasesForContact pContactArn_ pDomainId_ =
+  ListCasesForContact'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      contactArn = pContactArn_,
+      domainId = pDomainId_
+    }
+
+-- | The maximum number of results to return per page.
+listCasesForContact_maxResults :: Lens.Lens' ListCasesForContact (Prelude.Maybe Prelude.Natural)
+listCasesForContact_maxResults = Lens.lens (\ListCasesForContact' {maxResults} -> maxResults) (\s@ListCasesForContact' {} a -> s {maxResults = a} :: ListCasesForContact)
+
+-- | 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.
+listCasesForContact_nextToken :: Lens.Lens' ListCasesForContact (Prelude.Maybe Prelude.Text)
+listCasesForContact_nextToken = Lens.lens (\ListCasesForContact' {nextToken} -> nextToken) (\s@ListCasesForContact' {} a -> s {nextToken = a} :: ListCasesForContact)
+
+-- | A unique identifier of a contact in Amazon Connect.
+listCasesForContact_contactArn :: Lens.Lens' ListCasesForContact Prelude.Text
+listCasesForContact_contactArn = Lens.lens (\ListCasesForContact' {contactArn} -> contactArn) (\s@ListCasesForContact' {} a -> s {contactArn = a} :: ListCasesForContact)
+
+-- | The unique identifier of the Cases domain.
+listCasesForContact_domainId :: Lens.Lens' ListCasesForContact Prelude.Text
+listCasesForContact_domainId = Lens.lens (\ListCasesForContact' {domainId} -> domainId) (\s@ListCasesForContact' {} a -> s {domainId = a} :: ListCasesForContact)
+
+instance Core.AWSRequest ListCasesForContact where
+  type
+    AWSResponse ListCasesForContact =
+      ListCasesForContactResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListCasesForContactResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "cases" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListCasesForContact where
+  hashWithSalt _salt ListCasesForContact' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` contactArn
+      `Prelude.hashWithSalt` domainId
+
+instance Prelude.NFData ListCasesForContact where
+  rnf ListCasesForContact' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf contactArn
+      `Prelude.seq` Prelude.rnf domainId
+
+instance Data.ToHeaders ListCasesForContact where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListCasesForContact where
+  toJSON ListCasesForContact' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("contactArn" Data..= contactArn)
+          ]
+      )
+
+instance Data.ToPath ListCasesForContact where
+  toPath ListCasesForContact' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainId,
+        "/list-cases-for-contact"
+      ]
+
+instance Data.ToQuery ListCasesForContact where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListCasesForContactResponse' smart constructor.
+data ListCasesForContactResponse = ListCasesForContactResponse'
+  { -- | The token for the next set of results. This is null if there are no more
+    -- results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A list of Case summary information.
+    cases :: [CaseSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListCasesForContactResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listCasesForContactResponse_nextToken' - The token for the next set of results. This is null if there are no more
+-- results to return.
+--
+-- 'httpStatus', 'listCasesForContactResponse_httpStatus' - The response's http status code.
+--
+-- 'cases', 'listCasesForContactResponse_cases' - A list of Case summary information.
+newListCasesForContactResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListCasesForContactResponse
+newListCasesForContactResponse pHttpStatus_ =
+  ListCasesForContactResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      cases = Prelude.mempty
+    }
+
+-- | The token for the next set of results. This is null if there are no more
+-- results to return.
+listCasesForContactResponse_nextToken :: Lens.Lens' ListCasesForContactResponse (Prelude.Maybe Prelude.Text)
+listCasesForContactResponse_nextToken = Lens.lens (\ListCasesForContactResponse' {nextToken} -> nextToken) (\s@ListCasesForContactResponse' {} a -> s {nextToken = a} :: ListCasesForContactResponse)
+
+-- | The response's http status code.
+listCasesForContactResponse_httpStatus :: Lens.Lens' ListCasesForContactResponse Prelude.Int
+listCasesForContactResponse_httpStatus = Lens.lens (\ListCasesForContactResponse' {httpStatus} -> httpStatus) (\s@ListCasesForContactResponse' {} a -> s {httpStatus = a} :: ListCasesForContactResponse)
+
+-- | A list of Case summary information.
+listCasesForContactResponse_cases :: Lens.Lens' ListCasesForContactResponse [CaseSummary]
+listCasesForContactResponse_cases = Lens.lens (\ListCasesForContactResponse' {cases} -> cases) (\s@ListCasesForContactResponse' {} a -> s {cases = a} :: ListCasesForContactResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListCasesForContactResponse where
+  rnf ListCasesForContactResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf cases
diff --git a/gen/Amazonka/ConnectCases/ListDomains.hs b/gen/Amazonka/ConnectCases/ListDomains.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/ListDomains.hs
@@ -0,0 +1,197 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.ListDomains
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all cases domains in the Amazon Web Services account. Each list
+-- item is a condensed summary object of the domain.
+module Amazonka.ConnectCases.ListDomains
+  ( -- * Creating a Request
+    ListDomains (..),
+    newListDomains,
+
+    -- * Request Lenses
+    listDomains_maxResults,
+    listDomains_nextToken,
+
+    -- * Destructuring the Response
+    ListDomainsResponse (..),
+    newListDomainsResponse,
+
+    -- * Response Lenses
+    listDomainsResponse_nextToken,
+    listDomainsResponse_httpStatus,
+    listDomainsResponse_domains,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListDomains' smart constructor.
+data ListDomains = ListDomains'
+  { -- | 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 'ListDomains' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDomains_maxResults' - The maximum number of results to return per page.
+--
+-- 'nextToken', 'listDomains_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.
+newListDomains ::
+  ListDomains
+newListDomains =
+  ListDomains'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return per page.
+listDomains_maxResults :: Lens.Lens' ListDomains (Prelude.Maybe Prelude.Natural)
+listDomains_maxResults = Lens.lens (\ListDomains' {maxResults} -> maxResults) (\s@ListDomains' {} a -> s {maxResults = a} :: ListDomains)
+
+-- | 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.
+listDomains_nextToken :: Lens.Lens' ListDomains (Prelude.Maybe Prelude.Text)
+listDomains_nextToken = Lens.lens (\ListDomains' {nextToken} -> nextToken) (\s@ListDomains' {} a -> s {nextToken = a} :: ListDomains)
+
+instance Core.AWSRequest ListDomains where
+  type AWSResponse ListDomains = ListDomainsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDomainsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "domains" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListDomains where
+  hashWithSalt _salt ListDomains' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListDomains where
+  rnf ListDomains' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListDomains where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListDomains where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath ListDomains where
+  toPath = Prelude.const "/domains-list"
+
+instance Data.ToQuery ListDomains where
+  toQuery ListDomains' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListDomainsResponse' smart constructor.
+data ListDomainsResponse = ListDomainsResponse'
+  { -- | The token for the next set of results. This is null if there are no more
+    -- results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Cases domain.
+    domains :: [DomainSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDomainsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDomainsResponse_nextToken' - The token for the next set of results. This is null if there are no more
+-- results to return.
+--
+-- 'httpStatus', 'listDomainsResponse_httpStatus' - The response's http status code.
+--
+-- 'domains', 'listDomainsResponse_domains' - The Cases domain.
+newListDomainsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDomainsResponse
+newListDomainsResponse pHttpStatus_ =
+  ListDomainsResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      domains = Prelude.mempty
+    }
+
+-- | The token for the next set of results. This is null if there are no more
+-- results to return.
+listDomainsResponse_nextToken :: Lens.Lens' ListDomainsResponse (Prelude.Maybe Prelude.Text)
+listDomainsResponse_nextToken = Lens.lens (\ListDomainsResponse' {nextToken} -> nextToken) (\s@ListDomainsResponse' {} a -> s {nextToken = a} :: ListDomainsResponse)
+
+-- | The response's http status code.
+listDomainsResponse_httpStatus :: Lens.Lens' ListDomainsResponse Prelude.Int
+listDomainsResponse_httpStatus = Lens.lens (\ListDomainsResponse' {httpStatus} -> httpStatus) (\s@ListDomainsResponse' {} a -> s {httpStatus = a} :: ListDomainsResponse)
+
+-- | The Cases domain.
+listDomainsResponse_domains :: Lens.Lens' ListDomainsResponse [DomainSummary]
+listDomainsResponse_domains = Lens.lens (\ListDomainsResponse' {domains} -> domains) (\s@ListDomainsResponse' {} a -> s {domains = a} :: ListDomainsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListDomainsResponse where
+  rnf ListDomainsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf domains
diff --git a/gen/Amazonka/ConnectCases/ListFieldOptions.hs b/gen/Amazonka/ConnectCases/ListFieldOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/ListFieldOptions.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.ConnectCases.ListFieldOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all of the field options for a field identifier in the domain.
+module Amazonka.ConnectCases.ListFieldOptions
+  ( -- * Creating a Request
+    ListFieldOptions (..),
+    newListFieldOptions,
+
+    -- * Request Lenses
+    listFieldOptions_maxResults,
+    listFieldOptions_nextToken,
+    listFieldOptions_values,
+    listFieldOptions_domainId,
+    listFieldOptions_fieldId,
+
+    -- * Destructuring the Response
+    ListFieldOptionsResponse (..),
+    newListFieldOptionsResponse,
+
+    -- * Response Lenses
+    listFieldOptionsResponse_nextToken,
+    listFieldOptionsResponse_httpStatus,
+    listFieldOptionsResponse_options,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListFieldOptions' smart constructor.
+data ListFieldOptions = ListFieldOptions'
+  { -- | 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,
+    -- | A list of @FieldOption@ values to filter on for @ListFieldOptions@.
+    values :: Prelude.Maybe [Prelude.Text],
+    -- | The unique identifier of the Cases domain.
+    domainId :: Prelude.Text,
+    -- | The unique identifier of a field.
+    fieldId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListFieldOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listFieldOptions_maxResults' - The maximum number of results to return per page.
+--
+-- 'nextToken', 'listFieldOptions_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.
+--
+-- 'values', 'listFieldOptions_values' - A list of @FieldOption@ values to filter on for @ListFieldOptions@.
+--
+-- 'domainId', 'listFieldOptions_domainId' - The unique identifier of the Cases domain.
+--
+-- 'fieldId', 'listFieldOptions_fieldId' - The unique identifier of a field.
+newListFieldOptions ::
+  -- | 'domainId'
+  Prelude.Text ->
+  -- | 'fieldId'
+  Prelude.Text ->
+  ListFieldOptions
+newListFieldOptions pDomainId_ pFieldId_ =
+  ListFieldOptions'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      values = Prelude.Nothing,
+      domainId = pDomainId_,
+      fieldId = pFieldId_
+    }
+
+-- | The maximum number of results to return per page.
+listFieldOptions_maxResults :: Lens.Lens' ListFieldOptions (Prelude.Maybe Prelude.Natural)
+listFieldOptions_maxResults = Lens.lens (\ListFieldOptions' {maxResults} -> maxResults) (\s@ListFieldOptions' {} a -> s {maxResults = a} :: ListFieldOptions)
+
+-- | 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.
+listFieldOptions_nextToken :: Lens.Lens' ListFieldOptions (Prelude.Maybe Prelude.Text)
+listFieldOptions_nextToken = Lens.lens (\ListFieldOptions' {nextToken} -> nextToken) (\s@ListFieldOptions' {} a -> s {nextToken = a} :: ListFieldOptions)
+
+-- | A list of @FieldOption@ values to filter on for @ListFieldOptions@.
+listFieldOptions_values :: Lens.Lens' ListFieldOptions (Prelude.Maybe [Prelude.Text])
+listFieldOptions_values = Lens.lens (\ListFieldOptions' {values} -> values) (\s@ListFieldOptions' {} a -> s {values = a} :: ListFieldOptions) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique identifier of the Cases domain.
+listFieldOptions_domainId :: Lens.Lens' ListFieldOptions Prelude.Text
+listFieldOptions_domainId = Lens.lens (\ListFieldOptions' {domainId} -> domainId) (\s@ListFieldOptions' {} a -> s {domainId = a} :: ListFieldOptions)
+
+-- | The unique identifier of a field.
+listFieldOptions_fieldId :: Lens.Lens' ListFieldOptions Prelude.Text
+listFieldOptions_fieldId = Lens.lens (\ListFieldOptions' {fieldId} -> fieldId) (\s@ListFieldOptions' {} a -> s {fieldId = a} :: ListFieldOptions)
+
+instance Core.AWSRequest ListFieldOptions where
+  type
+    AWSResponse ListFieldOptions =
+      ListFieldOptionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListFieldOptionsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "options" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListFieldOptions where
+  hashWithSalt _salt ListFieldOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` values
+      `Prelude.hashWithSalt` domainId
+      `Prelude.hashWithSalt` fieldId
+
+instance Prelude.NFData ListFieldOptions where
+  rnf ListFieldOptions' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf values
+      `Prelude.seq` Prelude.rnf domainId
+      `Prelude.seq` Prelude.rnf fieldId
+
+instance Data.ToHeaders ListFieldOptions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListFieldOptions where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath ListFieldOptions where
+  toPath ListFieldOptions' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainId,
+        "/fields/",
+        Data.toBS fieldId,
+        "/options-list"
+      ]
+
+instance Data.ToQuery ListFieldOptions where
+  toQuery ListFieldOptions' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "values"
+          Data.=: Data.toQuery
+            (Data.toQueryList "member" Prelude.<$> values)
+      ]
+
+-- | /See:/ 'newListFieldOptionsResponse' smart constructor.
+data ListFieldOptionsResponse = ListFieldOptionsResponse'
+  { -- | The token for the next set of results. This is null if there are no more
+    -- results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A list of @FieldOption@ objects.
+    options :: [FieldOption]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListFieldOptionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listFieldOptionsResponse_nextToken' - The token for the next set of results. This is null if there are no more
+-- results to return.
+--
+-- 'httpStatus', 'listFieldOptionsResponse_httpStatus' - The response's http status code.
+--
+-- 'options', 'listFieldOptionsResponse_options' - A list of @FieldOption@ objects.
+newListFieldOptionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListFieldOptionsResponse
+newListFieldOptionsResponse pHttpStatus_ =
+  ListFieldOptionsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      options = Prelude.mempty
+    }
+
+-- | The token for the next set of results. This is null if there are no more
+-- results to return.
+listFieldOptionsResponse_nextToken :: Lens.Lens' ListFieldOptionsResponse (Prelude.Maybe Prelude.Text)
+listFieldOptionsResponse_nextToken = Lens.lens (\ListFieldOptionsResponse' {nextToken} -> nextToken) (\s@ListFieldOptionsResponse' {} a -> s {nextToken = a} :: ListFieldOptionsResponse)
+
+-- | The response's http status code.
+listFieldOptionsResponse_httpStatus :: Lens.Lens' ListFieldOptionsResponse Prelude.Int
+listFieldOptionsResponse_httpStatus = Lens.lens (\ListFieldOptionsResponse' {httpStatus} -> httpStatus) (\s@ListFieldOptionsResponse' {} a -> s {httpStatus = a} :: ListFieldOptionsResponse)
+
+-- | A list of @FieldOption@ objects.
+listFieldOptionsResponse_options :: Lens.Lens' ListFieldOptionsResponse [FieldOption]
+listFieldOptionsResponse_options = Lens.lens (\ListFieldOptionsResponse' {options} -> options) (\s@ListFieldOptionsResponse' {} a -> s {options = a} :: ListFieldOptionsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListFieldOptionsResponse where
+  rnf ListFieldOptionsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf options
diff --git a/gen/Amazonka/ConnectCases/ListFields.hs b/gen/Amazonka/ConnectCases/ListFields.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/ListFields.hs
@@ -0,0 +1,212 @@
+{-# 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.ConnectCases.ListFields
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all fields in a Cases domain.
+module Amazonka.ConnectCases.ListFields
+  ( -- * Creating a Request
+    ListFields (..),
+    newListFields,
+
+    -- * Request Lenses
+    listFields_maxResults,
+    listFields_nextToken,
+    listFields_domainId,
+
+    -- * Destructuring the Response
+    ListFieldsResponse (..),
+    newListFieldsResponse,
+
+    -- * Response Lenses
+    listFieldsResponse_nextToken,
+    listFieldsResponse_httpStatus,
+    listFieldsResponse_fields,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListFields' smart constructor.
+data ListFields = ListFields'
+  { -- | 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 unique identifier of the Cases domain.
+    domainId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListFields' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listFields_maxResults' - The maximum number of results to return per page.
+--
+-- 'nextToken', 'listFields_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.
+--
+-- 'domainId', 'listFields_domainId' - The unique identifier of the Cases domain.
+newListFields ::
+  -- | 'domainId'
+  Prelude.Text ->
+  ListFields
+newListFields pDomainId_ =
+  ListFields'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      domainId = pDomainId_
+    }
+
+-- | The maximum number of results to return per page.
+listFields_maxResults :: Lens.Lens' ListFields (Prelude.Maybe Prelude.Natural)
+listFields_maxResults = Lens.lens (\ListFields' {maxResults} -> maxResults) (\s@ListFields' {} a -> s {maxResults = a} :: ListFields)
+
+-- | 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.
+listFields_nextToken :: Lens.Lens' ListFields (Prelude.Maybe Prelude.Text)
+listFields_nextToken = Lens.lens (\ListFields' {nextToken} -> nextToken) (\s@ListFields' {} a -> s {nextToken = a} :: ListFields)
+
+-- | The unique identifier of the Cases domain.
+listFields_domainId :: Lens.Lens' ListFields Prelude.Text
+listFields_domainId = Lens.lens (\ListFields' {domainId} -> domainId) (\s@ListFields' {} a -> s {domainId = a} :: ListFields)
+
+instance Core.AWSRequest ListFields where
+  type AWSResponse ListFields = ListFieldsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListFieldsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "fields" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListFields where
+  hashWithSalt _salt ListFields' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` domainId
+
+instance Prelude.NFData ListFields where
+  rnf ListFields' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf domainId
+
+instance Data.ToHeaders ListFields where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListFields where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath ListFields where
+  toPath ListFields' {..} =
+    Prelude.mconcat
+      ["/domains/", Data.toBS domainId, "/fields-list"]
+
+instance Data.ToQuery ListFields where
+  toQuery ListFields' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListFieldsResponse' smart constructor.
+data ListFieldsResponse = ListFieldsResponse'
+  { -- | The token for the next set of results. This is null if there are no more
+    -- results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | List of detailed field information.
+    fields :: [FieldSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListFieldsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listFieldsResponse_nextToken' - The token for the next set of results. This is null if there are no more
+-- results to return.
+--
+-- 'httpStatus', 'listFieldsResponse_httpStatus' - The response's http status code.
+--
+-- 'fields', 'listFieldsResponse_fields' - List of detailed field information.
+newListFieldsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListFieldsResponse
+newListFieldsResponse pHttpStatus_ =
+  ListFieldsResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      fields = Prelude.mempty
+    }
+
+-- | The token for the next set of results. This is null if there are no more
+-- results to return.
+listFieldsResponse_nextToken :: Lens.Lens' ListFieldsResponse (Prelude.Maybe Prelude.Text)
+listFieldsResponse_nextToken = Lens.lens (\ListFieldsResponse' {nextToken} -> nextToken) (\s@ListFieldsResponse' {} a -> s {nextToken = a} :: ListFieldsResponse)
+
+-- | The response's http status code.
+listFieldsResponse_httpStatus :: Lens.Lens' ListFieldsResponse Prelude.Int
+listFieldsResponse_httpStatus = Lens.lens (\ListFieldsResponse' {httpStatus} -> httpStatus) (\s@ListFieldsResponse' {} a -> s {httpStatus = a} :: ListFieldsResponse)
+
+-- | List of detailed field information.
+listFieldsResponse_fields :: Lens.Lens' ListFieldsResponse [FieldSummary]
+listFieldsResponse_fields = Lens.lens (\ListFieldsResponse' {fields} -> fields) (\s@ListFieldsResponse' {} a -> s {fields = a} :: ListFieldsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListFieldsResponse where
+  rnf ListFieldsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf fields
diff --git a/gen/Amazonka/ConnectCases/ListLayouts.hs b/gen/Amazonka/ConnectCases/ListLayouts.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/ListLayouts.hs
@@ -0,0 +1,213 @@
+{-# 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.ConnectCases.ListLayouts
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all layouts in the given cases domain. Each list item is a
+-- condensed summary object of the layout.
+module Amazonka.ConnectCases.ListLayouts
+  ( -- * Creating a Request
+    ListLayouts (..),
+    newListLayouts,
+
+    -- * Request Lenses
+    listLayouts_maxResults,
+    listLayouts_nextToken,
+    listLayouts_domainId,
+
+    -- * Destructuring the Response
+    ListLayoutsResponse (..),
+    newListLayoutsResponse,
+
+    -- * Response Lenses
+    listLayoutsResponse_nextToken,
+    listLayoutsResponse_httpStatus,
+    listLayoutsResponse_layouts,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListLayouts' smart constructor.
+data ListLayouts = ListLayouts'
+  { -- | 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 unique identifier of the Cases domain.
+    domainId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListLayouts' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listLayouts_maxResults' - The maximum number of results to return per page.
+--
+-- 'nextToken', 'listLayouts_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.
+--
+-- 'domainId', 'listLayouts_domainId' - The unique identifier of the Cases domain.
+newListLayouts ::
+  -- | 'domainId'
+  Prelude.Text ->
+  ListLayouts
+newListLayouts pDomainId_ =
+  ListLayouts'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      domainId = pDomainId_
+    }
+
+-- | The maximum number of results to return per page.
+listLayouts_maxResults :: Lens.Lens' ListLayouts (Prelude.Maybe Prelude.Natural)
+listLayouts_maxResults = Lens.lens (\ListLayouts' {maxResults} -> maxResults) (\s@ListLayouts' {} a -> s {maxResults = a} :: ListLayouts)
+
+-- | 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.
+listLayouts_nextToken :: Lens.Lens' ListLayouts (Prelude.Maybe Prelude.Text)
+listLayouts_nextToken = Lens.lens (\ListLayouts' {nextToken} -> nextToken) (\s@ListLayouts' {} a -> s {nextToken = a} :: ListLayouts)
+
+-- | The unique identifier of the Cases domain.
+listLayouts_domainId :: Lens.Lens' ListLayouts Prelude.Text
+listLayouts_domainId = Lens.lens (\ListLayouts' {domainId} -> domainId) (\s@ListLayouts' {} a -> s {domainId = a} :: ListLayouts)
+
+instance Core.AWSRequest ListLayouts where
+  type AWSResponse ListLayouts = ListLayoutsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListLayoutsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "layouts" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListLayouts where
+  hashWithSalt _salt ListLayouts' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` domainId
+
+instance Prelude.NFData ListLayouts where
+  rnf ListLayouts' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf domainId
+
+instance Data.ToHeaders ListLayouts where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListLayouts where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath ListLayouts where
+  toPath ListLayouts' {..} =
+    Prelude.mconcat
+      ["/domains/", Data.toBS domainId, "/layouts-list"]
+
+instance Data.ToQuery ListLayouts where
+  toQuery ListLayouts' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListLayoutsResponse' smart constructor.
+data ListLayoutsResponse = ListLayoutsResponse'
+  { -- | The token for the next set of results. This is null if there are no more
+    -- results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The layouts for the domain.
+    layouts :: [LayoutSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListLayoutsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listLayoutsResponse_nextToken' - The token for the next set of results. This is null if there are no more
+-- results to return.
+--
+-- 'httpStatus', 'listLayoutsResponse_httpStatus' - The response's http status code.
+--
+-- 'layouts', 'listLayoutsResponse_layouts' - The layouts for the domain.
+newListLayoutsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListLayoutsResponse
+newListLayoutsResponse pHttpStatus_ =
+  ListLayoutsResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      layouts = Prelude.mempty
+    }
+
+-- | The token for the next set of results. This is null if there are no more
+-- results to return.
+listLayoutsResponse_nextToken :: Lens.Lens' ListLayoutsResponse (Prelude.Maybe Prelude.Text)
+listLayoutsResponse_nextToken = Lens.lens (\ListLayoutsResponse' {nextToken} -> nextToken) (\s@ListLayoutsResponse' {} a -> s {nextToken = a} :: ListLayoutsResponse)
+
+-- | The response's http status code.
+listLayoutsResponse_httpStatus :: Lens.Lens' ListLayoutsResponse Prelude.Int
+listLayoutsResponse_httpStatus = Lens.lens (\ListLayoutsResponse' {httpStatus} -> httpStatus) (\s@ListLayoutsResponse' {} a -> s {httpStatus = a} :: ListLayoutsResponse)
+
+-- | The layouts for the domain.
+listLayoutsResponse_layouts :: Lens.Lens' ListLayoutsResponse [LayoutSummary]
+listLayoutsResponse_layouts = Lens.lens (\ListLayoutsResponse' {layouts} -> layouts) (\s@ListLayoutsResponse' {} a -> s {layouts = a} :: ListLayoutsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListLayoutsResponse where
+  rnf ListLayoutsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf layouts
diff --git a/gen/Amazonka/ConnectCases/ListTagsForResource.hs b/gen/Amazonka/ConnectCases/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/ListTagsForResource.hs
@@ -0,0 +1,161 @@
+{-# 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.ConnectCases.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 tags for a resource.
+module Amazonka.ConnectCases.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_arn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The Amazon Resource Name (ARN)
+    arn :: 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:
+--
+-- 'arn', 'listTagsForResource_arn' - The Amazon Resource Name (ARN)
+newListTagsForResource ::
+  -- | 'arn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pArn_ =
+  ListTagsForResource' {arn = pArn_}
+
+-- | The Amazon Resource Name (ARN)
+listTagsForResource_arn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_arn = Lens.lens (\ListTagsForResource' {arn} -> arn) (\s@ListTagsForResource' {} a -> s {arn = 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` arn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} = Prelude.rnf arn
+
+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 arn]
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | A map of of key-value pairs that represent tags on a resource. Tags are
+    -- 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' - A map of of key-value pairs that represent tags on a resource. Tags are
+-- 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_
+    }
+
+-- | A map of of key-value pairs that represent tags on a resource. Tags are
+-- 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/ConnectCases/ListTemplates.hs b/gen/Amazonka/ConnectCases/ListTemplates.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/ListTemplates.hs
@@ -0,0 +1,230 @@
+{-# 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.ConnectCases.ListTemplates
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all of the templates in a Cases domain. Each list item is a
+-- condensed summary object of the template.
+module Amazonka.ConnectCases.ListTemplates
+  ( -- * Creating a Request
+    ListTemplates (..),
+    newListTemplates,
+
+    -- * Request Lenses
+    listTemplates_maxResults,
+    listTemplates_nextToken,
+    listTemplates_status,
+    listTemplates_domainId,
+
+    -- * Destructuring the Response
+    ListTemplatesResponse (..),
+    newListTemplatesResponse,
+
+    -- * Response Lenses
+    listTemplatesResponse_nextToken,
+    listTemplatesResponse_httpStatus,
+    listTemplatesResponse_templates,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTemplates' smart constructor.
+data ListTemplates = ListTemplates'
+  { -- | 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,
+    -- | A list of status values to filter on.
+    status :: Prelude.Maybe (Prelude.NonEmpty TemplateStatus),
+    -- | The unique identifier of the Cases domain.
+    domainId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTemplates' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listTemplates_maxResults' - The maximum number of results to return per page.
+--
+-- 'nextToken', 'listTemplates_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.
+--
+-- 'status', 'listTemplates_status' - A list of status values to filter on.
+--
+-- 'domainId', 'listTemplates_domainId' - The unique identifier of the Cases domain.
+newListTemplates ::
+  -- | 'domainId'
+  Prelude.Text ->
+  ListTemplates
+newListTemplates pDomainId_ =
+  ListTemplates'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      status = Prelude.Nothing,
+      domainId = pDomainId_
+    }
+
+-- | The maximum number of results to return per page.
+listTemplates_maxResults :: Lens.Lens' ListTemplates (Prelude.Maybe Prelude.Natural)
+listTemplates_maxResults = Lens.lens (\ListTemplates' {maxResults} -> maxResults) (\s@ListTemplates' {} a -> s {maxResults = a} :: ListTemplates)
+
+-- | 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.
+listTemplates_nextToken :: Lens.Lens' ListTemplates (Prelude.Maybe Prelude.Text)
+listTemplates_nextToken = Lens.lens (\ListTemplates' {nextToken} -> nextToken) (\s@ListTemplates' {} a -> s {nextToken = a} :: ListTemplates)
+
+-- | A list of status values to filter on.
+listTemplates_status :: Lens.Lens' ListTemplates (Prelude.Maybe (Prelude.NonEmpty TemplateStatus))
+listTemplates_status = Lens.lens (\ListTemplates' {status} -> status) (\s@ListTemplates' {} a -> s {status = a} :: ListTemplates) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique identifier of the Cases domain.
+listTemplates_domainId :: Lens.Lens' ListTemplates Prelude.Text
+listTemplates_domainId = Lens.lens (\ListTemplates' {domainId} -> domainId) (\s@ListTemplates' {} a -> s {domainId = a} :: ListTemplates)
+
+instance Core.AWSRequest ListTemplates where
+  type
+    AWSResponse ListTemplates =
+      ListTemplatesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTemplatesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "templates" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListTemplates where
+  hashWithSalt _salt ListTemplates' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` domainId
+
+instance Prelude.NFData ListTemplates where
+  rnf ListTemplates' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf domainId
+
+instance Data.ToHeaders ListTemplates where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListTemplates where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath ListTemplates where
+  toPath ListTemplates' {..} =
+    Prelude.mconcat
+      ["/domains/", Data.toBS domainId, "/templates-list"]
+
+instance Data.ToQuery ListTemplates where
+  toQuery ListTemplates' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "status"
+          Data.=: Data.toQuery
+            (Data.toQueryList "member" Prelude.<$> status)
+      ]
+
+-- | /See:/ 'newListTemplatesResponse' smart constructor.
+data ListTemplatesResponse = ListTemplatesResponse'
+  { -- | The token for the next set of results. This is null if there are no more
+    -- results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | List of template summary objects.
+    templates :: [TemplateSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTemplatesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listTemplatesResponse_nextToken' - The token for the next set of results. This is null if there are no more
+-- results to return.
+--
+-- 'httpStatus', 'listTemplatesResponse_httpStatus' - The response's http status code.
+--
+-- 'templates', 'listTemplatesResponse_templates' - List of template summary objects.
+newListTemplatesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTemplatesResponse
+newListTemplatesResponse pHttpStatus_ =
+  ListTemplatesResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      templates = Prelude.mempty
+    }
+
+-- | The token for the next set of results. This is null if there are no more
+-- results to return.
+listTemplatesResponse_nextToken :: Lens.Lens' ListTemplatesResponse (Prelude.Maybe Prelude.Text)
+listTemplatesResponse_nextToken = Lens.lens (\ListTemplatesResponse' {nextToken} -> nextToken) (\s@ListTemplatesResponse' {} a -> s {nextToken = a} :: ListTemplatesResponse)
+
+-- | The response's http status code.
+listTemplatesResponse_httpStatus :: Lens.Lens' ListTemplatesResponse Prelude.Int
+listTemplatesResponse_httpStatus = Lens.lens (\ListTemplatesResponse' {httpStatus} -> httpStatus) (\s@ListTemplatesResponse' {} a -> s {httpStatus = a} :: ListTemplatesResponse)
+
+-- | List of template summary objects.
+listTemplatesResponse_templates :: Lens.Lens' ListTemplatesResponse [TemplateSummary]
+listTemplatesResponse_templates = Lens.lens (\ListTemplatesResponse' {templates} -> templates) (\s@ListTemplatesResponse' {} a -> s {templates = a} :: ListTemplatesResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListTemplatesResponse where
+  rnf ListTemplatesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf templates
diff --git a/gen/Amazonka/ConnectCases/PutCaseEventConfiguration.hs b/gen/Amazonka/ConnectCases/PutCaseEventConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/PutCaseEventConfiguration.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.ConnectCases.PutCaseEventConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- API for adding case event publishing configuration
+module Amazonka.ConnectCases.PutCaseEventConfiguration
+  ( -- * Creating a Request
+    PutCaseEventConfiguration (..),
+    newPutCaseEventConfiguration,
+
+    -- * Request Lenses
+    putCaseEventConfiguration_domainId,
+    putCaseEventConfiguration_eventBridge,
+
+    -- * Destructuring the Response
+    PutCaseEventConfigurationResponse (..),
+    newPutCaseEventConfigurationResponse,
+
+    -- * Response Lenses
+    putCaseEventConfigurationResponse_httpStatus,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutCaseEventConfiguration' smart constructor.
+data PutCaseEventConfiguration = PutCaseEventConfiguration'
+  { -- | The unique identifier of the Cases domain.
+    domainId :: Prelude.Text,
+    -- | Configuration to enable EventBridge case event delivery and determine
+    -- what data is delivered.
+    eventBridge :: EventBridgeConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutCaseEventConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainId', 'putCaseEventConfiguration_domainId' - The unique identifier of the Cases domain.
+--
+-- 'eventBridge', 'putCaseEventConfiguration_eventBridge' - Configuration to enable EventBridge case event delivery and determine
+-- what data is delivered.
+newPutCaseEventConfiguration ::
+  -- | 'domainId'
+  Prelude.Text ->
+  -- | 'eventBridge'
+  EventBridgeConfiguration ->
+  PutCaseEventConfiguration
+newPutCaseEventConfiguration pDomainId_ pEventBridge_ =
+  PutCaseEventConfiguration'
+    { domainId = pDomainId_,
+      eventBridge = pEventBridge_
+    }
+
+-- | The unique identifier of the Cases domain.
+putCaseEventConfiguration_domainId :: Lens.Lens' PutCaseEventConfiguration Prelude.Text
+putCaseEventConfiguration_domainId = Lens.lens (\PutCaseEventConfiguration' {domainId} -> domainId) (\s@PutCaseEventConfiguration' {} a -> s {domainId = a} :: PutCaseEventConfiguration)
+
+-- | Configuration to enable EventBridge case event delivery and determine
+-- what data is delivered.
+putCaseEventConfiguration_eventBridge :: Lens.Lens' PutCaseEventConfiguration EventBridgeConfiguration
+putCaseEventConfiguration_eventBridge = Lens.lens (\PutCaseEventConfiguration' {eventBridge} -> eventBridge) (\s@PutCaseEventConfiguration' {} a -> s {eventBridge = a} :: PutCaseEventConfiguration)
+
+instance Core.AWSRequest PutCaseEventConfiguration where
+  type
+    AWSResponse PutCaseEventConfiguration =
+      PutCaseEventConfigurationResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutCaseEventConfigurationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutCaseEventConfiguration where
+  hashWithSalt _salt PutCaseEventConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainId
+      `Prelude.hashWithSalt` eventBridge
+
+instance Prelude.NFData PutCaseEventConfiguration where
+  rnf PutCaseEventConfiguration' {..} =
+    Prelude.rnf domainId
+      `Prelude.seq` Prelude.rnf eventBridge
+
+instance Data.ToHeaders PutCaseEventConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutCaseEventConfiguration where
+  toJSON PutCaseEventConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("eventBridge" Data..= eventBridge)]
+      )
+
+instance Data.ToPath PutCaseEventConfiguration where
+  toPath PutCaseEventConfiguration' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainId,
+        "/case-event-configuration"
+      ]
+
+instance Data.ToQuery PutCaseEventConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutCaseEventConfigurationResponse' smart constructor.
+data PutCaseEventConfigurationResponse = PutCaseEventConfigurationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutCaseEventConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putCaseEventConfigurationResponse_httpStatus' - The response's http status code.
+newPutCaseEventConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutCaseEventConfigurationResponse
+newPutCaseEventConfigurationResponse pHttpStatus_ =
+  PutCaseEventConfigurationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+putCaseEventConfigurationResponse_httpStatus :: Lens.Lens' PutCaseEventConfigurationResponse Prelude.Int
+putCaseEventConfigurationResponse_httpStatus = Lens.lens (\PutCaseEventConfigurationResponse' {httpStatus} -> httpStatus) (\s@PutCaseEventConfigurationResponse' {} a -> s {httpStatus = a} :: PutCaseEventConfigurationResponse)
+
+instance
+  Prelude.NFData
+    PutCaseEventConfigurationResponse
+  where
+  rnf PutCaseEventConfigurationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ConnectCases/SearchCases.hs b/gen/Amazonka/ConnectCases/SearchCases.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/SearchCases.hs
@@ -0,0 +1,299 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.SearchCases
+-- 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 cases within their associated Cases domain. Search results
+-- are returned as a paginated list of abridged case documents.
+--
+-- This operation returns paginated results.
+module Amazonka.ConnectCases.SearchCases
+  ( -- * Creating a Request
+    SearchCases (..),
+    newSearchCases,
+
+    -- * Request Lenses
+    searchCases_fields,
+    searchCases_filter,
+    searchCases_maxResults,
+    searchCases_nextToken,
+    searchCases_searchTerm,
+    searchCases_sorts,
+    searchCases_domainId,
+
+    -- * Destructuring the Response
+    SearchCasesResponse (..),
+    newSearchCasesResponse,
+
+    -- * Response Lenses
+    searchCasesResponse_nextToken,
+    searchCasesResponse_httpStatus,
+    searchCasesResponse_cases,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSearchCases' smart constructor.
+data SearchCases = SearchCases'
+  { -- | The list of field identifiers to be returned as part of the response.
+    fields :: Prelude.Maybe [FieldIdentifier],
+    -- | A list of filter objects.
+    filter' :: Prelude.Maybe CaseFilter,
+    -- | The maximum number of cases to return. The current maximum supported
+    -- value is 25. This is also the default value when no other value is
+    -- provided.
+    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,
+    -- | A word or phrase used to perform a quick search.
+    searchTerm :: Prelude.Maybe Prelude.Text,
+    -- | A list of sorts where each sort specifies a field and their sort order
+    -- to be applied to the results.
+    sorts :: Prelude.Maybe [Sort],
+    -- | The unique identifier of the Cases domain.
+    domainId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchCases' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fields', 'searchCases_fields' - The list of field identifiers to be returned as part of the response.
+--
+-- 'filter'', 'searchCases_filter' - A list of filter objects.
+--
+-- 'maxResults', 'searchCases_maxResults' - The maximum number of cases to return. The current maximum supported
+-- value is 25. This is also the default value when no other value is
+-- provided.
+--
+-- 'nextToken', 'searchCases_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.
+--
+-- 'searchTerm', 'searchCases_searchTerm' - A word or phrase used to perform a quick search.
+--
+-- 'sorts', 'searchCases_sorts' - A list of sorts where each sort specifies a field and their sort order
+-- to be applied to the results.
+--
+-- 'domainId', 'searchCases_domainId' - The unique identifier of the Cases domain.
+newSearchCases ::
+  -- | 'domainId'
+  Prelude.Text ->
+  SearchCases
+newSearchCases pDomainId_ =
+  SearchCases'
+    { fields = Prelude.Nothing,
+      filter' = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      searchTerm = Prelude.Nothing,
+      sorts = Prelude.Nothing,
+      domainId = pDomainId_
+    }
+
+-- | The list of field identifiers to be returned as part of the response.
+searchCases_fields :: Lens.Lens' SearchCases (Prelude.Maybe [FieldIdentifier])
+searchCases_fields = Lens.lens (\SearchCases' {fields} -> fields) (\s@SearchCases' {} a -> s {fields = a} :: SearchCases) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of filter objects.
+searchCases_filter :: Lens.Lens' SearchCases (Prelude.Maybe CaseFilter)
+searchCases_filter = Lens.lens (\SearchCases' {filter'} -> filter') (\s@SearchCases' {} a -> s {filter' = a} :: SearchCases)
+
+-- | The maximum number of cases to return. The current maximum supported
+-- value is 25. This is also the default value when no other value is
+-- provided.
+searchCases_maxResults :: Lens.Lens' SearchCases (Prelude.Maybe Prelude.Natural)
+searchCases_maxResults = Lens.lens (\SearchCases' {maxResults} -> maxResults) (\s@SearchCases' {} a -> s {maxResults = a} :: SearchCases)
+
+-- | 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.
+searchCases_nextToken :: Lens.Lens' SearchCases (Prelude.Maybe Prelude.Text)
+searchCases_nextToken = Lens.lens (\SearchCases' {nextToken} -> nextToken) (\s@SearchCases' {} a -> s {nextToken = a} :: SearchCases)
+
+-- | A word or phrase used to perform a quick search.
+searchCases_searchTerm :: Lens.Lens' SearchCases (Prelude.Maybe Prelude.Text)
+searchCases_searchTerm = Lens.lens (\SearchCases' {searchTerm} -> searchTerm) (\s@SearchCases' {} a -> s {searchTerm = a} :: SearchCases)
+
+-- | A list of sorts where each sort specifies a field and their sort order
+-- to be applied to the results.
+searchCases_sorts :: Lens.Lens' SearchCases (Prelude.Maybe [Sort])
+searchCases_sorts = Lens.lens (\SearchCases' {sorts} -> sorts) (\s@SearchCases' {} a -> s {sorts = a} :: SearchCases) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique identifier of the Cases domain.
+searchCases_domainId :: Lens.Lens' SearchCases Prelude.Text
+searchCases_domainId = Lens.lens (\SearchCases' {domainId} -> domainId) (\s@SearchCases' {} a -> s {domainId = a} :: SearchCases)
+
+instance Core.AWSPager SearchCases where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? searchCasesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop (rs Lens.^. searchCasesResponse_cases) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& searchCases_nextToken
+          Lens..~ rs
+          Lens.^? searchCasesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest SearchCases where
+  type AWSResponse SearchCases = SearchCasesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          SearchCasesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "cases" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable SearchCases where
+  hashWithSalt _salt SearchCases' {..} =
+    _salt
+      `Prelude.hashWithSalt` fields
+      `Prelude.hashWithSalt` filter'
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` searchTerm
+      `Prelude.hashWithSalt` sorts
+      `Prelude.hashWithSalt` domainId
+
+instance Prelude.NFData SearchCases where
+  rnf SearchCases' {..} =
+    Prelude.rnf fields
+      `Prelude.seq` Prelude.rnf filter'
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf searchTerm
+      `Prelude.seq` Prelude.rnf sorts
+      `Prelude.seq` Prelude.rnf domainId
+
+instance Data.ToHeaders SearchCases where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SearchCases where
+  toJSON SearchCases' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("fields" Data..=) Prelude.<$> fields,
+            ("filter" Data..=) Prelude.<$> filter',
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("searchTerm" Data..=) Prelude.<$> searchTerm,
+            ("sorts" Data..=) Prelude.<$> sorts
+          ]
+      )
+
+instance Data.ToPath SearchCases where
+  toPath SearchCases' {..} =
+    Prelude.mconcat
+      ["/domains/", Data.toBS domainId, "/cases-search"]
+
+instance Data.ToQuery SearchCases where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newSearchCasesResponse' smart constructor.
+data SearchCasesResponse = SearchCasesResponse'
+  { -- | The token for the next set of results. This is null if there are no more
+    -- results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A list of case documents where each case contains the properties
+    -- @CaseId@ and @Fields@ where each field is a complex union structure.
+    cases :: [SearchCasesResponseItem]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchCasesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'searchCasesResponse_nextToken' - The token for the next set of results. This is null if there are no more
+-- results to return.
+--
+-- 'httpStatus', 'searchCasesResponse_httpStatus' - The response's http status code.
+--
+-- 'cases', 'searchCasesResponse_cases' - A list of case documents where each case contains the properties
+-- @CaseId@ and @Fields@ where each field is a complex union structure.
+newSearchCasesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SearchCasesResponse
+newSearchCasesResponse pHttpStatus_ =
+  SearchCasesResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      cases = Prelude.mempty
+    }
+
+-- | The token for the next set of results. This is null if there are no more
+-- results to return.
+searchCasesResponse_nextToken :: Lens.Lens' SearchCasesResponse (Prelude.Maybe Prelude.Text)
+searchCasesResponse_nextToken = Lens.lens (\SearchCasesResponse' {nextToken} -> nextToken) (\s@SearchCasesResponse' {} a -> s {nextToken = a} :: SearchCasesResponse)
+
+-- | The response's http status code.
+searchCasesResponse_httpStatus :: Lens.Lens' SearchCasesResponse Prelude.Int
+searchCasesResponse_httpStatus = Lens.lens (\SearchCasesResponse' {httpStatus} -> httpStatus) (\s@SearchCasesResponse' {} a -> s {httpStatus = a} :: SearchCasesResponse)
+
+-- | A list of case documents where each case contains the properties
+-- @CaseId@ and @Fields@ where each field is a complex union structure.
+searchCasesResponse_cases :: Lens.Lens' SearchCasesResponse [SearchCasesResponseItem]
+searchCasesResponse_cases = Lens.lens (\SearchCasesResponse' {cases} -> cases) (\s@SearchCasesResponse' {} a -> s {cases = a} :: SearchCasesResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData SearchCasesResponse where
+  rnf SearchCasesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf cases
diff --git a/gen/Amazonka/ConnectCases/SearchRelatedItems.hs b/gen/Amazonka/ConnectCases/SearchRelatedItems.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/SearchRelatedItems.hs
@@ -0,0 +1,276 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.SearchRelatedItems
+-- 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 related items that are associated with a case.
+--
+-- If no filters are provided, this returns all related items associated
+-- with a case.
+--
+-- This operation returns paginated results.
+module Amazonka.ConnectCases.SearchRelatedItems
+  ( -- * Creating a Request
+    SearchRelatedItems (..),
+    newSearchRelatedItems,
+
+    -- * Request Lenses
+    searchRelatedItems_filters,
+    searchRelatedItems_maxResults,
+    searchRelatedItems_nextToken,
+    searchRelatedItems_caseId,
+    searchRelatedItems_domainId,
+
+    -- * Destructuring the Response
+    SearchRelatedItemsResponse (..),
+    newSearchRelatedItemsResponse,
+
+    -- * Response Lenses
+    searchRelatedItemsResponse_nextToken,
+    searchRelatedItemsResponse_httpStatus,
+    searchRelatedItemsResponse_relatedItems,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSearchRelatedItems' smart constructor.
+data SearchRelatedItems = SearchRelatedItems'
+  { -- | The list of types of related items and their parameters to use for
+    -- filtering.
+    filters :: Prelude.Maybe [RelatedItemTypeFilter],
+    -- | 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,
+    -- | A unique identifier of the case.
+    caseId :: Prelude.Text,
+    -- | The unique identifier of the Cases domain.
+    domainId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchRelatedItems' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'searchRelatedItems_filters' - The list of types of related items and their parameters to use for
+-- filtering.
+--
+-- 'maxResults', 'searchRelatedItems_maxResults' - The maximum number of results to return per page.
+--
+-- 'nextToken', 'searchRelatedItems_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.
+--
+-- 'caseId', 'searchRelatedItems_caseId' - A unique identifier of the case.
+--
+-- 'domainId', 'searchRelatedItems_domainId' - The unique identifier of the Cases domain.
+newSearchRelatedItems ::
+  -- | 'caseId'
+  Prelude.Text ->
+  -- | 'domainId'
+  Prelude.Text ->
+  SearchRelatedItems
+newSearchRelatedItems pCaseId_ pDomainId_ =
+  SearchRelatedItems'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      caseId = pCaseId_,
+      domainId = pDomainId_
+    }
+
+-- | The list of types of related items and their parameters to use for
+-- filtering.
+searchRelatedItems_filters :: Lens.Lens' SearchRelatedItems (Prelude.Maybe [RelatedItemTypeFilter])
+searchRelatedItems_filters = Lens.lens (\SearchRelatedItems' {filters} -> filters) (\s@SearchRelatedItems' {} a -> s {filters = a} :: SearchRelatedItems) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return per page.
+searchRelatedItems_maxResults :: Lens.Lens' SearchRelatedItems (Prelude.Maybe Prelude.Natural)
+searchRelatedItems_maxResults = Lens.lens (\SearchRelatedItems' {maxResults} -> maxResults) (\s@SearchRelatedItems' {} a -> s {maxResults = a} :: SearchRelatedItems)
+
+-- | 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.
+searchRelatedItems_nextToken :: Lens.Lens' SearchRelatedItems (Prelude.Maybe Prelude.Text)
+searchRelatedItems_nextToken = Lens.lens (\SearchRelatedItems' {nextToken} -> nextToken) (\s@SearchRelatedItems' {} a -> s {nextToken = a} :: SearchRelatedItems)
+
+-- | A unique identifier of the case.
+searchRelatedItems_caseId :: Lens.Lens' SearchRelatedItems Prelude.Text
+searchRelatedItems_caseId = Lens.lens (\SearchRelatedItems' {caseId} -> caseId) (\s@SearchRelatedItems' {} a -> s {caseId = a} :: SearchRelatedItems)
+
+-- | The unique identifier of the Cases domain.
+searchRelatedItems_domainId :: Lens.Lens' SearchRelatedItems Prelude.Text
+searchRelatedItems_domainId = Lens.lens (\SearchRelatedItems' {domainId} -> domainId) (\s@SearchRelatedItems' {} a -> s {domainId = a} :: SearchRelatedItems)
+
+instance Core.AWSPager SearchRelatedItems where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? searchRelatedItemsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        (rs Lens.^. searchRelatedItemsResponse_relatedItems) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& searchRelatedItems_nextToken
+          Lens..~ rs
+          Lens.^? searchRelatedItemsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest SearchRelatedItems where
+  type
+    AWSResponse SearchRelatedItems =
+      SearchRelatedItemsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          SearchRelatedItemsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "relatedItems" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable SearchRelatedItems where
+  hashWithSalt _salt SearchRelatedItems' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` caseId
+      `Prelude.hashWithSalt` domainId
+
+instance Prelude.NFData SearchRelatedItems where
+  rnf SearchRelatedItems' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf caseId
+      `Prelude.seq` Prelude.rnf domainId
+
+instance Data.ToHeaders SearchRelatedItems where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SearchRelatedItems where
+  toJSON SearchRelatedItems' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath SearchRelatedItems where
+  toPath SearchRelatedItems' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainId,
+        "/cases/",
+        Data.toBS caseId,
+        "/related-items-search"
+      ]
+
+instance Data.ToQuery SearchRelatedItems where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newSearchRelatedItemsResponse' smart constructor.
+data SearchRelatedItemsResponse = SearchRelatedItemsResponse'
+  { -- | The token for the next set of results. This is null if there are no more
+    -- results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A list of items related to a case.
+    relatedItems :: [SearchRelatedItemsResponseItem]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchRelatedItemsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'searchRelatedItemsResponse_nextToken' - The token for the next set of results. This is null if there are no more
+-- results to return.
+--
+-- 'httpStatus', 'searchRelatedItemsResponse_httpStatus' - The response's http status code.
+--
+-- 'relatedItems', 'searchRelatedItemsResponse_relatedItems' - A list of items related to a case.
+newSearchRelatedItemsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SearchRelatedItemsResponse
+newSearchRelatedItemsResponse pHttpStatus_ =
+  SearchRelatedItemsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      relatedItems = Prelude.mempty
+    }
+
+-- | The token for the next set of results. This is null if there are no more
+-- results to return.
+searchRelatedItemsResponse_nextToken :: Lens.Lens' SearchRelatedItemsResponse (Prelude.Maybe Prelude.Text)
+searchRelatedItemsResponse_nextToken = Lens.lens (\SearchRelatedItemsResponse' {nextToken} -> nextToken) (\s@SearchRelatedItemsResponse' {} a -> s {nextToken = a} :: SearchRelatedItemsResponse)
+
+-- | The response's http status code.
+searchRelatedItemsResponse_httpStatus :: Lens.Lens' SearchRelatedItemsResponse Prelude.Int
+searchRelatedItemsResponse_httpStatus = Lens.lens (\SearchRelatedItemsResponse' {httpStatus} -> httpStatus) (\s@SearchRelatedItemsResponse' {} a -> s {httpStatus = a} :: SearchRelatedItemsResponse)
+
+-- | A list of items related to a case.
+searchRelatedItemsResponse_relatedItems :: Lens.Lens' SearchRelatedItemsResponse [SearchRelatedItemsResponseItem]
+searchRelatedItemsResponse_relatedItems = Lens.lens (\SearchRelatedItemsResponse' {relatedItems} -> relatedItems) (\s@SearchRelatedItemsResponse' {} a -> s {relatedItems = a} :: SearchRelatedItemsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData SearchRelatedItemsResponse where
+  rnf SearchRelatedItemsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf relatedItems
diff --git a/gen/Amazonka/ConnectCases/TagResource.hs b/gen/Amazonka/ConnectCases/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/TagResource.hs
@@ -0,0 +1,141 @@
+{-# 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.ConnectCases.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 tags to a resource.
+module Amazonka.ConnectCases.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_arn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The Amazon Resource Name (ARN)
+    arn :: Prelude.Text,
+    -- | A map of of key-value pairs that represent tags on a resource. Tags are
+    -- 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:
+--
+-- 'arn', 'tagResource_arn' - The Amazon Resource Name (ARN)
+--
+-- 'tags', 'tagResource_tags' - A map of of key-value pairs that represent tags on a resource. Tags are
+-- used to organize, track, or control access for this resource.
+newTagResource ::
+  -- | 'arn'
+  Prelude.Text ->
+  TagResource
+newTagResource pArn_ =
+  TagResource' {arn = pArn_, tags = Prelude.mempty}
+
+-- | The Amazon Resource Name (ARN)
+tagResource_arn :: Lens.Lens' TagResource Prelude.Text
+tagResource_arn = Lens.lens (\TagResource' {arn} -> arn) (\s@TagResource' {} a -> s {arn = a} :: TagResource)
+
+-- | A map of of key-value pairs that represent tags on a resource. Tags are
+-- 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.receiveNull TagResourceResponse'
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf arn `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 arn]
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newTagResourceResponse ::
+  TagResourceResponse
+newTagResourceResponse = TagResourceResponse'
+
+instance Prelude.NFData TagResourceResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/ConnectCases/Types.hs b/gen/Amazonka/ConnectCases/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types.hs
@@ -0,0 +1,471 @@
+{-# 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.ConnectCases.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.ConnectCases.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _ConflictException,
+    _InternalServerException,
+    _ResourceNotFoundException,
+    _ServiceQuotaExceededException,
+    _ThrottlingException,
+    _ValidationException,
+
+    -- * CommentBodyTextType
+    CommentBodyTextType (..),
+
+    -- * DomainStatus
+    DomainStatus (..),
+
+    -- * FieldNamespace
+    FieldNamespace (..),
+
+    -- * FieldType
+    FieldType (..),
+
+    -- * Order
+    Order (..),
+
+    -- * RelatedItemType
+    RelatedItemType (..),
+
+    -- * TemplateStatus
+    TemplateStatus (..),
+
+    -- * BasicLayout
+    BasicLayout (..),
+    newBasicLayout,
+    basicLayout_moreInfo,
+    basicLayout_topPanel,
+
+    -- * CaseEventIncludedData
+    CaseEventIncludedData (..),
+    newCaseEventIncludedData,
+    caseEventIncludedData_fields,
+
+    -- * CaseFilter
+    CaseFilter (..),
+    newCaseFilter,
+    caseFilter_andAll,
+    caseFilter_field,
+    caseFilter_not,
+
+    -- * CaseSummary
+    CaseSummary (..),
+    newCaseSummary,
+    caseSummary_caseId,
+    caseSummary_templateId,
+
+    -- * CommentContent
+    CommentContent (..),
+    newCommentContent,
+    commentContent_body,
+    commentContent_contentType,
+
+    -- * CommentFilter
+    CommentFilter (..),
+    newCommentFilter,
+
+    -- * Contact
+    Contact (..),
+    newContact,
+    contact_contactArn,
+
+    -- * ContactContent
+    ContactContent (..),
+    newContactContent,
+    contactContent_channel,
+    contactContent_connectedToSystemTime,
+    contactContent_contactArn,
+
+    -- * ContactFilter
+    ContactFilter (..),
+    newContactFilter,
+    contactFilter_channel,
+    contactFilter_contactArn,
+
+    -- * DomainSummary
+    DomainSummary (..),
+    newDomainSummary,
+    domainSummary_domainArn,
+    domainSummary_domainId,
+    domainSummary_name,
+
+    -- * EventBridgeConfiguration
+    EventBridgeConfiguration (..),
+    newEventBridgeConfiguration,
+    eventBridgeConfiguration_includedData,
+    eventBridgeConfiguration_enabled,
+
+    -- * EventIncludedData
+    EventIncludedData (..),
+    newEventIncludedData,
+    eventIncludedData_caseData,
+    eventIncludedData_relatedItemData,
+
+    -- * FieldError
+    FieldError (..),
+    newFieldError,
+    fieldError_message,
+    fieldError_errorCode,
+    fieldError_id,
+
+    -- * FieldFilter
+    FieldFilter (..),
+    newFieldFilter,
+    fieldFilter_contains,
+    fieldFilter_equalTo,
+    fieldFilter_greaterThan,
+    fieldFilter_greaterThanOrEqualTo,
+    fieldFilter_lessThan,
+    fieldFilter_lessThanOrEqualTo,
+
+    -- * FieldGroup
+    FieldGroup (..),
+    newFieldGroup,
+    fieldGroup_name,
+    fieldGroup_fields,
+
+    -- * FieldIdentifier
+    FieldIdentifier (..),
+    newFieldIdentifier,
+    fieldIdentifier_id,
+
+    -- * FieldItem
+    FieldItem (..),
+    newFieldItem,
+    fieldItem_id,
+
+    -- * FieldOption
+    FieldOption (..),
+    newFieldOption,
+    fieldOption_active,
+    fieldOption_name,
+    fieldOption_value,
+
+    -- * FieldOptionError
+    FieldOptionError (..),
+    newFieldOptionError,
+    fieldOptionError_errorCode,
+    fieldOptionError_message,
+    fieldOptionError_value,
+
+    -- * FieldSummary
+    FieldSummary (..),
+    newFieldSummary,
+    fieldSummary_fieldArn,
+    fieldSummary_fieldId,
+    fieldSummary_name,
+    fieldSummary_namespace,
+    fieldSummary_type,
+
+    -- * FieldValue
+    FieldValue (..),
+    newFieldValue,
+    fieldValue_id,
+    fieldValue_value,
+
+    -- * FieldValueUnion
+    FieldValueUnion (..),
+    newFieldValueUnion,
+    fieldValueUnion_booleanValue,
+    fieldValueUnion_doubleValue,
+    fieldValueUnion_stringValue,
+
+    -- * GetFieldResponse
+    GetFieldResponse (..),
+    newGetFieldResponse,
+    getFieldResponse_description,
+    getFieldResponse_tags,
+    getFieldResponse_fieldArn,
+    getFieldResponse_fieldId,
+    getFieldResponse_name,
+    getFieldResponse_namespace,
+    getFieldResponse_type,
+
+    -- * LayoutConfiguration
+    LayoutConfiguration (..),
+    newLayoutConfiguration,
+    layoutConfiguration_defaultLayout,
+
+    -- * LayoutContent
+    LayoutContent (..),
+    newLayoutContent,
+    layoutContent_basic,
+
+    -- * LayoutSections
+    LayoutSections (..),
+    newLayoutSections,
+    layoutSections_sections,
+
+    -- * LayoutSummary
+    LayoutSummary (..),
+    newLayoutSummary,
+    layoutSummary_layoutArn,
+    layoutSummary_layoutId,
+    layoutSummary_name,
+
+    -- * RelatedItemContent
+    RelatedItemContent (..),
+    newRelatedItemContent,
+    relatedItemContent_comment,
+    relatedItemContent_contact,
+
+    -- * RelatedItemEventIncludedData
+    RelatedItemEventIncludedData (..),
+    newRelatedItemEventIncludedData,
+    relatedItemEventIncludedData_includeContent,
+
+    -- * RelatedItemInputContent
+    RelatedItemInputContent (..),
+    newRelatedItemInputContent,
+    relatedItemInputContent_comment,
+    relatedItemInputContent_contact,
+
+    -- * RelatedItemTypeFilter
+    RelatedItemTypeFilter (..),
+    newRelatedItemTypeFilter,
+    relatedItemTypeFilter_comment,
+    relatedItemTypeFilter_contact,
+
+    -- * RequiredField
+    RequiredField (..),
+    newRequiredField,
+    requiredField_fieldId,
+
+    -- * SearchCasesResponseItem
+    SearchCasesResponseItem (..),
+    newSearchCasesResponseItem,
+    searchCasesResponseItem_tags,
+    searchCasesResponseItem_caseId,
+    searchCasesResponseItem_fields,
+    searchCasesResponseItem_templateId,
+
+    -- * SearchRelatedItemsResponseItem
+    SearchRelatedItemsResponseItem (..),
+    newSearchRelatedItemsResponseItem,
+    searchRelatedItemsResponseItem_tags,
+    searchRelatedItemsResponseItem_associationTime,
+    searchRelatedItemsResponseItem_content,
+    searchRelatedItemsResponseItem_relatedItemId,
+    searchRelatedItemsResponseItem_type,
+
+    -- * Section
+    Section (..),
+    newSection,
+    section_fieldGroup,
+
+    -- * Sort
+    Sort (..),
+    newSort,
+    sort_fieldId,
+    sort_sortOrder,
+
+    -- * TemplateSummary
+    TemplateSummary (..),
+    newTemplateSummary,
+    templateSummary_name,
+    templateSummary_status,
+    templateSummary_templateArn,
+    templateSummary_templateId,
+  )
+where
+
+import Amazonka.ConnectCases.Types.BasicLayout
+import Amazonka.ConnectCases.Types.CaseEventIncludedData
+import Amazonka.ConnectCases.Types.CaseFilter
+import Amazonka.ConnectCases.Types.CaseSummary
+import Amazonka.ConnectCases.Types.CommentBodyTextType
+import Amazonka.ConnectCases.Types.CommentContent
+import Amazonka.ConnectCases.Types.CommentFilter
+import Amazonka.ConnectCases.Types.Contact
+import Amazonka.ConnectCases.Types.ContactContent
+import Amazonka.ConnectCases.Types.ContactFilter
+import Amazonka.ConnectCases.Types.DomainStatus
+import Amazonka.ConnectCases.Types.DomainSummary
+import Amazonka.ConnectCases.Types.EventBridgeConfiguration
+import Amazonka.ConnectCases.Types.EventIncludedData
+import Amazonka.ConnectCases.Types.FieldError
+import Amazonka.ConnectCases.Types.FieldFilter
+import Amazonka.ConnectCases.Types.FieldGroup
+import Amazonka.ConnectCases.Types.FieldIdentifier
+import Amazonka.ConnectCases.Types.FieldItem
+import Amazonka.ConnectCases.Types.FieldNamespace
+import Amazonka.ConnectCases.Types.FieldOption
+import Amazonka.ConnectCases.Types.FieldOptionError
+import Amazonka.ConnectCases.Types.FieldSummary
+import Amazonka.ConnectCases.Types.FieldType
+import Amazonka.ConnectCases.Types.FieldValue
+import Amazonka.ConnectCases.Types.FieldValueUnion
+import Amazonka.ConnectCases.Types.GetFieldResponse
+import Amazonka.ConnectCases.Types.LayoutConfiguration
+import Amazonka.ConnectCases.Types.LayoutContent
+import Amazonka.ConnectCases.Types.LayoutSections
+import Amazonka.ConnectCases.Types.LayoutSummary
+import Amazonka.ConnectCases.Types.Order
+import Amazonka.ConnectCases.Types.RelatedItemContent
+import Amazonka.ConnectCases.Types.RelatedItemEventIncludedData
+import Amazonka.ConnectCases.Types.RelatedItemInputContent
+import Amazonka.ConnectCases.Types.RelatedItemType
+import Amazonka.ConnectCases.Types.RelatedItemTypeFilter
+import Amazonka.ConnectCases.Types.RequiredField
+import Amazonka.ConnectCases.Types.SearchCasesResponseItem
+import Amazonka.ConnectCases.Types.SearchRelatedItemsResponseItem
+import Amazonka.ConnectCases.Types.Section
+import Amazonka.ConnectCases.Types.Sort
+import Amazonka.ConnectCases.Types.TemplateStatus
+import Amazonka.ConnectCases.Types.TemplateSummary
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2022-10-03@ of the Amazon Connect Cases SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "ConnectCases",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "cases",
+      Core.signingName = "cases",
+      Core.version = "2022-10-03",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "ConnectCases",
+      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 requested operation would cause a conflict with the current state of
+-- a service resource associated with the request. Resolve the conflict
+-- before retrying this request. See the accompanying error message for
+-- details.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+    Prelude.. Core.hasStatus 409
+
+-- | We couldn\'t process your request because of an issue with the server.
+-- Try again later.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+    Prelude.. Core.hasStatus 500
+
+-- | We couldn\'t find the requested resource. Check that your resources
+-- exists and were created in the same Amazon Web Services Region as your
+-- request, and try your request again.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | The service quota has been exceeded. For a list of service quotas, see
+-- <https://docs.aws.amazon.com/connect/latest/adminguide/amazon-connect-service-limits.html Amazon Connect Service Quotas>
+-- in the /Amazon Connect Administrator Guide/.
+_ServiceQuotaExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceQuotaExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceQuotaExceededException"
+    Prelude.. Core.hasStatus 402
+
+-- | The rate has been exceeded for this API. Please try again after a few
+-- minutes.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+    Prelude.. Core.hasStatus 429
+
+-- | The request isn\'t valid. Check the syntax and try again.
+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ValidationException =
+  Core._MatchServiceError
+    defaultService
+    "ValidationException"
+    Prelude.. Core.hasStatus 400
diff --git a/gen/Amazonka/ConnectCases/Types/BasicLayout.hs b/gen/Amazonka/ConnectCases/Types/BasicLayout.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/BasicLayout.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.BasicLayout
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.BasicLayout where
+
+import Amazonka.ConnectCases.Types.LayoutSections
+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
+
+-- | Content specific to @BasicLayout@ type. It configures fields in the top
+-- panel and More Info tab of agent application.
+--
+-- /See:/ 'newBasicLayout' smart constructor.
+data BasicLayout = BasicLayout'
+  { -- | This represents sections in a tab of the page layout.
+    moreInfo :: Prelude.Maybe LayoutSections,
+    -- | This represents sections in a panel of the page layout.
+    topPanel :: Prelude.Maybe LayoutSections
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BasicLayout' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'moreInfo', 'basicLayout_moreInfo' - This represents sections in a tab of the page layout.
+--
+-- 'topPanel', 'basicLayout_topPanel' - This represents sections in a panel of the page layout.
+newBasicLayout ::
+  BasicLayout
+newBasicLayout =
+  BasicLayout'
+    { moreInfo = Prelude.Nothing,
+      topPanel = Prelude.Nothing
+    }
+
+-- | This represents sections in a tab of the page layout.
+basicLayout_moreInfo :: Lens.Lens' BasicLayout (Prelude.Maybe LayoutSections)
+basicLayout_moreInfo = Lens.lens (\BasicLayout' {moreInfo} -> moreInfo) (\s@BasicLayout' {} a -> s {moreInfo = a} :: BasicLayout)
+
+-- | This represents sections in a panel of the page layout.
+basicLayout_topPanel :: Lens.Lens' BasicLayout (Prelude.Maybe LayoutSections)
+basicLayout_topPanel = Lens.lens (\BasicLayout' {topPanel} -> topPanel) (\s@BasicLayout' {} a -> s {topPanel = a} :: BasicLayout)
+
+instance Data.FromJSON BasicLayout where
+  parseJSON =
+    Data.withObject
+      "BasicLayout"
+      ( \x ->
+          BasicLayout'
+            Prelude.<$> (x Data..:? "moreInfo")
+            Prelude.<*> (x Data..:? "topPanel")
+      )
+
+instance Prelude.Hashable BasicLayout where
+  hashWithSalt _salt BasicLayout' {..} =
+    _salt
+      `Prelude.hashWithSalt` moreInfo
+      `Prelude.hashWithSalt` topPanel
+
+instance Prelude.NFData BasicLayout where
+  rnf BasicLayout' {..} =
+    Prelude.rnf moreInfo
+      `Prelude.seq` Prelude.rnf topPanel
+
+instance Data.ToJSON BasicLayout where
+  toJSON BasicLayout' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("moreInfo" Data..=) Prelude.<$> moreInfo,
+            ("topPanel" Data..=) Prelude.<$> topPanel
+          ]
+      )
diff --git a/gen/Amazonka/ConnectCases/Types/CaseEventIncludedData.hs b/gen/Amazonka/ConnectCases/Types/CaseEventIncludedData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/CaseEventIncludedData.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.ConnectCases.Types.CaseEventIncludedData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.CaseEventIncludedData where
+
+import Amazonka.ConnectCases.Types.FieldIdentifier
+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
+
+-- | Details of what case data is published through the case event stream.
+--
+-- /See:/ 'newCaseEventIncludedData' smart constructor.
+data CaseEventIncludedData = CaseEventIncludedData'
+  { -- | List of field identifiers.
+    fields :: [FieldIdentifier]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CaseEventIncludedData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fields', 'caseEventIncludedData_fields' - List of field identifiers.
+newCaseEventIncludedData ::
+  CaseEventIncludedData
+newCaseEventIncludedData =
+  CaseEventIncludedData' {fields = Prelude.mempty}
+
+-- | List of field identifiers.
+caseEventIncludedData_fields :: Lens.Lens' CaseEventIncludedData [FieldIdentifier]
+caseEventIncludedData_fields = Lens.lens (\CaseEventIncludedData' {fields} -> fields) (\s@CaseEventIncludedData' {} a -> s {fields = a} :: CaseEventIncludedData) Prelude.. Lens.coerced
+
+instance Data.FromJSON CaseEventIncludedData where
+  parseJSON =
+    Data.withObject
+      "CaseEventIncludedData"
+      ( \x ->
+          CaseEventIncludedData'
+            Prelude.<$> (x Data..:? "fields" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable CaseEventIncludedData where
+  hashWithSalt _salt CaseEventIncludedData' {..} =
+    _salt `Prelude.hashWithSalt` fields
+
+instance Prelude.NFData CaseEventIncludedData where
+  rnf CaseEventIncludedData' {..} = Prelude.rnf fields
+
+instance Data.ToJSON CaseEventIncludedData where
+  toJSON CaseEventIncludedData' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("fields" Data..= fields)]
+      )
diff --git a/gen/Amazonka/ConnectCases/Types/CaseFilter.hs b/gen/Amazonka/ConnectCases/Types/CaseFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/CaseFilter.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.CaseFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.CaseFilter where
+
+import Amazonka.ConnectCases.Types.FieldFilter
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A filter for cases. Only one value can be provided.
+--
+-- /See:/ 'newCaseFilter' smart constructor.
+data CaseFilter = CaseFilter'
+  { -- | Provides \"and all\" filtering.
+    andAll :: Prelude.Maybe [CaseFilter],
+    -- | A list of fields to filter on.
+    field :: Prelude.Maybe FieldFilter,
+    not :: Prelude.Maybe CaseFilter
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CaseFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'andAll', 'caseFilter_andAll' - Provides \"and all\" filtering.
+--
+-- 'field', 'caseFilter_field' - A list of fields to filter on.
+--
+-- 'not', 'caseFilter_not' - Undocumented member.
+newCaseFilter ::
+  CaseFilter
+newCaseFilter =
+  CaseFilter'
+    { andAll = Prelude.Nothing,
+      field = Prelude.Nothing,
+      not = Prelude.Nothing
+    }
+
+-- | Provides \"and all\" filtering.
+caseFilter_andAll :: Lens.Lens' CaseFilter (Prelude.Maybe [CaseFilter])
+caseFilter_andAll = Lens.lens (\CaseFilter' {andAll} -> andAll) (\s@CaseFilter' {} a -> s {andAll = a} :: CaseFilter) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of fields to filter on.
+caseFilter_field :: Lens.Lens' CaseFilter (Prelude.Maybe FieldFilter)
+caseFilter_field = Lens.lens (\CaseFilter' {field} -> field) (\s@CaseFilter' {} a -> s {field = a} :: CaseFilter)
+
+-- | Undocumented member.
+caseFilter_not :: Lens.Lens' CaseFilter (Prelude.Maybe CaseFilter)
+caseFilter_not = Lens.lens (\CaseFilter' {not} -> not) (\s@CaseFilter' {} a -> s {not = a} :: CaseFilter)
+
+instance Prelude.Hashable CaseFilter where
+  hashWithSalt _salt CaseFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` andAll
+      `Prelude.hashWithSalt` field
+      `Prelude.hashWithSalt` not
+
+instance Prelude.NFData CaseFilter where
+  rnf CaseFilter' {..} =
+    Prelude.rnf andAll
+      `Prelude.seq` Prelude.rnf field
+      `Prelude.seq` Prelude.rnf not
+
+instance Data.ToJSON CaseFilter where
+  toJSON CaseFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("andAll" Data..=) Prelude.<$> andAll,
+            ("field" Data..=) Prelude.<$> field,
+            ("not" Data..=) Prelude.<$> not
+          ]
+      )
diff --git a/gen/Amazonka/ConnectCases/Types/CaseSummary.hs b/gen/Amazonka/ConnectCases/Types/CaseSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/CaseSummary.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.ConnectCases.Types.CaseSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.CaseSummary 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
+
+-- | Case summary information.
+--
+-- /See:/ 'newCaseSummary' smart constructor.
+data CaseSummary = CaseSummary'
+  { -- | A unique identifier of the case.
+    caseId :: Prelude.Text,
+    -- | A unique identifier of a template.
+    templateId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CaseSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'caseId', 'caseSummary_caseId' - A unique identifier of the case.
+--
+-- 'templateId', 'caseSummary_templateId' - A unique identifier of a template.
+newCaseSummary ::
+  -- | 'caseId'
+  Prelude.Text ->
+  -- | 'templateId'
+  Prelude.Text ->
+  CaseSummary
+newCaseSummary pCaseId_ pTemplateId_ =
+  CaseSummary'
+    { caseId = pCaseId_,
+      templateId = pTemplateId_
+    }
+
+-- | A unique identifier of the case.
+caseSummary_caseId :: Lens.Lens' CaseSummary Prelude.Text
+caseSummary_caseId = Lens.lens (\CaseSummary' {caseId} -> caseId) (\s@CaseSummary' {} a -> s {caseId = a} :: CaseSummary)
+
+-- | A unique identifier of a template.
+caseSummary_templateId :: Lens.Lens' CaseSummary Prelude.Text
+caseSummary_templateId = Lens.lens (\CaseSummary' {templateId} -> templateId) (\s@CaseSummary' {} a -> s {templateId = a} :: CaseSummary)
+
+instance Data.FromJSON CaseSummary where
+  parseJSON =
+    Data.withObject
+      "CaseSummary"
+      ( \x ->
+          CaseSummary'
+            Prelude.<$> (x Data..: "caseId")
+            Prelude.<*> (x Data..: "templateId")
+      )
+
+instance Prelude.Hashable CaseSummary where
+  hashWithSalt _salt CaseSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` caseId
+      `Prelude.hashWithSalt` templateId
+
+instance Prelude.NFData CaseSummary where
+  rnf CaseSummary' {..} =
+    Prelude.rnf caseId
+      `Prelude.seq` Prelude.rnf templateId
diff --git a/gen/Amazonka/ConnectCases/Types/CommentBodyTextType.hs b/gen/Amazonka/ConnectCases/Types/CommentBodyTextType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/CommentBodyTextType.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.ConnectCases.Types.CommentBodyTextType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.CommentBodyTextType
+  ( CommentBodyTextType
+      ( ..,
+        CommentBodyTextType_Text_Plain
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype CommentBodyTextType = CommentBodyTextType'
+  { fromCommentBodyTextType ::
+      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 CommentBodyTextType_Text_Plain :: CommentBodyTextType
+pattern CommentBodyTextType_Text_Plain = CommentBodyTextType' "Text/Plain"
+
+{-# COMPLETE
+  CommentBodyTextType_Text_Plain,
+  CommentBodyTextType'
+  #-}
diff --git a/gen/Amazonka/ConnectCases/Types/CommentContent.hs b/gen/Amazonka/ConnectCases/Types/CommentContent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/CommentContent.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.CommentContent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.CommentContent where
+
+import Amazonka.ConnectCases.Types.CommentBodyTextType
+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
+
+-- | Represents the content of a @Comment@ to be returned to agents.
+--
+-- /See:/ 'newCommentContent' smart constructor.
+data CommentContent = CommentContent'
+  { -- | Text in the body of a @Comment@ on a case.
+    body :: Prelude.Text,
+    -- | Type of the text in the box of a @Comment@ on a case.
+    contentType :: CommentBodyTextType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CommentContent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'body', 'commentContent_body' - Text in the body of a @Comment@ on a case.
+--
+-- 'contentType', 'commentContent_contentType' - Type of the text in the box of a @Comment@ on a case.
+newCommentContent ::
+  -- | 'body'
+  Prelude.Text ->
+  -- | 'contentType'
+  CommentBodyTextType ->
+  CommentContent
+newCommentContent pBody_ pContentType_ =
+  CommentContent'
+    { body = pBody_,
+      contentType = pContentType_
+    }
+
+-- | Text in the body of a @Comment@ on a case.
+commentContent_body :: Lens.Lens' CommentContent Prelude.Text
+commentContent_body = Lens.lens (\CommentContent' {body} -> body) (\s@CommentContent' {} a -> s {body = a} :: CommentContent)
+
+-- | Type of the text in the box of a @Comment@ on a case.
+commentContent_contentType :: Lens.Lens' CommentContent CommentBodyTextType
+commentContent_contentType = Lens.lens (\CommentContent' {contentType} -> contentType) (\s@CommentContent' {} a -> s {contentType = a} :: CommentContent)
+
+instance Data.FromJSON CommentContent where
+  parseJSON =
+    Data.withObject
+      "CommentContent"
+      ( \x ->
+          CommentContent'
+            Prelude.<$> (x Data..: "body")
+            Prelude.<*> (x Data..: "contentType")
+      )
+
+instance Prelude.Hashable CommentContent where
+  hashWithSalt _salt CommentContent' {..} =
+    _salt
+      `Prelude.hashWithSalt` body
+      `Prelude.hashWithSalt` contentType
+
+instance Prelude.NFData CommentContent where
+  rnf CommentContent' {..} =
+    Prelude.rnf body
+      `Prelude.seq` Prelude.rnf contentType
+
+instance Data.ToJSON CommentContent where
+  toJSON CommentContent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("body" Data..= body),
+            Prelude.Just ("contentType" Data..= contentType)
+          ]
+      )
diff --git a/gen/Amazonka/ConnectCases/Types/CommentFilter.hs b/gen/Amazonka/ConnectCases/Types/CommentFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/CommentFilter.hs
@@ -0,0 +1,51 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.CommentFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.CommentFilter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A filter for related items of type @Comment@.
+--
+-- /See:/ 'newCommentFilter' smart constructor.
+data CommentFilter = CommentFilter'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CommentFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newCommentFilter ::
+  CommentFilter
+newCommentFilter = CommentFilter'
+
+instance Prelude.Hashable CommentFilter where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData CommentFilter where
+  rnf _ = ()
+
+instance Data.ToJSON CommentFilter where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
diff --git a/gen/Amazonka/ConnectCases/Types/Contact.hs b/gen/Amazonka/ConnectCases/Types/Contact.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/Contact.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.Contact
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.Contact where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object that represents an Amazon Connect contact object.
+--
+-- /See:/ 'newContact' smart constructor.
+data Contact = Contact'
+  { -- | A unique identifier of a contact in Amazon Connect.
+    contactArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Contact' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contactArn', 'contact_contactArn' - A unique identifier of a contact in Amazon Connect.
+newContact ::
+  -- | 'contactArn'
+  Prelude.Text ->
+  Contact
+newContact pContactArn_ =
+  Contact' {contactArn = pContactArn_}
+
+-- | A unique identifier of a contact in Amazon Connect.
+contact_contactArn :: Lens.Lens' Contact Prelude.Text
+contact_contactArn = Lens.lens (\Contact' {contactArn} -> contactArn) (\s@Contact' {} a -> s {contactArn = a} :: Contact)
+
+instance Prelude.Hashable Contact where
+  hashWithSalt _salt Contact' {..} =
+    _salt `Prelude.hashWithSalt` contactArn
+
+instance Prelude.NFData Contact where
+  rnf Contact' {..} = Prelude.rnf contactArn
+
+instance Data.ToJSON Contact where
+  toJSON Contact' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("contactArn" Data..= contactArn)]
+      )
diff --git a/gen/Amazonka/ConnectCases/Types/ContactContent.hs b/gen/Amazonka/ConnectCases/Types/ContactContent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/ContactContent.hs
@@ -0,0 +1,109 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.ContactContent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.ContactContent where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object that represents a content of an Amazon Connect contact object.
+--
+-- /See:/ 'newContactContent' smart constructor.
+data ContactContent = ContactContent'
+  { -- | A list of channels to filter on for related items of type @Contact@.
+    channel :: Prelude.Text,
+    -- | The difference between the @InitiationTimestamp@ and the
+    -- @DisconnectTimestamp@ of the contact.
+    connectedToSystemTime :: Data.ISO8601,
+    -- | A unique identifier of a contact in Amazon Connect.
+    contactArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ContactContent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'channel', 'contactContent_channel' - A list of channels to filter on for related items of type @Contact@.
+--
+-- 'connectedToSystemTime', 'contactContent_connectedToSystemTime' - The difference between the @InitiationTimestamp@ and the
+-- @DisconnectTimestamp@ of the contact.
+--
+-- 'contactArn', 'contactContent_contactArn' - A unique identifier of a contact in Amazon Connect.
+newContactContent ::
+  -- | 'channel'
+  Prelude.Text ->
+  -- | 'connectedToSystemTime'
+  Prelude.UTCTime ->
+  -- | 'contactArn'
+  Prelude.Text ->
+  ContactContent
+newContactContent
+  pChannel_
+  pConnectedToSystemTime_
+  pContactArn_ =
+    ContactContent'
+      { channel = pChannel_,
+        connectedToSystemTime =
+          Data._Time Lens.# pConnectedToSystemTime_,
+        contactArn = pContactArn_
+      }
+
+-- | A list of channels to filter on for related items of type @Contact@.
+contactContent_channel :: Lens.Lens' ContactContent Prelude.Text
+contactContent_channel = Lens.lens (\ContactContent' {channel} -> channel) (\s@ContactContent' {} a -> s {channel = a} :: ContactContent)
+
+-- | The difference between the @InitiationTimestamp@ and the
+-- @DisconnectTimestamp@ of the contact.
+contactContent_connectedToSystemTime :: Lens.Lens' ContactContent Prelude.UTCTime
+contactContent_connectedToSystemTime = Lens.lens (\ContactContent' {connectedToSystemTime} -> connectedToSystemTime) (\s@ContactContent' {} a -> s {connectedToSystemTime = a} :: ContactContent) Prelude.. Data._Time
+
+-- | A unique identifier of a contact in Amazon Connect.
+contactContent_contactArn :: Lens.Lens' ContactContent Prelude.Text
+contactContent_contactArn = Lens.lens (\ContactContent' {contactArn} -> contactArn) (\s@ContactContent' {} a -> s {contactArn = a} :: ContactContent)
+
+instance Data.FromJSON ContactContent where
+  parseJSON =
+    Data.withObject
+      "ContactContent"
+      ( \x ->
+          ContactContent'
+            Prelude.<$> (x Data..: "channel")
+            Prelude.<*> (x Data..: "connectedToSystemTime")
+            Prelude.<*> (x Data..: "contactArn")
+      )
+
+instance Prelude.Hashable ContactContent where
+  hashWithSalt _salt ContactContent' {..} =
+    _salt
+      `Prelude.hashWithSalt` channel
+      `Prelude.hashWithSalt` connectedToSystemTime
+      `Prelude.hashWithSalt` contactArn
+
+instance Prelude.NFData ContactContent where
+  rnf ContactContent' {..} =
+    Prelude.rnf channel
+      `Prelude.seq` Prelude.rnf connectedToSystemTime
+      `Prelude.seq` Prelude.rnf contactArn
diff --git a/gen/Amazonka/ConnectCases/Types/ContactFilter.hs b/gen/Amazonka/ConnectCases/Types/ContactFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/ContactFilter.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.ContactFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.ContactFilter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A filter for related items of type @Contact@.
+--
+-- /See:/ 'newContactFilter' smart constructor.
+data ContactFilter = ContactFilter'
+  { -- | A list of channels to filter on for related items of type @Contact@.
+    channel :: Prelude.Maybe [Prelude.Text],
+    -- | A unique identifier of a contact in Amazon Connect.
+    contactArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ContactFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'channel', 'contactFilter_channel' - A list of channels to filter on for related items of type @Contact@.
+--
+-- 'contactArn', 'contactFilter_contactArn' - A unique identifier of a contact in Amazon Connect.
+newContactFilter ::
+  ContactFilter
+newContactFilter =
+  ContactFilter'
+    { channel = Prelude.Nothing,
+      contactArn = Prelude.Nothing
+    }
+
+-- | A list of channels to filter on for related items of type @Contact@.
+contactFilter_channel :: Lens.Lens' ContactFilter (Prelude.Maybe [Prelude.Text])
+contactFilter_channel = Lens.lens (\ContactFilter' {channel} -> channel) (\s@ContactFilter' {} a -> s {channel = a} :: ContactFilter) Prelude.. Lens.mapping Lens.coerced
+
+-- | A unique identifier of a contact in Amazon Connect.
+contactFilter_contactArn :: Lens.Lens' ContactFilter (Prelude.Maybe Prelude.Text)
+contactFilter_contactArn = Lens.lens (\ContactFilter' {contactArn} -> contactArn) (\s@ContactFilter' {} a -> s {contactArn = a} :: ContactFilter)
+
+instance Prelude.Hashable ContactFilter where
+  hashWithSalt _salt ContactFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` channel
+      `Prelude.hashWithSalt` contactArn
+
+instance Prelude.NFData ContactFilter where
+  rnf ContactFilter' {..} =
+    Prelude.rnf channel
+      `Prelude.seq` Prelude.rnf contactArn
+
+instance Data.ToJSON ContactFilter where
+  toJSON ContactFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("channel" Data..=) Prelude.<$> channel,
+            ("contactArn" Data..=) Prelude.<$> contactArn
+          ]
+      )
diff --git a/gen/Amazonka/ConnectCases/Types/DomainStatus.hs b/gen/Amazonka/ConnectCases/Types/DomainStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/DomainStatus.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.ConnectCases.Types.DomainStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.DomainStatus
+  ( DomainStatus
+      ( ..,
+        DomainStatus_Active,
+        DomainStatus_CreationFailed,
+        DomainStatus_CreationInProgress
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DomainStatus = DomainStatus'
+  { fromDomainStatus ::
+      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 DomainStatus_Active :: DomainStatus
+pattern DomainStatus_Active = DomainStatus' "Active"
+
+pattern DomainStatus_CreationFailed :: DomainStatus
+pattern DomainStatus_CreationFailed = DomainStatus' "CreationFailed"
+
+pattern DomainStatus_CreationInProgress :: DomainStatus
+pattern DomainStatus_CreationInProgress = DomainStatus' "CreationInProgress"
+
+{-# COMPLETE
+  DomainStatus_Active,
+  DomainStatus_CreationFailed,
+  DomainStatus_CreationInProgress,
+  DomainStatus'
+  #-}
diff --git a/gen/Amazonka/ConnectCases/Types/DomainSummary.hs b/gen/Amazonka/ConnectCases/Types/DomainSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/DomainSummary.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.DomainSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.DomainSummary 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
+
+-- | Object for the summarized details of the domain.
+--
+-- /See:/ 'newDomainSummary' smart constructor.
+data DomainSummary = DomainSummary'
+  { -- | The Amazon Resource Name (ARN) of the domain.
+    domainArn :: Prelude.Text,
+    -- | The unique identifier of the domain.
+    domainId :: Prelude.Text,
+    -- | The name of the domain.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DomainSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainArn', 'domainSummary_domainArn' - The Amazon Resource Name (ARN) of the domain.
+--
+-- 'domainId', 'domainSummary_domainId' - The unique identifier of the domain.
+--
+-- 'name', 'domainSummary_name' - The name of the domain.
+newDomainSummary ::
+  -- | 'domainArn'
+  Prelude.Text ->
+  -- | 'domainId'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  DomainSummary
+newDomainSummary pDomainArn_ pDomainId_ pName_ =
+  DomainSummary'
+    { domainArn = pDomainArn_,
+      domainId = pDomainId_,
+      name = pName_
+    }
+
+-- | The Amazon Resource Name (ARN) of the domain.
+domainSummary_domainArn :: Lens.Lens' DomainSummary Prelude.Text
+domainSummary_domainArn = Lens.lens (\DomainSummary' {domainArn} -> domainArn) (\s@DomainSummary' {} a -> s {domainArn = a} :: DomainSummary)
+
+-- | The unique identifier of the domain.
+domainSummary_domainId :: Lens.Lens' DomainSummary Prelude.Text
+domainSummary_domainId = Lens.lens (\DomainSummary' {domainId} -> domainId) (\s@DomainSummary' {} a -> s {domainId = a} :: DomainSummary)
+
+-- | The name of the domain.
+domainSummary_name :: Lens.Lens' DomainSummary Prelude.Text
+domainSummary_name = Lens.lens (\DomainSummary' {name} -> name) (\s@DomainSummary' {} a -> s {name = a} :: DomainSummary)
+
+instance Data.FromJSON DomainSummary where
+  parseJSON =
+    Data.withObject
+      "DomainSummary"
+      ( \x ->
+          DomainSummary'
+            Prelude.<$> (x Data..: "domainArn")
+            Prelude.<*> (x Data..: "domainId")
+            Prelude.<*> (x Data..: "name")
+      )
+
+instance Prelude.Hashable DomainSummary where
+  hashWithSalt _salt DomainSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainArn
+      `Prelude.hashWithSalt` domainId
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DomainSummary where
+  rnf DomainSummary' {..} =
+    Prelude.rnf domainArn
+      `Prelude.seq` Prelude.rnf domainId
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/ConnectCases/Types/EventBridgeConfiguration.hs b/gen/Amazonka/ConnectCases/Types/EventBridgeConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/EventBridgeConfiguration.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.ConnectCases.Types.EventBridgeConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.EventBridgeConfiguration where
+
+import Amazonka.ConnectCases.Types.EventIncludedData
+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 to enable EventBridge case event delivery and determine
+-- what data is delivered.
+--
+-- /See:/ 'newEventBridgeConfiguration' smart constructor.
+data EventBridgeConfiguration = EventBridgeConfiguration'
+  { -- | Details of what case and related item data is published through the case
+    -- event stream.
+    includedData :: Prelude.Maybe EventIncludedData,
+    -- | Indicates whether the to broadcast case event data to the customer.
+    enabled :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EventBridgeConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'includedData', 'eventBridgeConfiguration_includedData' - Details of what case and related item data is published through the case
+-- event stream.
+--
+-- 'enabled', 'eventBridgeConfiguration_enabled' - Indicates whether the to broadcast case event data to the customer.
+newEventBridgeConfiguration ::
+  -- | 'enabled'
+  Prelude.Bool ->
+  EventBridgeConfiguration
+newEventBridgeConfiguration pEnabled_ =
+  EventBridgeConfiguration'
+    { includedData =
+        Prelude.Nothing,
+      enabled = pEnabled_
+    }
+
+-- | Details of what case and related item data is published through the case
+-- event stream.
+eventBridgeConfiguration_includedData :: Lens.Lens' EventBridgeConfiguration (Prelude.Maybe EventIncludedData)
+eventBridgeConfiguration_includedData = Lens.lens (\EventBridgeConfiguration' {includedData} -> includedData) (\s@EventBridgeConfiguration' {} a -> s {includedData = a} :: EventBridgeConfiguration)
+
+-- | Indicates whether the to broadcast case event data to the customer.
+eventBridgeConfiguration_enabled :: Lens.Lens' EventBridgeConfiguration Prelude.Bool
+eventBridgeConfiguration_enabled = Lens.lens (\EventBridgeConfiguration' {enabled} -> enabled) (\s@EventBridgeConfiguration' {} a -> s {enabled = a} :: EventBridgeConfiguration)
+
+instance Data.FromJSON EventBridgeConfiguration where
+  parseJSON =
+    Data.withObject
+      "EventBridgeConfiguration"
+      ( \x ->
+          EventBridgeConfiguration'
+            Prelude.<$> (x Data..:? "includedData")
+            Prelude.<*> (x Data..: "enabled")
+      )
+
+instance Prelude.Hashable EventBridgeConfiguration where
+  hashWithSalt _salt EventBridgeConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` includedData
+      `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData EventBridgeConfiguration where
+  rnf EventBridgeConfiguration' {..} =
+    Prelude.rnf includedData
+      `Prelude.seq` Prelude.rnf enabled
+
+instance Data.ToJSON EventBridgeConfiguration where
+  toJSON EventBridgeConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("includedData" Data..=) Prelude.<$> includedData,
+            Prelude.Just ("enabled" Data..= enabled)
+          ]
+      )
diff --git a/gen/Amazonka/ConnectCases/Types/EventIncludedData.hs b/gen/Amazonka/ConnectCases/Types/EventIncludedData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/EventIncludedData.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.ConnectCases.Types.EventIncludedData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.EventIncludedData where
+
+import Amazonka.ConnectCases.Types.CaseEventIncludedData
+import Amazonka.ConnectCases.Types.RelatedItemEventIncludedData
+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
+
+-- | Details of what case and related item data is published through the case
+-- event stream.
+--
+-- /See:/ 'newEventIncludedData' smart constructor.
+data EventIncludedData = EventIncludedData'
+  { -- | Details of what case data is published through the case event stream.
+    caseData :: Prelude.Maybe CaseEventIncludedData,
+    -- | Details of what related item data is published through the case event
+    -- stream.
+    relatedItemData :: Prelude.Maybe RelatedItemEventIncludedData
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EventIncludedData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'caseData', 'eventIncludedData_caseData' - Details of what case data is published through the case event stream.
+--
+-- 'relatedItemData', 'eventIncludedData_relatedItemData' - Details of what related item data is published through the case event
+-- stream.
+newEventIncludedData ::
+  EventIncludedData
+newEventIncludedData =
+  EventIncludedData'
+    { caseData = Prelude.Nothing,
+      relatedItemData = Prelude.Nothing
+    }
+
+-- | Details of what case data is published through the case event stream.
+eventIncludedData_caseData :: Lens.Lens' EventIncludedData (Prelude.Maybe CaseEventIncludedData)
+eventIncludedData_caseData = Lens.lens (\EventIncludedData' {caseData} -> caseData) (\s@EventIncludedData' {} a -> s {caseData = a} :: EventIncludedData)
+
+-- | Details of what related item data is published through the case event
+-- stream.
+eventIncludedData_relatedItemData :: Lens.Lens' EventIncludedData (Prelude.Maybe RelatedItemEventIncludedData)
+eventIncludedData_relatedItemData = Lens.lens (\EventIncludedData' {relatedItemData} -> relatedItemData) (\s@EventIncludedData' {} a -> s {relatedItemData = a} :: EventIncludedData)
+
+instance Data.FromJSON EventIncludedData where
+  parseJSON =
+    Data.withObject
+      "EventIncludedData"
+      ( \x ->
+          EventIncludedData'
+            Prelude.<$> (x Data..:? "caseData")
+            Prelude.<*> (x Data..:? "relatedItemData")
+      )
+
+instance Prelude.Hashable EventIncludedData where
+  hashWithSalt _salt EventIncludedData' {..} =
+    _salt
+      `Prelude.hashWithSalt` caseData
+      `Prelude.hashWithSalt` relatedItemData
+
+instance Prelude.NFData EventIncludedData where
+  rnf EventIncludedData' {..} =
+    Prelude.rnf caseData
+      `Prelude.seq` Prelude.rnf relatedItemData
+
+instance Data.ToJSON EventIncludedData where
+  toJSON EventIncludedData' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("caseData" Data..=) Prelude.<$> caseData,
+            ("relatedItemData" Data..=)
+              Prelude.<$> relatedItemData
+          ]
+      )
diff --git a/gen/Amazonka/ConnectCases/Types/FieldError.hs b/gen/Amazonka/ConnectCases/Types/FieldError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/FieldError.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.ConnectCases.Types.FieldError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.FieldError 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
+
+-- | Object for errors on fields.
+--
+-- /See:/ 'newFieldError' smart constructor.
+data FieldError = FieldError'
+  { -- | The error message from getting a field.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The error code from getting a field.
+    errorCode :: Prelude.Text,
+    -- | The field identifier that caused the error.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FieldError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'fieldError_message' - The error message from getting a field.
+--
+-- 'errorCode', 'fieldError_errorCode' - The error code from getting a field.
+--
+-- 'id', 'fieldError_id' - The field identifier that caused the error.
+newFieldError ::
+  -- | 'errorCode'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  FieldError
+newFieldError pErrorCode_ pId_ =
+  FieldError'
+    { message = Prelude.Nothing,
+      errorCode = pErrorCode_,
+      id = pId_
+    }
+
+-- | The error message from getting a field.
+fieldError_message :: Lens.Lens' FieldError (Prelude.Maybe Prelude.Text)
+fieldError_message = Lens.lens (\FieldError' {message} -> message) (\s@FieldError' {} a -> s {message = a} :: FieldError)
+
+-- | The error code from getting a field.
+fieldError_errorCode :: Lens.Lens' FieldError Prelude.Text
+fieldError_errorCode = Lens.lens (\FieldError' {errorCode} -> errorCode) (\s@FieldError' {} a -> s {errorCode = a} :: FieldError)
+
+-- | The field identifier that caused the error.
+fieldError_id :: Lens.Lens' FieldError Prelude.Text
+fieldError_id = Lens.lens (\FieldError' {id} -> id) (\s@FieldError' {} a -> s {id = a} :: FieldError)
+
+instance Data.FromJSON FieldError where
+  parseJSON =
+    Data.withObject
+      "FieldError"
+      ( \x ->
+          FieldError'
+            Prelude.<$> (x Data..:? "message")
+            Prelude.<*> (x Data..: "errorCode")
+            Prelude.<*> (x Data..: "id")
+      )
+
+instance Prelude.Hashable FieldError where
+  hashWithSalt _salt FieldError' {..} =
+    _salt
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` errorCode
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData FieldError where
+  rnf FieldError' {..} =
+    Prelude.rnf message
+      `Prelude.seq` Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf id
diff --git a/gen/Amazonka/ConnectCases/Types/FieldFilter.hs b/gen/Amazonka/ConnectCases/Types/FieldFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/FieldFilter.hs
@@ -0,0 +1,134 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.FieldFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.FieldFilter where
+
+import Amazonka.ConnectCases.Types.FieldValue
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A filter for fields. Only one value can be provided.
+--
+-- /See:/ 'newFieldFilter' smart constructor.
+data FieldFilter = FieldFilter'
+  { -- | Object containing field identifier and value information.
+    contains :: Prelude.Maybe FieldValue,
+    -- | Object containing field identifier and value information.
+    equalTo :: Prelude.Maybe FieldValue,
+    -- | Object containing field identifier and value information.
+    greaterThan :: Prelude.Maybe FieldValue,
+    -- | Object containing field identifier and value information.
+    greaterThanOrEqualTo :: Prelude.Maybe FieldValue,
+    -- | Object containing field identifier and value information.
+    lessThan :: Prelude.Maybe FieldValue,
+    -- | Object containing field identifier and value information.
+    lessThanOrEqualTo :: Prelude.Maybe FieldValue
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FieldFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contains', 'fieldFilter_contains' - Object containing field identifier and value information.
+--
+-- 'equalTo', 'fieldFilter_equalTo' - Object containing field identifier and value information.
+--
+-- 'greaterThan', 'fieldFilter_greaterThan' - Object containing field identifier and value information.
+--
+-- 'greaterThanOrEqualTo', 'fieldFilter_greaterThanOrEqualTo' - Object containing field identifier and value information.
+--
+-- 'lessThan', 'fieldFilter_lessThan' - Object containing field identifier and value information.
+--
+-- 'lessThanOrEqualTo', 'fieldFilter_lessThanOrEqualTo' - Object containing field identifier and value information.
+newFieldFilter ::
+  FieldFilter
+newFieldFilter =
+  FieldFilter'
+    { contains = Prelude.Nothing,
+      equalTo = Prelude.Nothing,
+      greaterThan = Prelude.Nothing,
+      greaterThanOrEqualTo = Prelude.Nothing,
+      lessThan = Prelude.Nothing,
+      lessThanOrEqualTo = Prelude.Nothing
+    }
+
+-- | Object containing field identifier and value information.
+fieldFilter_contains :: Lens.Lens' FieldFilter (Prelude.Maybe FieldValue)
+fieldFilter_contains = Lens.lens (\FieldFilter' {contains} -> contains) (\s@FieldFilter' {} a -> s {contains = a} :: FieldFilter)
+
+-- | Object containing field identifier and value information.
+fieldFilter_equalTo :: Lens.Lens' FieldFilter (Prelude.Maybe FieldValue)
+fieldFilter_equalTo = Lens.lens (\FieldFilter' {equalTo} -> equalTo) (\s@FieldFilter' {} a -> s {equalTo = a} :: FieldFilter)
+
+-- | Object containing field identifier and value information.
+fieldFilter_greaterThan :: Lens.Lens' FieldFilter (Prelude.Maybe FieldValue)
+fieldFilter_greaterThan = Lens.lens (\FieldFilter' {greaterThan} -> greaterThan) (\s@FieldFilter' {} a -> s {greaterThan = a} :: FieldFilter)
+
+-- | Object containing field identifier and value information.
+fieldFilter_greaterThanOrEqualTo :: Lens.Lens' FieldFilter (Prelude.Maybe FieldValue)
+fieldFilter_greaterThanOrEqualTo = Lens.lens (\FieldFilter' {greaterThanOrEqualTo} -> greaterThanOrEqualTo) (\s@FieldFilter' {} a -> s {greaterThanOrEqualTo = a} :: FieldFilter)
+
+-- | Object containing field identifier and value information.
+fieldFilter_lessThan :: Lens.Lens' FieldFilter (Prelude.Maybe FieldValue)
+fieldFilter_lessThan = Lens.lens (\FieldFilter' {lessThan} -> lessThan) (\s@FieldFilter' {} a -> s {lessThan = a} :: FieldFilter)
+
+-- | Object containing field identifier and value information.
+fieldFilter_lessThanOrEqualTo :: Lens.Lens' FieldFilter (Prelude.Maybe FieldValue)
+fieldFilter_lessThanOrEqualTo = Lens.lens (\FieldFilter' {lessThanOrEqualTo} -> lessThanOrEqualTo) (\s@FieldFilter' {} a -> s {lessThanOrEqualTo = a} :: FieldFilter)
+
+instance Prelude.Hashable FieldFilter where
+  hashWithSalt _salt FieldFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` contains
+      `Prelude.hashWithSalt` equalTo
+      `Prelude.hashWithSalt` greaterThan
+      `Prelude.hashWithSalt` greaterThanOrEqualTo
+      `Prelude.hashWithSalt` lessThan
+      `Prelude.hashWithSalt` lessThanOrEqualTo
+
+instance Prelude.NFData FieldFilter where
+  rnf FieldFilter' {..} =
+    Prelude.rnf contains
+      `Prelude.seq` Prelude.rnf equalTo
+      `Prelude.seq` Prelude.rnf greaterThan
+      `Prelude.seq` Prelude.rnf greaterThanOrEqualTo
+      `Prelude.seq` Prelude.rnf lessThan
+      `Prelude.seq` Prelude.rnf lessThanOrEqualTo
+
+instance Data.ToJSON FieldFilter where
+  toJSON FieldFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("contains" Data..=) Prelude.<$> contains,
+            ("equalTo" Data..=) Prelude.<$> equalTo,
+            ("greaterThan" Data..=) Prelude.<$> greaterThan,
+            ("greaterThanOrEqualTo" Data..=)
+              Prelude.<$> greaterThanOrEqualTo,
+            ("lessThan" Data..=) Prelude.<$> lessThan,
+            ("lessThanOrEqualTo" Data..=)
+              Prelude.<$> lessThanOrEqualTo
+          ]
+      )
diff --git a/gen/Amazonka/ConnectCases/Types/FieldGroup.hs b/gen/Amazonka/ConnectCases/Types/FieldGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/FieldGroup.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.FieldGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.FieldGroup where
+
+import Amazonka.ConnectCases.Types.FieldItem
+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
+
+-- | Object for a group of fields and associated properties.
+--
+-- /See:/ 'newFieldGroup' smart constructor.
+data FieldGroup = FieldGroup'
+  { -- | Name of the field group.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Represents an ordered list containing field related information.
+    fields :: [FieldItem]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FieldGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'fieldGroup_name' - Name of the field group.
+--
+-- 'fields', 'fieldGroup_fields' - Represents an ordered list containing field related information.
+newFieldGroup ::
+  FieldGroup
+newFieldGroup =
+  FieldGroup'
+    { name = Prelude.Nothing,
+      fields = Prelude.mempty
+    }
+
+-- | Name of the field group.
+fieldGroup_name :: Lens.Lens' FieldGroup (Prelude.Maybe Prelude.Text)
+fieldGroup_name = Lens.lens (\FieldGroup' {name} -> name) (\s@FieldGroup' {} a -> s {name = a} :: FieldGroup)
+
+-- | Represents an ordered list containing field related information.
+fieldGroup_fields :: Lens.Lens' FieldGroup [FieldItem]
+fieldGroup_fields = Lens.lens (\FieldGroup' {fields} -> fields) (\s@FieldGroup' {} a -> s {fields = a} :: FieldGroup) Prelude.. Lens.coerced
+
+instance Data.FromJSON FieldGroup where
+  parseJSON =
+    Data.withObject
+      "FieldGroup"
+      ( \x ->
+          FieldGroup'
+            Prelude.<$> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "fields" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable FieldGroup where
+  hashWithSalt _salt FieldGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` fields
+
+instance Prelude.NFData FieldGroup where
+  rnf FieldGroup' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf fields
+
+instance Data.ToJSON FieldGroup where
+  toJSON FieldGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("name" Data..=) Prelude.<$> name,
+            Prelude.Just ("fields" Data..= fields)
+          ]
+      )
diff --git a/gen/Amazonka/ConnectCases/Types/FieldIdentifier.hs b/gen/Amazonka/ConnectCases/Types/FieldIdentifier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/FieldIdentifier.hs
@@ -0,0 +1,73 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.FieldIdentifier
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.FieldIdentifier 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
+
+-- | Object for unique identifier of a field.
+--
+-- /See:/ 'newFieldIdentifier' smart constructor.
+data FieldIdentifier = FieldIdentifier'
+  { -- | Unique identifier of a field.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FieldIdentifier' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'fieldIdentifier_id' - Unique identifier of a field.
+newFieldIdentifier ::
+  -- | 'id'
+  Prelude.Text ->
+  FieldIdentifier
+newFieldIdentifier pId_ = FieldIdentifier' {id = pId_}
+
+-- | Unique identifier of a field.
+fieldIdentifier_id :: Lens.Lens' FieldIdentifier Prelude.Text
+fieldIdentifier_id = Lens.lens (\FieldIdentifier' {id} -> id) (\s@FieldIdentifier' {} a -> s {id = a} :: FieldIdentifier)
+
+instance Data.FromJSON FieldIdentifier where
+  parseJSON =
+    Data.withObject
+      "FieldIdentifier"
+      ( \x ->
+          FieldIdentifier' Prelude.<$> (x Data..: "id")
+      )
+
+instance Prelude.Hashable FieldIdentifier where
+  hashWithSalt _salt FieldIdentifier' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData FieldIdentifier where
+  rnf FieldIdentifier' {..} = Prelude.rnf id
+
+instance Data.ToJSON FieldIdentifier where
+  toJSON FieldIdentifier' {..} =
+    Data.object
+      (Prelude.catMaybes [Prelude.Just ("id" Data..= id)])
diff --git a/gen/Amazonka/ConnectCases/Types/FieldItem.hs b/gen/Amazonka/ConnectCases/Types/FieldItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/FieldItem.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.FieldItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.FieldItem 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
+
+-- | Object for field related information.
+--
+-- /See:/ 'newFieldItem' smart constructor.
+data FieldItem = FieldItem'
+  { -- | Unique identifier of a field.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FieldItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'fieldItem_id' - Unique identifier of a field.
+newFieldItem ::
+  -- | 'id'
+  Prelude.Text ->
+  FieldItem
+newFieldItem pId_ = FieldItem' {id = pId_}
+
+-- | Unique identifier of a field.
+fieldItem_id :: Lens.Lens' FieldItem Prelude.Text
+fieldItem_id = Lens.lens (\FieldItem' {id} -> id) (\s@FieldItem' {} a -> s {id = a} :: FieldItem)
+
+instance Data.FromJSON FieldItem where
+  parseJSON =
+    Data.withObject
+      "FieldItem"
+      (\x -> FieldItem' Prelude.<$> (x Data..: "id"))
+
+instance Prelude.Hashable FieldItem where
+  hashWithSalt _salt FieldItem' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData FieldItem where
+  rnf FieldItem' {..} = Prelude.rnf id
+
+instance Data.ToJSON FieldItem where
+  toJSON FieldItem' {..} =
+    Data.object
+      (Prelude.catMaybes [Prelude.Just ("id" Data..= id)])
diff --git a/gen/Amazonka/ConnectCases/Types/FieldNamespace.hs b/gen/Amazonka/ConnectCases/Types/FieldNamespace.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/FieldNamespace.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.ConnectCases.Types.FieldNamespace
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.FieldNamespace
+  ( FieldNamespace
+      ( ..,
+        FieldNamespace_Custom,
+        FieldNamespace_System
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FieldNamespace = FieldNamespace'
+  { fromFieldNamespace ::
+      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 FieldNamespace_Custom :: FieldNamespace
+pattern FieldNamespace_Custom = FieldNamespace' "Custom"
+
+pattern FieldNamespace_System :: FieldNamespace
+pattern FieldNamespace_System = FieldNamespace' "System"
+
+{-# COMPLETE
+  FieldNamespace_Custom,
+  FieldNamespace_System,
+  FieldNamespace'
+  #-}
diff --git a/gen/Amazonka/ConnectCases/Types/FieldOption.hs b/gen/Amazonka/ConnectCases/Types/FieldOption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/FieldOption.hs
@@ -0,0 +1,115 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.FieldOption
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.FieldOption 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
+
+-- | Object for field Options information.
+--
+-- /See:/ 'newFieldOption' smart constructor.
+data FieldOption = FieldOption'
+  { -- | Describes whether the @FieldOption@ is active (displayed) or inactive.
+    active :: Prelude.Bool,
+    -- | @FieldOptionName@ has max length 100 and disallows trailing spaces.
+    name :: Prelude.Text,
+    -- | @FieldOptionValue@ has max length 100 and must be alphanumeric with
+    -- hyphens and underscores.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FieldOption' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'active', 'fieldOption_active' - Describes whether the @FieldOption@ is active (displayed) or inactive.
+--
+-- 'name', 'fieldOption_name' - @FieldOptionName@ has max length 100 and disallows trailing spaces.
+--
+-- 'value', 'fieldOption_value' - @FieldOptionValue@ has max length 100 and must be alphanumeric with
+-- hyphens and underscores.
+newFieldOption ::
+  -- | 'active'
+  Prelude.Bool ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'value'
+  Prelude.Text ->
+  FieldOption
+newFieldOption pActive_ pName_ pValue_ =
+  FieldOption'
+    { active = pActive_,
+      name = pName_,
+      value = pValue_
+    }
+
+-- | Describes whether the @FieldOption@ is active (displayed) or inactive.
+fieldOption_active :: Lens.Lens' FieldOption Prelude.Bool
+fieldOption_active = Lens.lens (\FieldOption' {active} -> active) (\s@FieldOption' {} a -> s {active = a} :: FieldOption)
+
+-- | @FieldOptionName@ has max length 100 and disallows trailing spaces.
+fieldOption_name :: Lens.Lens' FieldOption Prelude.Text
+fieldOption_name = Lens.lens (\FieldOption' {name} -> name) (\s@FieldOption' {} a -> s {name = a} :: FieldOption)
+
+-- | @FieldOptionValue@ has max length 100 and must be alphanumeric with
+-- hyphens and underscores.
+fieldOption_value :: Lens.Lens' FieldOption Prelude.Text
+fieldOption_value = Lens.lens (\FieldOption' {value} -> value) (\s@FieldOption' {} a -> s {value = a} :: FieldOption)
+
+instance Data.FromJSON FieldOption where
+  parseJSON =
+    Data.withObject
+      "FieldOption"
+      ( \x ->
+          FieldOption'
+            Prelude.<$> (x Data..: "active")
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..: "value")
+      )
+
+instance Prelude.Hashable FieldOption where
+  hashWithSalt _salt FieldOption' {..} =
+    _salt
+      `Prelude.hashWithSalt` active
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData FieldOption where
+  rnf FieldOption' {..} =
+    Prelude.rnf active
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON FieldOption where
+  toJSON FieldOption' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("active" Data..= active),
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/ConnectCases/Types/FieldOptionError.hs b/gen/Amazonka/ConnectCases/Types/FieldOptionError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/FieldOptionError.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.FieldOptionError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.FieldOptionError 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
+
+-- | Object for field Options errors.
+--
+-- /See:/ 'newFieldOptionError' smart constructor.
+data FieldOptionError = FieldOptionError'
+  { -- | Error code from creating or updating field option.
+    errorCode :: Prelude.Text,
+    -- | Error message from creating or updating field option.
+    message :: Prelude.Text,
+    -- | The field option value that caused the error.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FieldOptionError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errorCode', 'fieldOptionError_errorCode' - Error code from creating or updating field option.
+--
+-- 'message', 'fieldOptionError_message' - Error message from creating or updating field option.
+--
+-- 'value', 'fieldOptionError_value' - The field option value that caused the error.
+newFieldOptionError ::
+  -- | 'errorCode'
+  Prelude.Text ->
+  -- | 'message'
+  Prelude.Text ->
+  -- | 'value'
+  Prelude.Text ->
+  FieldOptionError
+newFieldOptionError pErrorCode_ pMessage_ pValue_ =
+  FieldOptionError'
+    { errorCode = pErrorCode_,
+      message = pMessage_,
+      value = pValue_
+    }
+
+-- | Error code from creating or updating field option.
+fieldOptionError_errorCode :: Lens.Lens' FieldOptionError Prelude.Text
+fieldOptionError_errorCode = Lens.lens (\FieldOptionError' {errorCode} -> errorCode) (\s@FieldOptionError' {} a -> s {errorCode = a} :: FieldOptionError)
+
+-- | Error message from creating or updating field option.
+fieldOptionError_message :: Lens.Lens' FieldOptionError Prelude.Text
+fieldOptionError_message = Lens.lens (\FieldOptionError' {message} -> message) (\s@FieldOptionError' {} a -> s {message = a} :: FieldOptionError)
+
+-- | The field option value that caused the error.
+fieldOptionError_value :: Lens.Lens' FieldOptionError Prelude.Text
+fieldOptionError_value = Lens.lens (\FieldOptionError' {value} -> value) (\s@FieldOptionError' {} a -> s {value = a} :: FieldOptionError)
+
+instance Data.FromJSON FieldOptionError where
+  parseJSON =
+    Data.withObject
+      "FieldOptionError"
+      ( \x ->
+          FieldOptionError'
+            Prelude.<$> (x Data..: "errorCode")
+            Prelude.<*> (x Data..: "message")
+            Prelude.<*> (x Data..: "value")
+      )
+
+instance Prelude.Hashable FieldOptionError where
+  hashWithSalt _salt FieldOptionError' {..} =
+    _salt
+      `Prelude.hashWithSalt` errorCode
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData FieldOptionError where
+  rnf FieldOptionError' {..} =
+    Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf value
diff --git a/gen/Amazonka/ConnectCases/Types/FieldSummary.hs b/gen/Amazonka/ConnectCases/Types/FieldSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/FieldSummary.hs
@@ -0,0 +1,137 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.FieldSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.FieldSummary where
+
+import Amazonka.ConnectCases.Types.FieldNamespace
+import Amazonka.ConnectCases.Types.FieldType
+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
+
+-- | Object for the summarized details of the field.
+--
+-- /See:/ 'newFieldSummary' smart constructor.
+data FieldSummary = FieldSummary'
+  { -- | The Amazon Resource Name (ARN) of the field.
+    fieldArn :: Prelude.Text,
+    -- | The unique identifier of a field.
+    fieldId :: Prelude.Text,
+    -- | Name of the field.
+    name :: Prelude.Text,
+    -- | The namespace of a field.
+    namespace :: FieldNamespace,
+    -- | The type of a field.
+    type' :: FieldType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FieldSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fieldArn', 'fieldSummary_fieldArn' - The Amazon Resource Name (ARN) of the field.
+--
+-- 'fieldId', 'fieldSummary_fieldId' - The unique identifier of a field.
+--
+-- 'name', 'fieldSummary_name' - Name of the field.
+--
+-- 'namespace', 'fieldSummary_namespace' - The namespace of a field.
+--
+-- 'type'', 'fieldSummary_type' - The type of a field.
+newFieldSummary ::
+  -- | 'fieldArn'
+  Prelude.Text ->
+  -- | 'fieldId'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'namespace'
+  FieldNamespace ->
+  -- | 'type''
+  FieldType ->
+  FieldSummary
+newFieldSummary
+  pFieldArn_
+  pFieldId_
+  pName_
+  pNamespace_
+  pType_ =
+    FieldSummary'
+      { fieldArn = pFieldArn_,
+        fieldId = pFieldId_,
+        name = pName_,
+        namespace = pNamespace_,
+        type' = pType_
+      }
+
+-- | The Amazon Resource Name (ARN) of the field.
+fieldSummary_fieldArn :: Lens.Lens' FieldSummary Prelude.Text
+fieldSummary_fieldArn = Lens.lens (\FieldSummary' {fieldArn} -> fieldArn) (\s@FieldSummary' {} a -> s {fieldArn = a} :: FieldSummary)
+
+-- | The unique identifier of a field.
+fieldSummary_fieldId :: Lens.Lens' FieldSummary Prelude.Text
+fieldSummary_fieldId = Lens.lens (\FieldSummary' {fieldId} -> fieldId) (\s@FieldSummary' {} a -> s {fieldId = a} :: FieldSummary)
+
+-- | Name of the field.
+fieldSummary_name :: Lens.Lens' FieldSummary Prelude.Text
+fieldSummary_name = Lens.lens (\FieldSummary' {name} -> name) (\s@FieldSummary' {} a -> s {name = a} :: FieldSummary)
+
+-- | The namespace of a field.
+fieldSummary_namespace :: Lens.Lens' FieldSummary FieldNamespace
+fieldSummary_namespace = Lens.lens (\FieldSummary' {namespace} -> namespace) (\s@FieldSummary' {} a -> s {namespace = a} :: FieldSummary)
+
+-- | The type of a field.
+fieldSummary_type :: Lens.Lens' FieldSummary FieldType
+fieldSummary_type = Lens.lens (\FieldSummary' {type'} -> type') (\s@FieldSummary' {} a -> s {type' = a} :: FieldSummary)
+
+instance Data.FromJSON FieldSummary where
+  parseJSON =
+    Data.withObject
+      "FieldSummary"
+      ( \x ->
+          FieldSummary'
+            Prelude.<$> (x Data..: "fieldArn")
+            Prelude.<*> (x Data..: "fieldId")
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..: "namespace")
+            Prelude.<*> (x Data..: "type")
+      )
+
+instance Prelude.Hashable FieldSummary where
+  hashWithSalt _salt FieldSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` fieldArn
+      `Prelude.hashWithSalt` fieldId
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` namespace
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData FieldSummary where
+  rnf FieldSummary' {..} =
+    Prelude.rnf fieldArn
+      `Prelude.seq` Prelude.rnf fieldId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf namespace
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/ConnectCases/Types/FieldType.hs b/gen/Amazonka/ConnectCases/Types/FieldType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/FieldType.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.FieldType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.FieldType
+  ( FieldType
+      ( ..,
+        FieldType_Boolean,
+        FieldType_DateTime,
+        FieldType_Number,
+        FieldType_SingleSelect,
+        FieldType_Text
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FieldType = FieldType'
+  { fromFieldType ::
+      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 FieldType_Boolean :: FieldType
+pattern FieldType_Boolean = FieldType' "Boolean"
+
+pattern FieldType_DateTime :: FieldType
+pattern FieldType_DateTime = FieldType' "DateTime"
+
+pattern FieldType_Number :: FieldType
+pattern FieldType_Number = FieldType' "Number"
+
+pattern FieldType_SingleSelect :: FieldType
+pattern FieldType_SingleSelect = FieldType' "SingleSelect"
+
+pattern FieldType_Text :: FieldType
+pattern FieldType_Text = FieldType' "Text"
+
+{-# COMPLETE
+  FieldType_Boolean,
+  FieldType_DateTime,
+  FieldType_Number,
+  FieldType_SingleSelect,
+  FieldType_Text,
+  FieldType'
+  #-}
diff --git a/gen/Amazonka/ConnectCases/Types/FieldValue.hs b/gen/Amazonka/ConnectCases/Types/FieldValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/FieldValue.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.FieldValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.FieldValue where
+
+import Amazonka.ConnectCases.Types.FieldValueUnion
+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
+
+-- | Object for case field values.
+--
+-- /See:/ 'newFieldValue' smart constructor.
+data FieldValue = FieldValue'
+  { -- | Unique identifier of a field.
+    id :: Prelude.Text,
+    -- | Union of potential field value types.
+    value :: FieldValueUnion
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FieldValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'fieldValue_id' - Unique identifier of a field.
+--
+-- 'value', 'fieldValue_value' - Union of potential field value types.
+newFieldValue ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'value'
+  FieldValueUnion ->
+  FieldValue
+newFieldValue pId_ pValue_ =
+  FieldValue' {id = pId_, value = pValue_}
+
+-- | Unique identifier of a field.
+fieldValue_id :: Lens.Lens' FieldValue Prelude.Text
+fieldValue_id = Lens.lens (\FieldValue' {id} -> id) (\s@FieldValue' {} a -> s {id = a} :: FieldValue)
+
+-- | Union of potential field value types.
+fieldValue_value :: Lens.Lens' FieldValue FieldValueUnion
+fieldValue_value = Lens.lens (\FieldValue' {value} -> value) (\s@FieldValue' {} a -> s {value = a} :: FieldValue)
+
+instance Data.FromJSON FieldValue where
+  parseJSON =
+    Data.withObject
+      "FieldValue"
+      ( \x ->
+          FieldValue'
+            Prelude.<$> (x Data..: "id")
+            Prelude.<*> (x Data..: "value")
+      )
+
+instance Prelude.Hashable FieldValue where
+  hashWithSalt _salt FieldValue' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData FieldValue where
+  rnf FieldValue' {..} =
+    Prelude.rnf id `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON FieldValue where
+  toJSON FieldValue' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("id" Data..= id),
+            Prelude.Just ("value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/ConnectCases/Types/FieldValueUnion.hs b/gen/Amazonka/ConnectCases/Types/FieldValueUnion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/FieldValueUnion.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.ConnectCases.Types.FieldValueUnion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.FieldValueUnion 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
+
+-- | Object to store union of Field values.
+--
+-- /See:/ 'newFieldValueUnion' smart constructor.
+data FieldValueUnion = FieldValueUnion'
+  { -- | Can be either null, or have a Boolean value type. Only one value can be
+    -- provided.
+    booleanValue :: Prelude.Maybe Prelude.Bool,
+    -- | Can be either null, or have a Double number value type. Only one value
+    -- can be provided.
+    doubleValue :: Prelude.Maybe Prelude.Double,
+    -- | String value type.
+    stringValue :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FieldValueUnion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'booleanValue', 'fieldValueUnion_booleanValue' - Can be either null, or have a Boolean value type. Only one value can be
+-- provided.
+--
+-- 'doubleValue', 'fieldValueUnion_doubleValue' - Can be either null, or have a Double number value type. Only one value
+-- can be provided.
+--
+-- 'stringValue', 'fieldValueUnion_stringValue' - String value type.
+newFieldValueUnion ::
+  FieldValueUnion
+newFieldValueUnion =
+  FieldValueUnion'
+    { booleanValue = Prelude.Nothing,
+      doubleValue = Prelude.Nothing,
+      stringValue = Prelude.Nothing
+    }
+
+-- | Can be either null, or have a Boolean value type. Only one value can be
+-- provided.
+fieldValueUnion_booleanValue :: Lens.Lens' FieldValueUnion (Prelude.Maybe Prelude.Bool)
+fieldValueUnion_booleanValue = Lens.lens (\FieldValueUnion' {booleanValue} -> booleanValue) (\s@FieldValueUnion' {} a -> s {booleanValue = a} :: FieldValueUnion)
+
+-- | Can be either null, or have a Double number value type. Only one value
+-- can be provided.
+fieldValueUnion_doubleValue :: Lens.Lens' FieldValueUnion (Prelude.Maybe Prelude.Double)
+fieldValueUnion_doubleValue = Lens.lens (\FieldValueUnion' {doubleValue} -> doubleValue) (\s@FieldValueUnion' {} a -> s {doubleValue = a} :: FieldValueUnion)
+
+-- | String value type.
+fieldValueUnion_stringValue :: Lens.Lens' FieldValueUnion (Prelude.Maybe Prelude.Text)
+fieldValueUnion_stringValue = Lens.lens (\FieldValueUnion' {stringValue} -> stringValue) (\s@FieldValueUnion' {} a -> s {stringValue = a} :: FieldValueUnion)
+
+instance Data.FromJSON FieldValueUnion where
+  parseJSON =
+    Data.withObject
+      "FieldValueUnion"
+      ( \x ->
+          FieldValueUnion'
+            Prelude.<$> (x Data..:? "booleanValue")
+            Prelude.<*> (x Data..:? "doubleValue")
+            Prelude.<*> (x Data..:? "stringValue")
+      )
+
+instance Prelude.Hashable FieldValueUnion where
+  hashWithSalt _salt FieldValueUnion' {..} =
+    _salt
+      `Prelude.hashWithSalt` booleanValue
+      `Prelude.hashWithSalt` doubleValue
+      `Prelude.hashWithSalt` stringValue
+
+instance Prelude.NFData FieldValueUnion where
+  rnf FieldValueUnion' {..} =
+    Prelude.rnf booleanValue
+      `Prelude.seq` Prelude.rnf doubleValue
+      `Prelude.seq` Prelude.rnf stringValue
+
+instance Data.ToJSON FieldValueUnion where
+  toJSON FieldValueUnion' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("booleanValue" Data..=) Prelude.<$> booleanValue,
+            ("doubleValue" Data..=) Prelude.<$> doubleValue,
+            ("stringValue" Data..=) Prelude.<$> stringValue
+          ]
+      )
diff --git a/gen/Amazonka/ConnectCases/Types/GetFieldResponse.hs b/gen/Amazonka/ConnectCases/Types/GetFieldResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/GetFieldResponse.hs
@@ -0,0 +1,164 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.GetFieldResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.GetFieldResponse where
+
+import Amazonka.ConnectCases.Types.FieldNamespace
+import Amazonka.ConnectCases.Types.FieldType
+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
+
+-- | Object to store detailed field information.
+--
+-- /See:/ 'newGetFieldResponse' smart constructor.
+data GetFieldResponse = GetFieldResponse'
+  { -- | Description of the field.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A map of of key-value pairs that represent tags on a resource. Tags are
+    -- 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 field.
+    fieldArn :: Prelude.Text,
+    -- | Unique identifier of the field.
+    fieldId :: Prelude.Text,
+    -- | Name of the field.
+    name :: Prelude.Text,
+    -- | Namespace of the field.
+    namespace :: FieldNamespace,
+    -- | Type of the field.
+    type' :: FieldType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetFieldResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getFieldResponse_description' - Description of the field.
+--
+-- 'tags', 'getFieldResponse_tags' - A map of of key-value pairs that represent tags on a resource. Tags are
+-- used to organize, track, or control access for this resource.
+--
+-- 'fieldArn', 'getFieldResponse_fieldArn' - The Amazon Resource Name (ARN) of the field.
+--
+-- 'fieldId', 'getFieldResponse_fieldId' - Unique identifier of the field.
+--
+-- 'name', 'getFieldResponse_name' - Name of the field.
+--
+-- 'namespace', 'getFieldResponse_namespace' - Namespace of the field.
+--
+-- 'type'', 'getFieldResponse_type' - Type of the field.
+newGetFieldResponse ::
+  -- | 'fieldArn'
+  Prelude.Text ->
+  -- | 'fieldId'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'namespace'
+  FieldNamespace ->
+  -- | 'type''
+  FieldType ->
+  GetFieldResponse
+newGetFieldResponse
+  pFieldArn_
+  pFieldId_
+  pName_
+  pNamespace_
+  pType_ =
+    GetFieldResponse'
+      { description = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        fieldArn = pFieldArn_,
+        fieldId = pFieldId_,
+        name = pName_,
+        namespace = pNamespace_,
+        type' = pType_
+      }
+
+-- | Description of the field.
+getFieldResponse_description :: Lens.Lens' GetFieldResponse (Prelude.Maybe Prelude.Text)
+getFieldResponse_description = Lens.lens (\GetFieldResponse' {description} -> description) (\s@GetFieldResponse' {} a -> s {description = a} :: GetFieldResponse)
+
+-- | A map of of key-value pairs that represent tags on a resource. Tags are
+-- used to organize, track, or control access for this resource.
+getFieldResponse_tags :: Lens.Lens' GetFieldResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getFieldResponse_tags = Lens.lens (\GetFieldResponse' {tags} -> tags) (\s@GetFieldResponse' {} a -> s {tags = a} :: GetFieldResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the field.
+getFieldResponse_fieldArn :: Lens.Lens' GetFieldResponse Prelude.Text
+getFieldResponse_fieldArn = Lens.lens (\GetFieldResponse' {fieldArn} -> fieldArn) (\s@GetFieldResponse' {} a -> s {fieldArn = a} :: GetFieldResponse)
+
+-- | Unique identifier of the field.
+getFieldResponse_fieldId :: Lens.Lens' GetFieldResponse Prelude.Text
+getFieldResponse_fieldId = Lens.lens (\GetFieldResponse' {fieldId} -> fieldId) (\s@GetFieldResponse' {} a -> s {fieldId = a} :: GetFieldResponse)
+
+-- | Name of the field.
+getFieldResponse_name :: Lens.Lens' GetFieldResponse Prelude.Text
+getFieldResponse_name = Lens.lens (\GetFieldResponse' {name} -> name) (\s@GetFieldResponse' {} a -> s {name = a} :: GetFieldResponse)
+
+-- | Namespace of the field.
+getFieldResponse_namespace :: Lens.Lens' GetFieldResponse FieldNamespace
+getFieldResponse_namespace = Lens.lens (\GetFieldResponse' {namespace} -> namespace) (\s@GetFieldResponse' {} a -> s {namespace = a} :: GetFieldResponse)
+
+-- | Type of the field.
+getFieldResponse_type :: Lens.Lens' GetFieldResponse FieldType
+getFieldResponse_type = Lens.lens (\GetFieldResponse' {type'} -> type') (\s@GetFieldResponse' {} a -> s {type' = a} :: GetFieldResponse)
+
+instance Data.FromJSON GetFieldResponse where
+  parseJSON =
+    Data.withObject
+      "GetFieldResponse"
+      ( \x ->
+          GetFieldResponse'
+            Prelude.<$> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "fieldArn")
+            Prelude.<*> (x Data..: "fieldId")
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..: "namespace")
+            Prelude.<*> (x Data..: "type")
+      )
+
+instance Prelude.Hashable GetFieldResponse where
+  hashWithSalt _salt GetFieldResponse' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` fieldArn
+      `Prelude.hashWithSalt` fieldId
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` namespace
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData GetFieldResponse where
+  rnf GetFieldResponse' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf fieldArn
+      `Prelude.seq` Prelude.rnf fieldId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf namespace
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/ConnectCases/Types/LayoutConfiguration.hs b/gen/Amazonka/ConnectCases/Types/LayoutConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/LayoutConfiguration.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.LayoutConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.LayoutConfiguration 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
+
+-- | Object to store configuration of layouts associated to the template.
+--
+-- /See:/ 'newLayoutConfiguration' smart constructor.
+data LayoutConfiguration = LayoutConfiguration'
+  { -- | Unique identifier of a layout.
+    defaultLayout :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LayoutConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'defaultLayout', 'layoutConfiguration_defaultLayout' - Unique identifier of a layout.
+newLayoutConfiguration ::
+  LayoutConfiguration
+newLayoutConfiguration =
+  LayoutConfiguration'
+    { defaultLayout =
+        Prelude.Nothing
+    }
+
+-- | Unique identifier of a layout.
+layoutConfiguration_defaultLayout :: Lens.Lens' LayoutConfiguration (Prelude.Maybe Prelude.Text)
+layoutConfiguration_defaultLayout = Lens.lens (\LayoutConfiguration' {defaultLayout} -> defaultLayout) (\s@LayoutConfiguration' {} a -> s {defaultLayout = a} :: LayoutConfiguration)
+
+instance Data.FromJSON LayoutConfiguration where
+  parseJSON =
+    Data.withObject
+      "LayoutConfiguration"
+      ( \x ->
+          LayoutConfiguration'
+            Prelude.<$> (x Data..:? "defaultLayout")
+      )
+
+instance Prelude.Hashable LayoutConfiguration where
+  hashWithSalt _salt LayoutConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` defaultLayout
+
+instance Prelude.NFData LayoutConfiguration where
+  rnf LayoutConfiguration' {..} =
+    Prelude.rnf defaultLayout
+
+instance Data.ToJSON LayoutConfiguration where
+  toJSON LayoutConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("defaultLayout" Data..=)
+              Prelude.<$> defaultLayout
+          ]
+      )
diff --git a/gen/Amazonka/ConnectCases/Types/LayoutContent.hs b/gen/Amazonka/ConnectCases/Types/LayoutContent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/LayoutContent.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.LayoutContent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.LayoutContent where
+
+import Amazonka.ConnectCases.Types.BasicLayout
+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
+
+-- | Object to store union of different versions of layout content.
+--
+-- /See:/ 'newLayoutContent' smart constructor.
+data LayoutContent = LayoutContent'
+  { -- | Content specific to @BasicLayout@ type. It configures fields in the top
+    -- panel and More Info tab of Cases user interface.
+    basic :: Prelude.Maybe BasicLayout
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LayoutContent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'basic', 'layoutContent_basic' - Content specific to @BasicLayout@ type. It configures fields in the top
+-- panel and More Info tab of Cases user interface.
+newLayoutContent ::
+  LayoutContent
+newLayoutContent =
+  LayoutContent' {basic = Prelude.Nothing}
+
+-- | Content specific to @BasicLayout@ type. It configures fields in the top
+-- panel and More Info tab of Cases user interface.
+layoutContent_basic :: Lens.Lens' LayoutContent (Prelude.Maybe BasicLayout)
+layoutContent_basic = Lens.lens (\LayoutContent' {basic} -> basic) (\s@LayoutContent' {} a -> s {basic = a} :: LayoutContent)
+
+instance Data.FromJSON LayoutContent where
+  parseJSON =
+    Data.withObject
+      "LayoutContent"
+      ( \x ->
+          LayoutContent' Prelude.<$> (x Data..:? "basic")
+      )
+
+instance Prelude.Hashable LayoutContent where
+  hashWithSalt _salt LayoutContent' {..} =
+    _salt `Prelude.hashWithSalt` basic
+
+instance Prelude.NFData LayoutContent where
+  rnf LayoutContent' {..} = Prelude.rnf basic
+
+instance Data.ToJSON LayoutContent where
+  toJSON LayoutContent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("basic" Data..=) Prelude.<$> basic]
+      )
diff --git a/gen/Amazonka/ConnectCases/Types/LayoutSections.hs b/gen/Amazonka/ConnectCases/Types/LayoutSections.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/LayoutSections.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.ConnectCases.Types.LayoutSections
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.LayoutSections where
+
+import Amazonka.ConnectCases.Types.Section
+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
+
+-- | Ordered list containing different kinds of sections that can be added. A
+-- LayoutSections object can only contain one section.
+--
+-- /See:/ 'newLayoutSections' smart constructor.
+data LayoutSections = LayoutSections'
+  { sections :: Prelude.Maybe [Section]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LayoutSections' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sections', 'layoutSections_sections' - Undocumented member.
+newLayoutSections ::
+  LayoutSections
+newLayoutSections =
+  LayoutSections' {sections = Prelude.Nothing}
+
+-- | Undocumented member.
+layoutSections_sections :: Lens.Lens' LayoutSections (Prelude.Maybe [Section])
+layoutSections_sections = Lens.lens (\LayoutSections' {sections} -> sections) (\s@LayoutSections' {} a -> s {sections = a} :: LayoutSections) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON LayoutSections where
+  parseJSON =
+    Data.withObject
+      "LayoutSections"
+      ( \x ->
+          LayoutSections'
+            Prelude.<$> (x Data..:? "sections" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable LayoutSections where
+  hashWithSalt _salt LayoutSections' {..} =
+    _salt `Prelude.hashWithSalt` sections
+
+instance Prelude.NFData LayoutSections where
+  rnf LayoutSections' {..} = Prelude.rnf sections
+
+instance Data.ToJSON LayoutSections where
+  toJSON LayoutSections' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("sections" Data..=) Prelude.<$> sections]
+      )
diff --git a/gen/Amazonka/ConnectCases/Types/LayoutSummary.hs b/gen/Amazonka/ConnectCases/Types/LayoutSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/LayoutSummary.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.LayoutSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.LayoutSummary 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
+
+-- | Object for the summarized details of the layout.
+--
+-- /See:/ 'newLayoutSummary' smart constructor.
+data LayoutSummary = LayoutSummary'
+  { -- | The Amazon Resource Name (ARN) of the layout.
+    layoutArn :: Prelude.Text,
+    -- | The unique identifier for of the layout.
+    layoutId :: Prelude.Text,
+    -- | The name of the layout.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LayoutSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'layoutArn', 'layoutSummary_layoutArn' - The Amazon Resource Name (ARN) of the layout.
+--
+-- 'layoutId', 'layoutSummary_layoutId' - The unique identifier for of the layout.
+--
+-- 'name', 'layoutSummary_name' - The name of the layout.
+newLayoutSummary ::
+  -- | 'layoutArn'
+  Prelude.Text ->
+  -- | 'layoutId'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  LayoutSummary
+newLayoutSummary pLayoutArn_ pLayoutId_ pName_ =
+  LayoutSummary'
+    { layoutArn = pLayoutArn_,
+      layoutId = pLayoutId_,
+      name = pName_
+    }
+
+-- | The Amazon Resource Name (ARN) of the layout.
+layoutSummary_layoutArn :: Lens.Lens' LayoutSummary Prelude.Text
+layoutSummary_layoutArn = Lens.lens (\LayoutSummary' {layoutArn} -> layoutArn) (\s@LayoutSummary' {} a -> s {layoutArn = a} :: LayoutSummary)
+
+-- | The unique identifier for of the layout.
+layoutSummary_layoutId :: Lens.Lens' LayoutSummary Prelude.Text
+layoutSummary_layoutId = Lens.lens (\LayoutSummary' {layoutId} -> layoutId) (\s@LayoutSummary' {} a -> s {layoutId = a} :: LayoutSummary)
+
+-- | The name of the layout.
+layoutSummary_name :: Lens.Lens' LayoutSummary Prelude.Text
+layoutSummary_name = Lens.lens (\LayoutSummary' {name} -> name) (\s@LayoutSummary' {} a -> s {name = a} :: LayoutSummary)
+
+instance Data.FromJSON LayoutSummary where
+  parseJSON =
+    Data.withObject
+      "LayoutSummary"
+      ( \x ->
+          LayoutSummary'
+            Prelude.<$> (x Data..: "layoutArn")
+            Prelude.<*> (x Data..: "layoutId")
+            Prelude.<*> (x Data..: "name")
+      )
+
+instance Prelude.Hashable LayoutSummary where
+  hashWithSalt _salt LayoutSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` layoutArn
+      `Prelude.hashWithSalt` layoutId
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData LayoutSummary where
+  rnf LayoutSummary' {..} =
+    Prelude.rnf layoutArn
+      `Prelude.seq` Prelude.rnf layoutId
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/ConnectCases/Types/Order.hs b/gen/Amazonka/ConnectCases/Types/Order.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/Order.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.Order
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.Order
+  ( Order
+      ( ..,
+        Order_Asc,
+        Order_Desc
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Order = Order' {fromOrder :: Data.Text}
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern Order_Asc :: Order
+pattern Order_Asc = Order' "Asc"
+
+pattern Order_Desc :: Order
+pattern Order_Desc = Order' "Desc"
+
+{-# COMPLETE
+  Order_Asc,
+  Order_Desc,
+  Order'
+  #-}
diff --git a/gen/Amazonka/ConnectCases/Types/RelatedItemContent.hs b/gen/Amazonka/ConnectCases/Types/RelatedItemContent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/RelatedItemContent.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.RelatedItemContent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.RelatedItemContent where
+
+import Amazonka.ConnectCases.Types.CommentContent
+import Amazonka.ConnectCases.Types.ContactContent
+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
+
+-- | Represents the content of a particular type of related item.
+--
+-- /See:/ 'newRelatedItemContent' smart constructor.
+data RelatedItemContent = RelatedItemContent'
+  { -- | Represents the content of a comment to be returned to agents.
+    comment :: Prelude.Maybe CommentContent,
+    -- | Represents the content of a contact to be returned to agents.
+    contact :: Prelude.Maybe ContactContent
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RelatedItemContent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'comment', 'relatedItemContent_comment' - Represents the content of a comment to be returned to agents.
+--
+-- 'contact', 'relatedItemContent_contact' - Represents the content of a contact to be returned to agents.
+newRelatedItemContent ::
+  RelatedItemContent
+newRelatedItemContent =
+  RelatedItemContent'
+    { comment = Prelude.Nothing,
+      contact = Prelude.Nothing
+    }
+
+-- | Represents the content of a comment to be returned to agents.
+relatedItemContent_comment :: Lens.Lens' RelatedItemContent (Prelude.Maybe CommentContent)
+relatedItemContent_comment = Lens.lens (\RelatedItemContent' {comment} -> comment) (\s@RelatedItemContent' {} a -> s {comment = a} :: RelatedItemContent)
+
+-- | Represents the content of a contact to be returned to agents.
+relatedItemContent_contact :: Lens.Lens' RelatedItemContent (Prelude.Maybe ContactContent)
+relatedItemContent_contact = Lens.lens (\RelatedItemContent' {contact} -> contact) (\s@RelatedItemContent' {} a -> s {contact = a} :: RelatedItemContent)
+
+instance Data.FromJSON RelatedItemContent where
+  parseJSON =
+    Data.withObject
+      "RelatedItemContent"
+      ( \x ->
+          RelatedItemContent'
+            Prelude.<$> (x Data..:? "comment")
+            Prelude.<*> (x Data..:? "contact")
+      )
+
+instance Prelude.Hashable RelatedItemContent where
+  hashWithSalt _salt RelatedItemContent' {..} =
+    _salt
+      `Prelude.hashWithSalt` comment
+      `Prelude.hashWithSalt` contact
+
+instance Prelude.NFData RelatedItemContent where
+  rnf RelatedItemContent' {..} =
+    Prelude.rnf comment
+      `Prelude.seq` Prelude.rnf contact
diff --git a/gen/Amazonka/ConnectCases/Types/RelatedItemEventIncludedData.hs b/gen/Amazonka/ConnectCases/Types/RelatedItemEventIncludedData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/RelatedItemEventIncludedData.hs
@@ -0,0 +1,90 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.RelatedItemEventIncludedData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.RelatedItemEventIncludedData 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
+
+-- | Details of what related item data is published through the case event
+-- stream.
+--
+-- /See:/ 'newRelatedItemEventIncludedData' smart constructor.
+data RelatedItemEventIncludedData = RelatedItemEventIncludedData'
+  { -- | Details of what related item data is published through the case event
+    -- stream.
+    includeContent :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RelatedItemEventIncludedData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'includeContent', 'relatedItemEventIncludedData_includeContent' - Details of what related item data is published through the case event
+-- stream.
+newRelatedItemEventIncludedData ::
+  -- | 'includeContent'
+  Prelude.Bool ->
+  RelatedItemEventIncludedData
+newRelatedItemEventIncludedData pIncludeContent_ =
+  RelatedItemEventIncludedData'
+    { includeContent =
+        pIncludeContent_
+    }
+
+-- | Details of what related item data is published through the case event
+-- stream.
+relatedItemEventIncludedData_includeContent :: Lens.Lens' RelatedItemEventIncludedData Prelude.Bool
+relatedItemEventIncludedData_includeContent = Lens.lens (\RelatedItemEventIncludedData' {includeContent} -> includeContent) (\s@RelatedItemEventIncludedData' {} a -> s {includeContent = a} :: RelatedItemEventIncludedData)
+
+instance Data.FromJSON RelatedItemEventIncludedData where
+  parseJSON =
+    Data.withObject
+      "RelatedItemEventIncludedData"
+      ( \x ->
+          RelatedItemEventIncludedData'
+            Prelude.<$> (x Data..: "includeContent")
+      )
+
+instance
+  Prelude.Hashable
+    RelatedItemEventIncludedData
+  where
+  hashWithSalt _salt RelatedItemEventIncludedData' {..} =
+    _salt `Prelude.hashWithSalt` includeContent
+
+instance Prelude.NFData RelatedItemEventIncludedData where
+  rnf RelatedItemEventIncludedData' {..} =
+    Prelude.rnf includeContent
+
+instance Data.ToJSON RelatedItemEventIncludedData where
+  toJSON RelatedItemEventIncludedData' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("includeContent" Data..= includeContent)
+          ]
+      )
diff --git a/gen/Amazonka/ConnectCases/Types/RelatedItemInputContent.hs b/gen/Amazonka/ConnectCases/Types/RelatedItemInputContent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/RelatedItemInputContent.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.ConnectCases.Types.RelatedItemInputContent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.RelatedItemInputContent where
+
+import Amazonka.ConnectCases.Types.CommentContent
+import Amazonka.ConnectCases.Types.Contact
+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
+
+-- | Represents the content of a related item to be created.
+--
+-- /See:/ 'newRelatedItemInputContent' smart constructor.
+data RelatedItemInputContent = RelatedItemInputContent'
+  { -- | Represents the content of a comment to be returned to agents.
+    comment :: Prelude.Maybe CommentContent,
+    -- | Object representing a contact in Amazon Connect as an API request field.
+    contact :: Prelude.Maybe Contact
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RelatedItemInputContent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'comment', 'relatedItemInputContent_comment' - Represents the content of a comment to be returned to agents.
+--
+-- 'contact', 'relatedItemInputContent_contact' - Object representing a contact in Amazon Connect as an API request field.
+newRelatedItemInputContent ::
+  RelatedItemInputContent
+newRelatedItemInputContent =
+  RelatedItemInputContent'
+    { comment = Prelude.Nothing,
+      contact = Prelude.Nothing
+    }
+
+-- | Represents the content of a comment to be returned to agents.
+relatedItemInputContent_comment :: Lens.Lens' RelatedItemInputContent (Prelude.Maybe CommentContent)
+relatedItemInputContent_comment = Lens.lens (\RelatedItemInputContent' {comment} -> comment) (\s@RelatedItemInputContent' {} a -> s {comment = a} :: RelatedItemInputContent)
+
+-- | Object representing a contact in Amazon Connect as an API request field.
+relatedItemInputContent_contact :: Lens.Lens' RelatedItemInputContent (Prelude.Maybe Contact)
+relatedItemInputContent_contact = Lens.lens (\RelatedItemInputContent' {contact} -> contact) (\s@RelatedItemInputContent' {} a -> s {contact = a} :: RelatedItemInputContent)
+
+instance Prelude.Hashable RelatedItemInputContent where
+  hashWithSalt _salt RelatedItemInputContent' {..} =
+    _salt
+      `Prelude.hashWithSalt` comment
+      `Prelude.hashWithSalt` contact
+
+instance Prelude.NFData RelatedItemInputContent where
+  rnf RelatedItemInputContent' {..} =
+    Prelude.rnf comment
+      `Prelude.seq` Prelude.rnf contact
+
+instance Data.ToJSON RelatedItemInputContent where
+  toJSON RelatedItemInputContent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("comment" Data..=) Prelude.<$> comment,
+            ("contact" Data..=) Prelude.<$> contact
+          ]
+      )
diff --git a/gen/Amazonka/ConnectCases/Types/RelatedItemType.hs b/gen/Amazonka/ConnectCases/Types/RelatedItemType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/RelatedItemType.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.ConnectCases.Types.RelatedItemType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.RelatedItemType
+  ( RelatedItemType
+      ( ..,
+        RelatedItemType_Comment,
+        RelatedItemType_Contact
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RelatedItemType = RelatedItemType'
+  { fromRelatedItemType ::
+      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 RelatedItemType_Comment :: RelatedItemType
+pattern RelatedItemType_Comment = RelatedItemType' "Comment"
+
+pattern RelatedItemType_Contact :: RelatedItemType
+pattern RelatedItemType_Contact = RelatedItemType' "Contact"
+
+{-# COMPLETE
+  RelatedItemType_Comment,
+  RelatedItemType_Contact,
+  RelatedItemType'
+  #-}
diff --git a/gen/Amazonka/ConnectCases/Types/RelatedItemTypeFilter.hs b/gen/Amazonka/ConnectCases/Types/RelatedItemTypeFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/RelatedItemTypeFilter.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.RelatedItemTypeFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.RelatedItemTypeFilter where
+
+import Amazonka.ConnectCases.Types.CommentFilter
+import Amazonka.ConnectCases.Types.ContactFilter
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The list of types of related items and their parameters to use for
+-- filtering.
+--
+-- /See:/ 'newRelatedItemTypeFilter' smart constructor.
+data RelatedItemTypeFilter = RelatedItemTypeFilter'
+  { -- | A filter for related items of type @Comment@.
+    comment :: Prelude.Maybe CommentFilter,
+    -- | A filter for related items of type @Contact@.
+    contact :: Prelude.Maybe ContactFilter
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RelatedItemTypeFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'comment', 'relatedItemTypeFilter_comment' - A filter for related items of type @Comment@.
+--
+-- 'contact', 'relatedItemTypeFilter_contact' - A filter for related items of type @Contact@.
+newRelatedItemTypeFilter ::
+  RelatedItemTypeFilter
+newRelatedItemTypeFilter =
+  RelatedItemTypeFilter'
+    { comment = Prelude.Nothing,
+      contact = Prelude.Nothing
+    }
+
+-- | A filter for related items of type @Comment@.
+relatedItemTypeFilter_comment :: Lens.Lens' RelatedItemTypeFilter (Prelude.Maybe CommentFilter)
+relatedItemTypeFilter_comment = Lens.lens (\RelatedItemTypeFilter' {comment} -> comment) (\s@RelatedItemTypeFilter' {} a -> s {comment = a} :: RelatedItemTypeFilter)
+
+-- | A filter for related items of type @Contact@.
+relatedItemTypeFilter_contact :: Lens.Lens' RelatedItemTypeFilter (Prelude.Maybe ContactFilter)
+relatedItemTypeFilter_contact = Lens.lens (\RelatedItemTypeFilter' {contact} -> contact) (\s@RelatedItemTypeFilter' {} a -> s {contact = a} :: RelatedItemTypeFilter)
+
+instance Prelude.Hashable RelatedItemTypeFilter where
+  hashWithSalt _salt RelatedItemTypeFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` comment
+      `Prelude.hashWithSalt` contact
+
+instance Prelude.NFData RelatedItemTypeFilter where
+  rnf RelatedItemTypeFilter' {..} =
+    Prelude.rnf comment
+      `Prelude.seq` Prelude.rnf contact
+
+instance Data.ToJSON RelatedItemTypeFilter where
+  toJSON RelatedItemTypeFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("comment" Data..=) Prelude.<$> comment,
+            ("contact" Data..=) Prelude.<$> contact
+          ]
+      )
diff --git a/gen/Amazonka/ConnectCases/Types/RequiredField.hs b/gen/Amazonka/ConnectCases/Types/RequiredField.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/RequiredField.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.ConnectCases.Types.RequiredField
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.RequiredField 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
+
+-- | List of fields that must have a value provided to create a case.
+--
+-- /See:/ 'newRequiredField' smart constructor.
+data RequiredField = RequiredField'
+  { -- | Unique identifier of a field.
+    fieldId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RequiredField' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fieldId', 'requiredField_fieldId' - Unique identifier of a field.
+newRequiredField ::
+  -- | 'fieldId'
+  Prelude.Text ->
+  RequiredField
+newRequiredField pFieldId_ =
+  RequiredField' {fieldId = pFieldId_}
+
+-- | Unique identifier of a field.
+requiredField_fieldId :: Lens.Lens' RequiredField Prelude.Text
+requiredField_fieldId = Lens.lens (\RequiredField' {fieldId} -> fieldId) (\s@RequiredField' {} a -> s {fieldId = a} :: RequiredField)
+
+instance Data.FromJSON RequiredField where
+  parseJSON =
+    Data.withObject
+      "RequiredField"
+      ( \x ->
+          RequiredField' Prelude.<$> (x Data..: "fieldId")
+      )
+
+instance Prelude.Hashable RequiredField where
+  hashWithSalt _salt RequiredField' {..} =
+    _salt `Prelude.hashWithSalt` fieldId
+
+instance Prelude.NFData RequiredField where
+  rnf RequiredField' {..} = Prelude.rnf fieldId
+
+instance Data.ToJSON RequiredField where
+  toJSON RequiredField' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("fieldId" Data..= fieldId)]
+      )
diff --git a/gen/Amazonka/ConnectCases/Types/SearchCasesResponseItem.hs b/gen/Amazonka/ConnectCases/Types/SearchCasesResponseItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/SearchCasesResponseItem.hs
@@ -0,0 +1,116 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.SearchCasesResponseItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.SearchCasesResponseItem where
+
+import Amazonka.ConnectCases.Types.FieldValue
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A list of items that represent cases.
+--
+-- /See:/ 'newSearchCasesResponseItem' smart constructor.
+data SearchCasesResponseItem = SearchCasesResponseItem'
+  { -- | A map of of key-value pairs that represent tags on a resource. Tags are
+    -- used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A unique identifier of the case.
+    caseId :: Prelude.Text,
+    -- | List of case field values.
+    fields :: [FieldValue],
+    -- | A unique identifier of a template.
+    templateId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchCasesResponseItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'searchCasesResponseItem_tags' - A map of of key-value pairs that represent tags on a resource. Tags are
+-- used to organize, track, or control access for this resource.
+--
+-- 'caseId', 'searchCasesResponseItem_caseId' - A unique identifier of the case.
+--
+-- 'fields', 'searchCasesResponseItem_fields' - List of case field values.
+--
+-- 'templateId', 'searchCasesResponseItem_templateId' - A unique identifier of a template.
+newSearchCasesResponseItem ::
+  -- | 'caseId'
+  Prelude.Text ->
+  -- | 'templateId'
+  Prelude.Text ->
+  SearchCasesResponseItem
+newSearchCasesResponseItem pCaseId_ pTemplateId_ =
+  SearchCasesResponseItem'
+    { tags = Prelude.Nothing,
+      caseId = pCaseId_,
+      fields = Prelude.mempty,
+      templateId = pTemplateId_
+    }
+
+-- | A map of of key-value pairs that represent tags on a resource. Tags are
+-- used to organize, track, or control access for this resource.
+searchCasesResponseItem_tags :: Lens.Lens' SearchCasesResponseItem (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+searchCasesResponseItem_tags = Lens.lens (\SearchCasesResponseItem' {tags} -> tags) (\s@SearchCasesResponseItem' {} a -> s {tags = a} :: SearchCasesResponseItem) Prelude.. Lens.mapping Lens.coerced
+
+-- | A unique identifier of the case.
+searchCasesResponseItem_caseId :: Lens.Lens' SearchCasesResponseItem Prelude.Text
+searchCasesResponseItem_caseId = Lens.lens (\SearchCasesResponseItem' {caseId} -> caseId) (\s@SearchCasesResponseItem' {} a -> s {caseId = a} :: SearchCasesResponseItem)
+
+-- | List of case field values.
+searchCasesResponseItem_fields :: Lens.Lens' SearchCasesResponseItem [FieldValue]
+searchCasesResponseItem_fields = Lens.lens (\SearchCasesResponseItem' {fields} -> fields) (\s@SearchCasesResponseItem' {} a -> s {fields = a} :: SearchCasesResponseItem) Prelude.. Lens.coerced
+
+-- | A unique identifier of a template.
+searchCasesResponseItem_templateId :: Lens.Lens' SearchCasesResponseItem Prelude.Text
+searchCasesResponseItem_templateId = Lens.lens (\SearchCasesResponseItem' {templateId} -> templateId) (\s@SearchCasesResponseItem' {} a -> s {templateId = a} :: SearchCasesResponseItem)
+
+instance Data.FromJSON SearchCasesResponseItem where
+  parseJSON =
+    Data.withObject
+      "SearchCasesResponseItem"
+      ( \x ->
+          SearchCasesResponseItem'
+            Prelude.<$> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "caseId")
+            Prelude.<*> (x Data..:? "fields" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "templateId")
+      )
+
+instance Prelude.Hashable SearchCasesResponseItem where
+  hashWithSalt _salt SearchCasesResponseItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` caseId
+      `Prelude.hashWithSalt` fields
+      `Prelude.hashWithSalt` templateId
+
+instance Prelude.NFData SearchCasesResponseItem where
+  rnf SearchCasesResponseItem' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf caseId
+      `Prelude.seq` Prelude.rnf fields
+      `Prelude.seq` Prelude.rnf templateId
diff --git a/gen/Amazonka/ConnectCases/Types/SearchRelatedItemsResponseItem.hs b/gen/Amazonka/ConnectCases/Types/SearchRelatedItemsResponseItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/SearchRelatedItemsResponseItem.hs
@@ -0,0 +1,147 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.SearchRelatedItemsResponseItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.SearchRelatedItemsResponseItem where
+
+import Amazonka.ConnectCases.Types.RelatedItemContent
+import Amazonka.ConnectCases.Types.RelatedItemType
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A list of items that represent RelatedItems.
+--
+-- /See:/ 'newSearchRelatedItemsResponseItem' smart constructor.
+data SearchRelatedItemsResponseItem = SearchRelatedItemsResponseItem'
+  { -- | A map of of key-value pairs that represent tags on a resource. Tags are
+    -- used to organize, track, or control access for this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Time at which a related item was associated with a case.
+    associationTime :: Data.ISO8601,
+    -- | Represents the content of a particular type of related item.
+    content :: RelatedItemContent,
+    -- | Unique identifier of a related item.
+    relatedItemId :: Prelude.Text,
+    -- | Type of a related item.
+    type' :: RelatedItemType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchRelatedItemsResponseItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'searchRelatedItemsResponseItem_tags' - A map of of key-value pairs that represent tags on a resource. Tags are
+-- used to organize, track, or control access for this resource.
+--
+-- 'associationTime', 'searchRelatedItemsResponseItem_associationTime' - Time at which a related item was associated with a case.
+--
+-- 'content', 'searchRelatedItemsResponseItem_content' - Represents the content of a particular type of related item.
+--
+-- 'relatedItemId', 'searchRelatedItemsResponseItem_relatedItemId' - Unique identifier of a related item.
+--
+-- 'type'', 'searchRelatedItemsResponseItem_type' - Type of a related item.
+newSearchRelatedItemsResponseItem ::
+  -- | 'associationTime'
+  Prelude.UTCTime ->
+  -- | 'content'
+  RelatedItemContent ->
+  -- | 'relatedItemId'
+  Prelude.Text ->
+  -- | 'type''
+  RelatedItemType ->
+  SearchRelatedItemsResponseItem
+newSearchRelatedItemsResponseItem
+  pAssociationTime_
+  pContent_
+  pRelatedItemId_
+  pType_ =
+    SearchRelatedItemsResponseItem'
+      { tags =
+          Prelude.Nothing,
+        associationTime =
+          Data._Time Lens.# pAssociationTime_,
+        content = pContent_,
+        relatedItemId = pRelatedItemId_,
+        type' = pType_
+      }
+
+-- | A map of of key-value pairs that represent tags on a resource. Tags are
+-- used to organize, track, or control access for this resource.
+searchRelatedItemsResponseItem_tags :: Lens.Lens' SearchRelatedItemsResponseItem (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+searchRelatedItemsResponseItem_tags = Lens.lens (\SearchRelatedItemsResponseItem' {tags} -> tags) (\s@SearchRelatedItemsResponseItem' {} a -> s {tags = a} :: SearchRelatedItemsResponseItem) Prelude.. Lens.mapping Lens.coerced
+
+-- | Time at which a related item was associated with a case.
+searchRelatedItemsResponseItem_associationTime :: Lens.Lens' SearchRelatedItemsResponseItem Prelude.UTCTime
+searchRelatedItemsResponseItem_associationTime = Lens.lens (\SearchRelatedItemsResponseItem' {associationTime} -> associationTime) (\s@SearchRelatedItemsResponseItem' {} a -> s {associationTime = a} :: SearchRelatedItemsResponseItem) Prelude.. Data._Time
+
+-- | Represents the content of a particular type of related item.
+searchRelatedItemsResponseItem_content :: Lens.Lens' SearchRelatedItemsResponseItem RelatedItemContent
+searchRelatedItemsResponseItem_content = Lens.lens (\SearchRelatedItemsResponseItem' {content} -> content) (\s@SearchRelatedItemsResponseItem' {} a -> s {content = a} :: SearchRelatedItemsResponseItem)
+
+-- | Unique identifier of a related item.
+searchRelatedItemsResponseItem_relatedItemId :: Lens.Lens' SearchRelatedItemsResponseItem Prelude.Text
+searchRelatedItemsResponseItem_relatedItemId = Lens.lens (\SearchRelatedItemsResponseItem' {relatedItemId} -> relatedItemId) (\s@SearchRelatedItemsResponseItem' {} a -> s {relatedItemId = a} :: SearchRelatedItemsResponseItem)
+
+-- | Type of a related item.
+searchRelatedItemsResponseItem_type :: Lens.Lens' SearchRelatedItemsResponseItem RelatedItemType
+searchRelatedItemsResponseItem_type = Lens.lens (\SearchRelatedItemsResponseItem' {type'} -> type') (\s@SearchRelatedItemsResponseItem' {} a -> s {type' = a} :: SearchRelatedItemsResponseItem)
+
+instance Data.FromJSON SearchRelatedItemsResponseItem where
+  parseJSON =
+    Data.withObject
+      "SearchRelatedItemsResponseItem"
+      ( \x ->
+          SearchRelatedItemsResponseItem'
+            Prelude.<$> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "associationTime")
+            Prelude.<*> (x Data..: "content")
+            Prelude.<*> (x Data..: "relatedItemId")
+            Prelude.<*> (x Data..: "type")
+      )
+
+instance
+  Prelude.Hashable
+    SearchRelatedItemsResponseItem
+  where
+  hashWithSalt
+    _salt
+    SearchRelatedItemsResponseItem' {..} =
+      _salt
+        `Prelude.hashWithSalt` tags
+        `Prelude.hashWithSalt` associationTime
+        `Prelude.hashWithSalt` content
+        `Prelude.hashWithSalt` relatedItemId
+        `Prelude.hashWithSalt` type'
+
+instance
+  Prelude.NFData
+    SearchRelatedItemsResponseItem
+  where
+  rnf SearchRelatedItemsResponseItem' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf associationTime
+      `Prelude.seq` Prelude.rnf content
+      `Prelude.seq` Prelude.rnf relatedItemId
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/ConnectCases/Types/Section.hs b/gen/Amazonka/ConnectCases/Types/Section.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/Section.hs
@@ -0,0 +1,74 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.Section
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.Section where
+
+import Amazonka.ConnectCases.Types.FieldGroup
+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
+
+-- | This represents a sections within a panel or tab of the page layout.
+--
+-- /See:/ 'newSection' smart constructor.
+data Section = Section'
+  { -- | Consists of a group of fields and associated properties.
+    fieldGroup :: Prelude.Maybe FieldGroup
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Section' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fieldGroup', 'section_fieldGroup' - Consists of a group of fields and associated properties.
+newSection ::
+  Section
+newSection = Section' {fieldGroup = Prelude.Nothing}
+
+-- | Consists of a group of fields and associated properties.
+section_fieldGroup :: Lens.Lens' Section (Prelude.Maybe FieldGroup)
+section_fieldGroup = Lens.lens (\Section' {fieldGroup} -> fieldGroup) (\s@Section' {} a -> s {fieldGroup = a} :: Section)
+
+instance Data.FromJSON Section where
+  parseJSON =
+    Data.withObject
+      "Section"
+      ( \x ->
+          Section' Prelude.<$> (x Data..:? "fieldGroup")
+      )
+
+instance Prelude.Hashable Section where
+  hashWithSalt _salt Section' {..} =
+    _salt `Prelude.hashWithSalt` fieldGroup
+
+instance Prelude.NFData Section where
+  rnf Section' {..} = Prelude.rnf fieldGroup
+
+instance Data.ToJSON Section where
+  toJSON Section' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("fieldGroup" Data..=) Prelude.<$> fieldGroup]
+      )
diff --git a/gen/Amazonka/ConnectCases/Types/Sort.hs b/gen/Amazonka/ConnectCases/Types/Sort.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/Sort.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.ConnectCases.Types.Sort
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.Sort where
+
+import Amazonka.ConnectCases.Types.Order
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A structured set of sort terms.
+--
+-- /See:/ 'newSort' smart constructor.
+data Sort = Sort'
+  { -- | Unique identifier of a field.
+    fieldId :: Prelude.Text,
+    -- | A structured set of sort terms
+    sortOrder :: Order
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Sort' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fieldId', 'sort_fieldId' - Unique identifier of a field.
+--
+-- 'sortOrder', 'sort_sortOrder' - A structured set of sort terms
+newSort ::
+  -- | 'fieldId'
+  Prelude.Text ->
+  -- | 'sortOrder'
+  Order ->
+  Sort
+newSort pFieldId_ pSortOrder_ =
+  Sort' {fieldId = pFieldId_, sortOrder = pSortOrder_}
+
+-- | Unique identifier of a field.
+sort_fieldId :: Lens.Lens' Sort Prelude.Text
+sort_fieldId = Lens.lens (\Sort' {fieldId} -> fieldId) (\s@Sort' {} a -> s {fieldId = a} :: Sort)
+
+-- | A structured set of sort terms
+sort_sortOrder :: Lens.Lens' Sort Order
+sort_sortOrder = Lens.lens (\Sort' {sortOrder} -> sortOrder) (\s@Sort' {} a -> s {sortOrder = a} :: Sort)
+
+instance Prelude.Hashable Sort where
+  hashWithSalt _salt Sort' {..} =
+    _salt
+      `Prelude.hashWithSalt` fieldId
+      `Prelude.hashWithSalt` sortOrder
+
+instance Prelude.NFData Sort where
+  rnf Sort' {..} =
+    Prelude.rnf fieldId
+      `Prelude.seq` Prelude.rnf sortOrder
+
+instance Data.ToJSON Sort where
+  toJSON Sort' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("fieldId" Data..= fieldId),
+            Prelude.Just ("sortOrder" Data..= sortOrder)
+          ]
+      )
diff --git a/gen/Amazonka/ConnectCases/Types/TemplateStatus.hs b/gen/Amazonka/ConnectCases/Types/TemplateStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/TemplateStatus.hs
@@ -0,0 +1,72 @@
+{-# 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.ConnectCases.Types.TemplateStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.TemplateStatus
+  ( TemplateStatus
+      ( ..,
+        TemplateStatus_Active,
+        TemplateStatus_Inactive
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Status of a template
+newtype TemplateStatus = TemplateStatus'
+  { fromTemplateStatus ::
+      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 TemplateStatus_Active :: TemplateStatus
+pattern TemplateStatus_Active = TemplateStatus' "Active"
+
+pattern TemplateStatus_Inactive :: TemplateStatus
+pattern TemplateStatus_Inactive = TemplateStatus' "Inactive"
+
+{-# COMPLETE
+  TemplateStatus_Active,
+  TemplateStatus_Inactive,
+  TemplateStatus'
+  #-}
diff --git a/gen/Amazonka/ConnectCases/Types/TemplateSummary.hs b/gen/Amazonka/ConnectCases/Types/TemplateSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/Types/TemplateSummary.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.Types.TemplateSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ConnectCases.Types.TemplateSummary where
+
+import Amazonka.ConnectCases.Types.TemplateStatus
+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
+
+-- | Template summary information.
+--
+-- /See:/ 'newTemplateSummary' smart constructor.
+data TemplateSummary = TemplateSummary'
+  { -- | The template name.
+    name :: Prelude.Text,
+    -- | The status of the template.
+    status :: TemplateStatus,
+    -- | The Amazon Resource Name (ARN) of the template.
+    templateArn :: Prelude.Text,
+    -- | The unique identifier for the template.
+    templateId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TemplateSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'templateSummary_name' - The template name.
+--
+-- 'status', 'templateSummary_status' - The status of the template.
+--
+-- 'templateArn', 'templateSummary_templateArn' - The Amazon Resource Name (ARN) of the template.
+--
+-- 'templateId', 'templateSummary_templateId' - The unique identifier for the template.
+newTemplateSummary ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'status'
+  TemplateStatus ->
+  -- | 'templateArn'
+  Prelude.Text ->
+  -- | 'templateId'
+  Prelude.Text ->
+  TemplateSummary
+newTemplateSummary
+  pName_
+  pStatus_
+  pTemplateArn_
+  pTemplateId_ =
+    TemplateSummary'
+      { name = pName_,
+        status = pStatus_,
+        templateArn = pTemplateArn_,
+        templateId = pTemplateId_
+      }
+
+-- | The template name.
+templateSummary_name :: Lens.Lens' TemplateSummary Prelude.Text
+templateSummary_name = Lens.lens (\TemplateSummary' {name} -> name) (\s@TemplateSummary' {} a -> s {name = a} :: TemplateSummary)
+
+-- | The status of the template.
+templateSummary_status :: Lens.Lens' TemplateSummary TemplateStatus
+templateSummary_status = Lens.lens (\TemplateSummary' {status} -> status) (\s@TemplateSummary' {} a -> s {status = a} :: TemplateSummary)
+
+-- | The Amazon Resource Name (ARN) of the template.
+templateSummary_templateArn :: Lens.Lens' TemplateSummary Prelude.Text
+templateSummary_templateArn = Lens.lens (\TemplateSummary' {templateArn} -> templateArn) (\s@TemplateSummary' {} a -> s {templateArn = a} :: TemplateSummary)
+
+-- | The unique identifier for the template.
+templateSummary_templateId :: Lens.Lens' TemplateSummary Prelude.Text
+templateSummary_templateId = Lens.lens (\TemplateSummary' {templateId} -> templateId) (\s@TemplateSummary' {} a -> s {templateId = a} :: TemplateSummary)
+
+instance Data.FromJSON TemplateSummary where
+  parseJSON =
+    Data.withObject
+      "TemplateSummary"
+      ( \x ->
+          TemplateSummary'
+            Prelude.<$> (x Data..: "name")
+            Prelude.<*> (x Data..: "status")
+            Prelude.<*> (x Data..: "templateArn")
+            Prelude.<*> (x Data..: "templateId")
+      )
+
+instance Prelude.Hashable TemplateSummary where
+  hashWithSalt _salt TemplateSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` templateArn
+      `Prelude.hashWithSalt` templateId
+
+instance Prelude.NFData TemplateSummary where
+  rnf TemplateSummary' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf templateArn
+      `Prelude.seq` Prelude.rnf templateId
diff --git a/gen/Amazonka/ConnectCases/UntagResource.hs b/gen/Amazonka/ConnectCases/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/UntagResource.hs
@@ -0,0 +1,139 @@
+{-# 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.ConnectCases.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)
+--
+-- Untags a resource.
+module Amazonka.ConnectCases.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_arn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The Amazon Resource Name (ARN)
+    arn :: Prelude.Text,
+    -- | List of tag keys.
+    tagKeys :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'untagResource_arn' - The Amazon Resource Name (ARN)
+--
+-- 'tagKeys', 'untagResource_tagKeys' - List of tag keys.
+newUntagResource ::
+  -- | 'arn'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pArn_ =
+  UntagResource'
+    { arn = pArn_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN)
+untagResource_arn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_arn = Lens.lens (\UntagResource' {arn} -> arn) (\s@UntagResource' {} a -> s {arn = a} :: UntagResource)
+
+-- | List of tag keys.
+untagResource_tagKeys :: Lens.Lens' UntagResource [Prelude.Text]
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull UntagResourceResponse'
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf arn `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 arn]
+
+instance Data.ToQuery UntagResource where
+  toQuery UntagResource' {..} =
+    Prelude.mconcat
+      ["tagKeys" Data.=: Data.toQueryList "member" tagKeys]
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newUntagResourceResponse ::
+  UntagResourceResponse
+newUntagResourceResponse = UntagResourceResponse'
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/ConnectCases/UpdateCase.hs b/gen/Amazonka/ConnectCases/UpdateCase.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/UpdateCase.hs
@@ -0,0 +1,190 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.UpdateCase
+-- 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 values of fields on a case. Fields to be updated are
+-- received as an array of id\/value pairs identical to the @CreateCase@
+-- input .
+--
+-- If the action is successful, the service sends back an HTTP 200 response
+-- with an empty HTTP body.
+module Amazonka.ConnectCases.UpdateCase
+  ( -- * Creating a Request
+    UpdateCase (..),
+    newUpdateCase,
+
+    -- * Request Lenses
+    updateCase_caseId,
+    updateCase_domainId,
+    updateCase_fields,
+
+    -- * Destructuring the Response
+    UpdateCaseResponse (..),
+    newUpdateCaseResponse,
+
+    -- * Response Lenses
+    updateCaseResponse_httpStatus,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateCase' smart constructor.
+data UpdateCase = UpdateCase'
+  { -- | A unique identifier of the case.
+    caseId :: Prelude.Text,
+    -- | The unique identifier of the Cases domain.
+    domainId :: Prelude.Text,
+    -- | An array of objects with @fieldId@ (matching ListFields\/DescribeField)
+    -- and value union data, structured identical to @CreateCase@.
+    fields :: [FieldValue]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateCase' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'caseId', 'updateCase_caseId' - A unique identifier of the case.
+--
+-- 'domainId', 'updateCase_domainId' - The unique identifier of the Cases domain.
+--
+-- 'fields', 'updateCase_fields' - An array of objects with @fieldId@ (matching ListFields\/DescribeField)
+-- and value union data, structured identical to @CreateCase@.
+newUpdateCase ::
+  -- | 'caseId'
+  Prelude.Text ->
+  -- | 'domainId'
+  Prelude.Text ->
+  UpdateCase
+newUpdateCase pCaseId_ pDomainId_ =
+  UpdateCase'
+    { caseId = pCaseId_,
+      domainId = pDomainId_,
+      fields = Prelude.mempty
+    }
+
+-- | A unique identifier of the case.
+updateCase_caseId :: Lens.Lens' UpdateCase Prelude.Text
+updateCase_caseId = Lens.lens (\UpdateCase' {caseId} -> caseId) (\s@UpdateCase' {} a -> s {caseId = a} :: UpdateCase)
+
+-- | The unique identifier of the Cases domain.
+updateCase_domainId :: Lens.Lens' UpdateCase Prelude.Text
+updateCase_domainId = Lens.lens (\UpdateCase' {domainId} -> domainId) (\s@UpdateCase' {} a -> s {domainId = a} :: UpdateCase)
+
+-- | An array of objects with @fieldId@ (matching ListFields\/DescribeField)
+-- and value union data, structured identical to @CreateCase@.
+updateCase_fields :: Lens.Lens' UpdateCase [FieldValue]
+updateCase_fields = Lens.lens (\UpdateCase' {fields} -> fields) (\s@UpdateCase' {} a -> s {fields = a} :: UpdateCase) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UpdateCase where
+  type AWSResponse UpdateCase = UpdateCaseResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateCaseResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateCase where
+  hashWithSalt _salt UpdateCase' {..} =
+    _salt
+      `Prelude.hashWithSalt` caseId
+      `Prelude.hashWithSalt` domainId
+      `Prelude.hashWithSalt` fields
+
+instance Prelude.NFData UpdateCase where
+  rnf UpdateCase' {..} =
+    Prelude.rnf caseId
+      `Prelude.seq` Prelude.rnf domainId
+      `Prelude.seq` Prelude.rnf fields
+
+instance Data.ToHeaders UpdateCase where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateCase where
+  toJSON UpdateCase' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("fields" Data..= fields)]
+      )
+
+instance Data.ToPath UpdateCase where
+  toPath UpdateCase' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainId,
+        "/cases/",
+        Data.toBS caseId
+      ]
+
+instance Data.ToQuery UpdateCase where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateCaseResponse' smart constructor.
+data UpdateCaseResponse = UpdateCaseResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateCaseResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateCaseResponse_httpStatus' - The response's http status code.
+newUpdateCaseResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateCaseResponse
+newUpdateCaseResponse pHttpStatus_ =
+  UpdateCaseResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+updateCaseResponse_httpStatus :: Lens.Lens' UpdateCaseResponse Prelude.Int
+updateCaseResponse_httpStatus = Lens.lens (\UpdateCaseResponse' {httpStatus} -> httpStatus) (\s@UpdateCaseResponse' {} a -> s {httpStatus = a} :: UpdateCaseResponse)
+
+instance Prelude.NFData UpdateCaseResponse where
+  rnf UpdateCaseResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ConnectCases/UpdateField.hs b/gen/Amazonka/ConnectCases/UpdateField.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/UpdateField.hs
@@ -0,0 +1,196 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.UpdateField
+-- 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 properties of an existing field.
+module Amazonka.ConnectCases.UpdateField
+  ( -- * Creating a Request
+    UpdateField (..),
+    newUpdateField,
+
+    -- * Request Lenses
+    updateField_description,
+    updateField_name,
+    updateField_domainId,
+    updateField_fieldId,
+
+    -- * Destructuring the Response
+    UpdateFieldResponse (..),
+    newUpdateFieldResponse,
+
+    -- * Response Lenses
+    updateFieldResponse_httpStatus,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateField' smart constructor.
+data UpdateField = UpdateField'
+  { -- | The description of a field.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the field.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the Cases domain.
+    domainId :: Prelude.Text,
+    -- | The unique identifier of a field.
+    fieldId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateField' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateField_description' - The description of a field.
+--
+-- 'name', 'updateField_name' - The name of the field.
+--
+-- 'domainId', 'updateField_domainId' - The unique identifier of the Cases domain.
+--
+-- 'fieldId', 'updateField_fieldId' - The unique identifier of a field.
+newUpdateField ::
+  -- | 'domainId'
+  Prelude.Text ->
+  -- | 'fieldId'
+  Prelude.Text ->
+  UpdateField
+newUpdateField pDomainId_ pFieldId_ =
+  UpdateField'
+    { description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      domainId = pDomainId_,
+      fieldId = pFieldId_
+    }
+
+-- | The description of a field.
+updateField_description :: Lens.Lens' UpdateField (Prelude.Maybe Prelude.Text)
+updateField_description = Lens.lens (\UpdateField' {description} -> description) (\s@UpdateField' {} a -> s {description = a} :: UpdateField)
+
+-- | The name of the field.
+updateField_name :: Lens.Lens' UpdateField (Prelude.Maybe Prelude.Text)
+updateField_name = Lens.lens (\UpdateField' {name} -> name) (\s@UpdateField' {} a -> s {name = a} :: UpdateField)
+
+-- | The unique identifier of the Cases domain.
+updateField_domainId :: Lens.Lens' UpdateField Prelude.Text
+updateField_domainId = Lens.lens (\UpdateField' {domainId} -> domainId) (\s@UpdateField' {} a -> s {domainId = a} :: UpdateField)
+
+-- | The unique identifier of a field.
+updateField_fieldId :: Lens.Lens' UpdateField Prelude.Text
+updateField_fieldId = Lens.lens (\UpdateField' {fieldId} -> fieldId) (\s@UpdateField' {} a -> s {fieldId = a} :: UpdateField)
+
+instance Core.AWSRequest UpdateField where
+  type AWSResponse UpdateField = UpdateFieldResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateFieldResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateField where
+  hashWithSalt _salt UpdateField' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` domainId
+      `Prelude.hashWithSalt` fieldId
+
+instance Prelude.NFData UpdateField where
+  rnf UpdateField' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf domainId
+      `Prelude.seq` Prelude.rnf fieldId
+
+instance Data.ToHeaders UpdateField where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateField where
+  toJSON UpdateField' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("name" Data..=) Prelude.<$> name
+          ]
+      )
+
+instance Data.ToPath UpdateField where
+  toPath UpdateField' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainId,
+        "/fields/",
+        Data.toBS fieldId
+      ]
+
+instance Data.ToQuery UpdateField where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateFieldResponse' smart constructor.
+data UpdateFieldResponse = UpdateFieldResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateFieldResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateFieldResponse_httpStatus' - The response's http status code.
+newUpdateFieldResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateFieldResponse
+newUpdateFieldResponse pHttpStatus_ =
+  UpdateFieldResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+updateFieldResponse_httpStatus :: Lens.Lens' UpdateFieldResponse Prelude.Int
+updateFieldResponse_httpStatus = Lens.lens (\UpdateFieldResponse' {httpStatus} -> httpStatus) (\s@UpdateFieldResponse' {} a -> s {httpStatus = a} :: UpdateFieldResponse)
+
+instance Prelude.NFData UpdateFieldResponse where
+  rnf UpdateFieldResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ConnectCases/UpdateLayout.hs b/gen/Amazonka/ConnectCases/UpdateLayout.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/UpdateLayout.hs
@@ -0,0 +1,209 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ConnectCases.UpdateLayout
+-- 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 attributes of an existing layout.
+--
+-- If the action is successful, the service sends back an HTTP 200 response
+-- with an empty HTTP body.
+--
+-- A @ValidationException@ is returned when you add non-existent @fieldIds@
+-- to a layout.
+--
+-- Title and Status fields cannot be part of layouts because they are not
+-- configurable.
+module Amazonka.ConnectCases.UpdateLayout
+  ( -- * Creating a Request
+    UpdateLayout (..),
+    newUpdateLayout,
+
+    -- * Request Lenses
+    updateLayout_content,
+    updateLayout_name,
+    updateLayout_domainId,
+    updateLayout_layoutId,
+
+    -- * Destructuring the Response
+    UpdateLayoutResponse (..),
+    newUpdateLayoutResponse,
+
+    -- * Response Lenses
+    updateLayoutResponse_httpStatus,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateLayout' smart constructor.
+data UpdateLayout = UpdateLayout'
+  { -- | Information about which fields will be present in the layout, the order
+    -- of the fields, and a read-only attribute of the field.
+    content :: Prelude.Maybe LayoutContent,
+    -- | The name of the layout. It must be unique per domain.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the Cases domain.
+    domainId :: Prelude.Text,
+    -- | The unique identifier of the layout.
+    layoutId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateLayout' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateLayout_content' - Information about which fields will be present in the layout, the order
+-- of the fields, and a read-only attribute of the field.
+--
+-- 'name', 'updateLayout_name' - The name of the layout. It must be unique per domain.
+--
+-- 'domainId', 'updateLayout_domainId' - The unique identifier of the Cases domain.
+--
+-- 'layoutId', 'updateLayout_layoutId' - The unique identifier of the layout.
+newUpdateLayout ::
+  -- | 'domainId'
+  Prelude.Text ->
+  -- | 'layoutId'
+  Prelude.Text ->
+  UpdateLayout
+newUpdateLayout pDomainId_ pLayoutId_ =
+  UpdateLayout'
+    { content = Prelude.Nothing,
+      name = Prelude.Nothing,
+      domainId = pDomainId_,
+      layoutId = pLayoutId_
+    }
+
+-- | Information about which fields will be present in the layout, the order
+-- of the fields, and a read-only attribute of the field.
+updateLayout_content :: Lens.Lens' UpdateLayout (Prelude.Maybe LayoutContent)
+updateLayout_content = Lens.lens (\UpdateLayout' {content} -> content) (\s@UpdateLayout' {} a -> s {content = a} :: UpdateLayout)
+
+-- | The name of the layout. It must be unique per domain.
+updateLayout_name :: Lens.Lens' UpdateLayout (Prelude.Maybe Prelude.Text)
+updateLayout_name = Lens.lens (\UpdateLayout' {name} -> name) (\s@UpdateLayout' {} a -> s {name = a} :: UpdateLayout)
+
+-- | The unique identifier of the Cases domain.
+updateLayout_domainId :: Lens.Lens' UpdateLayout Prelude.Text
+updateLayout_domainId = Lens.lens (\UpdateLayout' {domainId} -> domainId) (\s@UpdateLayout' {} a -> s {domainId = a} :: UpdateLayout)
+
+-- | The unique identifier of the layout.
+updateLayout_layoutId :: Lens.Lens' UpdateLayout Prelude.Text
+updateLayout_layoutId = Lens.lens (\UpdateLayout' {layoutId} -> layoutId) (\s@UpdateLayout' {} a -> s {layoutId = a} :: UpdateLayout)
+
+instance Core.AWSRequest UpdateLayout where
+  type AWSResponse UpdateLayout = UpdateLayoutResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateLayoutResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateLayout where
+  hashWithSalt _salt UpdateLayout' {..} =
+    _salt
+      `Prelude.hashWithSalt` content
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` domainId
+      `Prelude.hashWithSalt` layoutId
+
+instance Prelude.NFData UpdateLayout where
+  rnf UpdateLayout' {..} =
+    Prelude.rnf content
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf domainId
+      `Prelude.seq` Prelude.rnf layoutId
+
+instance Data.ToHeaders UpdateLayout where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateLayout where
+  toJSON UpdateLayout' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("content" Data..=) Prelude.<$> content,
+            ("name" Data..=) Prelude.<$> name
+          ]
+      )
+
+instance Data.ToPath UpdateLayout where
+  toPath UpdateLayout' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainId,
+        "/layouts/",
+        Data.toBS layoutId
+      ]
+
+instance Data.ToQuery UpdateLayout where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateLayoutResponse' smart constructor.
+data UpdateLayoutResponse = UpdateLayoutResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateLayoutResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateLayoutResponse_httpStatus' - The response's http status code.
+newUpdateLayoutResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateLayoutResponse
+newUpdateLayoutResponse pHttpStatus_ =
+  UpdateLayoutResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+updateLayoutResponse_httpStatus :: Lens.Lens' UpdateLayoutResponse Prelude.Int
+updateLayoutResponse_httpStatus = Lens.lens (\UpdateLayoutResponse' {httpStatus} -> httpStatus) (\s@UpdateLayoutResponse' {} a -> s {httpStatus = a} :: UpdateLayoutResponse)
+
+instance Prelude.NFData UpdateLayoutResponse where
+  rnf UpdateLayoutResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ConnectCases/UpdateTemplate.hs b/gen/Amazonka/ConnectCases/UpdateTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/UpdateTemplate.hs
@@ -0,0 +1,248 @@
+{-# 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.ConnectCases.UpdateTemplate
+-- 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 attributes of an existing template. The template attributes
+-- that can be modified include @name@, @description@,
+-- @layoutConfiguration@, @requiredFields@, and @status@. At least one of
+-- these attributes must not be null. If a null value is provided for a
+-- given attribute, that attribute is ignored and its current value is
+-- preserved.
+module Amazonka.ConnectCases.UpdateTemplate
+  ( -- * Creating a Request
+    UpdateTemplate (..),
+    newUpdateTemplate,
+
+    -- * Request Lenses
+    updateTemplate_description,
+    updateTemplate_layoutConfiguration,
+    updateTemplate_name,
+    updateTemplate_requiredFields,
+    updateTemplate_status,
+    updateTemplate_domainId,
+    updateTemplate_templateId,
+
+    -- * Destructuring the Response
+    UpdateTemplateResponse (..),
+    newUpdateTemplateResponse,
+
+    -- * Response Lenses
+    updateTemplateResponse_httpStatus,
+  )
+where
+
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateTemplate' smart constructor.
+data UpdateTemplate = UpdateTemplate'
+  { -- | A brief description of the template.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Configuration of layouts associated to the template.
+    layoutConfiguration :: Prelude.Maybe LayoutConfiguration,
+    -- | The name of the template. It must be unique per domain.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | A list of fields that must contain a value for a case to be successfully
+    -- created with this template.
+    requiredFields :: Prelude.Maybe [RequiredField],
+    -- | The status of the template.
+    status :: Prelude.Maybe TemplateStatus,
+    -- | The unique identifier of the Cases domain.
+    domainId :: Prelude.Text,
+    -- | A unique identifier for the template.
+    templateId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateTemplate_description' - A brief description of the template.
+--
+-- 'layoutConfiguration', 'updateTemplate_layoutConfiguration' - Configuration of layouts associated to the template.
+--
+-- 'name', 'updateTemplate_name' - The name of the template. It must be unique per domain.
+--
+-- 'requiredFields', 'updateTemplate_requiredFields' - A list of fields that must contain a value for a case to be successfully
+-- created with this template.
+--
+-- 'status', 'updateTemplate_status' - The status of the template.
+--
+-- 'domainId', 'updateTemplate_domainId' - The unique identifier of the Cases domain.
+--
+-- 'templateId', 'updateTemplate_templateId' - A unique identifier for the template.
+newUpdateTemplate ::
+  -- | 'domainId'
+  Prelude.Text ->
+  -- | 'templateId'
+  Prelude.Text ->
+  UpdateTemplate
+newUpdateTemplate pDomainId_ pTemplateId_ =
+  UpdateTemplate'
+    { description = Prelude.Nothing,
+      layoutConfiguration = Prelude.Nothing,
+      name = Prelude.Nothing,
+      requiredFields = Prelude.Nothing,
+      status = Prelude.Nothing,
+      domainId = pDomainId_,
+      templateId = pTemplateId_
+    }
+
+-- | A brief description of the template.
+updateTemplate_description :: Lens.Lens' UpdateTemplate (Prelude.Maybe Prelude.Text)
+updateTemplate_description = Lens.lens (\UpdateTemplate' {description} -> description) (\s@UpdateTemplate' {} a -> s {description = a} :: UpdateTemplate)
+
+-- | Configuration of layouts associated to the template.
+updateTemplate_layoutConfiguration :: Lens.Lens' UpdateTemplate (Prelude.Maybe LayoutConfiguration)
+updateTemplate_layoutConfiguration = Lens.lens (\UpdateTemplate' {layoutConfiguration} -> layoutConfiguration) (\s@UpdateTemplate' {} a -> s {layoutConfiguration = a} :: UpdateTemplate)
+
+-- | The name of the template. It must be unique per domain.
+updateTemplate_name :: Lens.Lens' UpdateTemplate (Prelude.Maybe Prelude.Text)
+updateTemplate_name = Lens.lens (\UpdateTemplate' {name} -> name) (\s@UpdateTemplate' {} a -> s {name = a} :: UpdateTemplate)
+
+-- | A list of fields that must contain a value for a case to be successfully
+-- created with this template.
+updateTemplate_requiredFields :: Lens.Lens' UpdateTemplate (Prelude.Maybe [RequiredField])
+updateTemplate_requiredFields = Lens.lens (\UpdateTemplate' {requiredFields} -> requiredFields) (\s@UpdateTemplate' {} a -> s {requiredFields = a} :: UpdateTemplate) Prelude.. Lens.mapping Lens.coerced
+
+-- | The status of the template.
+updateTemplate_status :: Lens.Lens' UpdateTemplate (Prelude.Maybe TemplateStatus)
+updateTemplate_status = Lens.lens (\UpdateTemplate' {status} -> status) (\s@UpdateTemplate' {} a -> s {status = a} :: UpdateTemplate)
+
+-- | The unique identifier of the Cases domain.
+updateTemplate_domainId :: Lens.Lens' UpdateTemplate Prelude.Text
+updateTemplate_domainId = Lens.lens (\UpdateTemplate' {domainId} -> domainId) (\s@UpdateTemplate' {} a -> s {domainId = a} :: UpdateTemplate)
+
+-- | A unique identifier for the template.
+updateTemplate_templateId :: Lens.Lens' UpdateTemplate Prelude.Text
+updateTemplate_templateId = Lens.lens (\UpdateTemplate' {templateId} -> templateId) (\s@UpdateTemplate' {} a -> s {templateId = a} :: UpdateTemplate)
+
+instance Core.AWSRequest UpdateTemplate where
+  type
+    AWSResponse UpdateTemplate =
+      UpdateTemplateResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateTemplateResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateTemplate where
+  hashWithSalt _salt UpdateTemplate' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` layoutConfiguration
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` requiredFields
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` domainId
+      `Prelude.hashWithSalt` templateId
+
+instance Prelude.NFData UpdateTemplate where
+  rnf UpdateTemplate' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf layoutConfiguration
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf requiredFields
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf domainId
+      `Prelude.seq` Prelude.rnf templateId
+
+instance Data.ToHeaders UpdateTemplate where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateTemplate where
+  toJSON UpdateTemplate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("layoutConfiguration" Data..=)
+              Prelude.<$> layoutConfiguration,
+            ("name" Data..=) Prelude.<$> name,
+            ("requiredFields" Data..=)
+              Prelude.<$> requiredFields,
+            ("status" Data..=) Prelude.<$> status
+          ]
+      )
+
+instance Data.ToPath UpdateTemplate where
+  toPath UpdateTemplate' {..} =
+    Prelude.mconcat
+      [ "/domains/",
+        Data.toBS domainId,
+        "/templates/",
+        Data.toBS templateId
+      ]
+
+instance Data.ToQuery UpdateTemplate where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateTemplateResponse' smart constructor.
+data UpdateTemplateResponse = UpdateTemplateResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateTemplateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateTemplateResponse_httpStatus' - The response's http status code.
+newUpdateTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateTemplateResponse
+newUpdateTemplateResponse pHttpStatus_ =
+  UpdateTemplateResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+updateTemplateResponse_httpStatus :: Lens.Lens' UpdateTemplateResponse Prelude.Int
+updateTemplateResponse_httpStatus = Lens.lens (\UpdateTemplateResponse' {httpStatus} -> httpStatus) (\s@UpdateTemplateResponse' {} a -> s {httpStatus = a} :: UpdateTemplateResponse)
+
+instance Prelude.NFData UpdateTemplateResponse where
+  rnf UpdateTemplateResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ConnectCases/Waiters.hs b/gen/Amazonka/ConnectCases/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ConnectCases/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.ConnectCases.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.ConnectCases.Waiters where
+
+import Amazonka.ConnectCases.Lens
+import Amazonka.ConnectCases.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,23 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Main (main) where
+
+import Test.Amazonka.ConnectCases
+import Test.Amazonka.ConnectCases.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "ConnectCases"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/ConnectCases.hs b/test/Test/Amazonka/ConnectCases.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/ConnectCases.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.ConnectCases
+-- Copyright   : (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.ConnectCases
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/ConnectCases/Internal.hs b/test/Test/Amazonka/ConnectCases/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/ConnectCases/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.ConnectCases.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.ConnectCases.Internal where
diff --git a/test/Test/Amazonka/Gen/ConnectCases.hs b/test/Test/Amazonka/Gen/ConnectCases.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/ConnectCases.hs
@@ -0,0 +1,618 @@
+{-# 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.ConnectCases
+-- Copyright   : (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.ConnectCases where
+
+import Amazonka.ConnectCases
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.ConnectCases.Internal
+import Test.Amazonka.Fixture
+import Test.Amazonka.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestBatchGetField $
+--             newBatchGetField
+--
+--         , requestBatchPutFieldOptions $
+--             newBatchPutFieldOptions
+--
+--         , requestCreateCase $
+--             newCreateCase
+--
+--         , requestCreateDomain $
+--             newCreateDomain
+--
+--         , requestCreateField $
+--             newCreateField
+--
+--         , requestCreateLayout $
+--             newCreateLayout
+--
+--         , requestCreateRelatedItem $
+--             newCreateRelatedItem
+--
+--         , requestCreateTemplate $
+--             newCreateTemplate
+--
+--         , requestGetCase $
+--             newGetCase
+--
+--         , requestGetCaseEventConfiguration $
+--             newGetCaseEventConfiguration
+--
+--         , requestGetDomain $
+--             newGetDomain
+--
+--         , requestGetLayout $
+--             newGetLayout
+--
+--         , requestGetTemplate $
+--             newGetTemplate
+--
+--         , requestListCasesForContact $
+--             newListCasesForContact
+--
+--         , requestListDomains $
+--             newListDomains
+--
+--         , requestListFieldOptions $
+--             newListFieldOptions
+--
+--         , requestListFields $
+--             newListFields
+--
+--         , requestListLayouts $
+--             newListLayouts
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestListTemplates $
+--             newListTemplates
+--
+--         , requestPutCaseEventConfiguration $
+--             newPutCaseEventConfiguration
+--
+--         , requestSearchCases $
+--             newSearchCases
+--
+--         , requestSearchRelatedItems $
+--             newSearchRelatedItems
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateCase $
+--             newUpdateCase
+--
+--         , requestUpdateField $
+--             newUpdateField
+--
+--         , requestUpdateLayout $
+--             newUpdateLayout
+--
+--         , requestUpdateTemplate $
+--             newUpdateTemplate
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseBatchGetField $
+--             newBatchGetFieldResponse
+--
+--         , responseBatchPutFieldOptions $
+--             newBatchPutFieldOptionsResponse
+--
+--         , responseCreateCase $
+--             newCreateCaseResponse
+--
+--         , responseCreateDomain $
+--             newCreateDomainResponse
+--
+--         , responseCreateField $
+--             newCreateFieldResponse
+--
+--         , responseCreateLayout $
+--             newCreateLayoutResponse
+--
+--         , responseCreateRelatedItem $
+--             newCreateRelatedItemResponse
+--
+--         , responseCreateTemplate $
+--             newCreateTemplateResponse
+--
+--         , responseGetCase $
+--             newGetCaseResponse
+--
+--         , responseGetCaseEventConfiguration $
+--             newGetCaseEventConfigurationResponse
+--
+--         , responseGetDomain $
+--             newGetDomainResponse
+--
+--         , responseGetLayout $
+--             newGetLayoutResponse
+--
+--         , responseGetTemplate $
+--             newGetTemplateResponse
+--
+--         , responseListCasesForContact $
+--             newListCasesForContactResponse
+--
+--         , responseListDomains $
+--             newListDomainsResponse
+--
+--         , responseListFieldOptions $
+--             newListFieldOptionsResponse
+--
+--         , responseListFields $
+--             newListFieldsResponse
+--
+--         , responseListLayouts $
+--             newListLayoutsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseListTemplates $
+--             newListTemplatesResponse
+--
+--         , responsePutCaseEventConfiguration $
+--             newPutCaseEventConfigurationResponse
+--
+--         , responseSearchCases $
+--             newSearchCasesResponse
+--
+--         , responseSearchRelatedItems $
+--             newSearchRelatedItemsResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateCase $
+--             newUpdateCaseResponse
+--
+--         , responseUpdateField $
+--             newUpdateFieldResponse
+--
+--         , responseUpdateLayout $
+--             newUpdateLayoutResponse
+--
+--         , responseUpdateTemplate $
+--             newUpdateTemplateResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestBatchGetField :: BatchGetField -> TestTree
+requestBatchGetField =
+  req
+    "BatchGetField"
+    "fixture/BatchGetField.yaml"
+
+requestBatchPutFieldOptions :: BatchPutFieldOptions -> TestTree
+requestBatchPutFieldOptions =
+  req
+    "BatchPutFieldOptions"
+    "fixture/BatchPutFieldOptions.yaml"
+
+requestCreateCase :: CreateCase -> TestTree
+requestCreateCase =
+  req
+    "CreateCase"
+    "fixture/CreateCase.yaml"
+
+requestCreateDomain :: CreateDomain -> TestTree
+requestCreateDomain =
+  req
+    "CreateDomain"
+    "fixture/CreateDomain.yaml"
+
+requestCreateField :: CreateField -> TestTree
+requestCreateField =
+  req
+    "CreateField"
+    "fixture/CreateField.yaml"
+
+requestCreateLayout :: CreateLayout -> TestTree
+requestCreateLayout =
+  req
+    "CreateLayout"
+    "fixture/CreateLayout.yaml"
+
+requestCreateRelatedItem :: CreateRelatedItem -> TestTree
+requestCreateRelatedItem =
+  req
+    "CreateRelatedItem"
+    "fixture/CreateRelatedItem.yaml"
+
+requestCreateTemplate :: CreateTemplate -> TestTree
+requestCreateTemplate =
+  req
+    "CreateTemplate"
+    "fixture/CreateTemplate.yaml"
+
+requestGetCase :: GetCase -> TestTree
+requestGetCase =
+  req
+    "GetCase"
+    "fixture/GetCase.yaml"
+
+requestGetCaseEventConfiguration :: GetCaseEventConfiguration -> TestTree
+requestGetCaseEventConfiguration =
+  req
+    "GetCaseEventConfiguration"
+    "fixture/GetCaseEventConfiguration.yaml"
+
+requestGetDomain :: GetDomain -> TestTree
+requestGetDomain =
+  req
+    "GetDomain"
+    "fixture/GetDomain.yaml"
+
+requestGetLayout :: GetLayout -> TestTree
+requestGetLayout =
+  req
+    "GetLayout"
+    "fixture/GetLayout.yaml"
+
+requestGetTemplate :: GetTemplate -> TestTree
+requestGetTemplate =
+  req
+    "GetTemplate"
+    "fixture/GetTemplate.yaml"
+
+requestListCasesForContact :: ListCasesForContact -> TestTree
+requestListCasesForContact =
+  req
+    "ListCasesForContact"
+    "fixture/ListCasesForContact.yaml"
+
+requestListDomains :: ListDomains -> TestTree
+requestListDomains =
+  req
+    "ListDomains"
+    "fixture/ListDomains.yaml"
+
+requestListFieldOptions :: ListFieldOptions -> TestTree
+requestListFieldOptions =
+  req
+    "ListFieldOptions"
+    "fixture/ListFieldOptions.yaml"
+
+requestListFields :: ListFields -> TestTree
+requestListFields =
+  req
+    "ListFields"
+    "fixture/ListFields.yaml"
+
+requestListLayouts :: ListLayouts -> TestTree
+requestListLayouts =
+  req
+    "ListLayouts"
+    "fixture/ListLayouts.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestListTemplates :: ListTemplates -> TestTree
+requestListTemplates =
+  req
+    "ListTemplates"
+    "fixture/ListTemplates.yaml"
+
+requestPutCaseEventConfiguration :: PutCaseEventConfiguration -> TestTree
+requestPutCaseEventConfiguration =
+  req
+    "PutCaseEventConfiguration"
+    "fixture/PutCaseEventConfiguration.yaml"
+
+requestSearchCases :: SearchCases -> TestTree
+requestSearchCases =
+  req
+    "SearchCases"
+    "fixture/SearchCases.yaml"
+
+requestSearchRelatedItems :: SearchRelatedItems -> TestTree
+requestSearchRelatedItems =
+  req
+    "SearchRelatedItems"
+    "fixture/SearchRelatedItems.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateCase :: UpdateCase -> TestTree
+requestUpdateCase =
+  req
+    "UpdateCase"
+    "fixture/UpdateCase.yaml"
+
+requestUpdateField :: UpdateField -> TestTree
+requestUpdateField =
+  req
+    "UpdateField"
+    "fixture/UpdateField.yaml"
+
+requestUpdateLayout :: UpdateLayout -> TestTree
+requestUpdateLayout =
+  req
+    "UpdateLayout"
+    "fixture/UpdateLayout.yaml"
+
+requestUpdateTemplate :: UpdateTemplate -> TestTree
+requestUpdateTemplate =
+  req
+    "UpdateTemplate"
+    "fixture/UpdateTemplate.yaml"
+
+-- Responses
+
+responseBatchGetField :: BatchGetFieldResponse -> TestTree
+responseBatchGetField =
+  res
+    "BatchGetFieldResponse"
+    "fixture/BatchGetFieldResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchGetField)
+
+responseBatchPutFieldOptions :: BatchPutFieldOptionsResponse -> TestTree
+responseBatchPutFieldOptions =
+  res
+    "BatchPutFieldOptionsResponse"
+    "fixture/BatchPutFieldOptionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchPutFieldOptions)
+
+responseCreateCase :: CreateCaseResponse -> TestTree
+responseCreateCase =
+  res
+    "CreateCaseResponse"
+    "fixture/CreateCaseResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateCase)
+
+responseCreateDomain :: CreateDomainResponse -> TestTree
+responseCreateDomain =
+  res
+    "CreateDomainResponse"
+    "fixture/CreateDomainResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDomain)
+
+responseCreateField :: CreateFieldResponse -> TestTree
+responseCreateField =
+  res
+    "CreateFieldResponse"
+    "fixture/CreateFieldResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateField)
+
+responseCreateLayout :: CreateLayoutResponse -> TestTree
+responseCreateLayout =
+  res
+    "CreateLayoutResponse"
+    "fixture/CreateLayoutResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateLayout)
+
+responseCreateRelatedItem :: CreateRelatedItemResponse -> TestTree
+responseCreateRelatedItem =
+  res
+    "CreateRelatedItemResponse"
+    "fixture/CreateRelatedItemResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateRelatedItem)
+
+responseCreateTemplate :: CreateTemplateResponse -> TestTree
+responseCreateTemplate =
+  res
+    "CreateTemplateResponse"
+    "fixture/CreateTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateTemplate)
+
+responseGetCase :: GetCaseResponse -> TestTree
+responseGetCase =
+  res
+    "GetCaseResponse"
+    "fixture/GetCaseResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetCase)
+
+responseGetCaseEventConfiguration :: GetCaseEventConfigurationResponse -> TestTree
+responseGetCaseEventConfiguration =
+  res
+    "GetCaseEventConfigurationResponse"
+    "fixture/GetCaseEventConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetCaseEventConfiguration)
+
+responseGetDomain :: GetDomainResponse -> TestTree
+responseGetDomain =
+  res
+    "GetDomainResponse"
+    "fixture/GetDomainResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDomain)
+
+responseGetLayout :: GetLayoutResponse -> TestTree
+responseGetLayout =
+  res
+    "GetLayoutResponse"
+    "fixture/GetLayoutResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetLayout)
+
+responseGetTemplate :: GetTemplateResponse -> TestTree
+responseGetTemplate =
+  res
+    "GetTemplateResponse"
+    "fixture/GetTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetTemplate)
+
+responseListCasesForContact :: ListCasesForContactResponse -> TestTree
+responseListCasesForContact =
+  res
+    "ListCasesForContactResponse"
+    "fixture/ListCasesForContactResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListCasesForContact)
+
+responseListDomains :: ListDomainsResponse -> TestTree
+responseListDomains =
+  res
+    "ListDomainsResponse"
+    "fixture/ListDomainsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDomains)
+
+responseListFieldOptions :: ListFieldOptionsResponse -> TestTree
+responseListFieldOptions =
+  res
+    "ListFieldOptionsResponse"
+    "fixture/ListFieldOptionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListFieldOptions)
+
+responseListFields :: ListFieldsResponse -> TestTree
+responseListFields =
+  res
+    "ListFieldsResponse"
+    "fixture/ListFieldsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListFields)
+
+responseListLayouts :: ListLayoutsResponse -> TestTree
+responseListLayouts =
+  res
+    "ListLayoutsResponse"
+    "fixture/ListLayoutsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListLayouts)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseListTemplates :: ListTemplatesResponse -> TestTree
+responseListTemplates =
+  res
+    "ListTemplatesResponse"
+    "fixture/ListTemplatesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTemplates)
+
+responsePutCaseEventConfiguration :: PutCaseEventConfigurationResponse -> TestTree
+responsePutCaseEventConfiguration =
+  res
+    "PutCaseEventConfigurationResponse"
+    "fixture/PutCaseEventConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutCaseEventConfiguration)
+
+responseSearchCases :: SearchCasesResponse -> TestTree
+responseSearchCases =
+  res
+    "SearchCasesResponse"
+    "fixture/SearchCasesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SearchCases)
+
+responseSearchRelatedItems :: SearchRelatedItemsResponse -> TestTree
+responseSearchRelatedItems =
+  res
+    "SearchRelatedItemsResponse"
+    "fixture/SearchRelatedItemsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SearchRelatedItems)
+
+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)
+
+responseUpdateCase :: UpdateCaseResponse -> TestTree
+responseUpdateCase =
+  res
+    "UpdateCaseResponse"
+    "fixture/UpdateCaseResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateCase)
+
+responseUpdateField :: UpdateFieldResponse -> TestTree
+responseUpdateField =
+  res
+    "UpdateFieldResponse"
+    "fixture/UpdateFieldResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateField)
+
+responseUpdateLayout :: UpdateLayoutResponse -> TestTree
+responseUpdateLayout =
+  res
+    "UpdateLayoutResponse"
+    "fixture/UpdateLayoutResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateLayout)
+
+responseUpdateTemplate :: UpdateTemplateResponse -> TestTree
+responseUpdateTemplate =
+  res
+    "UpdateTemplateResponse"
+    "fixture/UpdateTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateTemplate)
