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 AppIntegrations Service SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2020-07-29@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-appintegrations)
+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.AppIntegrationS](http://hackage.haskell.org/package/amazonka-appintegrations/docs/Amazonka-AppIntegrationS.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-appintegrations` 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-appintegrations.cabal b/amazonka-appintegrations.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-appintegrations.cabal
@@ -0,0 +1,104 @@
+cabal-version:      2.2
+name:               amazonka-appintegrations
+version:            2.0
+synopsis:           Amazon AppIntegrations Service SDK.
+homepage:           https://github.com/brendanhay/amazonka
+bug-reports:        https://github.com/brendanhay/amazonka/issues
+license:            MPL-2.0
+license-file:       LICENSE
+author:             Brendan Hay
+maintainer:
+  Brendan Hay <brendan.g.hay+amazonka@gmail.com>, Jack Kelly <jack@jackkelly.name>
+
+copyright:          Copyright (c) 2013-2023 Brendan Hay
+category:           AWS
+build-type:         Simple
+extra-source-files:
+  fixture/*.proto
+  fixture/*.yaml
+  README.md
+  src/.gitkeep
+
+description:
+  Derived from API version @2020-07-29@ 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.AppIntegrationS.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.AppIntegrationS" 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-appintegrations
+
+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.AppIntegrationS
+    Amazonka.AppIntegrationS.CreateDataIntegration
+    Amazonka.AppIntegrationS.CreateEventIntegration
+    Amazonka.AppIntegrationS.DeleteDataIntegration
+    Amazonka.AppIntegrationS.DeleteEventIntegration
+    Amazonka.AppIntegrationS.GetDataIntegration
+    Amazonka.AppIntegrationS.GetEventIntegration
+    Amazonka.AppIntegrationS.Lens
+    Amazonka.AppIntegrationS.ListDataIntegrationAssociations
+    Amazonka.AppIntegrationS.ListDataIntegrations
+    Amazonka.AppIntegrationS.ListEventIntegrationAssociations
+    Amazonka.AppIntegrationS.ListEventIntegrations
+    Amazonka.AppIntegrationS.ListTagsForResource
+    Amazonka.AppIntegrationS.TagResource
+    Amazonka.AppIntegrationS.Types
+    Amazonka.AppIntegrationS.Types.DataIntegrationAssociationSummary
+    Amazonka.AppIntegrationS.Types.DataIntegrationSummary
+    Amazonka.AppIntegrationS.Types.EventFilter
+    Amazonka.AppIntegrationS.Types.EventIntegration
+    Amazonka.AppIntegrationS.Types.EventIntegrationAssociation
+    Amazonka.AppIntegrationS.Types.ScheduleConfiguration
+    Amazonka.AppIntegrationS.UntagResource
+    Amazonka.AppIntegrationS.UpdateDataIntegration
+    Amazonka.AppIntegrationS.UpdateEventIntegration
+    Amazonka.AppIntegrationS.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-appintegrations-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.AppIntegrationS
+    Test.Amazonka.AppIntegrationS.Internal
+    Test.Amazonka.Gen.AppIntegrationS
+
+  build-depends:
+    , amazonka-appintegrations
+    , 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/CreateDataIntegration.yaml b/fixture/CreateDataIntegration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDataIntegration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/app-integrations/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  app-integrations.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/CreateDataIntegrationResponse.proto b/fixture/CreateDataIntegrationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDataIntegrationResponse.proto
diff --git a/fixture/CreateEventIntegration.yaml b/fixture/CreateEventIntegration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateEventIntegration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/app-integrations/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  app-integrations.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/CreateEventIntegrationResponse.proto b/fixture/CreateEventIntegrationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateEventIntegrationResponse.proto
diff --git a/fixture/DeleteDataIntegration.yaml b/fixture/DeleteDataIntegration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDataIntegration.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/app-integrations/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  app-integrations.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/DeleteDataIntegrationResponse.proto b/fixture/DeleteDataIntegrationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDataIntegrationResponse.proto
diff --git a/fixture/DeleteEventIntegration.yaml b/fixture/DeleteEventIntegration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEventIntegration.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/app-integrations/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  app-integrations.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/DeleteEventIntegrationResponse.proto b/fixture/DeleteEventIntegrationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEventIntegrationResponse.proto
diff --git a/fixture/GetDataIntegration.yaml b/fixture/GetDataIntegration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDataIntegration.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/app-integrations/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  app-integrations.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/GetDataIntegrationResponse.proto b/fixture/GetDataIntegrationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDataIntegrationResponse.proto
diff --git a/fixture/GetEventIntegration.yaml b/fixture/GetEventIntegration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetEventIntegration.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/app-integrations/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  app-integrations.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/GetEventIntegrationResponse.proto b/fixture/GetEventIntegrationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetEventIntegrationResponse.proto
diff --git a/fixture/ListDataIntegrationAssociations.yaml b/fixture/ListDataIntegrationAssociations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDataIntegrationAssociations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/app-integrations/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  app-integrations.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/ListDataIntegrationAssociationsResponse.proto b/fixture/ListDataIntegrationAssociationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDataIntegrationAssociationsResponse.proto
diff --git a/fixture/ListDataIntegrations.yaml b/fixture/ListDataIntegrations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDataIntegrations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/app-integrations/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  app-integrations.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/ListDataIntegrationsResponse.proto b/fixture/ListDataIntegrationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDataIntegrationsResponse.proto
diff --git a/fixture/ListEventIntegrationAssociations.yaml b/fixture/ListEventIntegrationAssociations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListEventIntegrationAssociations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/app-integrations/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  app-integrations.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/ListEventIntegrationAssociationsResponse.proto b/fixture/ListEventIntegrationAssociationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListEventIntegrationAssociationsResponse.proto
diff --git a/fixture/ListEventIntegrations.yaml b/fixture/ListEventIntegrations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListEventIntegrations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/app-integrations/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  app-integrations.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/ListEventIntegrationsResponse.proto b/fixture/ListEventIntegrationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListEventIntegrationsResponse.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/app-integrations/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  app-integrations.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/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/app-integrations/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  app-integrations.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/app-integrations/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  app-integrations.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/UpdateDataIntegration.yaml b/fixture/UpdateDataIntegration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDataIntegration.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/app-integrations/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  app-integrations.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/UpdateDataIntegrationResponse.proto b/fixture/UpdateDataIntegrationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDataIntegrationResponse.proto
diff --git a/fixture/UpdateEventIntegration.yaml b/fixture/UpdateEventIntegration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateEventIntegration.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/app-integrations/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  app-integrations.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/UpdateEventIntegrationResponse.proto b/fixture/UpdateEventIntegrationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateEventIntegrationResponse.proto
diff --git a/gen/Amazonka/AppIntegrationS.hs b/gen/Amazonka/AppIntegrationS.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppIntegrationS.hs
@@ -0,0 +1,219 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.AppIntegrationS
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from API version @2020-07-29@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- The Amazon AppIntegrations service enables you to configure and reuse
+-- connections to external applications.
+--
+-- For information about how you can use external applications with Amazon
+-- Connect, see
+-- <https://docs.aws.amazon.com/connect/latest/adminguide/crm.html Set up pre-built integrations>
+-- and
+-- <https://docs.aws.amazon.com/connect/latest/adminguide/amazon-connect-wisdom.html Deliver information to agents using Amazon Connect Wisdom>
+-- in the /Amazon Connect Administrator Guide/.
+module Amazonka.AppIntegrationS
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** DuplicateResourceException
+    _DuplicateResourceException,
+
+    -- ** InternalServiceError
+    _InternalServiceError,
+
+    -- ** InvalidRequestException
+    _InvalidRequestException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ResourceQuotaExceededException
+    _ResourceQuotaExceededException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CreateDataIntegration
+    CreateDataIntegration (CreateDataIntegration'),
+    newCreateDataIntegration,
+    CreateDataIntegrationResponse (CreateDataIntegrationResponse'),
+    newCreateDataIntegrationResponse,
+
+    -- ** CreateEventIntegration
+    CreateEventIntegration (CreateEventIntegration'),
+    newCreateEventIntegration,
+    CreateEventIntegrationResponse (CreateEventIntegrationResponse'),
+    newCreateEventIntegrationResponse,
+
+    -- ** DeleteDataIntegration
+    DeleteDataIntegration (DeleteDataIntegration'),
+    newDeleteDataIntegration,
+    DeleteDataIntegrationResponse (DeleteDataIntegrationResponse'),
+    newDeleteDataIntegrationResponse,
+
+    -- ** DeleteEventIntegration
+    DeleteEventIntegration (DeleteEventIntegration'),
+    newDeleteEventIntegration,
+    DeleteEventIntegrationResponse (DeleteEventIntegrationResponse'),
+    newDeleteEventIntegrationResponse,
+
+    -- ** GetDataIntegration
+    GetDataIntegration (GetDataIntegration'),
+    newGetDataIntegration,
+    GetDataIntegrationResponse (GetDataIntegrationResponse'),
+    newGetDataIntegrationResponse,
+
+    -- ** GetEventIntegration
+    GetEventIntegration (GetEventIntegration'),
+    newGetEventIntegration,
+    GetEventIntegrationResponse (GetEventIntegrationResponse'),
+    newGetEventIntegrationResponse,
+
+    -- ** ListDataIntegrationAssociations
+    ListDataIntegrationAssociations (ListDataIntegrationAssociations'),
+    newListDataIntegrationAssociations,
+    ListDataIntegrationAssociationsResponse (ListDataIntegrationAssociationsResponse'),
+    newListDataIntegrationAssociationsResponse,
+
+    -- ** ListDataIntegrations
+    ListDataIntegrations (ListDataIntegrations'),
+    newListDataIntegrations,
+    ListDataIntegrationsResponse (ListDataIntegrationsResponse'),
+    newListDataIntegrationsResponse,
+
+    -- ** ListEventIntegrationAssociations
+    ListEventIntegrationAssociations (ListEventIntegrationAssociations'),
+    newListEventIntegrationAssociations,
+    ListEventIntegrationAssociationsResponse (ListEventIntegrationAssociationsResponse'),
+    newListEventIntegrationAssociationsResponse,
+
+    -- ** ListEventIntegrations
+    ListEventIntegrations (ListEventIntegrations'),
+    newListEventIntegrations,
+    ListEventIntegrationsResponse (ListEventIntegrationsResponse'),
+    newListEventIntegrationsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateDataIntegration
+    UpdateDataIntegration (UpdateDataIntegration'),
+    newUpdateDataIntegration,
+    UpdateDataIntegrationResponse (UpdateDataIntegrationResponse'),
+    newUpdateDataIntegrationResponse,
+
+    -- ** UpdateEventIntegration
+    UpdateEventIntegration (UpdateEventIntegration'),
+    newUpdateEventIntegration,
+    UpdateEventIntegrationResponse (UpdateEventIntegrationResponse'),
+    newUpdateEventIntegrationResponse,
+
+    -- * Types
+
+    -- ** DataIntegrationAssociationSummary
+    DataIntegrationAssociationSummary (DataIntegrationAssociationSummary'),
+    newDataIntegrationAssociationSummary,
+
+    -- ** DataIntegrationSummary
+    DataIntegrationSummary (DataIntegrationSummary'),
+    newDataIntegrationSummary,
+
+    -- ** EventFilter
+    EventFilter (EventFilter'),
+    newEventFilter,
+
+    -- ** EventIntegration
+    EventIntegration (EventIntegration'),
+    newEventIntegration,
+
+    -- ** EventIntegrationAssociation
+    EventIntegrationAssociation (EventIntegrationAssociation'),
+    newEventIntegrationAssociation,
+
+    -- ** ScheduleConfiguration
+    ScheduleConfiguration (ScheduleConfiguration'),
+    newScheduleConfiguration,
+  )
+where
+
+import Amazonka.AppIntegrationS.CreateDataIntegration
+import Amazonka.AppIntegrationS.CreateEventIntegration
+import Amazonka.AppIntegrationS.DeleteDataIntegration
+import Amazonka.AppIntegrationS.DeleteEventIntegration
+import Amazonka.AppIntegrationS.GetDataIntegration
+import Amazonka.AppIntegrationS.GetEventIntegration
+import Amazonka.AppIntegrationS.Lens
+import Amazonka.AppIntegrationS.ListDataIntegrationAssociations
+import Amazonka.AppIntegrationS.ListDataIntegrations
+import Amazonka.AppIntegrationS.ListEventIntegrationAssociations
+import Amazonka.AppIntegrationS.ListEventIntegrations
+import Amazonka.AppIntegrationS.ListTagsForResource
+import Amazonka.AppIntegrationS.TagResource
+import Amazonka.AppIntegrationS.Types
+import Amazonka.AppIntegrationS.UntagResource
+import Amazonka.AppIntegrationS.UpdateDataIntegration
+import Amazonka.AppIntegrationS.UpdateEventIntegration
+import Amazonka.AppIntegrationS.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 'AppIntegrationS'.
+
+-- $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/AppIntegrationS/CreateDataIntegration.hs b/gen/Amazonka/AppIntegrationS/CreateDataIntegration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppIntegrationS/CreateDataIntegration.hs
@@ -0,0 +1,355 @@
+{-# 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.AppIntegrationS.CreateDataIntegration
+-- 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 persists a DataIntegration resource.
+--
+-- You cannot create a DataIntegration association for a DataIntegration
+-- that has been previously associated. Use a different DataIntegration, or
+-- recreate the DataIntegration using the @CreateDataIntegration@ API.
+module Amazonka.AppIntegrationS.CreateDataIntegration
+  ( -- * Creating a Request
+    CreateDataIntegration (..),
+    newCreateDataIntegration,
+
+    -- * Request Lenses
+    createDataIntegration_clientToken,
+    createDataIntegration_description,
+    createDataIntegration_kmsKey,
+    createDataIntegration_scheduleConfig,
+    createDataIntegration_sourceURI,
+    createDataIntegration_tags,
+    createDataIntegration_name,
+
+    -- * Destructuring the Response
+    CreateDataIntegrationResponse (..),
+    newCreateDataIntegrationResponse,
+
+    -- * Response Lenses
+    createDataIntegrationResponse_arn,
+    createDataIntegrationResponse_clientToken,
+    createDataIntegrationResponse_description,
+    createDataIntegrationResponse_id,
+    createDataIntegrationResponse_kmsKey,
+    createDataIntegrationResponse_name,
+    createDataIntegrationResponse_scheduleConfiguration,
+    createDataIntegrationResponse_sourceURI,
+    createDataIntegrationResponse_tags,
+    createDataIntegrationResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppIntegrationS.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:/ 'newCreateDataIntegration' smart constructor.
+data CreateDataIntegration = CreateDataIntegration'
+  { -- | A unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description of the DataIntegration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The KMS key for the DataIntegration.
+    kmsKey :: Prelude.Maybe Prelude.Text,
+    -- | The name of the data and how often it should be pulled from the source.
+    scheduleConfig :: Prelude.Maybe ScheduleConfiguration,
+    -- | The URI of the data source.
+    sourceURI :: Prelude.Maybe Prelude.Text,
+    -- | One or more tags.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the DataIntegration.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDataIntegration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createDataIntegration_clientToken' - A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'description', 'createDataIntegration_description' - A description of the DataIntegration.
+--
+-- 'kmsKey', 'createDataIntegration_kmsKey' - The KMS key for the DataIntegration.
+--
+-- 'scheduleConfig', 'createDataIntegration_scheduleConfig' - The name of the data and how often it should be pulled from the source.
+--
+-- 'sourceURI', 'createDataIntegration_sourceURI' - The URI of the data source.
+--
+-- 'tags', 'createDataIntegration_tags' - One or more tags.
+--
+-- 'name', 'createDataIntegration_name' - The name of the DataIntegration.
+newCreateDataIntegration ::
+  -- | 'name'
+  Prelude.Text ->
+  CreateDataIntegration
+newCreateDataIntegration pName_ =
+  CreateDataIntegration'
+    { clientToken =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      kmsKey = Prelude.Nothing,
+      scheduleConfig = Prelude.Nothing,
+      sourceURI = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+createDataIntegration_clientToken :: Lens.Lens' CreateDataIntegration (Prelude.Maybe Prelude.Text)
+createDataIntegration_clientToken = Lens.lens (\CreateDataIntegration' {clientToken} -> clientToken) (\s@CreateDataIntegration' {} a -> s {clientToken = a} :: CreateDataIntegration)
+
+-- | A description of the DataIntegration.
+createDataIntegration_description :: Lens.Lens' CreateDataIntegration (Prelude.Maybe Prelude.Text)
+createDataIntegration_description = Lens.lens (\CreateDataIntegration' {description} -> description) (\s@CreateDataIntegration' {} a -> s {description = a} :: CreateDataIntegration)
+
+-- | The KMS key for the DataIntegration.
+createDataIntegration_kmsKey :: Lens.Lens' CreateDataIntegration (Prelude.Maybe Prelude.Text)
+createDataIntegration_kmsKey = Lens.lens (\CreateDataIntegration' {kmsKey} -> kmsKey) (\s@CreateDataIntegration' {} a -> s {kmsKey = a} :: CreateDataIntegration)
+
+-- | The name of the data and how often it should be pulled from the source.
+createDataIntegration_scheduleConfig :: Lens.Lens' CreateDataIntegration (Prelude.Maybe ScheduleConfiguration)
+createDataIntegration_scheduleConfig = Lens.lens (\CreateDataIntegration' {scheduleConfig} -> scheduleConfig) (\s@CreateDataIntegration' {} a -> s {scheduleConfig = a} :: CreateDataIntegration)
+
+-- | The URI of the data source.
+createDataIntegration_sourceURI :: Lens.Lens' CreateDataIntegration (Prelude.Maybe Prelude.Text)
+createDataIntegration_sourceURI = Lens.lens (\CreateDataIntegration' {sourceURI} -> sourceURI) (\s@CreateDataIntegration' {} a -> s {sourceURI = a} :: CreateDataIntegration)
+
+-- | One or more tags.
+createDataIntegration_tags :: Lens.Lens' CreateDataIntegration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createDataIntegration_tags = Lens.lens (\CreateDataIntegration' {tags} -> tags) (\s@CreateDataIntegration' {} a -> s {tags = a} :: CreateDataIntegration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the DataIntegration.
+createDataIntegration_name :: Lens.Lens' CreateDataIntegration Prelude.Text
+createDataIntegration_name = Lens.lens (\CreateDataIntegration' {name} -> name) (\s@CreateDataIntegration' {} a -> s {name = a} :: CreateDataIntegration)
+
+instance Core.AWSRequest CreateDataIntegration where
+  type
+    AWSResponse CreateDataIntegration =
+      CreateDataIntegrationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateDataIntegrationResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "ClientToken")
+            Prelude.<*> (x Data..?> "Description")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (x Data..?> "KmsKey")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "ScheduleConfiguration")
+            Prelude.<*> (x Data..?> "SourceURI")
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateDataIntegration where
+  hashWithSalt _salt CreateDataIntegration' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` kmsKey
+      `Prelude.hashWithSalt` scheduleConfig
+      `Prelude.hashWithSalt` sourceURI
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateDataIntegration where
+  rnf CreateDataIntegration' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf kmsKey
+      `Prelude.seq` Prelude.rnf scheduleConfig
+      `Prelude.seq` Prelude.rnf sourceURI
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateDataIntegration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateDataIntegration where
+  toJSON CreateDataIntegration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientToken" Data..=) Prelude.<$> clientToken,
+            ("Description" Data..=) Prelude.<$> description,
+            ("KmsKey" Data..=) Prelude.<$> kmsKey,
+            ("ScheduleConfig" Data..=)
+              Prelude.<$> scheduleConfig,
+            ("SourceURI" Data..=) Prelude.<$> sourceURI,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateDataIntegration where
+  toPath = Prelude.const "/dataIntegrations"
+
+instance Data.ToQuery CreateDataIntegration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateDataIntegrationResponse' smart constructor.
+data CreateDataIntegrationResponse = CreateDataIntegrationResponse'
+  { -- | The Amazon Resource Name (ARN)
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | A unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description of the DataIntegration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The KMS key for the DataIntegration.
+    kmsKey :: Prelude.Maybe Prelude.Text,
+    -- | The name of the DataIntegration.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The name of the data and how often it should be pulled from the source.
+    scheduleConfiguration :: Prelude.Maybe ScheduleConfiguration,
+    -- | The URI of the data source.
+    sourceURI :: Prelude.Maybe Prelude.Text,
+    -- | One or more tags.
+    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 'CreateDataIntegrationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createDataIntegrationResponse_arn' - The Amazon Resource Name (ARN)
+--
+-- 'clientToken', 'createDataIntegrationResponse_clientToken' - A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'description', 'createDataIntegrationResponse_description' - A description of the DataIntegration.
+--
+-- 'id', 'createDataIntegrationResponse_id' - A unique identifier.
+--
+-- 'kmsKey', 'createDataIntegrationResponse_kmsKey' - The KMS key for the DataIntegration.
+--
+-- 'name', 'createDataIntegrationResponse_name' - The name of the DataIntegration.
+--
+-- 'scheduleConfiguration', 'createDataIntegrationResponse_scheduleConfiguration' - The name of the data and how often it should be pulled from the source.
+--
+-- 'sourceURI', 'createDataIntegrationResponse_sourceURI' - The URI of the data source.
+--
+-- 'tags', 'createDataIntegrationResponse_tags' - One or more tags.
+--
+-- 'httpStatus', 'createDataIntegrationResponse_httpStatus' - The response's http status code.
+newCreateDataIntegrationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateDataIntegrationResponse
+newCreateDataIntegrationResponse pHttpStatus_ =
+  CreateDataIntegrationResponse'
+    { arn =
+        Prelude.Nothing,
+      clientToken = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      kmsKey = Prelude.Nothing,
+      name = Prelude.Nothing,
+      scheduleConfiguration = Prelude.Nothing,
+      sourceURI = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN)
+createDataIntegrationResponse_arn :: Lens.Lens' CreateDataIntegrationResponse (Prelude.Maybe Prelude.Text)
+createDataIntegrationResponse_arn = Lens.lens (\CreateDataIntegrationResponse' {arn} -> arn) (\s@CreateDataIntegrationResponse' {} a -> s {arn = a} :: CreateDataIntegrationResponse)
+
+-- | A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+createDataIntegrationResponse_clientToken :: Lens.Lens' CreateDataIntegrationResponse (Prelude.Maybe Prelude.Text)
+createDataIntegrationResponse_clientToken = Lens.lens (\CreateDataIntegrationResponse' {clientToken} -> clientToken) (\s@CreateDataIntegrationResponse' {} a -> s {clientToken = a} :: CreateDataIntegrationResponse)
+
+-- | A description of the DataIntegration.
+createDataIntegrationResponse_description :: Lens.Lens' CreateDataIntegrationResponse (Prelude.Maybe Prelude.Text)
+createDataIntegrationResponse_description = Lens.lens (\CreateDataIntegrationResponse' {description} -> description) (\s@CreateDataIntegrationResponse' {} a -> s {description = a} :: CreateDataIntegrationResponse)
+
+-- | A unique identifier.
+createDataIntegrationResponse_id :: Lens.Lens' CreateDataIntegrationResponse (Prelude.Maybe Prelude.Text)
+createDataIntegrationResponse_id = Lens.lens (\CreateDataIntegrationResponse' {id} -> id) (\s@CreateDataIntegrationResponse' {} a -> s {id = a} :: CreateDataIntegrationResponse)
+
+-- | The KMS key for the DataIntegration.
+createDataIntegrationResponse_kmsKey :: Lens.Lens' CreateDataIntegrationResponse (Prelude.Maybe Prelude.Text)
+createDataIntegrationResponse_kmsKey = Lens.lens (\CreateDataIntegrationResponse' {kmsKey} -> kmsKey) (\s@CreateDataIntegrationResponse' {} a -> s {kmsKey = a} :: CreateDataIntegrationResponse)
+
+-- | The name of the DataIntegration.
+createDataIntegrationResponse_name :: Lens.Lens' CreateDataIntegrationResponse (Prelude.Maybe Prelude.Text)
+createDataIntegrationResponse_name = Lens.lens (\CreateDataIntegrationResponse' {name} -> name) (\s@CreateDataIntegrationResponse' {} a -> s {name = a} :: CreateDataIntegrationResponse)
+
+-- | The name of the data and how often it should be pulled from the source.
+createDataIntegrationResponse_scheduleConfiguration :: Lens.Lens' CreateDataIntegrationResponse (Prelude.Maybe ScheduleConfiguration)
+createDataIntegrationResponse_scheduleConfiguration = Lens.lens (\CreateDataIntegrationResponse' {scheduleConfiguration} -> scheduleConfiguration) (\s@CreateDataIntegrationResponse' {} a -> s {scheduleConfiguration = a} :: CreateDataIntegrationResponse)
+
+-- | The URI of the data source.
+createDataIntegrationResponse_sourceURI :: Lens.Lens' CreateDataIntegrationResponse (Prelude.Maybe Prelude.Text)
+createDataIntegrationResponse_sourceURI = Lens.lens (\CreateDataIntegrationResponse' {sourceURI} -> sourceURI) (\s@CreateDataIntegrationResponse' {} a -> s {sourceURI = a} :: CreateDataIntegrationResponse)
+
+-- | One or more tags.
+createDataIntegrationResponse_tags :: Lens.Lens' CreateDataIntegrationResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createDataIntegrationResponse_tags = Lens.lens (\CreateDataIntegrationResponse' {tags} -> tags) (\s@CreateDataIntegrationResponse' {} a -> s {tags = a} :: CreateDataIntegrationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createDataIntegrationResponse_httpStatus :: Lens.Lens' CreateDataIntegrationResponse Prelude.Int
+createDataIntegrationResponse_httpStatus = Lens.lens (\CreateDataIntegrationResponse' {httpStatus} -> httpStatus) (\s@CreateDataIntegrationResponse' {} a -> s {httpStatus = a} :: CreateDataIntegrationResponse)
+
+instance Prelude.NFData CreateDataIntegrationResponse where
+  rnf CreateDataIntegrationResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf kmsKey
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf scheduleConfiguration
+      `Prelude.seq` Prelude.rnf sourceURI
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppIntegrationS/CreateEventIntegration.hs b/gen/Amazonka/AppIntegrationS/CreateEventIntegration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppIntegrationS/CreateEventIntegration.hs
@@ -0,0 +1,253 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppIntegrationS.CreateEventIntegration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an EventIntegration, given a specified name, description, and a
+-- reference to an Amazon EventBridge bus in your account and a partner
+-- event source that pushes events to that bus. No objects are created in
+-- the your account, only metadata that is persisted on the
+-- EventIntegration control plane.
+module Amazonka.AppIntegrationS.CreateEventIntegration
+  ( -- * Creating a Request
+    CreateEventIntegration (..),
+    newCreateEventIntegration,
+
+    -- * Request Lenses
+    createEventIntegration_clientToken,
+    createEventIntegration_description,
+    createEventIntegration_tags,
+    createEventIntegration_name,
+    createEventIntegration_eventFilter,
+    createEventIntegration_eventBridgeBus,
+
+    -- * Destructuring the Response
+    CreateEventIntegrationResponse (..),
+    newCreateEventIntegrationResponse,
+
+    -- * Response Lenses
+    createEventIntegrationResponse_eventIntegrationArn,
+    createEventIntegrationResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppIntegrationS.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:/ 'newCreateEventIntegration' smart constructor.
+data CreateEventIntegration = CreateEventIntegration'
+  { -- | A unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The description of the event integration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | One or more tags.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the event integration.
+    name :: Prelude.Text,
+    -- | The event filter.
+    eventFilter :: EventFilter,
+    -- | The EventBridge bus.
+    eventBridgeBus :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateEventIntegration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createEventIntegration_clientToken' - A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'description', 'createEventIntegration_description' - The description of the event integration.
+--
+-- 'tags', 'createEventIntegration_tags' - One or more tags.
+--
+-- 'name', 'createEventIntegration_name' - The name of the event integration.
+--
+-- 'eventFilter', 'createEventIntegration_eventFilter' - The event filter.
+--
+-- 'eventBridgeBus', 'createEventIntegration_eventBridgeBus' - The EventBridge bus.
+newCreateEventIntegration ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'eventFilter'
+  EventFilter ->
+  -- | 'eventBridgeBus'
+  Prelude.Text ->
+  CreateEventIntegration
+newCreateEventIntegration
+  pName_
+  pEventFilter_
+  pEventBridgeBus_ =
+    CreateEventIntegration'
+      { clientToken =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        name = pName_,
+        eventFilter = pEventFilter_,
+        eventBridgeBus = pEventBridgeBus_
+      }
+
+-- | A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+createEventIntegration_clientToken :: Lens.Lens' CreateEventIntegration (Prelude.Maybe Prelude.Text)
+createEventIntegration_clientToken = Lens.lens (\CreateEventIntegration' {clientToken} -> clientToken) (\s@CreateEventIntegration' {} a -> s {clientToken = a} :: CreateEventIntegration)
+
+-- | The description of the event integration.
+createEventIntegration_description :: Lens.Lens' CreateEventIntegration (Prelude.Maybe Prelude.Text)
+createEventIntegration_description = Lens.lens (\CreateEventIntegration' {description} -> description) (\s@CreateEventIntegration' {} a -> s {description = a} :: CreateEventIntegration)
+
+-- | One or more tags.
+createEventIntegration_tags :: Lens.Lens' CreateEventIntegration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createEventIntegration_tags = Lens.lens (\CreateEventIntegration' {tags} -> tags) (\s@CreateEventIntegration' {} a -> s {tags = a} :: CreateEventIntegration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the event integration.
+createEventIntegration_name :: Lens.Lens' CreateEventIntegration Prelude.Text
+createEventIntegration_name = Lens.lens (\CreateEventIntegration' {name} -> name) (\s@CreateEventIntegration' {} a -> s {name = a} :: CreateEventIntegration)
+
+-- | The event filter.
+createEventIntegration_eventFilter :: Lens.Lens' CreateEventIntegration EventFilter
+createEventIntegration_eventFilter = Lens.lens (\CreateEventIntegration' {eventFilter} -> eventFilter) (\s@CreateEventIntegration' {} a -> s {eventFilter = a} :: CreateEventIntegration)
+
+-- | The EventBridge bus.
+createEventIntegration_eventBridgeBus :: Lens.Lens' CreateEventIntegration Prelude.Text
+createEventIntegration_eventBridgeBus = Lens.lens (\CreateEventIntegration' {eventBridgeBus} -> eventBridgeBus) (\s@CreateEventIntegration' {} a -> s {eventBridgeBus = a} :: CreateEventIntegration)
+
+instance Core.AWSRequest CreateEventIntegration where
+  type
+    AWSResponse CreateEventIntegration =
+      CreateEventIntegrationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateEventIntegrationResponse'
+            Prelude.<$> (x Data..?> "EventIntegrationArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateEventIntegration where
+  hashWithSalt _salt CreateEventIntegration' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` eventFilter
+      `Prelude.hashWithSalt` eventBridgeBus
+
+instance Prelude.NFData CreateEventIntegration where
+  rnf CreateEventIntegration' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf eventFilter
+      `Prelude.seq` Prelude.rnf eventBridgeBus
+
+instance Data.ToHeaders CreateEventIntegration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateEventIntegration where
+  toJSON CreateEventIntegration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientToken" Data..=) Prelude.<$> clientToken,
+            ("Description" Data..=) Prelude.<$> description,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("EventFilter" Data..= eventFilter),
+            Prelude.Just
+              ("EventBridgeBus" Data..= eventBridgeBus)
+          ]
+      )
+
+instance Data.ToPath CreateEventIntegration where
+  toPath = Prelude.const "/eventIntegrations"
+
+instance Data.ToQuery CreateEventIntegration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateEventIntegrationResponse' smart constructor.
+data CreateEventIntegrationResponse = CreateEventIntegrationResponse'
+  { -- | The Amazon Resource Name (ARN) of the event integration.
+    eventIntegrationArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateEventIntegrationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eventIntegrationArn', 'createEventIntegrationResponse_eventIntegrationArn' - The Amazon Resource Name (ARN) of the event integration.
+--
+-- 'httpStatus', 'createEventIntegrationResponse_httpStatus' - The response's http status code.
+newCreateEventIntegrationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateEventIntegrationResponse
+newCreateEventIntegrationResponse pHttpStatus_ =
+  CreateEventIntegrationResponse'
+    { eventIntegrationArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the event integration.
+createEventIntegrationResponse_eventIntegrationArn :: Lens.Lens' CreateEventIntegrationResponse (Prelude.Maybe Prelude.Text)
+createEventIntegrationResponse_eventIntegrationArn = Lens.lens (\CreateEventIntegrationResponse' {eventIntegrationArn} -> eventIntegrationArn) (\s@CreateEventIntegrationResponse' {} a -> s {eventIntegrationArn = a} :: CreateEventIntegrationResponse)
+
+-- | The response's http status code.
+createEventIntegrationResponse_httpStatus :: Lens.Lens' CreateEventIntegrationResponse Prelude.Int
+createEventIntegrationResponse_httpStatus = Lens.lens (\CreateEventIntegrationResponse' {httpStatus} -> httpStatus) (\s@CreateEventIntegrationResponse' {} a -> s {httpStatus = a} :: CreateEventIntegrationResponse)
+
+instance
+  Prelude.NFData
+    CreateEventIntegrationResponse
+  where
+  rnf CreateEventIntegrationResponse' {..} =
+    Prelude.rnf eventIntegrationArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppIntegrationS/DeleteDataIntegration.hs b/gen/Amazonka/AppIntegrationS/DeleteDataIntegration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppIntegrationS/DeleteDataIntegration.hs
@@ -0,0 +1,162 @@
+{-# 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.AppIntegrationS.DeleteDataIntegration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the DataIntegration. Only DataIntegrations that don\'t have any
+-- DataIntegrationAssociations can be deleted. Deleting a DataIntegration
+-- also deletes the underlying Amazon AppFlow flow and service linked role.
+--
+-- You cannot create a DataIntegration association for a DataIntegration
+-- that has been previously associated. Use a different DataIntegration, or
+-- recreate the DataIntegration using the
+-- <https://docs.aws.amazon.com/appintegrations/latest/APIReference/API_CreateDataIntegration.html CreateDataIntegration>
+-- API.
+module Amazonka.AppIntegrationS.DeleteDataIntegration
+  ( -- * Creating a Request
+    DeleteDataIntegration (..),
+    newDeleteDataIntegration,
+
+    -- * Request Lenses
+    deleteDataIntegration_dataIntegrationIdentifier,
+
+    -- * Destructuring the Response
+    DeleteDataIntegrationResponse (..),
+    newDeleteDataIntegrationResponse,
+
+    -- * Response Lenses
+    deleteDataIntegrationResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppIntegrationS.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:/ 'newDeleteDataIntegration' smart constructor.
+data DeleteDataIntegration = DeleteDataIntegration'
+  { -- | A unique identifier for the DataIntegration.
+    dataIntegrationIdentifier :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDataIntegration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataIntegrationIdentifier', 'deleteDataIntegration_dataIntegrationIdentifier' - A unique identifier for the DataIntegration.
+newDeleteDataIntegration ::
+  -- | 'dataIntegrationIdentifier'
+  Prelude.Text ->
+  DeleteDataIntegration
+newDeleteDataIntegration pDataIntegrationIdentifier_ =
+  DeleteDataIntegration'
+    { dataIntegrationIdentifier =
+        pDataIntegrationIdentifier_
+    }
+
+-- | A unique identifier for the DataIntegration.
+deleteDataIntegration_dataIntegrationIdentifier :: Lens.Lens' DeleteDataIntegration Prelude.Text
+deleteDataIntegration_dataIntegrationIdentifier = Lens.lens (\DeleteDataIntegration' {dataIntegrationIdentifier} -> dataIntegrationIdentifier) (\s@DeleteDataIntegration' {} a -> s {dataIntegrationIdentifier = a} :: DeleteDataIntegration)
+
+instance Core.AWSRequest DeleteDataIntegration where
+  type
+    AWSResponse DeleteDataIntegration =
+      DeleteDataIntegrationResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteDataIntegrationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteDataIntegration where
+  hashWithSalt _salt DeleteDataIntegration' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataIntegrationIdentifier
+
+instance Prelude.NFData DeleteDataIntegration where
+  rnf DeleteDataIntegration' {..} =
+    Prelude.rnf dataIntegrationIdentifier
+
+instance Data.ToHeaders DeleteDataIntegration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteDataIntegration where
+  toPath DeleteDataIntegration' {..} =
+    Prelude.mconcat
+      [ "/dataIntegrations/",
+        Data.toBS dataIntegrationIdentifier
+      ]
+
+instance Data.ToQuery DeleteDataIntegration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteDataIntegrationResponse' smart constructor.
+data DeleteDataIntegrationResponse = DeleteDataIntegrationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDataIntegrationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteDataIntegrationResponse_httpStatus' - The response's http status code.
+newDeleteDataIntegrationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteDataIntegrationResponse
+newDeleteDataIntegrationResponse pHttpStatus_ =
+  DeleteDataIntegrationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteDataIntegrationResponse_httpStatus :: Lens.Lens' DeleteDataIntegrationResponse Prelude.Int
+deleteDataIntegrationResponse_httpStatus = Lens.lens (\DeleteDataIntegrationResponse' {httpStatus} -> httpStatus) (\s@DeleteDataIntegrationResponse' {} a -> s {httpStatus = a} :: DeleteDataIntegrationResponse)
+
+instance Prelude.NFData DeleteDataIntegrationResponse where
+  rnf DeleteDataIntegrationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppIntegrationS/DeleteEventIntegration.hs b/gen/Amazonka/AppIntegrationS/DeleteEventIntegration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppIntegrationS/DeleteEventIntegration.hs
@@ -0,0 +1,151 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppIntegrationS.DeleteEventIntegration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified existing event integration. If the event
+-- integration is associated with clients, the request is rejected.
+module Amazonka.AppIntegrationS.DeleteEventIntegration
+  ( -- * Creating a Request
+    DeleteEventIntegration (..),
+    newDeleteEventIntegration,
+
+    -- * Request Lenses
+    deleteEventIntegration_name,
+
+    -- * Destructuring the Response
+    DeleteEventIntegrationResponse (..),
+    newDeleteEventIntegrationResponse,
+
+    -- * Response Lenses
+    deleteEventIntegrationResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppIntegrationS.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:/ 'newDeleteEventIntegration' smart constructor.
+data DeleteEventIntegration = DeleteEventIntegration'
+  { -- | The name of the event integration.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEventIntegration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteEventIntegration_name' - The name of the event integration.
+newDeleteEventIntegration ::
+  -- | 'name'
+  Prelude.Text ->
+  DeleteEventIntegration
+newDeleteEventIntegration pName_ =
+  DeleteEventIntegration' {name = pName_}
+
+-- | The name of the event integration.
+deleteEventIntegration_name :: Lens.Lens' DeleteEventIntegration Prelude.Text
+deleteEventIntegration_name = Lens.lens (\DeleteEventIntegration' {name} -> name) (\s@DeleteEventIntegration' {} a -> s {name = a} :: DeleteEventIntegration)
+
+instance Core.AWSRequest DeleteEventIntegration where
+  type
+    AWSResponse DeleteEventIntegration =
+      DeleteEventIntegrationResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteEventIntegrationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteEventIntegration where
+  hashWithSalt _salt DeleteEventIntegration' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DeleteEventIntegration where
+  rnf DeleteEventIntegration' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DeleteEventIntegration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteEventIntegration where
+  toPath DeleteEventIntegration' {..} =
+    Prelude.mconcat
+      ["/eventIntegrations/", Data.toBS name]
+
+instance Data.ToQuery DeleteEventIntegration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteEventIntegrationResponse' smart constructor.
+data DeleteEventIntegrationResponse = DeleteEventIntegrationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEventIntegrationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteEventIntegrationResponse_httpStatus' - The response's http status code.
+newDeleteEventIntegrationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteEventIntegrationResponse
+newDeleteEventIntegrationResponse pHttpStatus_ =
+  DeleteEventIntegrationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteEventIntegrationResponse_httpStatus :: Lens.Lens' DeleteEventIntegrationResponse Prelude.Int
+deleteEventIntegrationResponse_httpStatus = Lens.lens (\DeleteEventIntegrationResponse' {httpStatus} -> httpStatus) (\s@DeleteEventIntegrationResponse' {} a -> s {httpStatus = a} :: DeleteEventIntegrationResponse)
+
+instance
+  Prelude.NFData
+    DeleteEventIntegrationResponse
+  where
+  rnf DeleteEventIntegrationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppIntegrationS/GetDataIntegration.hs b/gen/Amazonka/AppIntegrationS/GetDataIntegration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppIntegrationS/GetDataIntegration.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.AppIntegrationS.GetDataIntegration
+-- 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 the DataIntegration.
+--
+-- You cannot create a DataIntegration association for a DataIntegration
+-- that has been previously associated. Use a different DataIntegration, or
+-- recreate the DataIntegration using the
+-- <https://docs.aws.amazon.com/appintegrations/latest/APIReference/API_CreateDataIntegration.html CreateDataIntegration>
+-- API.
+module Amazonka.AppIntegrationS.GetDataIntegration
+  ( -- * Creating a Request
+    GetDataIntegration (..),
+    newGetDataIntegration,
+
+    -- * Request Lenses
+    getDataIntegration_identifier,
+
+    -- * Destructuring the Response
+    GetDataIntegrationResponse (..),
+    newGetDataIntegrationResponse,
+
+    -- * Response Lenses
+    getDataIntegrationResponse_arn,
+    getDataIntegrationResponse_description,
+    getDataIntegrationResponse_id,
+    getDataIntegrationResponse_kmsKey,
+    getDataIntegrationResponse_name,
+    getDataIntegrationResponse_scheduleConfiguration,
+    getDataIntegrationResponse_sourceURI,
+    getDataIntegrationResponse_tags,
+    getDataIntegrationResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppIntegrationS.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:/ 'newGetDataIntegration' smart constructor.
+data GetDataIntegration = GetDataIntegration'
+  { -- | A unique identifier.
+    identifier :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDataIntegration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'identifier', 'getDataIntegration_identifier' - A unique identifier.
+newGetDataIntegration ::
+  -- | 'identifier'
+  Prelude.Text ->
+  GetDataIntegration
+newGetDataIntegration pIdentifier_ =
+  GetDataIntegration' {identifier = pIdentifier_}
+
+-- | A unique identifier.
+getDataIntegration_identifier :: Lens.Lens' GetDataIntegration Prelude.Text
+getDataIntegration_identifier = Lens.lens (\GetDataIntegration' {identifier} -> identifier) (\s@GetDataIntegration' {} a -> s {identifier = a} :: GetDataIntegration)
+
+instance Core.AWSRequest GetDataIntegration where
+  type
+    AWSResponse GetDataIntegration =
+      GetDataIntegrationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDataIntegrationResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "Description")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (x Data..?> "KmsKey")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "ScheduleConfiguration")
+            Prelude.<*> (x Data..?> "SourceURI")
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetDataIntegration where
+  hashWithSalt _salt GetDataIntegration' {..} =
+    _salt `Prelude.hashWithSalt` identifier
+
+instance Prelude.NFData GetDataIntegration where
+  rnf GetDataIntegration' {..} = Prelude.rnf identifier
+
+instance Data.ToHeaders GetDataIntegration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetDataIntegration where
+  toPath GetDataIntegration' {..} =
+    Prelude.mconcat
+      ["/dataIntegrations/", Data.toBS identifier]
+
+instance Data.ToQuery GetDataIntegration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetDataIntegrationResponse' smart constructor.
+data GetDataIntegrationResponse = GetDataIntegrationResponse'
+  { -- | The Amazon Resource Name (ARN) for the DataIntegration.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The KMS key for the DataIntegration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The KMS key for the DataIntegration.
+    kmsKey :: Prelude.Maybe Prelude.Text,
+    -- | The name of the DataIntegration.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The name of the data and how often it should be pulled from the source.
+    scheduleConfiguration :: Prelude.Maybe ScheduleConfiguration,
+    -- | The URI of the data source.
+    sourceURI :: Prelude.Maybe Prelude.Text,
+    -- | One or more tags.
+    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 'GetDataIntegrationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getDataIntegrationResponse_arn' - The Amazon Resource Name (ARN) for the DataIntegration.
+--
+-- 'description', 'getDataIntegrationResponse_description' - The KMS key for the DataIntegration.
+--
+-- 'id', 'getDataIntegrationResponse_id' - A unique identifier.
+--
+-- 'kmsKey', 'getDataIntegrationResponse_kmsKey' - The KMS key for the DataIntegration.
+--
+-- 'name', 'getDataIntegrationResponse_name' - The name of the DataIntegration.
+--
+-- 'scheduleConfiguration', 'getDataIntegrationResponse_scheduleConfiguration' - The name of the data and how often it should be pulled from the source.
+--
+-- 'sourceURI', 'getDataIntegrationResponse_sourceURI' - The URI of the data source.
+--
+-- 'tags', 'getDataIntegrationResponse_tags' - One or more tags.
+--
+-- 'httpStatus', 'getDataIntegrationResponse_httpStatus' - The response's http status code.
+newGetDataIntegrationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetDataIntegrationResponse
+newGetDataIntegrationResponse pHttpStatus_ =
+  GetDataIntegrationResponse'
+    { arn = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      kmsKey = Prelude.Nothing,
+      name = Prelude.Nothing,
+      scheduleConfiguration = Prelude.Nothing,
+      sourceURI = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) for the DataIntegration.
+getDataIntegrationResponse_arn :: Lens.Lens' GetDataIntegrationResponse (Prelude.Maybe Prelude.Text)
+getDataIntegrationResponse_arn = Lens.lens (\GetDataIntegrationResponse' {arn} -> arn) (\s@GetDataIntegrationResponse' {} a -> s {arn = a} :: GetDataIntegrationResponse)
+
+-- | The KMS key for the DataIntegration.
+getDataIntegrationResponse_description :: Lens.Lens' GetDataIntegrationResponse (Prelude.Maybe Prelude.Text)
+getDataIntegrationResponse_description = Lens.lens (\GetDataIntegrationResponse' {description} -> description) (\s@GetDataIntegrationResponse' {} a -> s {description = a} :: GetDataIntegrationResponse)
+
+-- | A unique identifier.
+getDataIntegrationResponse_id :: Lens.Lens' GetDataIntegrationResponse (Prelude.Maybe Prelude.Text)
+getDataIntegrationResponse_id = Lens.lens (\GetDataIntegrationResponse' {id} -> id) (\s@GetDataIntegrationResponse' {} a -> s {id = a} :: GetDataIntegrationResponse)
+
+-- | The KMS key for the DataIntegration.
+getDataIntegrationResponse_kmsKey :: Lens.Lens' GetDataIntegrationResponse (Prelude.Maybe Prelude.Text)
+getDataIntegrationResponse_kmsKey = Lens.lens (\GetDataIntegrationResponse' {kmsKey} -> kmsKey) (\s@GetDataIntegrationResponse' {} a -> s {kmsKey = a} :: GetDataIntegrationResponse)
+
+-- | The name of the DataIntegration.
+getDataIntegrationResponse_name :: Lens.Lens' GetDataIntegrationResponse (Prelude.Maybe Prelude.Text)
+getDataIntegrationResponse_name = Lens.lens (\GetDataIntegrationResponse' {name} -> name) (\s@GetDataIntegrationResponse' {} a -> s {name = a} :: GetDataIntegrationResponse)
+
+-- | The name of the data and how often it should be pulled from the source.
+getDataIntegrationResponse_scheduleConfiguration :: Lens.Lens' GetDataIntegrationResponse (Prelude.Maybe ScheduleConfiguration)
+getDataIntegrationResponse_scheduleConfiguration = Lens.lens (\GetDataIntegrationResponse' {scheduleConfiguration} -> scheduleConfiguration) (\s@GetDataIntegrationResponse' {} a -> s {scheduleConfiguration = a} :: GetDataIntegrationResponse)
+
+-- | The URI of the data source.
+getDataIntegrationResponse_sourceURI :: Lens.Lens' GetDataIntegrationResponse (Prelude.Maybe Prelude.Text)
+getDataIntegrationResponse_sourceURI = Lens.lens (\GetDataIntegrationResponse' {sourceURI} -> sourceURI) (\s@GetDataIntegrationResponse' {} a -> s {sourceURI = a} :: GetDataIntegrationResponse)
+
+-- | One or more tags.
+getDataIntegrationResponse_tags :: Lens.Lens' GetDataIntegrationResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getDataIntegrationResponse_tags = Lens.lens (\GetDataIntegrationResponse' {tags} -> tags) (\s@GetDataIntegrationResponse' {} a -> s {tags = a} :: GetDataIntegrationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getDataIntegrationResponse_httpStatus :: Lens.Lens' GetDataIntegrationResponse Prelude.Int
+getDataIntegrationResponse_httpStatus = Lens.lens (\GetDataIntegrationResponse' {httpStatus} -> httpStatus) (\s@GetDataIntegrationResponse' {} a -> s {httpStatus = a} :: GetDataIntegrationResponse)
+
+instance Prelude.NFData GetDataIntegrationResponse where
+  rnf GetDataIntegrationResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf kmsKey
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf scheduleConfiguration
+      `Prelude.seq` Prelude.rnf sourceURI
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppIntegrationS/GetEventIntegration.hs b/gen/Amazonka/AppIntegrationS/GetEventIntegration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppIntegrationS/GetEventIntegration.hs
@@ -0,0 +1,219 @@
+{-# 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.AppIntegrationS.GetEventIntegration
+-- 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 the event integration.
+module Amazonka.AppIntegrationS.GetEventIntegration
+  ( -- * Creating a Request
+    GetEventIntegration (..),
+    newGetEventIntegration,
+
+    -- * Request Lenses
+    getEventIntegration_name,
+
+    -- * Destructuring the Response
+    GetEventIntegrationResponse (..),
+    newGetEventIntegrationResponse,
+
+    -- * Response Lenses
+    getEventIntegrationResponse_description,
+    getEventIntegrationResponse_eventBridgeBus,
+    getEventIntegrationResponse_eventFilter,
+    getEventIntegrationResponse_eventIntegrationArn,
+    getEventIntegrationResponse_name,
+    getEventIntegrationResponse_tags,
+    getEventIntegrationResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppIntegrationS.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:/ 'newGetEventIntegration' smart constructor.
+data GetEventIntegration = GetEventIntegration'
+  { -- | The name of the event integration.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetEventIntegration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getEventIntegration_name' - The name of the event integration.
+newGetEventIntegration ::
+  -- | 'name'
+  Prelude.Text ->
+  GetEventIntegration
+newGetEventIntegration pName_ =
+  GetEventIntegration' {name = pName_}
+
+-- | The name of the event integration.
+getEventIntegration_name :: Lens.Lens' GetEventIntegration Prelude.Text
+getEventIntegration_name = Lens.lens (\GetEventIntegration' {name} -> name) (\s@GetEventIntegration' {} a -> s {name = a} :: GetEventIntegration)
+
+instance Core.AWSRequest GetEventIntegration where
+  type
+    AWSResponse GetEventIntegration =
+      GetEventIntegrationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetEventIntegrationResponse'
+            Prelude.<$> (x Data..?> "Description")
+            Prelude.<*> (x Data..?> "EventBridgeBus")
+            Prelude.<*> (x Data..?> "EventFilter")
+            Prelude.<*> (x Data..?> "EventIntegrationArn")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetEventIntegration where
+  hashWithSalt _salt GetEventIntegration' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData GetEventIntegration where
+  rnf GetEventIntegration' {..} = Prelude.rnf name
+
+instance Data.ToHeaders GetEventIntegration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetEventIntegration where
+  toPath GetEventIntegration' {..} =
+    Prelude.mconcat
+      ["/eventIntegrations/", Data.toBS name]
+
+instance Data.ToQuery GetEventIntegration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetEventIntegrationResponse' smart constructor.
+data GetEventIntegrationResponse = GetEventIntegrationResponse'
+  { -- | The description of the event integration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The EventBridge bus.
+    eventBridgeBus :: Prelude.Maybe Prelude.Text,
+    -- | The event filter.
+    eventFilter :: Prelude.Maybe EventFilter,
+    -- | The Amazon Resource Name (ARN) for the event integration.
+    eventIntegrationArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the event integration.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | One or more tags.
+    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 'GetEventIntegrationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getEventIntegrationResponse_description' - The description of the event integration.
+--
+-- 'eventBridgeBus', 'getEventIntegrationResponse_eventBridgeBus' - The EventBridge bus.
+--
+-- 'eventFilter', 'getEventIntegrationResponse_eventFilter' - The event filter.
+--
+-- 'eventIntegrationArn', 'getEventIntegrationResponse_eventIntegrationArn' - The Amazon Resource Name (ARN) for the event integration.
+--
+-- 'name', 'getEventIntegrationResponse_name' - The name of the event integration.
+--
+-- 'tags', 'getEventIntegrationResponse_tags' - One or more tags.
+--
+-- 'httpStatus', 'getEventIntegrationResponse_httpStatus' - The response's http status code.
+newGetEventIntegrationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetEventIntegrationResponse
+newGetEventIntegrationResponse pHttpStatus_ =
+  GetEventIntegrationResponse'
+    { description =
+        Prelude.Nothing,
+      eventBridgeBus = Prelude.Nothing,
+      eventFilter = Prelude.Nothing,
+      eventIntegrationArn = Prelude.Nothing,
+      name = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The description of the event integration.
+getEventIntegrationResponse_description :: Lens.Lens' GetEventIntegrationResponse (Prelude.Maybe Prelude.Text)
+getEventIntegrationResponse_description = Lens.lens (\GetEventIntegrationResponse' {description} -> description) (\s@GetEventIntegrationResponse' {} a -> s {description = a} :: GetEventIntegrationResponse)
+
+-- | The EventBridge bus.
+getEventIntegrationResponse_eventBridgeBus :: Lens.Lens' GetEventIntegrationResponse (Prelude.Maybe Prelude.Text)
+getEventIntegrationResponse_eventBridgeBus = Lens.lens (\GetEventIntegrationResponse' {eventBridgeBus} -> eventBridgeBus) (\s@GetEventIntegrationResponse' {} a -> s {eventBridgeBus = a} :: GetEventIntegrationResponse)
+
+-- | The event filter.
+getEventIntegrationResponse_eventFilter :: Lens.Lens' GetEventIntegrationResponse (Prelude.Maybe EventFilter)
+getEventIntegrationResponse_eventFilter = Lens.lens (\GetEventIntegrationResponse' {eventFilter} -> eventFilter) (\s@GetEventIntegrationResponse' {} a -> s {eventFilter = a} :: GetEventIntegrationResponse)
+
+-- | The Amazon Resource Name (ARN) for the event integration.
+getEventIntegrationResponse_eventIntegrationArn :: Lens.Lens' GetEventIntegrationResponse (Prelude.Maybe Prelude.Text)
+getEventIntegrationResponse_eventIntegrationArn = Lens.lens (\GetEventIntegrationResponse' {eventIntegrationArn} -> eventIntegrationArn) (\s@GetEventIntegrationResponse' {} a -> s {eventIntegrationArn = a} :: GetEventIntegrationResponse)
+
+-- | The name of the event integration.
+getEventIntegrationResponse_name :: Lens.Lens' GetEventIntegrationResponse (Prelude.Maybe Prelude.Text)
+getEventIntegrationResponse_name = Lens.lens (\GetEventIntegrationResponse' {name} -> name) (\s@GetEventIntegrationResponse' {} a -> s {name = a} :: GetEventIntegrationResponse)
+
+-- | One or more tags.
+getEventIntegrationResponse_tags :: Lens.Lens' GetEventIntegrationResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getEventIntegrationResponse_tags = Lens.lens (\GetEventIntegrationResponse' {tags} -> tags) (\s@GetEventIntegrationResponse' {} a -> s {tags = a} :: GetEventIntegrationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getEventIntegrationResponse_httpStatus :: Lens.Lens' GetEventIntegrationResponse Prelude.Int
+getEventIntegrationResponse_httpStatus = Lens.lens (\GetEventIntegrationResponse' {httpStatus} -> httpStatus) (\s@GetEventIntegrationResponse' {} a -> s {httpStatus = a} :: GetEventIntegrationResponse)
+
+instance Prelude.NFData GetEventIntegrationResponse where
+  rnf GetEventIntegrationResponse' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf eventBridgeBus
+      `Prelude.seq` Prelude.rnf eventFilter
+      `Prelude.seq` Prelude.rnf eventIntegrationArn
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppIntegrationS/Lens.hs b/gen/Amazonka/AppIntegrationS/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppIntegrationS/Lens.hs
@@ -0,0 +1,190 @@
+{-# 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.AppIntegrationS.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.AppIntegrationS.Lens
+  ( -- * Operations
+
+    -- ** CreateDataIntegration
+    createDataIntegration_clientToken,
+    createDataIntegration_description,
+    createDataIntegration_kmsKey,
+    createDataIntegration_scheduleConfig,
+    createDataIntegration_sourceURI,
+    createDataIntegration_tags,
+    createDataIntegration_name,
+    createDataIntegrationResponse_arn,
+    createDataIntegrationResponse_clientToken,
+    createDataIntegrationResponse_description,
+    createDataIntegrationResponse_id,
+    createDataIntegrationResponse_kmsKey,
+    createDataIntegrationResponse_name,
+    createDataIntegrationResponse_scheduleConfiguration,
+    createDataIntegrationResponse_sourceURI,
+    createDataIntegrationResponse_tags,
+    createDataIntegrationResponse_httpStatus,
+
+    -- ** CreateEventIntegration
+    createEventIntegration_clientToken,
+    createEventIntegration_description,
+    createEventIntegration_tags,
+    createEventIntegration_name,
+    createEventIntegration_eventFilter,
+    createEventIntegration_eventBridgeBus,
+    createEventIntegrationResponse_eventIntegrationArn,
+    createEventIntegrationResponse_httpStatus,
+
+    -- ** DeleteDataIntegration
+    deleteDataIntegration_dataIntegrationIdentifier,
+    deleteDataIntegrationResponse_httpStatus,
+
+    -- ** DeleteEventIntegration
+    deleteEventIntegration_name,
+    deleteEventIntegrationResponse_httpStatus,
+
+    -- ** GetDataIntegration
+    getDataIntegration_identifier,
+    getDataIntegrationResponse_arn,
+    getDataIntegrationResponse_description,
+    getDataIntegrationResponse_id,
+    getDataIntegrationResponse_kmsKey,
+    getDataIntegrationResponse_name,
+    getDataIntegrationResponse_scheduleConfiguration,
+    getDataIntegrationResponse_sourceURI,
+    getDataIntegrationResponse_tags,
+    getDataIntegrationResponse_httpStatus,
+
+    -- ** GetEventIntegration
+    getEventIntegration_name,
+    getEventIntegrationResponse_description,
+    getEventIntegrationResponse_eventBridgeBus,
+    getEventIntegrationResponse_eventFilter,
+    getEventIntegrationResponse_eventIntegrationArn,
+    getEventIntegrationResponse_name,
+    getEventIntegrationResponse_tags,
+    getEventIntegrationResponse_httpStatus,
+
+    -- ** ListDataIntegrationAssociations
+    listDataIntegrationAssociations_maxResults,
+    listDataIntegrationAssociations_nextToken,
+    listDataIntegrationAssociations_dataIntegrationIdentifier,
+    listDataIntegrationAssociationsResponse_dataIntegrationAssociations,
+    listDataIntegrationAssociationsResponse_nextToken,
+    listDataIntegrationAssociationsResponse_httpStatus,
+
+    -- ** ListDataIntegrations
+    listDataIntegrations_maxResults,
+    listDataIntegrations_nextToken,
+    listDataIntegrationsResponse_dataIntegrations,
+    listDataIntegrationsResponse_nextToken,
+    listDataIntegrationsResponse_httpStatus,
+
+    -- ** ListEventIntegrationAssociations
+    listEventIntegrationAssociations_maxResults,
+    listEventIntegrationAssociations_nextToken,
+    listEventIntegrationAssociations_eventIntegrationName,
+    listEventIntegrationAssociationsResponse_eventIntegrationAssociations,
+    listEventIntegrationAssociationsResponse_nextToken,
+    listEventIntegrationAssociationsResponse_httpStatus,
+
+    -- ** ListEventIntegrations
+    listEventIntegrations_maxResults,
+    listEventIntegrations_nextToken,
+    listEventIntegrationsResponse_eventIntegrations,
+    listEventIntegrationsResponse_nextToken,
+    listEventIntegrationsResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateDataIntegration
+    updateDataIntegration_description,
+    updateDataIntegration_name,
+    updateDataIntegration_identifier,
+    updateDataIntegrationResponse_httpStatus,
+
+    -- ** UpdateEventIntegration
+    updateEventIntegration_description,
+    updateEventIntegration_name,
+    updateEventIntegrationResponse_httpStatus,
+
+    -- * Types
+
+    -- ** DataIntegrationAssociationSummary
+    dataIntegrationAssociationSummary_clientId,
+    dataIntegrationAssociationSummary_dataIntegrationArn,
+    dataIntegrationAssociationSummary_dataIntegrationAssociationArn,
+
+    -- ** DataIntegrationSummary
+    dataIntegrationSummary_arn,
+    dataIntegrationSummary_name,
+    dataIntegrationSummary_sourceURI,
+
+    -- ** EventFilter
+    eventFilter_source,
+
+    -- ** EventIntegration
+    eventIntegration_description,
+    eventIntegration_eventBridgeBus,
+    eventIntegration_eventFilter,
+    eventIntegration_eventIntegrationArn,
+    eventIntegration_name,
+    eventIntegration_tags,
+
+    -- ** EventIntegrationAssociation
+    eventIntegrationAssociation_clientAssociationMetadata,
+    eventIntegrationAssociation_clientId,
+    eventIntegrationAssociation_eventBridgeRuleName,
+    eventIntegrationAssociation_eventIntegrationAssociationArn,
+    eventIntegrationAssociation_eventIntegrationAssociationId,
+    eventIntegrationAssociation_eventIntegrationName,
+
+    -- ** ScheduleConfiguration
+    scheduleConfiguration_firstExecutionFrom,
+    scheduleConfiguration_object,
+    scheduleConfiguration_scheduleExpression,
+  )
+where
+
+import Amazonka.AppIntegrationS.CreateDataIntegration
+import Amazonka.AppIntegrationS.CreateEventIntegration
+import Amazonka.AppIntegrationS.DeleteDataIntegration
+import Amazonka.AppIntegrationS.DeleteEventIntegration
+import Amazonka.AppIntegrationS.GetDataIntegration
+import Amazonka.AppIntegrationS.GetEventIntegration
+import Amazonka.AppIntegrationS.ListDataIntegrationAssociations
+import Amazonka.AppIntegrationS.ListDataIntegrations
+import Amazonka.AppIntegrationS.ListEventIntegrationAssociations
+import Amazonka.AppIntegrationS.ListEventIntegrations
+import Amazonka.AppIntegrationS.ListTagsForResource
+import Amazonka.AppIntegrationS.TagResource
+import Amazonka.AppIntegrationS.Types.DataIntegrationAssociationSummary
+import Amazonka.AppIntegrationS.Types.DataIntegrationSummary
+import Amazonka.AppIntegrationS.Types.EventFilter
+import Amazonka.AppIntegrationS.Types.EventIntegration
+import Amazonka.AppIntegrationS.Types.EventIntegrationAssociation
+import Amazonka.AppIntegrationS.Types.ScheduleConfiguration
+import Amazonka.AppIntegrationS.UntagResource
+import Amazonka.AppIntegrationS.UpdateDataIntegration
+import Amazonka.AppIntegrationS.UpdateEventIntegration
diff --git a/gen/Amazonka/AppIntegrationS/ListDataIntegrationAssociations.hs b/gen/Amazonka/AppIntegrationS/ListDataIntegrationAssociations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppIntegrationS/ListDataIntegrationAssociations.hs
@@ -0,0 +1,245 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppIntegrationS.ListDataIntegrationAssociations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a paginated list of DataIntegration associations in the account.
+--
+-- You cannot create a DataIntegration association for a DataIntegration
+-- that has been previously associated. Use a different DataIntegration, or
+-- recreate the DataIntegration using the
+-- <https://docs.aws.amazon.com/appintegrations/latest/APIReference/API_CreateDataIntegration.html CreateDataIntegration>
+-- API.
+module Amazonka.AppIntegrationS.ListDataIntegrationAssociations
+  ( -- * Creating a Request
+    ListDataIntegrationAssociations (..),
+    newListDataIntegrationAssociations,
+
+    -- * Request Lenses
+    listDataIntegrationAssociations_maxResults,
+    listDataIntegrationAssociations_nextToken,
+    listDataIntegrationAssociations_dataIntegrationIdentifier,
+
+    -- * Destructuring the Response
+    ListDataIntegrationAssociationsResponse (..),
+    newListDataIntegrationAssociationsResponse,
+
+    -- * Response Lenses
+    listDataIntegrationAssociationsResponse_dataIntegrationAssociations,
+    listDataIntegrationAssociationsResponse_nextToken,
+    listDataIntegrationAssociationsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppIntegrationS.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:/ 'newListDataIntegrationAssociations' smart constructor.
+data ListDataIntegrationAssociations = ListDataIntegrationAssociations'
+  { -- | 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 for the DataIntegration.
+    dataIntegrationIdentifier :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDataIntegrationAssociations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDataIntegrationAssociations_maxResults' - The maximum number of results to return per page.
+--
+-- 'nextToken', 'listDataIntegrationAssociations_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.
+--
+-- 'dataIntegrationIdentifier', 'listDataIntegrationAssociations_dataIntegrationIdentifier' - A unique identifier for the DataIntegration.
+newListDataIntegrationAssociations ::
+  -- | 'dataIntegrationIdentifier'
+  Prelude.Text ->
+  ListDataIntegrationAssociations
+newListDataIntegrationAssociations
+  pDataIntegrationIdentifier_ =
+    ListDataIntegrationAssociations'
+      { maxResults =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        dataIntegrationIdentifier =
+          pDataIntegrationIdentifier_
+      }
+
+-- | The maximum number of results to return per page.
+listDataIntegrationAssociations_maxResults :: Lens.Lens' ListDataIntegrationAssociations (Prelude.Maybe Prelude.Natural)
+listDataIntegrationAssociations_maxResults = Lens.lens (\ListDataIntegrationAssociations' {maxResults} -> maxResults) (\s@ListDataIntegrationAssociations' {} a -> s {maxResults = a} :: ListDataIntegrationAssociations)
+
+-- | 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.
+listDataIntegrationAssociations_nextToken :: Lens.Lens' ListDataIntegrationAssociations (Prelude.Maybe Prelude.Text)
+listDataIntegrationAssociations_nextToken = Lens.lens (\ListDataIntegrationAssociations' {nextToken} -> nextToken) (\s@ListDataIntegrationAssociations' {} a -> s {nextToken = a} :: ListDataIntegrationAssociations)
+
+-- | A unique identifier for the DataIntegration.
+listDataIntegrationAssociations_dataIntegrationIdentifier :: Lens.Lens' ListDataIntegrationAssociations Prelude.Text
+listDataIntegrationAssociations_dataIntegrationIdentifier = Lens.lens (\ListDataIntegrationAssociations' {dataIntegrationIdentifier} -> dataIntegrationIdentifier) (\s@ListDataIntegrationAssociations' {} a -> s {dataIntegrationIdentifier = a} :: ListDataIntegrationAssociations)
+
+instance
+  Core.AWSRequest
+    ListDataIntegrationAssociations
+  where
+  type
+    AWSResponse ListDataIntegrationAssociations =
+      ListDataIntegrationAssociationsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDataIntegrationAssociationsResponse'
+            Prelude.<$> (x Data..?> "DataIntegrationAssociations")
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListDataIntegrationAssociations
+  where
+  hashWithSalt
+    _salt
+    ListDataIntegrationAssociations' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` dataIntegrationIdentifier
+
+instance
+  Prelude.NFData
+    ListDataIntegrationAssociations
+  where
+  rnf ListDataIntegrationAssociations' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf dataIntegrationIdentifier
+
+instance
+  Data.ToHeaders
+    ListDataIntegrationAssociations
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListDataIntegrationAssociations where
+  toPath ListDataIntegrationAssociations' {..} =
+    Prelude.mconcat
+      [ "/dataIntegrations/",
+        Data.toBS dataIntegrationIdentifier,
+        "/associations"
+      ]
+
+instance Data.ToQuery ListDataIntegrationAssociations where
+  toQuery ListDataIntegrationAssociations' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListDataIntegrationAssociationsResponse' smart constructor.
+data ListDataIntegrationAssociationsResponse = ListDataIntegrationAssociationsResponse'
+  { -- | The Amazon Resource Name (ARN) and unique ID of the DataIntegration
+    -- association.
+    dataIntegrationAssociations :: Prelude.Maybe (Prelude.NonEmpty DataIntegrationAssociationSummary),
+    -- | If there are additional results, this is the token for the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDataIntegrationAssociationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataIntegrationAssociations', 'listDataIntegrationAssociationsResponse_dataIntegrationAssociations' - The Amazon Resource Name (ARN) and unique ID of the DataIntegration
+-- association.
+--
+-- 'nextToken', 'listDataIntegrationAssociationsResponse_nextToken' - If there are additional results, this is the token for the next set of
+-- results.
+--
+-- 'httpStatus', 'listDataIntegrationAssociationsResponse_httpStatus' - The response's http status code.
+newListDataIntegrationAssociationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDataIntegrationAssociationsResponse
+newListDataIntegrationAssociationsResponse
+  pHttpStatus_ =
+    ListDataIntegrationAssociationsResponse'
+      { dataIntegrationAssociations =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The Amazon Resource Name (ARN) and unique ID of the DataIntegration
+-- association.
+listDataIntegrationAssociationsResponse_dataIntegrationAssociations :: Lens.Lens' ListDataIntegrationAssociationsResponse (Prelude.Maybe (Prelude.NonEmpty DataIntegrationAssociationSummary))
+listDataIntegrationAssociationsResponse_dataIntegrationAssociations = Lens.lens (\ListDataIntegrationAssociationsResponse' {dataIntegrationAssociations} -> dataIntegrationAssociations) (\s@ListDataIntegrationAssociationsResponse' {} a -> s {dataIntegrationAssociations = a} :: ListDataIntegrationAssociationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If there are additional results, this is the token for the next set of
+-- results.
+listDataIntegrationAssociationsResponse_nextToken :: Lens.Lens' ListDataIntegrationAssociationsResponse (Prelude.Maybe Prelude.Text)
+listDataIntegrationAssociationsResponse_nextToken = Lens.lens (\ListDataIntegrationAssociationsResponse' {nextToken} -> nextToken) (\s@ListDataIntegrationAssociationsResponse' {} a -> s {nextToken = a} :: ListDataIntegrationAssociationsResponse)
+
+-- | The response's http status code.
+listDataIntegrationAssociationsResponse_httpStatus :: Lens.Lens' ListDataIntegrationAssociationsResponse Prelude.Int
+listDataIntegrationAssociationsResponse_httpStatus = Lens.lens (\ListDataIntegrationAssociationsResponse' {httpStatus} -> httpStatus) (\s@ListDataIntegrationAssociationsResponse' {} a -> s {httpStatus = a} :: ListDataIntegrationAssociationsResponse)
+
+instance
+  Prelude.NFData
+    ListDataIntegrationAssociationsResponse
+  where
+  rnf ListDataIntegrationAssociationsResponse' {..} =
+    Prelude.rnf dataIntegrationAssociations
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppIntegrationS/ListDataIntegrations.hs b/gen/Amazonka/AppIntegrationS/ListDataIntegrations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppIntegrationS/ListDataIntegrations.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.AppIntegrationS.ListDataIntegrations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a paginated list of DataIntegrations in the account.
+--
+-- You cannot create a DataIntegration association for a DataIntegration
+-- that has been previously associated. Use a different DataIntegration, or
+-- recreate the DataIntegration using the
+-- <https://docs.aws.amazon.com/appintegrations/latest/APIReference/API_CreateDataIntegration.html CreateDataIntegration>
+-- API.
+module Amazonka.AppIntegrationS.ListDataIntegrations
+  ( -- * Creating a Request
+    ListDataIntegrations (..),
+    newListDataIntegrations,
+
+    -- * Request Lenses
+    listDataIntegrations_maxResults,
+    listDataIntegrations_nextToken,
+
+    -- * Destructuring the Response
+    ListDataIntegrationsResponse (..),
+    newListDataIntegrationsResponse,
+
+    -- * Response Lenses
+    listDataIntegrationsResponse_dataIntegrations,
+    listDataIntegrationsResponse_nextToken,
+    listDataIntegrationsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppIntegrationS.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:/ 'newListDataIntegrations' smart constructor.
+data ListDataIntegrations = ListDataIntegrations'
+  { -- | 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 'ListDataIntegrations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDataIntegrations_maxResults' - The maximum number of results to return per page.
+--
+-- 'nextToken', 'listDataIntegrations_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.
+newListDataIntegrations ::
+  ListDataIntegrations
+newListDataIntegrations =
+  ListDataIntegrations'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return per page.
+listDataIntegrations_maxResults :: Lens.Lens' ListDataIntegrations (Prelude.Maybe Prelude.Natural)
+listDataIntegrations_maxResults = Lens.lens (\ListDataIntegrations' {maxResults} -> maxResults) (\s@ListDataIntegrations' {} a -> s {maxResults = a} :: ListDataIntegrations)
+
+-- | 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.
+listDataIntegrations_nextToken :: Lens.Lens' ListDataIntegrations (Prelude.Maybe Prelude.Text)
+listDataIntegrations_nextToken = Lens.lens (\ListDataIntegrations' {nextToken} -> nextToken) (\s@ListDataIntegrations' {} a -> s {nextToken = a} :: ListDataIntegrations)
+
+instance Core.AWSRequest ListDataIntegrations where
+  type
+    AWSResponse ListDataIntegrations =
+      ListDataIntegrationsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDataIntegrationsResponse'
+            Prelude.<$> (x Data..?> "DataIntegrations")
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListDataIntegrations where
+  hashWithSalt _salt ListDataIntegrations' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListDataIntegrations where
+  rnf ListDataIntegrations' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListDataIntegrations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListDataIntegrations where
+  toPath = Prelude.const "/dataIntegrations"
+
+instance Data.ToQuery ListDataIntegrations where
+  toQuery ListDataIntegrations' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListDataIntegrationsResponse' smart constructor.
+data ListDataIntegrationsResponse = ListDataIntegrationsResponse'
+  { -- | The DataIntegrations associated with this account.
+    dataIntegrations :: Prelude.Maybe (Prelude.NonEmpty DataIntegrationSummary),
+    -- | If there are additional results, this is the token for the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDataIntegrationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataIntegrations', 'listDataIntegrationsResponse_dataIntegrations' - The DataIntegrations associated with this account.
+--
+-- 'nextToken', 'listDataIntegrationsResponse_nextToken' - If there are additional results, this is the token for the next set of
+-- results.
+--
+-- 'httpStatus', 'listDataIntegrationsResponse_httpStatus' - The response's http status code.
+newListDataIntegrationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDataIntegrationsResponse
+newListDataIntegrationsResponse pHttpStatus_ =
+  ListDataIntegrationsResponse'
+    { dataIntegrations =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The DataIntegrations associated with this account.
+listDataIntegrationsResponse_dataIntegrations :: Lens.Lens' ListDataIntegrationsResponse (Prelude.Maybe (Prelude.NonEmpty DataIntegrationSummary))
+listDataIntegrationsResponse_dataIntegrations = Lens.lens (\ListDataIntegrationsResponse' {dataIntegrations} -> dataIntegrations) (\s@ListDataIntegrationsResponse' {} a -> s {dataIntegrations = a} :: ListDataIntegrationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If there are additional results, this is the token for the next set of
+-- results.
+listDataIntegrationsResponse_nextToken :: Lens.Lens' ListDataIntegrationsResponse (Prelude.Maybe Prelude.Text)
+listDataIntegrationsResponse_nextToken = Lens.lens (\ListDataIntegrationsResponse' {nextToken} -> nextToken) (\s@ListDataIntegrationsResponse' {} a -> s {nextToken = a} :: ListDataIntegrationsResponse)
+
+-- | The response's http status code.
+listDataIntegrationsResponse_httpStatus :: Lens.Lens' ListDataIntegrationsResponse Prelude.Int
+listDataIntegrationsResponse_httpStatus = Lens.lens (\ListDataIntegrationsResponse' {httpStatus} -> httpStatus) (\s@ListDataIntegrationsResponse' {} a -> s {httpStatus = a} :: ListDataIntegrationsResponse)
+
+instance Prelude.NFData ListDataIntegrationsResponse where
+  rnf ListDataIntegrationsResponse' {..} =
+    Prelude.rnf dataIntegrations
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppIntegrationS/ListEventIntegrationAssociations.hs b/gen/Amazonka/AppIntegrationS/ListEventIntegrationAssociations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppIntegrationS/ListEventIntegrationAssociations.hs
@@ -0,0 +1,240 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppIntegrationS.ListEventIntegrationAssociations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a paginated list of event integration associations in the
+-- account.
+module Amazonka.AppIntegrationS.ListEventIntegrationAssociations
+  ( -- * Creating a Request
+    ListEventIntegrationAssociations (..),
+    newListEventIntegrationAssociations,
+
+    -- * Request Lenses
+    listEventIntegrationAssociations_maxResults,
+    listEventIntegrationAssociations_nextToken,
+    listEventIntegrationAssociations_eventIntegrationName,
+
+    -- * Destructuring the Response
+    ListEventIntegrationAssociationsResponse (..),
+    newListEventIntegrationAssociationsResponse,
+
+    -- * Response Lenses
+    listEventIntegrationAssociationsResponse_eventIntegrationAssociations,
+    listEventIntegrationAssociationsResponse_nextToken,
+    listEventIntegrationAssociationsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppIntegrationS.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:/ 'newListEventIntegrationAssociations' smart constructor.
+data ListEventIntegrationAssociations = ListEventIntegrationAssociations'
+  { -- | 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 name of the event integration.
+    eventIntegrationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEventIntegrationAssociations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listEventIntegrationAssociations_maxResults' - The maximum number of results to return per page.
+--
+-- 'nextToken', 'listEventIntegrationAssociations_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.
+--
+-- 'eventIntegrationName', 'listEventIntegrationAssociations_eventIntegrationName' - The name of the event integration.
+newListEventIntegrationAssociations ::
+  -- | 'eventIntegrationName'
+  Prelude.Text ->
+  ListEventIntegrationAssociations
+newListEventIntegrationAssociations
+  pEventIntegrationName_ =
+    ListEventIntegrationAssociations'
+      { maxResults =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        eventIntegrationName =
+          pEventIntegrationName_
+      }
+
+-- | The maximum number of results to return per page.
+listEventIntegrationAssociations_maxResults :: Lens.Lens' ListEventIntegrationAssociations (Prelude.Maybe Prelude.Natural)
+listEventIntegrationAssociations_maxResults = Lens.lens (\ListEventIntegrationAssociations' {maxResults} -> maxResults) (\s@ListEventIntegrationAssociations' {} a -> s {maxResults = a} :: ListEventIntegrationAssociations)
+
+-- | 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.
+listEventIntegrationAssociations_nextToken :: Lens.Lens' ListEventIntegrationAssociations (Prelude.Maybe Prelude.Text)
+listEventIntegrationAssociations_nextToken = Lens.lens (\ListEventIntegrationAssociations' {nextToken} -> nextToken) (\s@ListEventIntegrationAssociations' {} a -> s {nextToken = a} :: ListEventIntegrationAssociations)
+
+-- | The name of the event integration.
+listEventIntegrationAssociations_eventIntegrationName :: Lens.Lens' ListEventIntegrationAssociations Prelude.Text
+listEventIntegrationAssociations_eventIntegrationName = Lens.lens (\ListEventIntegrationAssociations' {eventIntegrationName} -> eventIntegrationName) (\s@ListEventIntegrationAssociations' {} a -> s {eventIntegrationName = a} :: ListEventIntegrationAssociations)
+
+instance
+  Core.AWSRequest
+    ListEventIntegrationAssociations
+  where
+  type
+    AWSResponse ListEventIntegrationAssociations =
+      ListEventIntegrationAssociationsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListEventIntegrationAssociationsResponse'
+            Prelude.<$> (x Data..?> "EventIntegrationAssociations")
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListEventIntegrationAssociations
+  where
+  hashWithSalt
+    _salt
+    ListEventIntegrationAssociations' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` eventIntegrationName
+
+instance
+  Prelude.NFData
+    ListEventIntegrationAssociations
+  where
+  rnf ListEventIntegrationAssociations' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf eventIntegrationName
+
+instance
+  Data.ToHeaders
+    ListEventIntegrationAssociations
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListEventIntegrationAssociations where
+  toPath ListEventIntegrationAssociations' {..} =
+    Prelude.mconcat
+      [ "/eventIntegrations/",
+        Data.toBS eventIntegrationName,
+        "/associations"
+      ]
+
+instance
+  Data.ToQuery
+    ListEventIntegrationAssociations
+  where
+  toQuery ListEventIntegrationAssociations' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListEventIntegrationAssociationsResponse' smart constructor.
+data ListEventIntegrationAssociationsResponse = ListEventIntegrationAssociationsResponse'
+  { -- | The event integration associations.
+    eventIntegrationAssociations :: Prelude.Maybe (Prelude.NonEmpty EventIntegrationAssociation),
+    -- | If there are additional results, this is the token for the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEventIntegrationAssociationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eventIntegrationAssociations', 'listEventIntegrationAssociationsResponse_eventIntegrationAssociations' - The event integration associations.
+--
+-- 'nextToken', 'listEventIntegrationAssociationsResponse_nextToken' - If there are additional results, this is the token for the next set of
+-- results.
+--
+-- 'httpStatus', 'listEventIntegrationAssociationsResponse_httpStatus' - The response's http status code.
+newListEventIntegrationAssociationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListEventIntegrationAssociationsResponse
+newListEventIntegrationAssociationsResponse
+  pHttpStatus_ =
+    ListEventIntegrationAssociationsResponse'
+      { eventIntegrationAssociations =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The event integration associations.
+listEventIntegrationAssociationsResponse_eventIntegrationAssociations :: Lens.Lens' ListEventIntegrationAssociationsResponse (Prelude.Maybe (Prelude.NonEmpty EventIntegrationAssociation))
+listEventIntegrationAssociationsResponse_eventIntegrationAssociations = Lens.lens (\ListEventIntegrationAssociationsResponse' {eventIntegrationAssociations} -> eventIntegrationAssociations) (\s@ListEventIntegrationAssociationsResponse' {} a -> s {eventIntegrationAssociations = a} :: ListEventIntegrationAssociationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If there are additional results, this is the token for the next set of
+-- results.
+listEventIntegrationAssociationsResponse_nextToken :: Lens.Lens' ListEventIntegrationAssociationsResponse (Prelude.Maybe Prelude.Text)
+listEventIntegrationAssociationsResponse_nextToken = Lens.lens (\ListEventIntegrationAssociationsResponse' {nextToken} -> nextToken) (\s@ListEventIntegrationAssociationsResponse' {} a -> s {nextToken = a} :: ListEventIntegrationAssociationsResponse)
+
+-- | The response's http status code.
+listEventIntegrationAssociationsResponse_httpStatus :: Lens.Lens' ListEventIntegrationAssociationsResponse Prelude.Int
+listEventIntegrationAssociationsResponse_httpStatus = Lens.lens (\ListEventIntegrationAssociationsResponse' {httpStatus} -> httpStatus) (\s@ListEventIntegrationAssociationsResponse' {} a -> s {httpStatus = a} :: ListEventIntegrationAssociationsResponse)
+
+instance
+  Prelude.NFData
+    ListEventIntegrationAssociationsResponse
+  where
+  rnf ListEventIntegrationAssociationsResponse' {..} =
+    Prelude.rnf eventIntegrationAssociations
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppIntegrationS/ListEventIntegrations.hs b/gen/Amazonka/AppIntegrationS/ListEventIntegrations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppIntegrationS/ListEventIntegrations.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.AppIntegrationS.ListEventIntegrations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a paginated list of event integrations in the account.
+module Amazonka.AppIntegrationS.ListEventIntegrations
+  ( -- * Creating a Request
+    ListEventIntegrations (..),
+    newListEventIntegrations,
+
+    -- * Request Lenses
+    listEventIntegrations_maxResults,
+    listEventIntegrations_nextToken,
+
+    -- * Destructuring the Response
+    ListEventIntegrationsResponse (..),
+    newListEventIntegrationsResponse,
+
+    -- * Response Lenses
+    listEventIntegrationsResponse_eventIntegrations,
+    listEventIntegrationsResponse_nextToken,
+    listEventIntegrationsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppIntegrationS.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:/ 'newListEventIntegrations' smart constructor.
+data ListEventIntegrations = ListEventIntegrations'
+  { -- | 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 'ListEventIntegrations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listEventIntegrations_maxResults' - The maximum number of results to return per page.
+--
+-- 'nextToken', 'listEventIntegrations_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.
+newListEventIntegrations ::
+  ListEventIntegrations
+newListEventIntegrations =
+  ListEventIntegrations'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return per page.
+listEventIntegrations_maxResults :: Lens.Lens' ListEventIntegrations (Prelude.Maybe Prelude.Natural)
+listEventIntegrations_maxResults = Lens.lens (\ListEventIntegrations' {maxResults} -> maxResults) (\s@ListEventIntegrations' {} a -> s {maxResults = a} :: ListEventIntegrations)
+
+-- | 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.
+listEventIntegrations_nextToken :: Lens.Lens' ListEventIntegrations (Prelude.Maybe Prelude.Text)
+listEventIntegrations_nextToken = Lens.lens (\ListEventIntegrations' {nextToken} -> nextToken) (\s@ListEventIntegrations' {} a -> s {nextToken = a} :: ListEventIntegrations)
+
+instance Core.AWSRequest ListEventIntegrations where
+  type
+    AWSResponse ListEventIntegrations =
+      ListEventIntegrationsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListEventIntegrationsResponse'
+            Prelude.<$> (x Data..?> "EventIntegrations")
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListEventIntegrations where
+  hashWithSalt _salt ListEventIntegrations' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListEventIntegrations where
+  rnf ListEventIntegrations' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListEventIntegrations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListEventIntegrations where
+  toPath = Prelude.const "/eventIntegrations"
+
+instance Data.ToQuery ListEventIntegrations where
+  toQuery ListEventIntegrations' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListEventIntegrationsResponse' smart constructor.
+data ListEventIntegrationsResponse = ListEventIntegrationsResponse'
+  { -- | The event integrations.
+    eventIntegrations :: Prelude.Maybe (Prelude.NonEmpty EventIntegration),
+    -- | If there are additional results, this is the token for the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEventIntegrationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eventIntegrations', 'listEventIntegrationsResponse_eventIntegrations' - The event integrations.
+--
+-- 'nextToken', 'listEventIntegrationsResponse_nextToken' - If there are additional results, this is the token for the next set of
+-- results.
+--
+-- 'httpStatus', 'listEventIntegrationsResponse_httpStatus' - The response's http status code.
+newListEventIntegrationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListEventIntegrationsResponse
+newListEventIntegrationsResponse pHttpStatus_ =
+  ListEventIntegrationsResponse'
+    { eventIntegrations =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The event integrations.
+listEventIntegrationsResponse_eventIntegrations :: Lens.Lens' ListEventIntegrationsResponse (Prelude.Maybe (Prelude.NonEmpty EventIntegration))
+listEventIntegrationsResponse_eventIntegrations = Lens.lens (\ListEventIntegrationsResponse' {eventIntegrations} -> eventIntegrations) (\s@ListEventIntegrationsResponse' {} a -> s {eventIntegrations = a} :: ListEventIntegrationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If there are additional results, this is the token for the next set of
+-- results.
+listEventIntegrationsResponse_nextToken :: Lens.Lens' ListEventIntegrationsResponse (Prelude.Maybe Prelude.Text)
+listEventIntegrationsResponse_nextToken = Lens.lens (\ListEventIntegrationsResponse' {nextToken} -> nextToken) (\s@ListEventIntegrationsResponse' {} a -> s {nextToken = a} :: ListEventIntegrationsResponse)
+
+-- | The response's http status code.
+listEventIntegrationsResponse_httpStatus :: Lens.Lens' ListEventIntegrationsResponse Prelude.Int
+listEventIntegrationsResponse_httpStatus = Lens.lens (\ListEventIntegrationsResponse' {httpStatus} -> httpStatus) (\s@ListEventIntegrationsResponse' {} a -> s {httpStatus = a} :: ListEventIntegrationsResponse)
+
+instance Prelude.NFData ListEventIntegrationsResponse where
+  rnf ListEventIntegrationsResponse' {..} =
+    Prelude.rnf eventIntegrations
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppIntegrationS/ListTagsForResource.hs b/gen/Amazonka/AppIntegrationS/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppIntegrationS/ListTagsForResource.hs
@@ -0,0 +1,159 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppIntegrationS.ListTagsForResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the tags for the specified resource.
+module Amazonka.AppIntegrationS.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppIntegrationS.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) of the resource.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'listTagsForResource_resourceArn' - The Amazon Resource Name (ARN) of the resource.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) of the resource.
+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath ListTagsForResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | Information about the tags.
+    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' - Information about the tags.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the tags.
+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/AppIntegrationS/TagResource.hs b/gen/Amazonka/AppIntegrationS/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppIntegrationS/TagResource.hs
@@ -0,0 +1,163 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppIntegrationS.TagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds the specified tags to the specified resource.
+module Amazonka.AppIntegrationS.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+
+    -- * Response Lenses
+    tagResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppIntegrationS.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) of the resource.
+    resourceArn :: Prelude.Text,
+    -- | One or more tags.
+    tags :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource.
+--
+-- 'tags', 'tagResource_tags' - One or more tags.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | One or more tags.
+tagResource_tags :: Lens.Lens' TagResource (Prelude.HashMap Prelude.Text Prelude.Text)
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("tags" Data..= tags)]
+      )
+
+instance Data.ToPath TagResource where
+  toPath TagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'tagResourceResponse_httpStatus' - The response's http status code.
+newTagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TagResourceResponse
+newTagResourceResponse pHttpStatus_ =
+  TagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+tagResourceResponse_httpStatus :: Lens.Lens' TagResourceResponse Prelude.Int
+tagResourceResponse_httpStatus = Lens.lens (\TagResourceResponse' {httpStatus} -> httpStatus) (\s@TagResourceResponse' {} a -> s {httpStatus = a} :: TagResourceResponse)
+
+instance Prelude.NFData TagResourceResponse where
+  rnf TagResourceResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppIntegrationS/Types.hs b/gen/Amazonka/AppIntegrationS/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppIntegrationS/Types.hs
@@ -0,0 +1,212 @@
+{-# 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.AppIntegrationS.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.AppIntegrationS.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _DuplicateResourceException,
+    _InternalServiceError,
+    _InvalidRequestException,
+    _ResourceNotFoundException,
+    _ResourceQuotaExceededException,
+    _ThrottlingException,
+
+    -- * DataIntegrationAssociationSummary
+    DataIntegrationAssociationSummary (..),
+    newDataIntegrationAssociationSummary,
+    dataIntegrationAssociationSummary_clientId,
+    dataIntegrationAssociationSummary_dataIntegrationArn,
+    dataIntegrationAssociationSummary_dataIntegrationAssociationArn,
+
+    -- * DataIntegrationSummary
+    DataIntegrationSummary (..),
+    newDataIntegrationSummary,
+    dataIntegrationSummary_arn,
+    dataIntegrationSummary_name,
+    dataIntegrationSummary_sourceURI,
+
+    -- * EventFilter
+    EventFilter (..),
+    newEventFilter,
+    eventFilter_source,
+
+    -- * EventIntegration
+    EventIntegration (..),
+    newEventIntegration,
+    eventIntegration_description,
+    eventIntegration_eventBridgeBus,
+    eventIntegration_eventFilter,
+    eventIntegration_eventIntegrationArn,
+    eventIntegration_name,
+    eventIntegration_tags,
+
+    -- * EventIntegrationAssociation
+    EventIntegrationAssociation (..),
+    newEventIntegrationAssociation,
+    eventIntegrationAssociation_clientAssociationMetadata,
+    eventIntegrationAssociation_clientId,
+    eventIntegrationAssociation_eventBridgeRuleName,
+    eventIntegrationAssociation_eventIntegrationAssociationArn,
+    eventIntegrationAssociation_eventIntegrationAssociationId,
+    eventIntegrationAssociation_eventIntegrationName,
+
+    -- * ScheduleConfiguration
+    ScheduleConfiguration (..),
+    newScheduleConfiguration,
+    scheduleConfiguration_firstExecutionFrom,
+    scheduleConfiguration_object,
+    scheduleConfiguration_scheduleExpression,
+  )
+where
+
+import Amazonka.AppIntegrationS.Types.DataIntegrationAssociationSummary
+import Amazonka.AppIntegrationS.Types.DataIntegrationSummary
+import Amazonka.AppIntegrationS.Types.EventFilter
+import Amazonka.AppIntegrationS.Types.EventIntegration
+import Amazonka.AppIntegrationS.Types.EventIntegrationAssociation
+import Amazonka.AppIntegrationS.Types.ScheduleConfiguration
+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 @2020-07-29@ of the Amazon AppIntegrations Service SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "AppIntegrationS",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "app-integrations",
+      Core.signingName = "app-integrations",
+      Core.version = "2020-07-29",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "AppIntegrationS",
+      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
+
+-- | A resource with the specified name already exists.
+_DuplicateResourceException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_DuplicateResourceException =
+  Core._MatchServiceError
+    defaultService
+    "DuplicateResourceException"
+    Prelude.. Core.hasStatus 409
+
+-- | Request processing failed due to an error or failure with the service.
+_InternalServiceError :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServiceError =
+  Core._MatchServiceError
+    defaultService
+    "InternalServiceError"
+    Prelude.. Core.hasStatus 500
+
+-- | The request is not valid.
+_InvalidRequestException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidRequestException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidRequestException"
+    Prelude.. Core.hasStatus 400
+
+-- | The specified resource was not found.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | The allowed quota for the resource has been exceeded.
+_ResourceQuotaExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceQuotaExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceQuotaExceededException"
+    Prelude.. Core.hasStatus 429
+
+-- | The throttling limit has been exceeded.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+    Prelude.. Core.hasStatus 429
diff --git a/gen/Amazonka/AppIntegrationS/Types/DataIntegrationAssociationSummary.hs b/gen/Amazonka/AppIntegrationS/Types/DataIntegrationAssociationSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppIntegrationS/Types/DataIntegrationAssociationSummary.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.AppIntegrationS.Types.DataIntegrationAssociationSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppIntegrationS.Types.DataIntegrationAssociationSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Summary information about the DataIntegration association.
+--
+-- /See:/ 'newDataIntegrationAssociationSummary' smart constructor.
+data DataIntegrationAssociationSummary = DataIntegrationAssociationSummary'
+  { -- | The identifier for teh client that is associated with the
+    -- DataIntegration association.
+    clientId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN)of the DataIntegration.
+    dataIntegrationArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the DataIntegration association.
+    dataIntegrationAssociationArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataIntegrationAssociationSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientId', 'dataIntegrationAssociationSummary_clientId' - The identifier for teh client that is associated with the
+-- DataIntegration association.
+--
+-- 'dataIntegrationArn', 'dataIntegrationAssociationSummary_dataIntegrationArn' - The Amazon Resource Name (ARN)of the DataIntegration.
+--
+-- 'dataIntegrationAssociationArn', 'dataIntegrationAssociationSummary_dataIntegrationAssociationArn' - The Amazon Resource Name (ARN) of the DataIntegration association.
+newDataIntegrationAssociationSummary ::
+  DataIntegrationAssociationSummary
+newDataIntegrationAssociationSummary =
+  DataIntegrationAssociationSummary'
+    { clientId =
+        Prelude.Nothing,
+      dataIntegrationArn = Prelude.Nothing,
+      dataIntegrationAssociationArn =
+        Prelude.Nothing
+    }
+
+-- | The identifier for teh client that is associated with the
+-- DataIntegration association.
+dataIntegrationAssociationSummary_clientId :: Lens.Lens' DataIntegrationAssociationSummary (Prelude.Maybe Prelude.Text)
+dataIntegrationAssociationSummary_clientId = Lens.lens (\DataIntegrationAssociationSummary' {clientId} -> clientId) (\s@DataIntegrationAssociationSummary' {} a -> s {clientId = a} :: DataIntegrationAssociationSummary)
+
+-- | The Amazon Resource Name (ARN)of the DataIntegration.
+dataIntegrationAssociationSummary_dataIntegrationArn :: Lens.Lens' DataIntegrationAssociationSummary (Prelude.Maybe Prelude.Text)
+dataIntegrationAssociationSummary_dataIntegrationArn = Lens.lens (\DataIntegrationAssociationSummary' {dataIntegrationArn} -> dataIntegrationArn) (\s@DataIntegrationAssociationSummary' {} a -> s {dataIntegrationArn = a} :: DataIntegrationAssociationSummary)
+
+-- | The Amazon Resource Name (ARN) of the DataIntegration association.
+dataIntegrationAssociationSummary_dataIntegrationAssociationArn :: Lens.Lens' DataIntegrationAssociationSummary (Prelude.Maybe Prelude.Text)
+dataIntegrationAssociationSummary_dataIntegrationAssociationArn = Lens.lens (\DataIntegrationAssociationSummary' {dataIntegrationAssociationArn} -> dataIntegrationAssociationArn) (\s@DataIntegrationAssociationSummary' {} a -> s {dataIntegrationAssociationArn = a} :: DataIntegrationAssociationSummary)
+
+instance
+  Data.FromJSON
+    DataIntegrationAssociationSummary
+  where
+  parseJSON =
+    Data.withObject
+      "DataIntegrationAssociationSummary"
+      ( \x ->
+          DataIntegrationAssociationSummary'
+            Prelude.<$> (x Data..:? "ClientId")
+            Prelude.<*> (x Data..:? "DataIntegrationArn")
+            Prelude.<*> (x Data..:? "DataIntegrationAssociationArn")
+      )
+
+instance
+  Prelude.Hashable
+    DataIntegrationAssociationSummary
+  where
+  hashWithSalt
+    _salt
+    DataIntegrationAssociationSummary' {..} =
+      _salt
+        `Prelude.hashWithSalt` clientId
+        `Prelude.hashWithSalt` dataIntegrationArn
+        `Prelude.hashWithSalt` dataIntegrationAssociationArn
+
+instance
+  Prelude.NFData
+    DataIntegrationAssociationSummary
+  where
+  rnf DataIntegrationAssociationSummary' {..} =
+    Prelude.rnf clientId
+      `Prelude.seq` Prelude.rnf dataIntegrationArn
+      `Prelude.seq` Prelude.rnf dataIntegrationAssociationArn
diff --git a/gen/Amazonka/AppIntegrationS/Types/DataIntegrationSummary.hs b/gen/Amazonka/AppIntegrationS/Types/DataIntegrationSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppIntegrationS/Types/DataIntegrationSummary.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppIntegrationS.Types.DataIntegrationSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppIntegrationS.Types.DataIntegrationSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Summary information about the DataIntegration.
+--
+-- /See:/ 'newDataIntegrationSummary' smart constructor.
+data DataIntegrationSummary = DataIntegrationSummary'
+  { -- | The Amazon Resource Name (ARN) of the DataIntegration.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the DataIntegration.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The URI of the data source.
+    sourceURI :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataIntegrationSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'dataIntegrationSummary_arn' - The Amazon Resource Name (ARN) of the DataIntegration.
+--
+-- 'name', 'dataIntegrationSummary_name' - The name of the DataIntegration.
+--
+-- 'sourceURI', 'dataIntegrationSummary_sourceURI' - The URI of the data source.
+newDataIntegrationSummary ::
+  DataIntegrationSummary
+newDataIntegrationSummary =
+  DataIntegrationSummary'
+    { arn = Prelude.Nothing,
+      name = Prelude.Nothing,
+      sourceURI = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the DataIntegration.
+dataIntegrationSummary_arn :: Lens.Lens' DataIntegrationSummary (Prelude.Maybe Prelude.Text)
+dataIntegrationSummary_arn = Lens.lens (\DataIntegrationSummary' {arn} -> arn) (\s@DataIntegrationSummary' {} a -> s {arn = a} :: DataIntegrationSummary)
+
+-- | The name of the DataIntegration.
+dataIntegrationSummary_name :: Lens.Lens' DataIntegrationSummary (Prelude.Maybe Prelude.Text)
+dataIntegrationSummary_name = Lens.lens (\DataIntegrationSummary' {name} -> name) (\s@DataIntegrationSummary' {} a -> s {name = a} :: DataIntegrationSummary)
+
+-- | The URI of the data source.
+dataIntegrationSummary_sourceURI :: Lens.Lens' DataIntegrationSummary (Prelude.Maybe Prelude.Text)
+dataIntegrationSummary_sourceURI = Lens.lens (\DataIntegrationSummary' {sourceURI} -> sourceURI) (\s@DataIntegrationSummary' {} a -> s {sourceURI = a} :: DataIntegrationSummary)
+
+instance Data.FromJSON DataIntegrationSummary where
+  parseJSON =
+    Data.withObject
+      "DataIntegrationSummary"
+      ( \x ->
+          DataIntegrationSummary'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "SourceURI")
+      )
+
+instance Prelude.Hashable DataIntegrationSummary where
+  hashWithSalt _salt DataIntegrationSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` sourceURI
+
+instance Prelude.NFData DataIntegrationSummary where
+  rnf DataIntegrationSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf sourceURI
diff --git a/gen/Amazonka/AppIntegrationS/Types/EventFilter.hs b/gen/Amazonka/AppIntegrationS/Types/EventFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppIntegrationS/Types/EventFilter.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.AppIntegrationS.Types.EventFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppIntegrationS.Types.EventFilter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The event filter.
+--
+-- /See:/ 'newEventFilter' smart constructor.
+data EventFilter = EventFilter'
+  { -- | The source of the events.
+    source :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EventFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'source', 'eventFilter_source' - The source of the events.
+newEventFilter ::
+  -- | 'source'
+  Prelude.Text ->
+  EventFilter
+newEventFilter pSource_ =
+  EventFilter' {source = pSource_}
+
+-- | The source of the events.
+eventFilter_source :: Lens.Lens' EventFilter Prelude.Text
+eventFilter_source = Lens.lens (\EventFilter' {source} -> source) (\s@EventFilter' {} a -> s {source = a} :: EventFilter)
+
+instance Data.FromJSON EventFilter where
+  parseJSON =
+    Data.withObject
+      "EventFilter"
+      ( \x ->
+          EventFilter' Prelude.<$> (x Data..: "Source")
+      )
+
+instance Prelude.Hashable EventFilter where
+  hashWithSalt _salt EventFilter' {..} =
+    _salt `Prelude.hashWithSalt` source
+
+instance Prelude.NFData EventFilter where
+  rnf EventFilter' {..} = Prelude.rnf source
+
+instance Data.ToJSON EventFilter where
+  toJSON EventFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Source" Data..= source)]
+      )
diff --git a/gen/Amazonka/AppIntegrationS/Types/EventIntegration.hs b/gen/Amazonka/AppIntegrationS/Types/EventIntegration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppIntegrationS/Types/EventIntegration.hs
@@ -0,0 +1,133 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppIntegrationS.Types.EventIntegration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppIntegrationS.Types.EventIntegration where
+
+import Amazonka.AppIntegrationS.Types.EventFilter
+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 event integration.
+--
+-- /See:/ 'newEventIntegration' smart constructor.
+data EventIntegration = EventIntegration'
+  { -- | The event integration description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon EventBridge bus for the event integration.
+    eventBridgeBus :: Prelude.Maybe Prelude.Text,
+    -- | The event integration filter.
+    eventFilter :: Prelude.Maybe EventFilter,
+    -- | The Amazon Resource Name (ARN) of the event integration.
+    eventIntegrationArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the event integration.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The tags.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EventIntegration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'eventIntegration_description' - The event integration description.
+--
+-- 'eventBridgeBus', 'eventIntegration_eventBridgeBus' - The Amazon EventBridge bus for the event integration.
+--
+-- 'eventFilter', 'eventIntegration_eventFilter' - The event integration filter.
+--
+-- 'eventIntegrationArn', 'eventIntegration_eventIntegrationArn' - The Amazon Resource Name (ARN) of the event integration.
+--
+-- 'name', 'eventIntegration_name' - The name of the event integration.
+--
+-- 'tags', 'eventIntegration_tags' - The tags.
+newEventIntegration ::
+  EventIntegration
+newEventIntegration =
+  EventIntegration'
+    { description = Prelude.Nothing,
+      eventBridgeBus = Prelude.Nothing,
+      eventFilter = Prelude.Nothing,
+      eventIntegrationArn = Prelude.Nothing,
+      name = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The event integration description.
+eventIntegration_description :: Lens.Lens' EventIntegration (Prelude.Maybe Prelude.Text)
+eventIntegration_description = Lens.lens (\EventIntegration' {description} -> description) (\s@EventIntegration' {} a -> s {description = a} :: EventIntegration)
+
+-- | The Amazon EventBridge bus for the event integration.
+eventIntegration_eventBridgeBus :: Lens.Lens' EventIntegration (Prelude.Maybe Prelude.Text)
+eventIntegration_eventBridgeBus = Lens.lens (\EventIntegration' {eventBridgeBus} -> eventBridgeBus) (\s@EventIntegration' {} a -> s {eventBridgeBus = a} :: EventIntegration)
+
+-- | The event integration filter.
+eventIntegration_eventFilter :: Lens.Lens' EventIntegration (Prelude.Maybe EventFilter)
+eventIntegration_eventFilter = Lens.lens (\EventIntegration' {eventFilter} -> eventFilter) (\s@EventIntegration' {} a -> s {eventFilter = a} :: EventIntegration)
+
+-- | The Amazon Resource Name (ARN) of the event integration.
+eventIntegration_eventIntegrationArn :: Lens.Lens' EventIntegration (Prelude.Maybe Prelude.Text)
+eventIntegration_eventIntegrationArn = Lens.lens (\EventIntegration' {eventIntegrationArn} -> eventIntegrationArn) (\s@EventIntegration' {} a -> s {eventIntegrationArn = a} :: EventIntegration)
+
+-- | The name of the event integration.
+eventIntegration_name :: Lens.Lens' EventIntegration (Prelude.Maybe Prelude.Text)
+eventIntegration_name = Lens.lens (\EventIntegration' {name} -> name) (\s@EventIntegration' {} a -> s {name = a} :: EventIntegration)
+
+-- | The tags.
+eventIntegration_tags :: Lens.Lens' EventIntegration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+eventIntegration_tags = Lens.lens (\EventIntegration' {tags} -> tags) (\s@EventIntegration' {} a -> s {tags = a} :: EventIntegration) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON EventIntegration where
+  parseJSON =
+    Data.withObject
+      "EventIntegration"
+      ( \x ->
+          EventIntegration'
+            Prelude.<$> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "EventBridgeBus")
+            Prelude.<*> (x Data..:? "EventFilter")
+            Prelude.<*> (x Data..:? "EventIntegrationArn")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable EventIntegration where
+  hashWithSalt _salt EventIntegration' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` eventBridgeBus
+      `Prelude.hashWithSalt` eventFilter
+      `Prelude.hashWithSalt` eventIntegrationArn
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData EventIntegration where
+  rnf EventIntegration' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf eventBridgeBus
+      `Prelude.seq` Prelude.rnf eventFilter
+      `Prelude.seq` Prelude.rnf eventIntegrationArn
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/AppIntegrationS/Types/EventIntegrationAssociation.hs b/gen/Amazonka/AppIntegrationS/Types/EventIntegrationAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppIntegrationS/Types/EventIntegrationAssociation.hs
@@ -0,0 +1,141 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppIntegrationS.Types.EventIntegrationAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppIntegrationS.Types.EventIntegrationAssociation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The event integration association.
+--
+-- /See:/ 'newEventIntegrationAssociation' smart constructor.
+data EventIntegrationAssociation = EventIntegrationAssociation'
+  { -- | The metadata associated with the client.
+    clientAssociationMetadata :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The identifier for the client that is associated with the event
+    -- integration.
+    clientId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the EventBridge rule.
+    eventBridgeRuleName :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) for the event integration association.
+    eventIntegrationAssociationArn :: Prelude.Maybe Prelude.Text,
+    -- | The identifier for the event integration association.
+    eventIntegrationAssociationId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the event integration.
+    eventIntegrationName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EventIntegrationAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientAssociationMetadata', 'eventIntegrationAssociation_clientAssociationMetadata' - The metadata associated with the client.
+--
+-- 'clientId', 'eventIntegrationAssociation_clientId' - The identifier for the client that is associated with the event
+-- integration.
+--
+-- 'eventBridgeRuleName', 'eventIntegrationAssociation_eventBridgeRuleName' - The name of the EventBridge rule.
+--
+-- 'eventIntegrationAssociationArn', 'eventIntegrationAssociation_eventIntegrationAssociationArn' - The Amazon Resource Name (ARN) for the event integration association.
+--
+-- 'eventIntegrationAssociationId', 'eventIntegrationAssociation_eventIntegrationAssociationId' - The identifier for the event integration association.
+--
+-- 'eventIntegrationName', 'eventIntegrationAssociation_eventIntegrationName' - The name of the event integration.
+newEventIntegrationAssociation ::
+  EventIntegrationAssociation
+newEventIntegrationAssociation =
+  EventIntegrationAssociation'
+    { clientAssociationMetadata =
+        Prelude.Nothing,
+      clientId = Prelude.Nothing,
+      eventBridgeRuleName = Prelude.Nothing,
+      eventIntegrationAssociationArn =
+        Prelude.Nothing,
+      eventIntegrationAssociationId =
+        Prelude.Nothing,
+      eventIntegrationName = Prelude.Nothing
+    }
+
+-- | The metadata associated with the client.
+eventIntegrationAssociation_clientAssociationMetadata :: Lens.Lens' EventIntegrationAssociation (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+eventIntegrationAssociation_clientAssociationMetadata = Lens.lens (\EventIntegrationAssociation' {clientAssociationMetadata} -> clientAssociationMetadata) (\s@EventIntegrationAssociation' {} a -> s {clientAssociationMetadata = a} :: EventIntegrationAssociation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The identifier for the client that is associated with the event
+-- integration.
+eventIntegrationAssociation_clientId :: Lens.Lens' EventIntegrationAssociation (Prelude.Maybe Prelude.Text)
+eventIntegrationAssociation_clientId = Lens.lens (\EventIntegrationAssociation' {clientId} -> clientId) (\s@EventIntegrationAssociation' {} a -> s {clientId = a} :: EventIntegrationAssociation)
+
+-- | The name of the EventBridge rule.
+eventIntegrationAssociation_eventBridgeRuleName :: Lens.Lens' EventIntegrationAssociation (Prelude.Maybe Prelude.Text)
+eventIntegrationAssociation_eventBridgeRuleName = Lens.lens (\EventIntegrationAssociation' {eventBridgeRuleName} -> eventBridgeRuleName) (\s@EventIntegrationAssociation' {} a -> s {eventBridgeRuleName = a} :: EventIntegrationAssociation)
+
+-- | The Amazon Resource Name (ARN) for the event integration association.
+eventIntegrationAssociation_eventIntegrationAssociationArn :: Lens.Lens' EventIntegrationAssociation (Prelude.Maybe Prelude.Text)
+eventIntegrationAssociation_eventIntegrationAssociationArn = Lens.lens (\EventIntegrationAssociation' {eventIntegrationAssociationArn} -> eventIntegrationAssociationArn) (\s@EventIntegrationAssociation' {} a -> s {eventIntegrationAssociationArn = a} :: EventIntegrationAssociation)
+
+-- | The identifier for the event integration association.
+eventIntegrationAssociation_eventIntegrationAssociationId :: Lens.Lens' EventIntegrationAssociation (Prelude.Maybe Prelude.Text)
+eventIntegrationAssociation_eventIntegrationAssociationId = Lens.lens (\EventIntegrationAssociation' {eventIntegrationAssociationId} -> eventIntegrationAssociationId) (\s@EventIntegrationAssociation' {} a -> s {eventIntegrationAssociationId = a} :: EventIntegrationAssociation)
+
+-- | The name of the event integration.
+eventIntegrationAssociation_eventIntegrationName :: Lens.Lens' EventIntegrationAssociation (Prelude.Maybe Prelude.Text)
+eventIntegrationAssociation_eventIntegrationName = Lens.lens (\EventIntegrationAssociation' {eventIntegrationName} -> eventIntegrationName) (\s@EventIntegrationAssociation' {} a -> s {eventIntegrationName = a} :: EventIntegrationAssociation)
+
+instance Data.FromJSON EventIntegrationAssociation where
+  parseJSON =
+    Data.withObject
+      "EventIntegrationAssociation"
+      ( \x ->
+          EventIntegrationAssociation'
+            Prelude.<$> ( x
+                            Data..:? "ClientAssociationMetadata"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "ClientId")
+            Prelude.<*> (x Data..:? "EventBridgeRuleName")
+            Prelude.<*> (x Data..:? "EventIntegrationAssociationArn")
+            Prelude.<*> (x Data..:? "EventIntegrationAssociationId")
+            Prelude.<*> (x Data..:? "EventIntegrationName")
+      )
+
+instance Prelude.Hashable EventIntegrationAssociation where
+  hashWithSalt _salt EventIntegrationAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientAssociationMetadata
+      `Prelude.hashWithSalt` clientId
+      `Prelude.hashWithSalt` eventBridgeRuleName
+      `Prelude.hashWithSalt` eventIntegrationAssociationArn
+      `Prelude.hashWithSalt` eventIntegrationAssociationId
+      `Prelude.hashWithSalt` eventIntegrationName
+
+instance Prelude.NFData EventIntegrationAssociation where
+  rnf EventIntegrationAssociation' {..} =
+    Prelude.rnf clientAssociationMetadata
+      `Prelude.seq` Prelude.rnf clientId
+      `Prelude.seq` Prelude.rnf eventBridgeRuleName
+      `Prelude.seq` Prelude.rnf eventIntegrationAssociationArn
+      `Prelude.seq` Prelude.rnf eventIntegrationAssociationId
+      `Prelude.seq` Prelude.rnf eventIntegrationName
diff --git a/gen/Amazonka/AppIntegrationS/Types/ScheduleConfiguration.hs b/gen/Amazonka/AppIntegrationS/Types/ScheduleConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppIntegrationS/Types/ScheduleConfiguration.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.AppIntegrationS.Types.ScheduleConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppIntegrationS.Types.ScheduleConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The name of the data and how often it should be pulled from the source.
+--
+-- /See:/ 'newScheduleConfiguration' smart constructor.
+data ScheduleConfiguration = ScheduleConfiguration'
+  { -- | The start date for objects to import in the first flow run.
+    firstExecutionFrom :: Prelude.Maybe Prelude.Text,
+    -- | The name of the object to pull from the data source.
+    object' :: Prelude.Maybe Prelude.Text,
+    -- | How often the data should be pulled from data source.
+    scheduleExpression :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScheduleConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'firstExecutionFrom', 'scheduleConfiguration_firstExecutionFrom' - The start date for objects to import in the first flow run.
+--
+-- 'object'', 'scheduleConfiguration_object' - The name of the object to pull from the data source.
+--
+-- 'scheduleExpression', 'scheduleConfiguration_scheduleExpression' - How often the data should be pulled from data source.
+newScheduleConfiguration ::
+  ScheduleConfiguration
+newScheduleConfiguration =
+  ScheduleConfiguration'
+    { firstExecutionFrom =
+        Prelude.Nothing,
+      object' = Prelude.Nothing,
+      scheduleExpression = Prelude.Nothing
+    }
+
+-- | The start date for objects to import in the first flow run.
+scheduleConfiguration_firstExecutionFrom :: Lens.Lens' ScheduleConfiguration (Prelude.Maybe Prelude.Text)
+scheduleConfiguration_firstExecutionFrom = Lens.lens (\ScheduleConfiguration' {firstExecutionFrom} -> firstExecutionFrom) (\s@ScheduleConfiguration' {} a -> s {firstExecutionFrom = a} :: ScheduleConfiguration)
+
+-- | The name of the object to pull from the data source.
+scheduleConfiguration_object :: Lens.Lens' ScheduleConfiguration (Prelude.Maybe Prelude.Text)
+scheduleConfiguration_object = Lens.lens (\ScheduleConfiguration' {object'} -> object') (\s@ScheduleConfiguration' {} a -> s {object' = a} :: ScheduleConfiguration)
+
+-- | How often the data should be pulled from data source.
+scheduleConfiguration_scheduleExpression :: Lens.Lens' ScheduleConfiguration (Prelude.Maybe Prelude.Text)
+scheduleConfiguration_scheduleExpression = Lens.lens (\ScheduleConfiguration' {scheduleExpression} -> scheduleExpression) (\s@ScheduleConfiguration' {} a -> s {scheduleExpression = a} :: ScheduleConfiguration)
+
+instance Data.FromJSON ScheduleConfiguration where
+  parseJSON =
+    Data.withObject
+      "ScheduleConfiguration"
+      ( \x ->
+          ScheduleConfiguration'
+            Prelude.<$> (x Data..:? "FirstExecutionFrom")
+            Prelude.<*> (x Data..:? "Object")
+            Prelude.<*> (x Data..:? "ScheduleExpression")
+      )
+
+instance Prelude.Hashable ScheduleConfiguration where
+  hashWithSalt _salt ScheduleConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` firstExecutionFrom
+      `Prelude.hashWithSalt` object'
+      `Prelude.hashWithSalt` scheduleExpression
+
+instance Prelude.NFData ScheduleConfiguration where
+  rnf ScheduleConfiguration' {..} =
+    Prelude.rnf firstExecutionFrom
+      `Prelude.seq` Prelude.rnf object'
+      `Prelude.seq` Prelude.rnf scheduleExpression
+
+instance Data.ToJSON ScheduleConfiguration where
+  toJSON ScheduleConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("FirstExecutionFrom" Data..=)
+              Prelude.<$> firstExecutionFrom,
+            ("Object" Data..=) Prelude.<$> object',
+            ("ScheduleExpression" Data..=)
+              Prelude.<$> scheduleExpression
+          ]
+      )
diff --git a/gen/Amazonka/AppIntegrationS/UntagResource.hs b/gen/Amazonka/AppIntegrationS/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppIntegrationS/UntagResource.hs
@@ -0,0 +1,163 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppIntegrationS.UntagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes the specified tags from the specified resource.
+module Amazonka.AppIntegrationS.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+
+    -- * Response Lenses
+    untagResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppIntegrationS.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) of the resource.
+    resourceArn :: Prelude.Text,
+    -- | The tag keys.
+    tagKeys :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The tag keys.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  -- | 'tagKeys'
+  Prelude.NonEmpty Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ pTagKeys_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Lens.coerced Lens.# pTagKeys_
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | The tag keys.
+untagResource_tagKeys :: Lens.Lens' UntagResource (Prelude.NonEmpty Prelude.Text)
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath UntagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery UntagResource where
+  toQuery UntagResource' {..} =
+    Prelude.mconcat
+      ["tagKeys" Data.=: Data.toQueryList "member" tagKeys]
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'untagResourceResponse_httpStatus' - The response's http status code.
+newUntagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourceResponse
+newUntagResourceResponse pHttpStatus_ =
+  UntagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int
+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf UntagResourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppIntegrationS/UpdateDataIntegration.hs b/gen/Amazonka/AppIntegrationS/UpdateDataIntegration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppIntegrationS/UpdateDataIntegration.hs
@@ -0,0 +1,191 @@
+{-# 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.AppIntegrationS.UpdateDataIntegration
+-- 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 description of a DataIntegration.
+--
+-- You cannot create a DataIntegration association for a DataIntegration
+-- that has been previously associated. Use a different DataIntegration, or
+-- recreate the DataIntegration using the
+-- <https://docs.aws.amazon.com/appintegrations/latest/APIReference/API_CreateDataIntegration.html CreateDataIntegration>
+-- API.
+module Amazonka.AppIntegrationS.UpdateDataIntegration
+  ( -- * Creating a Request
+    UpdateDataIntegration (..),
+    newUpdateDataIntegration,
+
+    -- * Request Lenses
+    updateDataIntegration_description,
+    updateDataIntegration_name,
+    updateDataIntegration_identifier,
+
+    -- * Destructuring the Response
+    UpdateDataIntegrationResponse (..),
+    newUpdateDataIntegrationResponse,
+
+    -- * Response Lenses
+    updateDataIntegrationResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppIntegrationS.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:/ 'newUpdateDataIntegration' smart constructor.
+data UpdateDataIntegration = UpdateDataIntegration'
+  { -- | A description of the DataIntegration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the DataIntegration.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier for the DataIntegration.
+    identifier :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDataIntegration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateDataIntegration_description' - A description of the DataIntegration.
+--
+-- 'name', 'updateDataIntegration_name' - The name of the DataIntegration.
+--
+-- 'identifier', 'updateDataIntegration_identifier' - A unique identifier for the DataIntegration.
+newUpdateDataIntegration ::
+  -- | 'identifier'
+  Prelude.Text ->
+  UpdateDataIntegration
+newUpdateDataIntegration pIdentifier_ =
+  UpdateDataIntegration'
+    { description =
+        Prelude.Nothing,
+      name = Prelude.Nothing,
+      identifier = pIdentifier_
+    }
+
+-- | A description of the DataIntegration.
+updateDataIntegration_description :: Lens.Lens' UpdateDataIntegration (Prelude.Maybe Prelude.Text)
+updateDataIntegration_description = Lens.lens (\UpdateDataIntegration' {description} -> description) (\s@UpdateDataIntegration' {} a -> s {description = a} :: UpdateDataIntegration)
+
+-- | The name of the DataIntegration.
+updateDataIntegration_name :: Lens.Lens' UpdateDataIntegration (Prelude.Maybe Prelude.Text)
+updateDataIntegration_name = Lens.lens (\UpdateDataIntegration' {name} -> name) (\s@UpdateDataIntegration' {} a -> s {name = a} :: UpdateDataIntegration)
+
+-- | A unique identifier for the DataIntegration.
+updateDataIntegration_identifier :: Lens.Lens' UpdateDataIntegration Prelude.Text
+updateDataIntegration_identifier = Lens.lens (\UpdateDataIntegration' {identifier} -> identifier) (\s@UpdateDataIntegration' {} a -> s {identifier = a} :: UpdateDataIntegration)
+
+instance Core.AWSRequest UpdateDataIntegration where
+  type
+    AWSResponse UpdateDataIntegration =
+      UpdateDataIntegrationResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateDataIntegrationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateDataIntegration where
+  hashWithSalt _salt UpdateDataIntegration' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` identifier
+
+instance Prelude.NFData UpdateDataIntegration where
+  rnf UpdateDataIntegration' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf identifier
+
+instance Data.ToHeaders UpdateDataIntegration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateDataIntegration where
+  toJSON UpdateDataIntegration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("Name" Data..=) Prelude.<$> name
+          ]
+      )
+
+instance Data.ToPath UpdateDataIntegration where
+  toPath UpdateDataIntegration' {..} =
+    Prelude.mconcat
+      ["/dataIntegrations/", Data.toBS identifier]
+
+instance Data.ToQuery UpdateDataIntegration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateDataIntegrationResponse' smart constructor.
+data UpdateDataIntegrationResponse = UpdateDataIntegrationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDataIntegrationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateDataIntegrationResponse_httpStatus' - The response's http status code.
+newUpdateDataIntegrationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateDataIntegrationResponse
+newUpdateDataIntegrationResponse pHttpStatus_ =
+  UpdateDataIntegrationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateDataIntegrationResponse_httpStatus :: Lens.Lens' UpdateDataIntegrationResponse Prelude.Int
+updateDataIntegrationResponse_httpStatus = Lens.lens (\UpdateDataIntegrationResponse' {httpStatus} -> httpStatus) (\s@UpdateDataIntegrationResponse' {} a -> s {httpStatus = a} :: UpdateDataIntegrationResponse)
+
+instance Prelude.NFData UpdateDataIntegrationResponse where
+  rnf UpdateDataIntegrationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppIntegrationS/UpdateEventIntegration.hs b/gen/Amazonka/AppIntegrationS/UpdateEventIntegration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppIntegrationS/UpdateEventIntegration.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppIntegrationS.UpdateEventIntegration
+-- 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 description of an event integration.
+module Amazonka.AppIntegrationS.UpdateEventIntegration
+  ( -- * Creating a Request
+    UpdateEventIntegration (..),
+    newUpdateEventIntegration,
+
+    -- * Request Lenses
+    updateEventIntegration_description,
+    updateEventIntegration_name,
+
+    -- * Destructuring the Response
+    UpdateEventIntegrationResponse (..),
+    newUpdateEventIntegrationResponse,
+
+    -- * Response Lenses
+    updateEventIntegrationResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppIntegrationS.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:/ 'newUpdateEventIntegration' smart constructor.
+data UpdateEventIntegration = UpdateEventIntegration'
+  { -- | The description of the event inegration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the event integration.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateEventIntegration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateEventIntegration_description' - The description of the event inegration.
+--
+-- 'name', 'updateEventIntegration_name' - The name of the event integration.
+newUpdateEventIntegration ::
+  -- | 'name'
+  Prelude.Text ->
+  UpdateEventIntegration
+newUpdateEventIntegration pName_ =
+  UpdateEventIntegration'
+    { description =
+        Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The description of the event inegration.
+updateEventIntegration_description :: Lens.Lens' UpdateEventIntegration (Prelude.Maybe Prelude.Text)
+updateEventIntegration_description = Lens.lens (\UpdateEventIntegration' {description} -> description) (\s@UpdateEventIntegration' {} a -> s {description = a} :: UpdateEventIntegration)
+
+-- | The name of the event integration.
+updateEventIntegration_name :: Lens.Lens' UpdateEventIntegration Prelude.Text
+updateEventIntegration_name = Lens.lens (\UpdateEventIntegration' {name} -> name) (\s@UpdateEventIntegration' {} a -> s {name = a} :: UpdateEventIntegration)
+
+instance Core.AWSRequest UpdateEventIntegration where
+  type
+    AWSResponse UpdateEventIntegration =
+      UpdateEventIntegrationResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateEventIntegrationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateEventIntegration where
+  hashWithSalt _salt UpdateEventIntegration' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData UpdateEventIntegration where
+  rnf UpdateEventIntegration' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders UpdateEventIntegration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateEventIntegration where
+  toJSON UpdateEventIntegration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("Description" Data..=) Prelude.<$> description]
+      )
+
+instance Data.ToPath UpdateEventIntegration where
+  toPath UpdateEventIntegration' {..} =
+    Prelude.mconcat
+      ["/eventIntegrations/", Data.toBS name]
+
+instance Data.ToQuery UpdateEventIntegration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateEventIntegrationResponse' smart constructor.
+data UpdateEventIntegrationResponse = UpdateEventIntegrationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateEventIntegrationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateEventIntegrationResponse_httpStatus' - The response's http status code.
+newUpdateEventIntegrationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateEventIntegrationResponse
+newUpdateEventIntegrationResponse pHttpStatus_ =
+  UpdateEventIntegrationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateEventIntegrationResponse_httpStatus :: Lens.Lens' UpdateEventIntegrationResponse Prelude.Int
+updateEventIntegrationResponse_httpStatus = Lens.lens (\UpdateEventIntegrationResponse' {httpStatus} -> httpStatus) (\s@UpdateEventIntegrationResponse' {} a -> s {httpStatus = a} :: UpdateEventIntegrationResponse)
+
+instance
+  Prelude.NFData
+    UpdateEventIntegrationResponse
+  where
+  rnf UpdateEventIntegrationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppIntegrationS/Waiters.hs b/gen/Amazonka/AppIntegrationS/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppIntegrationS/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.AppIntegrationS.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.AppIntegrationS.Waiters where
+
+import Amazonka.AppIntegrationS.Lens
+import Amazonka.AppIntegrationS.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.AppIntegrationS
+import Test.Amazonka.AppIntegrationS.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "AppIntegrationS"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/AppIntegrationS.hs b/test/Test/Amazonka/AppIntegrationS.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/AppIntegrationS.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.AppIntegrationS
+-- Copyright   : (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.AppIntegrationS
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/AppIntegrationS/Internal.hs b/test/Test/Amazonka/AppIntegrationS/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/AppIntegrationS/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.AppIntegrationS.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.AppIntegrationS.Internal where
diff --git a/test/Test/Amazonka/Gen/AppIntegrationS.hs b/test/Test/Amazonka/Gen/AppIntegrationS.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/AppIntegrationS.hs
@@ -0,0 +1,338 @@
+{-# 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.AppIntegrationS
+-- Copyright   : (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.AppIntegrationS where
+
+import Amazonka.AppIntegrationS
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.AppIntegrationS.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"
+--         [ requestCreateDataIntegration $
+--             newCreateDataIntegration
+--
+--         , requestCreateEventIntegration $
+--             newCreateEventIntegration
+--
+--         , requestDeleteDataIntegration $
+--             newDeleteDataIntegration
+--
+--         , requestDeleteEventIntegration $
+--             newDeleteEventIntegration
+--
+--         , requestGetDataIntegration $
+--             newGetDataIntegration
+--
+--         , requestGetEventIntegration $
+--             newGetEventIntegration
+--
+--         , requestListDataIntegrationAssociations $
+--             newListDataIntegrationAssociations
+--
+--         , requestListDataIntegrations $
+--             newListDataIntegrations
+--
+--         , requestListEventIntegrationAssociations $
+--             newListEventIntegrationAssociations
+--
+--         , requestListEventIntegrations $
+--             newListEventIntegrations
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateDataIntegration $
+--             newUpdateDataIntegration
+--
+--         , requestUpdateEventIntegration $
+--             newUpdateEventIntegration
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseCreateDataIntegration $
+--             newCreateDataIntegrationResponse
+--
+--         , responseCreateEventIntegration $
+--             newCreateEventIntegrationResponse
+--
+--         , responseDeleteDataIntegration $
+--             newDeleteDataIntegrationResponse
+--
+--         , responseDeleteEventIntegration $
+--             newDeleteEventIntegrationResponse
+--
+--         , responseGetDataIntegration $
+--             newGetDataIntegrationResponse
+--
+--         , responseGetEventIntegration $
+--             newGetEventIntegrationResponse
+--
+--         , responseListDataIntegrationAssociations $
+--             newListDataIntegrationAssociationsResponse
+--
+--         , responseListDataIntegrations $
+--             newListDataIntegrationsResponse
+--
+--         , responseListEventIntegrationAssociations $
+--             newListEventIntegrationAssociationsResponse
+--
+--         , responseListEventIntegrations $
+--             newListEventIntegrationsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateDataIntegration $
+--             newUpdateDataIntegrationResponse
+--
+--         , responseUpdateEventIntegration $
+--             newUpdateEventIntegrationResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestCreateDataIntegration :: CreateDataIntegration -> TestTree
+requestCreateDataIntegration =
+  req
+    "CreateDataIntegration"
+    "fixture/CreateDataIntegration.yaml"
+
+requestCreateEventIntegration :: CreateEventIntegration -> TestTree
+requestCreateEventIntegration =
+  req
+    "CreateEventIntegration"
+    "fixture/CreateEventIntegration.yaml"
+
+requestDeleteDataIntegration :: DeleteDataIntegration -> TestTree
+requestDeleteDataIntegration =
+  req
+    "DeleteDataIntegration"
+    "fixture/DeleteDataIntegration.yaml"
+
+requestDeleteEventIntegration :: DeleteEventIntegration -> TestTree
+requestDeleteEventIntegration =
+  req
+    "DeleteEventIntegration"
+    "fixture/DeleteEventIntegration.yaml"
+
+requestGetDataIntegration :: GetDataIntegration -> TestTree
+requestGetDataIntegration =
+  req
+    "GetDataIntegration"
+    "fixture/GetDataIntegration.yaml"
+
+requestGetEventIntegration :: GetEventIntegration -> TestTree
+requestGetEventIntegration =
+  req
+    "GetEventIntegration"
+    "fixture/GetEventIntegration.yaml"
+
+requestListDataIntegrationAssociations :: ListDataIntegrationAssociations -> TestTree
+requestListDataIntegrationAssociations =
+  req
+    "ListDataIntegrationAssociations"
+    "fixture/ListDataIntegrationAssociations.yaml"
+
+requestListDataIntegrations :: ListDataIntegrations -> TestTree
+requestListDataIntegrations =
+  req
+    "ListDataIntegrations"
+    "fixture/ListDataIntegrations.yaml"
+
+requestListEventIntegrationAssociations :: ListEventIntegrationAssociations -> TestTree
+requestListEventIntegrationAssociations =
+  req
+    "ListEventIntegrationAssociations"
+    "fixture/ListEventIntegrationAssociations.yaml"
+
+requestListEventIntegrations :: ListEventIntegrations -> TestTree
+requestListEventIntegrations =
+  req
+    "ListEventIntegrations"
+    "fixture/ListEventIntegrations.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateDataIntegration :: UpdateDataIntegration -> TestTree
+requestUpdateDataIntegration =
+  req
+    "UpdateDataIntegration"
+    "fixture/UpdateDataIntegration.yaml"
+
+requestUpdateEventIntegration :: UpdateEventIntegration -> TestTree
+requestUpdateEventIntegration =
+  req
+    "UpdateEventIntegration"
+    "fixture/UpdateEventIntegration.yaml"
+
+-- Responses
+
+responseCreateDataIntegration :: CreateDataIntegrationResponse -> TestTree
+responseCreateDataIntegration =
+  res
+    "CreateDataIntegrationResponse"
+    "fixture/CreateDataIntegrationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDataIntegration)
+
+responseCreateEventIntegration :: CreateEventIntegrationResponse -> TestTree
+responseCreateEventIntegration =
+  res
+    "CreateEventIntegrationResponse"
+    "fixture/CreateEventIntegrationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateEventIntegration)
+
+responseDeleteDataIntegration :: DeleteDataIntegrationResponse -> TestTree
+responseDeleteDataIntegration =
+  res
+    "DeleteDataIntegrationResponse"
+    "fixture/DeleteDataIntegrationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDataIntegration)
+
+responseDeleteEventIntegration :: DeleteEventIntegrationResponse -> TestTree
+responseDeleteEventIntegration =
+  res
+    "DeleteEventIntegrationResponse"
+    "fixture/DeleteEventIntegrationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteEventIntegration)
+
+responseGetDataIntegration :: GetDataIntegrationResponse -> TestTree
+responseGetDataIntegration =
+  res
+    "GetDataIntegrationResponse"
+    "fixture/GetDataIntegrationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDataIntegration)
+
+responseGetEventIntegration :: GetEventIntegrationResponse -> TestTree
+responseGetEventIntegration =
+  res
+    "GetEventIntegrationResponse"
+    "fixture/GetEventIntegrationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetEventIntegration)
+
+responseListDataIntegrationAssociations :: ListDataIntegrationAssociationsResponse -> TestTree
+responseListDataIntegrationAssociations =
+  res
+    "ListDataIntegrationAssociationsResponse"
+    "fixture/ListDataIntegrationAssociationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDataIntegrationAssociations)
+
+responseListDataIntegrations :: ListDataIntegrationsResponse -> TestTree
+responseListDataIntegrations =
+  res
+    "ListDataIntegrationsResponse"
+    "fixture/ListDataIntegrationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDataIntegrations)
+
+responseListEventIntegrationAssociations :: ListEventIntegrationAssociationsResponse -> TestTree
+responseListEventIntegrationAssociations =
+  res
+    "ListEventIntegrationAssociationsResponse"
+    "fixture/ListEventIntegrationAssociationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListEventIntegrationAssociations)
+
+responseListEventIntegrations :: ListEventIntegrationsResponse -> TestTree
+responseListEventIntegrations =
+  res
+    "ListEventIntegrationsResponse"
+    "fixture/ListEventIntegrationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListEventIntegrations)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+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)
+
+responseUpdateDataIntegration :: UpdateDataIntegrationResponse -> TestTree
+responseUpdateDataIntegration =
+  res
+    "UpdateDataIntegrationResponse"
+    "fixture/UpdateDataIntegrationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateDataIntegration)
+
+responseUpdateEventIntegration :: UpdateEventIntegrationResponse -> TestTree
+responseUpdateEventIntegration =
+  res
+    "UpdateEventIntegrationResponse"
+    "fixture/UpdateEventIntegrationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateEventIntegration)
