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 IoT Events SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2018-07-27@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-iotevents)
+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.IoTEvents](http://hackage.haskell.org/package/amazonka-iotevents/docs/Amazonka-IoTEvents.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-iotevents` 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-iotevents.cabal b/amazonka-iotevents.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-iotevents.cabal
@@ -0,0 +1,180 @@
+cabal-version:      2.2
+name:               amazonka-iotevents
+version:            2.0
+synopsis:           Amazon IoT Events 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 @2018-07-27@ 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.IoTEvents.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.IoTEvents" 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-iotevents
+
+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.IoTEvents
+    Amazonka.IoTEvents.CreateAlarmModel
+    Amazonka.IoTEvents.CreateDetectorModel
+    Amazonka.IoTEvents.CreateInput
+    Amazonka.IoTEvents.DeleteAlarmModel
+    Amazonka.IoTEvents.DeleteDetectorModel
+    Amazonka.IoTEvents.DeleteInput
+    Amazonka.IoTEvents.DescribeAlarmModel
+    Amazonka.IoTEvents.DescribeDetectorModel
+    Amazonka.IoTEvents.DescribeDetectorModelAnalysis
+    Amazonka.IoTEvents.DescribeInput
+    Amazonka.IoTEvents.DescribeLoggingOptions
+    Amazonka.IoTEvents.GetDetectorModelAnalysisResults
+    Amazonka.IoTEvents.Lens
+    Amazonka.IoTEvents.ListAlarmModels
+    Amazonka.IoTEvents.ListAlarmModelVersions
+    Amazonka.IoTEvents.ListDetectorModels
+    Amazonka.IoTEvents.ListDetectorModelVersions
+    Amazonka.IoTEvents.ListInputRoutings
+    Amazonka.IoTEvents.ListInputs
+    Amazonka.IoTEvents.ListTagsForResource
+    Amazonka.IoTEvents.PutLoggingOptions
+    Amazonka.IoTEvents.StartDetectorModelAnalysis
+    Amazonka.IoTEvents.TagResource
+    Amazonka.IoTEvents.Types
+    Amazonka.IoTEvents.Types.AcknowledgeFlow
+    Amazonka.IoTEvents.Types.Action
+    Amazonka.IoTEvents.Types.AlarmAction
+    Amazonka.IoTEvents.Types.AlarmCapabilities
+    Amazonka.IoTEvents.Types.AlarmEventActions
+    Amazonka.IoTEvents.Types.AlarmModelSummary
+    Amazonka.IoTEvents.Types.AlarmModelVersionStatus
+    Amazonka.IoTEvents.Types.AlarmModelVersionSummary
+    Amazonka.IoTEvents.Types.AlarmNotification
+    Amazonka.IoTEvents.Types.AlarmRule
+    Amazonka.IoTEvents.Types.AnalysisResult
+    Amazonka.IoTEvents.Types.AnalysisResultLevel
+    Amazonka.IoTEvents.Types.AnalysisResultLocation
+    Amazonka.IoTEvents.Types.AnalysisStatus
+    Amazonka.IoTEvents.Types.AssetPropertyTimestamp
+    Amazonka.IoTEvents.Types.AssetPropertyValue
+    Amazonka.IoTEvents.Types.AssetPropertyVariant
+    Amazonka.IoTEvents.Types.Attribute
+    Amazonka.IoTEvents.Types.ClearTimerAction
+    Amazonka.IoTEvents.Types.ComparisonOperator
+    Amazonka.IoTEvents.Types.DetectorDebugOption
+    Amazonka.IoTEvents.Types.DetectorModel
+    Amazonka.IoTEvents.Types.DetectorModelConfiguration
+    Amazonka.IoTEvents.Types.DetectorModelDefinition
+    Amazonka.IoTEvents.Types.DetectorModelSummary
+    Amazonka.IoTEvents.Types.DetectorModelVersionStatus
+    Amazonka.IoTEvents.Types.DetectorModelVersionSummary
+    Amazonka.IoTEvents.Types.DynamoDBAction
+    Amazonka.IoTEvents.Types.DynamoDBv2Action
+    Amazonka.IoTEvents.Types.EmailConfiguration
+    Amazonka.IoTEvents.Types.EmailContent
+    Amazonka.IoTEvents.Types.EmailRecipients
+    Amazonka.IoTEvents.Types.EvaluationMethod
+    Amazonka.IoTEvents.Types.Event
+    Amazonka.IoTEvents.Types.FirehoseAction
+    Amazonka.IoTEvents.Types.InitializationConfiguration
+    Amazonka.IoTEvents.Types.Input
+    Amazonka.IoTEvents.Types.InputConfiguration
+    Amazonka.IoTEvents.Types.InputDefinition
+    Amazonka.IoTEvents.Types.InputIdentifier
+    Amazonka.IoTEvents.Types.InputStatus
+    Amazonka.IoTEvents.Types.InputSummary
+    Amazonka.IoTEvents.Types.IotEventsAction
+    Amazonka.IoTEvents.Types.IotEventsInputIdentifier
+    Amazonka.IoTEvents.Types.IotSiteWiseAction
+    Amazonka.IoTEvents.Types.IotSiteWiseAssetModelPropertyIdentifier
+    Amazonka.IoTEvents.Types.IotSiteWiseInputIdentifier
+    Amazonka.IoTEvents.Types.IotTopicPublishAction
+    Amazonka.IoTEvents.Types.LambdaAction
+    Amazonka.IoTEvents.Types.LoggingLevel
+    Amazonka.IoTEvents.Types.LoggingOptions
+    Amazonka.IoTEvents.Types.NotificationAction
+    Amazonka.IoTEvents.Types.NotificationTargetActions
+    Amazonka.IoTEvents.Types.OnEnterLifecycle
+    Amazonka.IoTEvents.Types.OnExitLifecycle
+    Amazonka.IoTEvents.Types.OnInputLifecycle
+    Amazonka.IoTEvents.Types.Payload
+    Amazonka.IoTEvents.Types.PayloadType
+    Amazonka.IoTEvents.Types.RecipientDetail
+    Amazonka.IoTEvents.Types.ResetTimerAction
+    Amazonka.IoTEvents.Types.RoutedResource
+    Amazonka.IoTEvents.Types.SetTimerAction
+    Amazonka.IoTEvents.Types.SetVariableAction
+    Amazonka.IoTEvents.Types.SimpleRule
+    Amazonka.IoTEvents.Types.SMSConfiguration
+    Amazonka.IoTEvents.Types.SNSTopicPublishAction
+    Amazonka.IoTEvents.Types.SqsAction
+    Amazonka.IoTEvents.Types.SSOIdentity
+    Amazonka.IoTEvents.Types.State
+    Amazonka.IoTEvents.Types.Tag
+    Amazonka.IoTEvents.Types.TransitionEvent
+    Amazonka.IoTEvents.UntagResource
+    Amazonka.IoTEvents.UpdateAlarmModel
+    Amazonka.IoTEvents.UpdateDetectorModel
+    Amazonka.IoTEvents.UpdateInput
+    Amazonka.IoTEvents.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-iotevents-test
+  type:             exitcode-stdio-1.0
+  default-language: Haskell2010
+  hs-source-dirs:   test
+  main-is:          Main.hs
+  ghc-options:      -Wall -threaded
+
+  -- This section is encoded by the template and any modules added by
+  -- hand outside these namespaces will not correctly be added to the
+  -- distribution package.
+  other-modules:
+    Test.Amazonka.Gen.IoTEvents
+    Test.Amazonka.IoTEvents
+    Test.Amazonka.IoTEvents.Internal
+
+  build-depends:
+    , amazonka-core         >=2.0 && <2.1
+    , amazonka-iotevents
+    , amazonka-test         >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/CreateAlarmModel.yaml b/fixture/CreateAlarmModel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAlarmModel.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotevents/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotevents.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/CreateAlarmModelResponse.proto b/fixture/CreateAlarmModelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAlarmModelResponse.proto
diff --git a/fixture/CreateDetectorModel.yaml b/fixture/CreateDetectorModel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDetectorModel.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotevents/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotevents.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/CreateDetectorModelResponse.proto b/fixture/CreateDetectorModelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDetectorModelResponse.proto
diff --git a/fixture/CreateInput.yaml b/fixture/CreateInput.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateInput.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotevents/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotevents.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/CreateInputResponse.proto b/fixture/CreateInputResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateInputResponse.proto
diff --git a/fixture/DeleteAlarmModel.yaml b/fixture/DeleteAlarmModel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAlarmModel.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotevents/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotevents.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/DeleteAlarmModelResponse.proto b/fixture/DeleteAlarmModelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAlarmModelResponse.proto
diff --git a/fixture/DeleteDetectorModel.yaml b/fixture/DeleteDetectorModel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDetectorModel.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotevents/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotevents.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/DeleteDetectorModelResponse.proto b/fixture/DeleteDetectorModelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDetectorModelResponse.proto
diff --git a/fixture/DeleteInput.yaml b/fixture/DeleteInput.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteInput.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotevents/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotevents.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/DeleteInputResponse.proto b/fixture/DeleteInputResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteInputResponse.proto
diff --git a/fixture/DescribeAlarmModel.yaml b/fixture/DescribeAlarmModel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAlarmModel.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotevents/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotevents.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/DescribeAlarmModelResponse.proto b/fixture/DescribeAlarmModelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAlarmModelResponse.proto
diff --git a/fixture/DescribeDetectorModel.yaml b/fixture/DescribeDetectorModel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeDetectorModel.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotevents/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotevents.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/DescribeDetectorModelAnalysis.yaml b/fixture/DescribeDetectorModelAnalysis.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeDetectorModelAnalysis.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotevents/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotevents.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/DescribeDetectorModelAnalysisResponse.proto b/fixture/DescribeDetectorModelAnalysisResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeDetectorModelAnalysisResponse.proto
diff --git a/fixture/DescribeDetectorModelResponse.proto b/fixture/DescribeDetectorModelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeDetectorModelResponse.proto
diff --git a/fixture/DescribeInput.yaml b/fixture/DescribeInput.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeInput.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotevents/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotevents.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/DescribeInputResponse.proto b/fixture/DescribeInputResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeInputResponse.proto
diff --git a/fixture/DescribeLoggingOptions.yaml b/fixture/DescribeLoggingOptions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLoggingOptions.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotevents/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotevents.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/DescribeLoggingOptionsResponse.proto b/fixture/DescribeLoggingOptionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLoggingOptionsResponse.proto
diff --git a/fixture/GetDetectorModelAnalysisResults.yaml b/fixture/GetDetectorModelAnalysisResults.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDetectorModelAnalysisResults.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotevents/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotevents.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/GetDetectorModelAnalysisResultsResponse.proto b/fixture/GetDetectorModelAnalysisResultsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDetectorModelAnalysisResultsResponse.proto
diff --git a/fixture/ListAlarmModelVersions.yaml b/fixture/ListAlarmModelVersions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAlarmModelVersions.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotevents/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotevents.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/ListAlarmModelVersionsResponse.proto b/fixture/ListAlarmModelVersionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAlarmModelVersionsResponse.proto
diff --git a/fixture/ListAlarmModels.yaml b/fixture/ListAlarmModels.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAlarmModels.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotevents/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotevents.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/ListAlarmModelsResponse.proto b/fixture/ListAlarmModelsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAlarmModelsResponse.proto
diff --git a/fixture/ListDetectorModelVersions.yaml b/fixture/ListDetectorModelVersions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDetectorModelVersions.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotevents/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotevents.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/ListDetectorModelVersionsResponse.proto b/fixture/ListDetectorModelVersionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDetectorModelVersionsResponse.proto
diff --git a/fixture/ListDetectorModels.yaml b/fixture/ListDetectorModels.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDetectorModels.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotevents/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotevents.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/ListDetectorModelsResponse.proto b/fixture/ListDetectorModelsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDetectorModelsResponse.proto
diff --git a/fixture/ListInputRoutings.yaml b/fixture/ListInputRoutings.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListInputRoutings.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotevents/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotevents.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/ListInputRoutingsResponse.proto b/fixture/ListInputRoutingsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListInputRoutingsResponse.proto
diff --git a/fixture/ListInputs.yaml b/fixture/ListInputs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListInputs.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotevents/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotevents.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/ListInputsResponse.proto b/fixture/ListInputsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListInputsResponse.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/iotevents/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotevents.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/PutLoggingOptions.yaml b/fixture/PutLoggingOptions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutLoggingOptions.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotevents/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotevents.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/PutLoggingOptionsResponse.proto b/fixture/PutLoggingOptionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutLoggingOptionsResponse.proto
diff --git a/fixture/StartDetectorModelAnalysis.yaml b/fixture/StartDetectorModelAnalysis.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartDetectorModelAnalysis.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotevents/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotevents.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/StartDetectorModelAnalysisResponse.proto b/fixture/StartDetectorModelAnalysisResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartDetectorModelAnalysisResponse.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/iotevents/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotevents.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/iotevents/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotevents.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/UpdateAlarmModel.yaml b/fixture/UpdateAlarmModel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAlarmModel.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotevents/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotevents.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/UpdateAlarmModelResponse.proto b/fixture/UpdateAlarmModelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAlarmModelResponse.proto
diff --git a/fixture/UpdateDetectorModel.yaml b/fixture/UpdateDetectorModel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDetectorModel.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotevents/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotevents.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/UpdateDetectorModelResponse.proto b/fixture/UpdateDetectorModelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDetectorModelResponse.proto
diff --git a/fixture/UpdateInput.yaml b/fixture/UpdateInput.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateInput.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotevents/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotevents.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/UpdateInputResponse.proto b/fixture/UpdateInputResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateInputResponse.proto
diff --git a/gen/Amazonka/IoTEvents.hs b/gen/Amazonka/IoTEvents.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents.hs
@@ -0,0 +1,548 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.IoTEvents
+-- 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 @2018-07-27@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- AWS IoT Events monitors your equipment or device fleets for failures or
+-- changes in operation, and triggers actions when such events occur. You
+-- can use AWS IoT Events API operations to create, read, update, and
+-- delete inputs and detector models, and to list their versions.
+module Amazonka.IoTEvents
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** InternalFailureException
+    _InternalFailureException,
+
+    -- ** InvalidRequestException
+    _InvalidRequestException,
+
+    -- ** LimitExceededException
+    _LimitExceededException,
+
+    -- ** ResourceAlreadyExistsException
+    _ResourceAlreadyExistsException,
+
+    -- ** ResourceInUseException
+    _ResourceInUseException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceUnavailableException
+    _ServiceUnavailableException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- ** UnsupportedOperationException
+    _UnsupportedOperationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CreateAlarmModel
+    CreateAlarmModel (CreateAlarmModel'),
+    newCreateAlarmModel,
+    CreateAlarmModelResponse (CreateAlarmModelResponse'),
+    newCreateAlarmModelResponse,
+
+    -- ** CreateDetectorModel
+    CreateDetectorModel (CreateDetectorModel'),
+    newCreateDetectorModel,
+    CreateDetectorModelResponse (CreateDetectorModelResponse'),
+    newCreateDetectorModelResponse,
+
+    -- ** CreateInput
+    CreateInput (CreateInput'),
+    newCreateInput,
+    CreateInputResponse (CreateInputResponse'),
+    newCreateInputResponse,
+
+    -- ** DeleteAlarmModel
+    DeleteAlarmModel (DeleteAlarmModel'),
+    newDeleteAlarmModel,
+    DeleteAlarmModelResponse (DeleteAlarmModelResponse'),
+    newDeleteAlarmModelResponse,
+
+    -- ** DeleteDetectorModel
+    DeleteDetectorModel (DeleteDetectorModel'),
+    newDeleteDetectorModel,
+    DeleteDetectorModelResponse (DeleteDetectorModelResponse'),
+    newDeleteDetectorModelResponse,
+
+    -- ** DeleteInput
+    DeleteInput (DeleteInput'),
+    newDeleteInput,
+    DeleteInputResponse (DeleteInputResponse'),
+    newDeleteInputResponse,
+
+    -- ** DescribeAlarmModel
+    DescribeAlarmModel (DescribeAlarmModel'),
+    newDescribeAlarmModel,
+    DescribeAlarmModelResponse (DescribeAlarmModelResponse'),
+    newDescribeAlarmModelResponse,
+
+    -- ** DescribeDetectorModel
+    DescribeDetectorModel (DescribeDetectorModel'),
+    newDescribeDetectorModel,
+    DescribeDetectorModelResponse (DescribeDetectorModelResponse'),
+    newDescribeDetectorModelResponse,
+
+    -- ** DescribeDetectorModelAnalysis
+    DescribeDetectorModelAnalysis (DescribeDetectorModelAnalysis'),
+    newDescribeDetectorModelAnalysis,
+    DescribeDetectorModelAnalysisResponse (DescribeDetectorModelAnalysisResponse'),
+    newDescribeDetectorModelAnalysisResponse,
+
+    -- ** DescribeInput
+    DescribeInput (DescribeInput'),
+    newDescribeInput,
+    DescribeInputResponse (DescribeInputResponse'),
+    newDescribeInputResponse,
+
+    -- ** DescribeLoggingOptions
+    DescribeLoggingOptions (DescribeLoggingOptions'),
+    newDescribeLoggingOptions,
+    DescribeLoggingOptionsResponse (DescribeLoggingOptionsResponse'),
+    newDescribeLoggingOptionsResponse,
+
+    -- ** GetDetectorModelAnalysisResults
+    GetDetectorModelAnalysisResults (GetDetectorModelAnalysisResults'),
+    newGetDetectorModelAnalysisResults,
+    GetDetectorModelAnalysisResultsResponse (GetDetectorModelAnalysisResultsResponse'),
+    newGetDetectorModelAnalysisResultsResponse,
+
+    -- ** ListAlarmModelVersions
+    ListAlarmModelVersions (ListAlarmModelVersions'),
+    newListAlarmModelVersions,
+    ListAlarmModelVersionsResponse (ListAlarmModelVersionsResponse'),
+    newListAlarmModelVersionsResponse,
+
+    -- ** ListAlarmModels
+    ListAlarmModels (ListAlarmModels'),
+    newListAlarmModels,
+    ListAlarmModelsResponse (ListAlarmModelsResponse'),
+    newListAlarmModelsResponse,
+
+    -- ** ListDetectorModelVersions
+    ListDetectorModelVersions (ListDetectorModelVersions'),
+    newListDetectorModelVersions,
+    ListDetectorModelVersionsResponse (ListDetectorModelVersionsResponse'),
+    newListDetectorModelVersionsResponse,
+
+    -- ** ListDetectorModels
+    ListDetectorModels (ListDetectorModels'),
+    newListDetectorModels,
+    ListDetectorModelsResponse (ListDetectorModelsResponse'),
+    newListDetectorModelsResponse,
+
+    -- ** ListInputRoutings
+    ListInputRoutings (ListInputRoutings'),
+    newListInputRoutings,
+    ListInputRoutingsResponse (ListInputRoutingsResponse'),
+    newListInputRoutingsResponse,
+
+    -- ** ListInputs
+    ListInputs (ListInputs'),
+    newListInputs,
+    ListInputsResponse (ListInputsResponse'),
+    newListInputsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** PutLoggingOptions
+    PutLoggingOptions (PutLoggingOptions'),
+    newPutLoggingOptions,
+    PutLoggingOptionsResponse (PutLoggingOptionsResponse'),
+    newPutLoggingOptionsResponse,
+
+    -- ** StartDetectorModelAnalysis
+    StartDetectorModelAnalysis (StartDetectorModelAnalysis'),
+    newStartDetectorModelAnalysis,
+    StartDetectorModelAnalysisResponse (StartDetectorModelAnalysisResponse'),
+    newStartDetectorModelAnalysisResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateAlarmModel
+    UpdateAlarmModel (UpdateAlarmModel'),
+    newUpdateAlarmModel,
+    UpdateAlarmModelResponse (UpdateAlarmModelResponse'),
+    newUpdateAlarmModelResponse,
+
+    -- ** UpdateDetectorModel
+    UpdateDetectorModel (UpdateDetectorModel'),
+    newUpdateDetectorModel,
+    UpdateDetectorModelResponse (UpdateDetectorModelResponse'),
+    newUpdateDetectorModelResponse,
+
+    -- ** UpdateInput
+    UpdateInput (UpdateInput'),
+    newUpdateInput,
+    UpdateInputResponse (UpdateInputResponse'),
+    newUpdateInputResponse,
+
+    -- * Types
+
+    -- ** AlarmModelVersionStatus
+    AlarmModelVersionStatus (..),
+
+    -- ** AnalysisResultLevel
+    AnalysisResultLevel (..),
+
+    -- ** AnalysisStatus
+    AnalysisStatus (..),
+
+    -- ** ComparisonOperator
+    ComparisonOperator (..),
+
+    -- ** DetectorModelVersionStatus
+    DetectorModelVersionStatus (..),
+
+    -- ** EvaluationMethod
+    EvaluationMethod (..),
+
+    -- ** InputStatus
+    InputStatus (..),
+
+    -- ** LoggingLevel
+    LoggingLevel (..),
+
+    -- ** PayloadType
+    PayloadType (..),
+
+    -- ** AcknowledgeFlow
+    AcknowledgeFlow (AcknowledgeFlow'),
+    newAcknowledgeFlow,
+
+    -- ** Action
+    Action (Action'),
+    newAction,
+
+    -- ** AlarmAction
+    AlarmAction (AlarmAction'),
+    newAlarmAction,
+
+    -- ** AlarmCapabilities
+    AlarmCapabilities (AlarmCapabilities'),
+    newAlarmCapabilities,
+
+    -- ** AlarmEventActions
+    AlarmEventActions (AlarmEventActions'),
+    newAlarmEventActions,
+
+    -- ** AlarmModelSummary
+    AlarmModelSummary (AlarmModelSummary'),
+    newAlarmModelSummary,
+
+    -- ** AlarmModelVersionSummary
+    AlarmModelVersionSummary (AlarmModelVersionSummary'),
+    newAlarmModelVersionSummary,
+
+    -- ** AlarmNotification
+    AlarmNotification (AlarmNotification'),
+    newAlarmNotification,
+
+    -- ** AlarmRule
+    AlarmRule (AlarmRule'),
+    newAlarmRule,
+
+    -- ** AnalysisResult
+    AnalysisResult (AnalysisResult'),
+    newAnalysisResult,
+
+    -- ** AnalysisResultLocation
+    AnalysisResultLocation (AnalysisResultLocation'),
+    newAnalysisResultLocation,
+
+    -- ** AssetPropertyTimestamp
+    AssetPropertyTimestamp (AssetPropertyTimestamp'),
+    newAssetPropertyTimestamp,
+
+    -- ** AssetPropertyValue
+    AssetPropertyValue (AssetPropertyValue'),
+    newAssetPropertyValue,
+
+    -- ** AssetPropertyVariant
+    AssetPropertyVariant (AssetPropertyVariant'),
+    newAssetPropertyVariant,
+
+    -- ** Attribute
+    Attribute (Attribute'),
+    newAttribute,
+
+    -- ** ClearTimerAction
+    ClearTimerAction (ClearTimerAction'),
+    newClearTimerAction,
+
+    -- ** DetectorDebugOption
+    DetectorDebugOption (DetectorDebugOption'),
+    newDetectorDebugOption,
+
+    -- ** DetectorModel
+    DetectorModel (DetectorModel'),
+    newDetectorModel,
+
+    -- ** DetectorModelConfiguration
+    DetectorModelConfiguration (DetectorModelConfiguration'),
+    newDetectorModelConfiguration,
+
+    -- ** DetectorModelDefinition
+    DetectorModelDefinition (DetectorModelDefinition'),
+    newDetectorModelDefinition,
+
+    -- ** DetectorModelSummary
+    DetectorModelSummary (DetectorModelSummary'),
+    newDetectorModelSummary,
+
+    -- ** DetectorModelVersionSummary
+    DetectorModelVersionSummary (DetectorModelVersionSummary'),
+    newDetectorModelVersionSummary,
+
+    -- ** DynamoDBAction
+    DynamoDBAction (DynamoDBAction'),
+    newDynamoDBAction,
+
+    -- ** DynamoDBv2Action
+    DynamoDBv2Action (DynamoDBv2Action'),
+    newDynamoDBv2Action,
+
+    -- ** EmailConfiguration
+    EmailConfiguration (EmailConfiguration'),
+    newEmailConfiguration,
+
+    -- ** EmailContent
+    EmailContent (EmailContent'),
+    newEmailContent,
+
+    -- ** EmailRecipients
+    EmailRecipients (EmailRecipients'),
+    newEmailRecipients,
+
+    -- ** Event
+    Event (Event'),
+    newEvent,
+
+    -- ** FirehoseAction
+    FirehoseAction (FirehoseAction'),
+    newFirehoseAction,
+
+    -- ** InitializationConfiguration
+    InitializationConfiguration (InitializationConfiguration'),
+    newInitializationConfiguration,
+
+    -- ** Input
+    Input (Input'),
+    newInput,
+
+    -- ** InputConfiguration
+    InputConfiguration (InputConfiguration'),
+    newInputConfiguration,
+
+    -- ** InputDefinition
+    InputDefinition (InputDefinition'),
+    newInputDefinition,
+
+    -- ** InputIdentifier
+    InputIdentifier (InputIdentifier'),
+    newInputIdentifier,
+
+    -- ** InputSummary
+    InputSummary (InputSummary'),
+    newInputSummary,
+
+    -- ** IotEventsAction
+    IotEventsAction (IotEventsAction'),
+    newIotEventsAction,
+
+    -- ** IotEventsInputIdentifier
+    IotEventsInputIdentifier (IotEventsInputIdentifier'),
+    newIotEventsInputIdentifier,
+
+    -- ** IotSiteWiseAction
+    IotSiteWiseAction (IotSiteWiseAction'),
+    newIotSiteWiseAction,
+
+    -- ** IotSiteWiseAssetModelPropertyIdentifier
+    IotSiteWiseAssetModelPropertyIdentifier (IotSiteWiseAssetModelPropertyIdentifier'),
+    newIotSiteWiseAssetModelPropertyIdentifier,
+
+    -- ** IotSiteWiseInputIdentifier
+    IotSiteWiseInputIdentifier (IotSiteWiseInputIdentifier'),
+    newIotSiteWiseInputIdentifier,
+
+    -- ** IotTopicPublishAction
+    IotTopicPublishAction (IotTopicPublishAction'),
+    newIotTopicPublishAction,
+
+    -- ** LambdaAction
+    LambdaAction (LambdaAction'),
+    newLambdaAction,
+
+    -- ** LoggingOptions
+    LoggingOptions (LoggingOptions'),
+    newLoggingOptions,
+
+    -- ** NotificationAction
+    NotificationAction (NotificationAction'),
+    newNotificationAction,
+
+    -- ** NotificationTargetActions
+    NotificationTargetActions (NotificationTargetActions'),
+    newNotificationTargetActions,
+
+    -- ** OnEnterLifecycle
+    OnEnterLifecycle (OnEnterLifecycle'),
+    newOnEnterLifecycle,
+
+    -- ** OnExitLifecycle
+    OnExitLifecycle (OnExitLifecycle'),
+    newOnExitLifecycle,
+
+    -- ** OnInputLifecycle
+    OnInputLifecycle (OnInputLifecycle'),
+    newOnInputLifecycle,
+
+    -- ** Payload
+    Payload (Payload'),
+    newPayload,
+
+    -- ** RecipientDetail
+    RecipientDetail (RecipientDetail'),
+    newRecipientDetail,
+
+    -- ** ResetTimerAction
+    ResetTimerAction (ResetTimerAction'),
+    newResetTimerAction,
+
+    -- ** RoutedResource
+    RoutedResource (RoutedResource'),
+    newRoutedResource,
+
+    -- ** SMSConfiguration
+    SMSConfiguration (SMSConfiguration'),
+    newSMSConfiguration,
+
+    -- ** SNSTopicPublishAction
+    SNSTopicPublishAction (SNSTopicPublishAction'),
+    newSNSTopicPublishAction,
+
+    -- ** SSOIdentity
+    SSOIdentity (SSOIdentity'),
+    newSSOIdentity,
+
+    -- ** SetTimerAction
+    SetTimerAction (SetTimerAction'),
+    newSetTimerAction,
+
+    -- ** SetVariableAction
+    SetVariableAction (SetVariableAction'),
+    newSetVariableAction,
+
+    -- ** SimpleRule
+    SimpleRule (SimpleRule'),
+    newSimpleRule,
+
+    -- ** SqsAction
+    SqsAction (SqsAction'),
+    newSqsAction,
+
+    -- ** State
+    State (State'),
+    newState,
+
+    -- ** Tag
+    Tag (Tag'),
+    newTag,
+
+    -- ** TransitionEvent
+    TransitionEvent (TransitionEvent'),
+    newTransitionEvent,
+  )
+where
+
+import Amazonka.IoTEvents.CreateAlarmModel
+import Amazonka.IoTEvents.CreateDetectorModel
+import Amazonka.IoTEvents.CreateInput
+import Amazonka.IoTEvents.DeleteAlarmModel
+import Amazonka.IoTEvents.DeleteDetectorModel
+import Amazonka.IoTEvents.DeleteInput
+import Amazonka.IoTEvents.DescribeAlarmModel
+import Amazonka.IoTEvents.DescribeDetectorModel
+import Amazonka.IoTEvents.DescribeDetectorModelAnalysis
+import Amazonka.IoTEvents.DescribeInput
+import Amazonka.IoTEvents.DescribeLoggingOptions
+import Amazonka.IoTEvents.GetDetectorModelAnalysisResults
+import Amazonka.IoTEvents.Lens
+import Amazonka.IoTEvents.ListAlarmModelVersions
+import Amazonka.IoTEvents.ListAlarmModels
+import Amazonka.IoTEvents.ListDetectorModelVersions
+import Amazonka.IoTEvents.ListDetectorModels
+import Amazonka.IoTEvents.ListInputRoutings
+import Amazonka.IoTEvents.ListInputs
+import Amazonka.IoTEvents.ListTagsForResource
+import Amazonka.IoTEvents.PutLoggingOptions
+import Amazonka.IoTEvents.StartDetectorModelAnalysis
+import Amazonka.IoTEvents.TagResource
+import Amazonka.IoTEvents.Types
+import Amazonka.IoTEvents.UntagResource
+import Amazonka.IoTEvents.UpdateAlarmModel
+import Amazonka.IoTEvents.UpdateDetectorModel
+import Amazonka.IoTEvents.UpdateInput
+import Amazonka.IoTEvents.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 'IoTEvents'.
+
+-- $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/IoTEvents/CreateAlarmModel.hs b/gen/Amazonka/IoTEvents/CreateAlarmModel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/CreateAlarmModel.hs
@@ -0,0 +1,427 @@
+{-# 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.IoTEvents.CreateAlarmModel
+-- 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 alarm model to monitor an AWS IoT Events input attribute. You
+-- can use the alarm to get notified when the value is outside a specified
+-- range. For more information, see
+-- <https://docs.aws.amazon.com/iotevents/latest/developerguide/create-alarms.html Create an alarm model>
+-- in the /AWS IoT Events Developer Guide/.
+module Amazonka.IoTEvents.CreateAlarmModel
+  ( -- * Creating a Request
+    CreateAlarmModel (..),
+    newCreateAlarmModel,
+
+    -- * Request Lenses
+    createAlarmModel_alarmCapabilities,
+    createAlarmModel_alarmEventActions,
+    createAlarmModel_alarmModelDescription,
+    createAlarmModel_alarmNotification,
+    createAlarmModel_key,
+    createAlarmModel_severity,
+    createAlarmModel_tags,
+    createAlarmModel_alarmModelName,
+    createAlarmModel_roleArn,
+    createAlarmModel_alarmRule,
+
+    -- * Destructuring the Response
+    CreateAlarmModelResponse (..),
+    newCreateAlarmModelResponse,
+
+    -- * Response Lenses
+    createAlarmModelResponse_alarmModelArn,
+    createAlarmModelResponse_alarmModelVersion,
+    createAlarmModelResponse_creationTime,
+    createAlarmModelResponse_lastUpdateTime,
+    createAlarmModelResponse_status,
+    createAlarmModelResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateAlarmModel' smart constructor.
+data CreateAlarmModel = CreateAlarmModel'
+  { -- | Contains the configuration information of alarm state changes.
+    alarmCapabilities :: Prelude.Maybe AlarmCapabilities,
+    -- | Contains information about one or more alarm actions.
+    alarmEventActions :: Prelude.Maybe AlarmEventActions,
+    -- | A description that tells you what the alarm model detects.
+    alarmModelDescription :: Prelude.Maybe Prelude.Text,
+    -- | Contains information about one or more notification actions.
+    alarmNotification :: Prelude.Maybe AlarmNotification,
+    -- | An input attribute used as a key to create an alarm. AWS IoT Events
+    -- routes
+    -- <https://docs.aws.amazon.com/iotevents/latest/apireference/API_Input.html inputs>
+    -- associated with this key to the alarm.
+    key :: Prelude.Maybe Prelude.Text,
+    -- | A non-negative integer that reflects the severity level of the alarm.
+    severity :: Prelude.Maybe Prelude.Natural,
+    -- | A list of key-value pairs that contain metadata for the alarm model. The
+    -- tags help you manage the alarm model. For more information, see
+    -- <https://docs.aws.amazon.com/iotevents/latest/developerguide/tagging-iotevents.html Tagging your AWS IoT Events resources>
+    -- in the /AWS IoT Events Developer Guide/.
+    --
+    -- You can create up to 50 tags for one alarm model.
+    tags :: Prelude.Maybe [Tag],
+    -- | A unique name that helps you identify the alarm model. You can\'t change
+    -- this name after you create the alarm model.
+    alarmModelName :: Prelude.Text,
+    -- | The ARN of the IAM role that allows the alarm to perform actions and
+    -- access AWS resources. For more information, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    roleArn :: Prelude.Text,
+    -- | Defines when your alarm is invoked.
+    alarmRule :: AlarmRule
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAlarmModel' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'alarmCapabilities', 'createAlarmModel_alarmCapabilities' - Contains the configuration information of alarm state changes.
+--
+-- 'alarmEventActions', 'createAlarmModel_alarmEventActions' - Contains information about one or more alarm actions.
+--
+-- 'alarmModelDescription', 'createAlarmModel_alarmModelDescription' - A description that tells you what the alarm model detects.
+--
+-- 'alarmNotification', 'createAlarmModel_alarmNotification' - Contains information about one or more notification actions.
+--
+-- 'key', 'createAlarmModel_key' - An input attribute used as a key to create an alarm. AWS IoT Events
+-- routes
+-- <https://docs.aws.amazon.com/iotevents/latest/apireference/API_Input.html inputs>
+-- associated with this key to the alarm.
+--
+-- 'severity', 'createAlarmModel_severity' - A non-negative integer that reflects the severity level of the alarm.
+--
+-- 'tags', 'createAlarmModel_tags' - A list of key-value pairs that contain metadata for the alarm model. The
+-- tags help you manage the alarm model. For more information, see
+-- <https://docs.aws.amazon.com/iotevents/latest/developerguide/tagging-iotevents.html Tagging your AWS IoT Events resources>
+-- in the /AWS IoT Events Developer Guide/.
+--
+-- You can create up to 50 tags for one alarm model.
+--
+-- 'alarmModelName', 'createAlarmModel_alarmModelName' - A unique name that helps you identify the alarm model. You can\'t change
+-- this name after you create the alarm model.
+--
+-- 'roleArn', 'createAlarmModel_roleArn' - The ARN of the IAM role that allows the alarm to perform actions and
+-- access AWS resources. For more information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'alarmRule', 'createAlarmModel_alarmRule' - Defines when your alarm is invoked.
+newCreateAlarmModel ::
+  -- | 'alarmModelName'
+  Prelude.Text ->
+  -- | 'roleArn'
+  Prelude.Text ->
+  -- | 'alarmRule'
+  AlarmRule ->
+  CreateAlarmModel
+newCreateAlarmModel
+  pAlarmModelName_
+  pRoleArn_
+  pAlarmRule_ =
+    CreateAlarmModel'
+      { alarmCapabilities =
+          Prelude.Nothing,
+        alarmEventActions = Prelude.Nothing,
+        alarmModelDescription = Prelude.Nothing,
+        alarmNotification = Prelude.Nothing,
+        key = Prelude.Nothing,
+        severity = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        alarmModelName = pAlarmModelName_,
+        roleArn = pRoleArn_,
+        alarmRule = pAlarmRule_
+      }
+
+-- | Contains the configuration information of alarm state changes.
+createAlarmModel_alarmCapabilities :: Lens.Lens' CreateAlarmModel (Prelude.Maybe AlarmCapabilities)
+createAlarmModel_alarmCapabilities = Lens.lens (\CreateAlarmModel' {alarmCapabilities} -> alarmCapabilities) (\s@CreateAlarmModel' {} a -> s {alarmCapabilities = a} :: CreateAlarmModel)
+
+-- | Contains information about one or more alarm actions.
+createAlarmModel_alarmEventActions :: Lens.Lens' CreateAlarmModel (Prelude.Maybe AlarmEventActions)
+createAlarmModel_alarmEventActions = Lens.lens (\CreateAlarmModel' {alarmEventActions} -> alarmEventActions) (\s@CreateAlarmModel' {} a -> s {alarmEventActions = a} :: CreateAlarmModel)
+
+-- | A description that tells you what the alarm model detects.
+createAlarmModel_alarmModelDescription :: Lens.Lens' CreateAlarmModel (Prelude.Maybe Prelude.Text)
+createAlarmModel_alarmModelDescription = Lens.lens (\CreateAlarmModel' {alarmModelDescription} -> alarmModelDescription) (\s@CreateAlarmModel' {} a -> s {alarmModelDescription = a} :: CreateAlarmModel)
+
+-- | Contains information about one or more notification actions.
+createAlarmModel_alarmNotification :: Lens.Lens' CreateAlarmModel (Prelude.Maybe AlarmNotification)
+createAlarmModel_alarmNotification = Lens.lens (\CreateAlarmModel' {alarmNotification} -> alarmNotification) (\s@CreateAlarmModel' {} a -> s {alarmNotification = a} :: CreateAlarmModel)
+
+-- | An input attribute used as a key to create an alarm. AWS IoT Events
+-- routes
+-- <https://docs.aws.amazon.com/iotevents/latest/apireference/API_Input.html inputs>
+-- associated with this key to the alarm.
+createAlarmModel_key :: Lens.Lens' CreateAlarmModel (Prelude.Maybe Prelude.Text)
+createAlarmModel_key = Lens.lens (\CreateAlarmModel' {key} -> key) (\s@CreateAlarmModel' {} a -> s {key = a} :: CreateAlarmModel)
+
+-- | A non-negative integer that reflects the severity level of the alarm.
+createAlarmModel_severity :: Lens.Lens' CreateAlarmModel (Prelude.Maybe Prelude.Natural)
+createAlarmModel_severity = Lens.lens (\CreateAlarmModel' {severity} -> severity) (\s@CreateAlarmModel' {} a -> s {severity = a} :: CreateAlarmModel)
+
+-- | A list of key-value pairs that contain metadata for the alarm model. The
+-- tags help you manage the alarm model. For more information, see
+-- <https://docs.aws.amazon.com/iotevents/latest/developerguide/tagging-iotevents.html Tagging your AWS IoT Events resources>
+-- in the /AWS IoT Events Developer Guide/.
+--
+-- You can create up to 50 tags for one alarm model.
+createAlarmModel_tags :: Lens.Lens' CreateAlarmModel (Prelude.Maybe [Tag])
+createAlarmModel_tags = Lens.lens (\CreateAlarmModel' {tags} -> tags) (\s@CreateAlarmModel' {} a -> s {tags = a} :: CreateAlarmModel) Prelude.. Lens.mapping Lens.coerced
+
+-- | A unique name that helps you identify the alarm model. You can\'t change
+-- this name after you create the alarm model.
+createAlarmModel_alarmModelName :: Lens.Lens' CreateAlarmModel Prelude.Text
+createAlarmModel_alarmModelName = Lens.lens (\CreateAlarmModel' {alarmModelName} -> alarmModelName) (\s@CreateAlarmModel' {} a -> s {alarmModelName = a} :: CreateAlarmModel)
+
+-- | The ARN of the IAM role that allows the alarm to perform actions and
+-- access AWS resources. For more information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+createAlarmModel_roleArn :: Lens.Lens' CreateAlarmModel Prelude.Text
+createAlarmModel_roleArn = Lens.lens (\CreateAlarmModel' {roleArn} -> roleArn) (\s@CreateAlarmModel' {} a -> s {roleArn = a} :: CreateAlarmModel)
+
+-- | Defines when your alarm is invoked.
+createAlarmModel_alarmRule :: Lens.Lens' CreateAlarmModel AlarmRule
+createAlarmModel_alarmRule = Lens.lens (\CreateAlarmModel' {alarmRule} -> alarmRule) (\s@CreateAlarmModel' {} a -> s {alarmRule = a} :: CreateAlarmModel)
+
+instance Core.AWSRequest CreateAlarmModel where
+  type
+    AWSResponse CreateAlarmModel =
+      CreateAlarmModelResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateAlarmModelResponse'
+            Prelude.<$> (x Data..?> "alarmModelArn")
+            Prelude.<*> (x Data..?> "alarmModelVersion")
+            Prelude.<*> (x Data..?> "creationTime")
+            Prelude.<*> (x Data..?> "lastUpdateTime")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateAlarmModel where
+  hashWithSalt _salt CreateAlarmModel' {..} =
+    _salt
+      `Prelude.hashWithSalt` alarmCapabilities
+      `Prelude.hashWithSalt` alarmEventActions
+      `Prelude.hashWithSalt` alarmModelDescription
+      `Prelude.hashWithSalt` alarmNotification
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` severity
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` alarmModelName
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` alarmRule
+
+instance Prelude.NFData CreateAlarmModel where
+  rnf CreateAlarmModel' {..} =
+    Prelude.rnf alarmCapabilities
+      `Prelude.seq` Prelude.rnf alarmEventActions
+      `Prelude.seq` Prelude.rnf alarmModelDescription
+      `Prelude.seq` Prelude.rnf alarmNotification
+      `Prelude.seq` Prelude.rnf key
+      `Prelude.seq` Prelude.rnf severity
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf alarmModelName
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf alarmRule
+
+instance Data.ToHeaders CreateAlarmModel where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON CreateAlarmModel where
+  toJSON CreateAlarmModel' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("alarmCapabilities" Data..=)
+              Prelude.<$> alarmCapabilities,
+            ("alarmEventActions" Data..=)
+              Prelude.<$> alarmEventActions,
+            ("alarmModelDescription" Data..=)
+              Prelude.<$> alarmModelDescription,
+            ("alarmNotification" Data..=)
+              Prelude.<$> alarmNotification,
+            ("key" Data..=) Prelude.<$> key,
+            ("severity" Data..=) Prelude.<$> severity,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("alarmModelName" Data..= alarmModelName),
+            Prelude.Just ("roleArn" Data..= roleArn),
+            Prelude.Just ("alarmRule" Data..= alarmRule)
+          ]
+      )
+
+instance Data.ToPath CreateAlarmModel where
+  toPath = Prelude.const "/alarm-models"
+
+instance Data.ToQuery CreateAlarmModel where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateAlarmModelResponse' smart constructor.
+data CreateAlarmModelResponse = CreateAlarmModelResponse'
+  { -- | The ARN of the alarm model. For more information, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    alarmModelArn :: Prelude.Maybe Prelude.Text,
+    -- | The version of the alarm model.
+    alarmModelVersion :: Prelude.Maybe Prelude.Text,
+    -- | The time the alarm model was created, in the Unix epoch format.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The time the alarm model was last updated, in the Unix epoch format.
+    lastUpdateTime :: Prelude.Maybe Data.POSIX,
+    -- | The status of the alarm model. The status can be one of the following
+    -- values:
+    --
+    -- -   @ACTIVE@ - The alarm model is active and it\'s ready to evaluate
+    --     data.
+    --
+    -- -   @ACTIVATING@ - AWS IoT Events is activating your alarm model.
+    --     Activating an alarm model can take up to a few minutes.
+    --
+    -- -   @INACTIVE@ - The alarm model is inactive, so it isn\'t ready to
+    --     evaluate data. Check your alarm model information and update the
+    --     alarm model.
+    --
+    -- -   @FAILED@ - You couldn\'t create or update the alarm model. Check
+    --     your alarm model information and try again.
+    status :: Prelude.Maybe AlarmModelVersionStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAlarmModelResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'alarmModelArn', 'createAlarmModelResponse_alarmModelArn' - The ARN of the alarm model. For more information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'alarmModelVersion', 'createAlarmModelResponse_alarmModelVersion' - The version of the alarm model.
+--
+-- 'creationTime', 'createAlarmModelResponse_creationTime' - The time the alarm model was created, in the Unix epoch format.
+--
+-- 'lastUpdateTime', 'createAlarmModelResponse_lastUpdateTime' - The time the alarm model was last updated, in the Unix epoch format.
+--
+-- 'status', 'createAlarmModelResponse_status' - The status of the alarm model. The status can be one of the following
+-- values:
+--
+-- -   @ACTIVE@ - The alarm model is active and it\'s ready to evaluate
+--     data.
+--
+-- -   @ACTIVATING@ - AWS IoT Events is activating your alarm model.
+--     Activating an alarm model can take up to a few minutes.
+--
+-- -   @INACTIVE@ - The alarm model is inactive, so it isn\'t ready to
+--     evaluate data. Check your alarm model information and update the
+--     alarm model.
+--
+-- -   @FAILED@ - You couldn\'t create or update the alarm model. Check
+--     your alarm model information and try again.
+--
+-- 'httpStatus', 'createAlarmModelResponse_httpStatus' - The response's http status code.
+newCreateAlarmModelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateAlarmModelResponse
+newCreateAlarmModelResponse pHttpStatus_ =
+  CreateAlarmModelResponse'
+    { alarmModelArn =
+        Prelude.Nothing,
+      alarmModelVersion = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      lastUpdateTime = Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the alarm model. For more information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+createAlarmModelResponse_alarmModelArn :: Lens.Lens' CreateAlarmModelResponse (Prelude.Maybe Prelude.Text)
+createAlarmModelResponse_alarmModelArn = Lens.lens (\CreateAlarmModelResponse' {alarmModelArn} -> alarmModelArn) (\s@CreateAlarmModelResponse' {} a -> s {alarmModelArn = a} :: CreateAlarmModelResponse)
+
+-- | The version of the alarm model.
+createAlarmModelResponse_alarmModelVersion :: Lens.Lens' CreateAlarmModelResponse (Prelude.Maybe Prelude.Text)
+createAlarmModelResponse_alarmModelVersion = Lens.lens (\CreateAlarmModelResponse' {alarmModelVersion} -> alarmModelVersion) (\s@CreateAlarmModelResponse' {} a -> s {alarmModelVersion = a} :: CreateAlarmModelResponse)
+
+-- | The time the alarm model was created, in the Unix epoch format.
+createAlarmModelResponse_creationTime :: Lens.Lens' CreateAlarmModelResponse (Prelude.Maybe Prelude.UTCTime)
+createAlarmModelResponse_creationTime = Lens.lens (\CreateAlarmModelResponse' {creationTime} -> creationTime) (\s@CreateAlarmModelResponse' {} a -> s {creationTime = a} :: CreateAlarmModelResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The time the alarm model was last updated, in the Unix epoch format.
+createAlarmModelResponse_lastUpdateTime :: Lens.Lens' CreateAlarmModelResponse (Prelude.Maybe Prelude.UTCTime)
+createAlarmModelResponse_lastUpdateTime = Lens.lens (\CreateAlarmModelResponse' {lastUpdateTime} -> lastUpdateTime) (\s@CreateAlarmModelResponse' {} a -> s {lastUpdateTime = a} :: CreateAlarmModelResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The status of the alarm model. The status can be one of the following
+-- values:
+--
+-- -   @ACTIVE@ - The alarm model is active and it\'s ready to evaluate
+--     data.
+--
+-- -   @ACTIVATING@ - AWS IoT Events is activating your alarm model.
+--     Activating an alarm model can take up to a few minutes.
+--
+-- -   @INACTIVE@ - The alarm model is inactive, so it isn\'t ready to
+--     evaluate data. Check your alarm model information and update the
+--     alarm model.
+--
+-- -   @FAILED@ - You couldn\'t create or update the alarm model. Check
+--     your alarm model information and try again.
+createAlarmModelResponse_status :: Lens.Lens' CreateAlarmModelResponse (Prelude.Maybe AlarmModelVersionStatus)
+createAlarmModelResponse_status = Lens.lens (\CreateAlarmModelResponse' {status} -> status) (\s@CreateAlarmModelResponse' {} a -> s {status = a} :: CreateAlarmModelResponse)
+
+-- | The response's http status code.
+createAlarmModelResponse_httpStatus :: Lens.Lens' CreateAlarmModelResponse Prelude.Int
+createAlarmModelResponse_httpStatus = Lens.lens (\CreateAlarmModelResponse' {httpStatus} -> httpStatus) (\s@CreateAlarmModelResponse' {} a -> s {httpStatus = a} :: CreateAlarmModelResponse)
+
+instance Prelude.NFData CreateAlarmModelResponse where
+  rnf CreateAlarmModelResponse' {..} =
+    Prelude.rnf alarmModelArn
+      `Prelude.seq` Prelude.rnf alarmModelVersion
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf lastUpdateTime
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTEvents/CreateDetectorModel.hs b/gen/Amazonka/IoTEvents/CreateDetectorModel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/CreateDetectorModel.hs
@@ -0,0 +1,274 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.CreateDetectorModel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a detector model.
+module Amazonka.IoTEvents.CreateDetectorModel
+  ( -- * Creating a Request
+    CreateDetectorModel (..),
+    newCreateDetectorModel,
+
+    -- * Request Lenses
+    createDetectorModel_detectorModelDescription,
+    createDetectorModel_evaluationMethod,
+    createDetectorModel_key,
+    createDetectorModel_tags,
+    createDetectorModel_detectorModelName,
+    createDetectorModel_detectorModelDefinition,
+    createDetectorModel_roleArn,
+
+    -- * Destructuring the Response
+    CreateDetectorModelResponse (..),
+    newCreateDetectorModelResponse,
+
+    -- * Response Lenses
+    createDetectorModelResponse_detectorModelConfiguration,
+    createDetectorModelResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateDetectorModel' smart constructor.
+data CreateDetectorModel = CreateDetectorModel'
+  { -- | A brief description of the detector model.
+    detectorModelDescription :: Prelude.Maybe Prelude.Text,
+    -- | Information about the order in which events are evaluated and how
+    -- actions are executed.
+    evaluationMethod :: Prelude.Maybe EvaluationMethod,
+    -- | The input attribute key used to identify a device or system to create a
+    -- detector (an instance of the detector model) and then to route each
+    -- input received to the appropriate detector (instance). This parameter
+    -- uses a JSON-path expression in the message payload of each input to
+    -- specify the attribute-value pair that is used to identify the device
+    -- associated with the input.
+    key :: Prelude.Maybe Prelude.Text,
+    -- | Metadata that can be used to manage the detector model.
+    tags :: Prelude.Maybe [Tag],
+    -- | The name of the detector model.
+    detectorModelName :: Prelude.Text,
+    -- | Information that defines how the detectors operate.
+    detectorModelDefinition :: DetectorModelDefinition,
+    -- | The ARN of the role that grants permission to AWS IoT Events to perform
+    -- its operations.
+    roleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDetectorModel' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detectorModelDescription', 'createDetectorModel_detectorModelDescription' - A brief description of the detector model.
+--
+-- 'evaluationMethod', 'createDetectorModel_evaluationMethod' - Information about the order in which events are evaluated and how
+-- actions are executed.
+--
+-- 'key', 'createDetectorModel_key' - The input attribute key used to identify a device or system to create a
+-- detector (an instance of the detector model) and then to route each
+-- input received to the appropriate detector (instance). This parameter
+-- uses a JSON-path expression in the message payload of each input to
+-- specify the attribute-value pair that is used to identify the device
+-- associated with the input.
+--
+-- 'tags', 'createDetectorModel_tags' - Metadata that can be used to manage the detector model.
+--
+-- 'detectorModelName', 'createDetectorModel_detectorModelName' - The name of the detector model.
+--
+-- 'detectorModelDefinition', 'createDetectorModel_detectorModelDefinition' - Information that defines how the detectors operate.
+--
+-- 'roleArn', 'createDetectorModel_roleArn' - The ARN of the role that grants permission to AWS IoT Events to perform
+-- its operations.
+newCreateDetectorModel ::
+  -- | 'detectorModelName'
+  Prelude.Text ->
+  -- | 'detectorModelDefinition'
+  DetectorModelDefinition ->
+  -- | 'roleArn'
+  Prelude.Text ->
+  CreateDetectorModel
+newCreateDetectorModel
+  pDetectorModelName_
+  pDetectorModelDefinition_
+  pRoleArn_ =
+    CreateDetectorModel'
+      { detectorModelDescription =
+          Prelude.Nothing,
+        evaluationMethod = Prelude.Nothing,
+        key = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        detectorModelName = pDetectorModelName_,
+        detectorModelDefinition = pDetectorModelDefinition_,
+        roleArn = pRoleArn_
+      }
+
+-- | A brief description of the detector model.
+createDetectorModel_detectorModelDescription :: Lens.Lens' CreateDetectorModel (Prelude.Maybe Prelude.Text)
+createDetectorModel_detectorModelDescription = Lens.lens (\CreateDetectorModel' {detectorModelDescription} -> detectorModelDescription) (\s@CreateDetectorModel' {} a -> s {detectorModelDescription = a} :: CreateDetectorModel)
+
+-- | Information about the order in which events are evaluated and how
+-- actions are executed.
+createDetectorModel_evaluationMethod :: Lens.Lens' CreateDetectorModel (Prelude.Maybe EvaluationMethod)
+createDetectorModel_evaluationMethod = Lens.lens (\CreateDetectorModel' {evaluationMethod} -> evaluationMethod) (\s@CreateDetectorModel' {} a -> s {evaluationMethod = a} :: CreateDetectorModel)
+
+-- | The input attribute key used to identify a device or system to create a
+-- detector (an instance of the detector model) and then to route each
+-- input received to the appropriate detector (instance). This parameter
+-- uses a JSON-path expression in the message payload of each input to
+-- specify the attribute-value pair that is used to identify the device
+-- associated with the input.
+createDetectorModel_key :: Lens.Lens' CreateDetectorModel (Prelude.Maybe Prelude.Text)
+createDetectorModel_key = Lens.lens (\CreateDetectorModel' {key} -> key) (\s@CreateDetectorModel' {} a -> s {key = a} :: CreateDetectorModel)
+
+-- | Metadata that can be used to manage the detector model.
+createDetectorModel_tags :: Lens.Lens' CreateDetectorModel (Prelude.Maybe [Tag])
+createDetectorModel_tags = Lens.lens (\CreateDetectorModel' {tags} -> tags) (\s@CreateDetectorModel' {} a -> s {tags = a} :: CreateDetectorModel) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the detector model.
+createDetectorModel_detectorModelName :: Lens.Lens' CreateDetectorModel Prelude.Text
+createDetectorModel_detectorModelName = Lens.lens (\CreateDetectorModel' {detectorModelName} -> detectorModelName) (\s@CreateDetectorModel' {} a -> s {detectorModelName = a} :: CreateDetectorModel)
+
+-- | Information that defines how the detectors operate.
+createDetectorModel_detectorModelDefinition :: Lens.Lens' CreateDetectorModel DetectorModelDefinition
+createDetectorModel_detectorModelDefinition = Lens.lens (\CreateDetectorModel' {detectorModelDefinition} -> detectorModelDefinition) (\s@CreateDetectorModel' {} a -> s {detectorModelDefinition = a} :: CreateDetectorModel)
+
+-- | The ARN of the role that grants permission to AWS IoT Events to perform
+-- its operations.
+createDetectorModel_roleArn :: Lens.Lens' CreateDetectorModel Prelude.Text
+createDetectorModel_roleArn = Lens.lens (\CreateDetectorModel' {roleArn} -> roleArn) (\s@CreateDetectorModel' {} a -> s {roleArn = a} :: CreateDetectorModel)
+
+instance Core.AWSRequest CreateDetectorModel where
+  type
+    AWSResponse CreateDetectorModel =
+      CreateDetectorModelResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateDetectorModelResponse'
+            Prelude.<$> (x Data..?> "detectorModelConfiguration")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateDetectorModel where
+  hashWithSalt _salt CreateDetectorModel' {..} =
+    _salt
+      `Prelude.hashWithSalt` detectorModelDescription
+      `Prelude.hashWithSalt` evaluationMethod
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` detectorModelName
+      `Prelude.hashWithSalt` detectorModelDefinition
+      `Prelude.hashWithSalt` roleArn
+
+instance Prelude.NFData CreateDetectorModel where
+  rnf CreateDetectorModel' {..} =
+    Prelude.rnf detectorModelDescription
+      `Prelude.seq` Prelude.rnf evaluationMethod
+      `Prelude.seq` Prelude.rnf key
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf detectorModelName
+      `Prelude.seq` Prelude.rnf detectorModelDefinition
+      `Prelude.seq` Prelude.rnf roleArn
+
+instance Data.ToHeaders CreateDetectorModel where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON CreateDetectorModel where
+  toJSON CreateDetectorModel' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("detectorModelDescription" Data..=)
+              Prelude.<$> detectorModelDescription,
+            ("evaluationMethod" Data..=)
+              Prelude.<$> evaluationMethod,
+            ("key" Data..=) Prelude.<$> key,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("detectorModelName" Data..= detectorModelName),
+            Prelude.Just
+              ( "detectorModelDefinition"
+                  Data..= detectorModelDefinition
+              ),
+            Prelude.Just ("roleArn" Data..= roleArn)
+          ]
+      )
+
+instance Data.ToPath CreateDetectorModel where
+  toPath = Prelude.const "/detector-models"
+
+instance Data.ToQuery CreateDetectorModel where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateDetectorModelResponse' smart constructor.
+data CreateDetectorModelResponse = CreateDetectorModelResponse'
+  { -- | Information about how the detector model is configured.
+    detectorModelConfiguration :: Prelude.Maybe DetectorModelConfiguration,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDetectorModelResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detectorModelConfiguration', 'createDetectorModelResponse_detectorModelConfiguration' - Information about how the detector model is configured.
+--
+-- 'httpStatus', 'createDetectorModelResponse_httpStatus' - The response's http status code.
+newCreateDetectorModelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateDetectorModelResponse
+newCreateDetectorModelResponse pHttpStatus_ =
+  CreateDetectorModelResponse'
+    { detectorModelConfiguration =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about how the detector model is configured.
+createDetectorModelResponse_detectorModelConfiguration :: Lens.Lens' CreateDetectorModelResponse (Prelude.Maybe DetectorModelConfiguration)
+createDetectorModelResponse_detectorModelConfiguration = Lens.lens (\CreateDetectorModelResponse' {detectorModelConfiguration} -> detectorModelConfiguration) (\s@CreateDetectorModelResponse' {} a -> s {detectorModelConfiguration = a} :: CreateDetectorModelResponse)
+
+-- | The response's http status code.
+createDetectorModelResponse_httpStatus :: Lens.Lens' CreateDetectorModelResponse Prelude.Int
+createDetectorModelResponse_httpStatus = Lens.lens (\CreateDetectorModelResponse' {httpStatus} -> httpStatus) (\s@CreateDetectorModelResponse' {} a -> s {httpStatus = a} :: CreateDetectorModelResponse)
+
+instance Prelude.NFData CreateDetectorModelResponse where
+  rnf CreateDetectorModelResponse' {..} =
+    Prelude.rnf detectorModelConfiguration
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTEvents/CreateInput.hs b/gen/Amazonka/IoTEvents/CreateInput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/CreateInput.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.IoTEvents.CreateInput
+-- 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 input.
+module Amazonka.IoTEvents.CreateInput
+  ( -- * Creating a Request
+    CreateInput (..),
+    newCreateInput,
+
+    -- * Request Lenses
+    createInput_inputDescription,
+    createInput_tags,
+    createInput_inputName,
+    createInput_inputDefinition,
+
+    -- * Destructuring the Response
+    CreateInputResponse (..),
+    newCreateInputResponse,
+
+    -- * Response Lenses
+    createInputResponse_inputConfiguration,
+    createInputResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateInput' smart constructor.
+data CreateInput = CreateInput'
+  { -- | A brief description of the input.
+    inputDescription :: Prelude.Maybe Prelude.Text,
+    -- | Metadata that can be used to manage the input.
+    tags :: Prelude.Maybe [Tag],
+    -- | The name you want to give to the input.
+    inputName :: Prelude.Text,
+    -- | The definition of the input.
+    inputDefinition :: InputDefinition
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateInput' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'inputDescription', 'createInput_inputDescription' - A brief description of the input.
+--
+-- 'tags', 'createInput_tags' - Metadata that can be used to manage the input.
+--
+-- 'inputName', 'createInput_inputName' - The name you want to give to the input.
+--
+-- 'inputDefinition', 'createInput_inputDefinition' - The definition of the input.
+newCreateInput ::
+  -- | 'inputName'
+  Prelude.Text ->
+  -- | 'inputDefinition'
+  InputDefinition ->
+  CreateInput
+newCreateInput pInputName_ pInputDefinition_ =
+  CreateInput'
+    { inputDescription = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      inputName = pInputName_,
+      inputDefinition = pInputDefinition_
+    }
+
+-- | A brief description of the input.
+createInput_inputDescription :: Lens.Lens' CreateInput (Prelude.Maybe Prelude.Text)
+createInput_inputDescription = Lens.lens (\CreateInput' {inputDescription} -> inputDescription) (\s@CreateInput' {} a -> s {inputDescription = a} :: CreateInput)
+
+-- | Metadata that can be used to manage the input.
+createInput_tags :: Lens.Lens' CreateInput (Prelude.Maybe [Tag])
+createInput_tags = Lens.lens (\CreateInput' {tags} -> tags) (\s@CreateInput' {} a -> s {tags = a} :: CreateInput) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name you want to give to the input.
+createInput_inputName :: Lens.Lens' CreateInput Prelude.Text
+createInput_inputName = Lens.lens (\CreateInput' {inputName} -> inputName) (\s@CreateInput' {} a -> s {inputName = a} :: CreateInput)
+
+-- | The definition of the input.
+createInput_inputDefinition :: Lens.Lens' CreateInput InputDefinition
+createInput_inputDefinition = Lens.lens (\CreateInput' {inputDefinition} -> inputDefinition) (\s@CreateInput' {} a -> s {inputDefinition = a} :: CreateInput)
+
+instance Core.AWSRequest CreateInput where
+  type AWSResponse CreateInput = CreateInputResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateInputResponse'
+            Prelude.<$> (x Data..?> "inputConfiguration")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateInput where
+  hashWithSalt _salt CreateInput' {..} =
+    _salt
+      `Prelude.hashWithSalt` inputDescription
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` inputName
+      `Prelude.hashWithSalt` inputDefinition
+
+instance Prelude.NFData CreateInput where
+  rnf CreateInput' {..} =
+    Prelude.rnf inputDescription
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf inputName
+      `Prelude.seq` Prelude.rnf inputDefinition
+
+instance Data.ToHeaders CreateInput where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON CreateInput where
+  toJSON CreateInput' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("inputDescription" Data..=)
+              Prelude.<$> inputDescription,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("inputName" Data..= inputName),
+            Prelude.Just
+              ("inputDefinition" Data..= inputDefinition)
+          ]
+      )
+
+instance Data.ToPath CreateInput where
+  toPath = Prelude.const "/inputs"
+
+instance Data.ToQuery CreateInput where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateInputResponse' smart constructor.
+data CreateInputResponse = CreateInputResponse'
+  { -- | Information about the configuration of the input.
+    inputConfiguration :: Prelude.Maybe InputConfiguration,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateInputResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'inputConfiguration', 'createInputResponse_inputConfiguration' - Information about the configuration of the input.
+--
+-- 'httpStatus', 'createInputResponse_httpStatus' - The response's http status code.
+newCreateInputResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateInputResponse
+newCreateInputResponse pHttpStatus_ =
+  CreateInputResponse'
+    { inputConfiguration =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the configuration of the input.
+createInputResponse_inputConfiguration :: Lens.Lens' CreateInputResponse (Prelude.Maybe InputConfiguration)
+createInputResponse_inputConfiguration = Lens.lens (\CreateInputResponse' {inputConfiguration} -> inputConfiguration) (\s@CreateInputResponse' {} a -> s {inputConfiguration = a} :: CreateInputResponse)
+
+-- | The response's http status code.
+createInputResponse_httpStatus :: Lens.Lens' CreateInputResponse Prelude.Int
+createInputResponse_httpStatus = Lens.lens (\CreateInputResponse' {httpStatus} -> httpStatus) (\s@CreateInputResponse' {} a -> s {httpStatus = a} :: CreateInputResponse)
+
+instance Prelude.NFData CreateInputResponse where
+  rnf CreateInputResponse' {..} =
+    Prelude.rnf inputConfiguration
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTEvents/DeleteAlarmModel.hs b/gen/Amazonka/IoTEvents/DeleteAlarmModel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/DeleteAlarmModel.hs
@@ -0,0 +1,144 @@
+{-# 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.IoTEvents.DeleteAlarmModel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an alarm model. Any alarm instances that were created based on
+-- this alarm model are also deleted. This action can\'t be undone.
+module Amazonka.IoTEvents.DeleteAlarmModel
+  ( -- * Creating a Request
+    DeleteAlarmModel (..),
+    newDeleteAlarmModel,
+
+    -- * Request Lenses
+    deleteAlarmModel_alarmModelName,
+
+    -- * Destructuring the Response
+    DeleteAlarmModelResponse (..),
+    newDeleteAlarmModelResponse,
+
+    -- * Response Lenses
+    deleteAlarmModelResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteAlarmModel' smart constructor.
+data DeleteAlarmModel = DeleteAlarmModel'
+  { -- | The name of the alarm model.
+    alarmModelName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAlarmModel' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'alarmModelName', 'deleteAlarmModel_alarmModelName' - The name of the alarm model.
+newDeleteAlarmModel ::
+  -- | 'alarmModelName'
+  Prelude.Text ->
+  DeleteAlarmModel
+newDeleteAlarmModel pAlarmModelName_ =
+  DeleteAlarmModel'
+    { alarmModelName =
+        pAlarmModelName_
+    }
+
+-- | The name of the alarm model.
+deleteAlarmModel_alarmModelName :: Lens.Lens' DeleteAlarmModel Prelude.Text
+deleteAlarmModel_alarmModelName = Lens.lens (\DeleteAlarmModel' {alarmModelName} -> alarmModelName) (\s@DeleteAlarmModel' {} a -> s {alarmModelName = a} :: DeleteAlarmModel)
+
+instance Core.AWSRequest DeleteAlarmModel where
+  type
+    AWSResponse DeleteAlarmModel =
+      DeleteAlarmModelResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteAlarmModelResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteAlarmModel where
+  hashWithSalt _salt DeleteAlarmModel' {..} =
+    _salt `Prelude.hashWithSalt` alarmModelName
+
+instance Prelude.NFData DeleteAlarmModel where
+  rnf DeleteAlarmModel' {..} =
+    Prelude.rnf alarmModelName
+
+instance Data.ToHeaders DeleteAlarmModel where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteAlarmModel where
+  toPath DeleteAlarmModel' {..} =
+    Prelude.mconcat
+      ["/alarm-models/", Data.toBS alarmModelName]
+
+instance Data.ToQuery DeleteAlarmModel where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteAlarmModelResponse' smart constructor.
+data DeleteAlarmModelResponse = DeleteAlarmModelResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAlarmModelResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteAlarmModelResponse_httpStatus' - The response's http status code.
+newDeleteAlarmModelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteAlarmModelResponse
+newDeleteAlarmModelResponse pHttpStatus_ =
+  DeleteAlarmModelResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteAlarmModelResponse_httpStatus :: Lens.Lens' DeleteAlarmModelResponse Prelude.Int
+deleteAlarmModelResponse_httpStatus = Lens.lens (\DeleteAlarmModelResponse' {httpStatus} -> httpStatus) (\s@DeleteAlarmModelResponse' {} a -> s {httpStatus = a} :: DeleteAlarmModelResponse)
+
+instance Prelude.NFData DeleteAlarmModelResponse where
+  rnf DeleteAlarmModelResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTEvents/DeleteDetectorModel.hs b/gen/Amazonka/IoTEvents/DeleteDetectorModel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/DeleteDetectorModel.hs
@@ -0,0 +1,144 @@
+{-# 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.IoTEvents.DeleteDetectorModel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a detector model. Any active instances of the detector model are
+-- also deleted.
+module Amazonka.IoTEvents.DeleteDetectorModel
+  ( -- * Creating a Request
+    DeleteDetectorModel (..),
+    newDeleteDetectorModel,
+
+    -- * Request Lenses
+    deleteDetectorModel_detectorModelName,
+
+    -- * Destructuring the Response
+    DeleteDetectorModelResponse (..),
+    newDeleteDetectorModelResponse,
+
+    -- * Response Lenses
+    deleteDetectorModelResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteDetectorModel' smart constructor.
+data DeleteDetectorModel = DeleteDetectorModel'
+  { -- | The name of the detector model to be deleted.
+    detectorModelName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDetectorModel' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detectorModelName', 'deleteDetectorModel_detectorModelName' - The name of the detector model to be deleted.
+newDeleteDetectorModel ::
+  -- | 'detectorModelName'
+  Prelude.Text ->
+  DeleteDetectorModel
+newDeleteDetectorModel pDetectorModelName_ =
+  DeleteDetectorModel'
+    { detectorModelName =
+        pDetectorModelName_
+    }
+
+-- | The name of the detector model to be deleted.
+deleteDetectorModel_detectorModelName :: Lens.Lens' DeleteDetectorModel Prelude.Text
+deleteDetectorModel_detectorModelName = Lens.lens (\DeleteDetectorModel' {detectorModelName} -> detectorModelName) (\s@DeleteDetectorModel' {} a -> s {detectorModelName = a} :: DeleteDetectorModel)
+
+instance Core.AWSRequest DeleteDetectorModel where
+  type
+    AWSResponse DeleteDetectorModel =
+      DeleteDetectorModelResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteDetectorModelResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteDetectorModel where
+  hashWithSalt _salt DeleteDetectorModel' {..} =
+    _salt `Prelude.hashWithSalt` detectorModelName
+
+instance Prelude.NFData DeleteDetectorModel where
+  rnf DeleteDetectorModel' {..} =
+    Prelude.rnf detectorModelName
+
+instance Data.ToHeaders DeleteDetectorModel where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteDetectorModel where
+  toPath DeleteDetectorModel' {..} =
+    Prelude.mconcat
+      ["/detector-models/", Data.toBS detectorModelName]
+
+instance Data.ToQuery DeleteDetectorModel where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteDetectorModelResponse' smart constructor.
+data DeleteDetectorModelResponse = DeleteDetectorModelResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDetectorModelResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteDetectorModelResponse_httpStatus' - The response's http status code.
+newDeleteDetectorModelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteDetectorModelResponse
+newDeleteDetectorModelResponse pHttpStatus_ =
+  DeleteDetectorModelResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteDetectorModelResponse_httpStatus :: Lens.Lens' DeleteDetectorModelResponse Prelude.Int
+deleteDetectorModelResponse_httpStatus = Lens.lens (\DeleteDetectorModelResponse' {httpStatus} -> httpStatus) (\s@DeleteDetectorModelResponse' {} a -> s {httpStatus = a} :: DeleteDetectorModelResponse)
+
+instance Prelude.NFData DeleteDetectorModelResponse where
+  rnf DeleteDetectorModelResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTEvents/DeleteInput.hs b/gen/Amazonka/IoTEvents/DeleteInput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/DeleteInput.hs
@@ -0,0 +1,132 @@
+{-# 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.IoTEvents.DeleteInput
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an input.
+module Amazonka.IoTEvents.DeleteInput
+  ( -- * Creating a Request
+    DeleteInput (..),
+    newDeleteInput,
+
+    -- * Request Lenses
+    deleteInput_inputName,
+
+    -- * Destructuring the Response
+    DeleteInputResponse (..),
+    newDeleteInputResponse,
+
+    -- * Response Lenses
+    deleteInputResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteInput' smart constructor.
+data DeleteInput = DeleteInput'
+  { -- | The name of the input to delete.
+    inputName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteInput' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'inputName', 'deleteInput_inputName' - The name of the input to delete.
+newDeleteInput ::
+  -- | 'inputName'
+  Prelude.Text ->
+  DeleteInput
+newDeleteInput pInputName_ =
+  DeleteInput' {inputName = pInputName_}
+
+-- | The name of the input to delete.
+deleteInput_inputName :: Lens.Lens' DeleteInput Prelude.Text
+deleteInput_inputName = Lens.lens (\DeleteInput' {inputName} -> inputName) (\s@DeleteInput' {} a -> s {inputName = a} :: DeleteInput)
+
+instance Core.AWSRequest DeleteInput where
+  type AWSResponse DeleteInput = DeleteInputResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteInputResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteInput where
+  hashWithSalt _salt DeleteInput' {..} =
+    _salt `Prelude.hashWithSalt` inputName
+
+instance Prelude.NFData DeleteInput where
+  rnf DeleteInput' {..} = Prelude.rnf inputName
+
+instance Data.ToHeaders DeleteInput where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteInput where
+  toPath DeleteInput' {..} =
+    Prelude.mconcat ["/inputs/", Data.toBS inputName]
+
+instance Data.ToQuery DeleteInput where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteInputResponse' smart constructor.
+data DeleteInputResponse = DeleteInputResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteInputResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteInputResponse_httpStatus' - The response's http status code.
+newDeleteInputResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteInputResponse
+newDeleteInputResponse pHttpStatus_ =
+  DeleteInputResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteInputResponse_httpStatus :: Lens.Lens' DeleteInputResponse Prelude.Int
+deleteInputResponse_httpStatus = Lens.lens (\DeleteInputResponse' {httpStatus} -> httpStatus) (\s@DeleteInputResponse' {} a -> s {httpStatus = a} :: DeleteInputResponse)
+
+instance Prelude.NFData DeleteInputResponse where
+  rnf DeleteInputResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTEvents/DescribeAlarmModel.hs b/gen/Amazonka/IoTEvents/DescribeAlarmModel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/DescribeAlarmModel.hs
@@ -0,0 +1,406 @@
+{-# 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.IoTEvents.DescribeAlarmModel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about an alarm model. If you don\'t specify a
+-- value for the @alarmModelVersion@ parameter, the latest version is
+-- returned.
+module Amazonka.IoTEvents.DescribeAlarmModel
+  ( -- * Creating a Request
+    DescribeAlarmModel (..),
+    newDescribeAlarmModel,
+
+    -- * Request Lenses
+    describeAlarmModel_alarmModelVersion,
+    describeAlarmModel_alarmModelName,
+
+    -- * Destructuring the Response
+    DescribeAlarmModelResponse (..),
+    newDescribeAlarmModelResponse,
+
+    -- * Response Lenses
+    describeAlarmModelResponse_alarmCapabilities,
+    describeAlarmModelResponse_alarmEventActions,
+    describeAlarmModelResponse_alarmModelArn,
+    describeAlarmModelResponse_alarmModelDescription,
+    describeAlarmModelResponse_alarmModelName,
+    describeAlarmModelResponse_alarmModelVersion,
+    describeAlarmModelResponse_alarmNotification,
+    describeAlarmModelResponse_alarmRule,
+    describeAlarmModelResponse_creationTime,
+    describeAlarmModelResponse_key,
+    describeAlarmModelResponse_lastUpdateTime,
+    describeAlarmModelResponse_roleArn,
+    describeAlarmModelResponse_severity,
+    describeAlarmModelResponse_status,
+    describeAlarmModelResponse_statusMessage,
+    describeAlarmModelResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeAlarmModel' smart constructor.
+data DescribeAlarmModel = DescribeAlarmModel'
+  { -- | The version of the alarm model.
+    alarmModelVersion :: Prelude.Maybe Prelude.Text,
+    -- | The name of the alarm model.
+    alarmModelName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAlarmModel' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'alarmModelVersion', 'describeAlarmModel_alarmModelVersion' - The version of the alarm model.
+--
+-- 'alarmModelName', 'describeAlarmModel_alarmModelName' - The name of the alarm model.
+newDescribeAlarmModel ::
+  -- | 'alarmModelName'
+  Prelude.Text ->
+  DescribeAlarmModel
+newDescribeAlarmModel pAlarmModelName_ =
+  DescribeAlarmModel'
+    { alarmModelVersion =
+        Prelude.Nothing,
+      alarmModelName = pAlarmModelName_
+    }
+
+-- | The version of the alarm model.
+describeAlarmModel_alarmModelVersion :: Lens.Lens' DescribeAlarmModel (Prelude.Maybe Prelude.Text)
+describeAlarmModel_alarmModelVersion = Lens.lens (\DescribeAlarmModel' {alarmModelVersion} -> alarmModelVersion) (\s@DescribeAlarmModel' {} a -> s {alarmModelVersion = a} :: DescribeAlarmModel)
+
+-- | The name of the alarm model.
+describeAlarmModel_alarmModelName :: Lens.Lens' DescribeAlarmModel Prelude.Text
+describeAlarmModel_alarmModelName = Lens.lens (\DescribeAlarmModel' {alarmModelName} -> alarmModelName) (\s@DescribeAlarmModel' {} a -> s {alarmModelName = a} :: DescribeAlarmModel)
+
+instance Core.AWSRequest DescribeAlarmModel where
+  type
+    AWSResponse DescribeAlarmModel =
+      DescribeAlarmModelResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAlarmModelResponse'
+            Prelude.<$> (x Data..?> "alarmCapabilities")
+            Prelude.<*> (x Data..?> "alarmEventActions")
+            Prelude.<*> (x Data..?> "alarmModelArn")
+            Prelude.<*> (x Data..?> "alarmModelDescription")
+            Prelude.<*> (x Data..?> "alarmModelName")
+            Prelude.<*> (x Data..?> "alarmModelVersion")
+            Prelude.<*> (x Data..?> "alarmNotification")
+            Prelude.<*> (x Data..?> "alarmRule")
+            Prelude.<*> (x Data..?> "creationTime")
+            Prelude.<*> (x Data..?> "key")
+            Prelude.<*> (x Data..?> "lastUpdateTime")
+            Prelude.<*> (x Data..?> "roleArn")
+            Prelude.<*> (x Data..?> "severity")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (x Data..?> "statusMessage")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeAlarmModel where
+  hashWithSalt _salt DescribeAlarmModel' {..} =
+    _salt
+      `Prelude.hashWithSalt` alarmModelVersion
+      `Prelude.hashWithSalt` alarmModelName
+
+instance Prelude.NFData DescribeAlarmModel where
+  rnf DescribeAlarmModel' {..} =
+    Prelude.rnf alarmModelVersion
+      `Prelude.seq` Prelude.rnf alarmModelName
+
+instance Data.ToHeaders DescribeAlarmModel where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeAlarmModel where
+  toPath DescribeAlarmModel' {..} =
+    Prelude.mconcat
+      ["/alarm-models/", Data.toBS alarmModelName]
+
+instance Data.ToQuery DescribeAlarmModel where
+  toQuery DescribeAlarmModel' {..} =
+    Prelude.mconcat
+      ["version" Data.=: alarmModelVersion]
+
+-- | /See:/ 'newDescribeAlarmModelResponse' smart constructor.
+data DescribeAlarmModelResponse = DescribeAlarmModelResponse'
+  { -- | Contains the configuration information of alarm state changes.
+    alarmCapabilities :: Prelude.Maybe AlarmCapabilities,
+    -- | Contains information about one or more alarm actions.
+    alarmEventActions :: Prelude.Maybe AlarmEventActions,
+    -- | The ARN of the alarm model. For more information, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    alarmModelArn :: Prelude.Maybe Prelude.Text,
+    -- | The description of the alarm model.
+    alarmModelDescription :: Prelude.Maybe Prelude.Text,
+    -- | The name of the alarm model.
+    alarmModelName :: Prelude.Maybe Prelude.Text,
+    -- | The version of the alarm model.
+    alarmModelVersion :: Prelude.Maybe Prelude.Text,
+    -- | Contains information about one or more notification actions.
+    alarmNotification :: Prelude.Maybe AlarmNotification,
+    -- | Defines when your alarm is invoked.
+    alarmRule :: Prelude.Maybe AlarmRule,
+    -- | The time the alarm model was created, in the Unix epoch format.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | An input attribute used as a key to create an alarm. AWS IoT Events
+    -- routes
+    -- <https://docs.aws.amazon.com/iotevents/latest/apireference/API_Input.html inputs>
+    -- associated with this key to the alarm.
+    key :: Prelude.Maybe Prelude.Text,
+    -- | The time the alarm model was last updated, in the Unix epoch format.
+    lastUpdateTime :: Prelude.Maybe Data.POSIX,
+    -- | The ARN of the IAM role that allows the alarm to perform actions and
+    -- access AWS resources. For more information, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | A non-negative integer that reflects the severity level of the alarm.
+    severity :: Prelude.Maybe Prelude.Natural,
+    -- | The status of the alarm model. The status can be one of the following
+    -- values:
+    --
+    -- -   @ACTIVE@ - The alarm model is active and it\'s ready to evaluate
+    --     data.
+    --
+    -- -   @ACTIVATING@ - AWS IoT Events is activating your alarm model.
+    --     Activating an alarm model can take up to a few minutes.
+    --
+    -- -   @INACTIVE@ - The alarm model is inactive, so it isn\'t ready to
+    --     evaluate data. Check your alarm model information and update the
+    --     alarm model.
+    --
+    -- -   @FAILED@ - You couldn\'t create or update the alarm model. Check
+    --     your alarm model information and try again.
+    status :: Prelude.Maybe AlarmModelVersionStatus,
+    -- | Contains information about the status of the alarm model.
+    statusMessage :: 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 'DescribeAlarmModelResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'alarmCapabilities', 'describeAlarmModelResponse_alarmCapabilities' - Contains the configuration information of alarm state changes.
+--
+-- 'alarmEventActions', 'describeAlarmModelResponse_alarmEventActions' - Contains information about one or more alarm actions.
+--
+-- 'alarmModelArn', 'describeAlarmModelResponse_alarmModelArn' - The ARN of the alarm model. For more information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'alarmModelDescription', 'describeAlarmModelResponse_alarmModelDescription' - The description of the alarm model.
+--
+-- 'alarmModelName', 'describeAlarmModelResponse_alarmModelName' - The name of the alarm model.
+--
+-- 'alarmModelVersion', 'describeAlarmModelResponse_alarmModelVersion' - The version of the alarm model.
+--
+-- 'alarmNotification', 'describeAlarmModelResponse_alarmNotification' - Contains information about one or more notification actions.
+--
+-- 'alarmRule', 'describeAlarmModelResponse_alarmRule' - Defines when your alarm is invoked.
+--
+-- 'creationTime', 'describeAlarmModelResponse_creationTime' - The time the alarm model was created, in the Unix epoch format.
+--
+-- 'key', 'describeAlarmModelResponse_key' - An input attribute used as a key to create an alarm. AWS IoT Events
+-- routes
+-- <https://docs.aws.amazon.com/iotevents/latest/apireference/API_Input.html inputs>
+-- associated with this key to the alarm.
+--
+-- 'lastUpdateTime', 'describeAlarmModelResponse_lastUpdateTime' - The time the alarm model was last updated, in the Unix epoch format.
+--
+-- 'roleArn', 'describeAlarmModelResponse_roleArn' - The ARN of the IAM role that allows the alarm to perform actions and
+-- access AWS resources. For more information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'severity', 'describeAlarmModelResponse_severity' - A non-negative integer that reflects the severity level of the alarm.
+--
+-- 'status', 'describeAlarmModelResponse_status' - The status of the alarm model. The status can be one of the following
+-- values:
+--
+-- -   @ACTIVE@ - The alarm model is active and it\'s ready to evaluate
+--     data.
+--
+-- -   @ACTIVATING@ - AWS IoT Events is activating your alarm model.
+--     Activating an alarm model can take up to a few minutes.
+--
+-- -   @INACTIVE@ - The alarm model is inactive, so it isn\'t ready to
+--     evaluate data. Check your alarm model information and update the
+--     alarm model.
+--
+-- -   @FAILED@ - You couldn\'t create or update the alarm model. Check
+--     your alarm model information and try again.
+--
+-- 'statusMessage', 'describeAlarmModelResponse_statusMessage' - Contains information about the status of the alarm model.
+--
+-- 'httpStatus', 'describeAlarmModelResponse_httpStatus' - The response's http status code.
+newDescribeAlarmModelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAlarmModelResponse
+newDescribeAlarmModelResponse pHttpStatus_ =
+  DescribeAlarmModelResponse'
+    { alarmCapabilities =
+        Prelude.Nothing,
+      alarmEventActions = Prelude.Nothing,
+      alarmModelArn = Prelude.Nothing,
+      alarmModelDescription = Prelude.Nothing,
+      alarmModelName = Prelude.Nothing,
+      alarmModelVersion = Prelude.Nothing,
+      alarmNotification = Prelude.Nothing,
+      alarmRule = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      key = Prelude.Nothing,
+      lastUpdateTime = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      severity = Prelude.Nothing,
+      status = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Contains the configuration information of alarm state changes.
+describeAlarmModelResponse_alarmCapabilities :: Lens.Lens' DescribeAlarmModelResponse (Prelude.Maybe AlarmCapabilities)
+describeAlarmModelResponse_alarmCapabilities = Lens.lens (\DescribeAlarmModelResponse' {alarmCapabilities} -> alarmCapabilities) (\s@DescribeAlarmModelResponse' {} a -> s {alarmCapabilities = a} :: DescribeAlarmModelResponse)
+
+-- | Contains information about one or more alarm actions.
+describeAlarmModelResponse_alarmEventActions :: Lens.Lens' DescribeAlarmModelResponse (Prelude.Maybe AlarmEventActions)
+describeAlarmModelResponse_alarmEventActions = Lens.lens (\DescribeAlarmModelResponse' {alarmEventActions} -> alarmEventActions) (\s@DescribeAlarmModelResponse' {} a -> s {alarmEventActions = a} :: DescribeAlarmModelResponse)
+
+-- | The ARN of the alarm model. For more information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+describeAlarmModelResponse_alarmModelArn :: Lens.Lens' DescribeAlarmModelResponse (Prelude.Maybe Prelude.Text)
+describeAlarmModelResponse_alarmModelArn = Lens.lens (\DescribeAlarmModelResponse' {alarmModelArn} -> alarmModelArn) (\s@DescribeAlarmModelResponse' {} a -> s {alarmModelArn = a} :: DescribeAlarmModelResponse)
+
+-- | The description of the alarm model.
+describeAlarmModelResponse_alarmModelDescription :: Lens.Lens' DescribeAlarmModelResponse (Prelude.Maybe Prelude.Text)
+describeAlarmModelResponse_alarmModelDescription = Lens.lens (\DescribeAlarmModelResponse' {alarmModelDescription} -> alarmModelDescription) (\s@DescribeAlarmModelResponse' {} a -> s {alarmModelDescription = a} :: DescribeAlarmModelResponse)
+
+-- | The name of the alarm model.
+describeAlarmModelResponse_alarmModelName :: Lens.Lens' DescribeAlarmModelResponse (Prelude.Maybe Prelude.Text)
+describeAlarmModelResponse_alarmModelName = Lens.lens (\DescribeAlarmModelResponse' {alarmModelName} -> alarmModelName) (\s@DescribeAlarmModelResponse' {} a -> s {alarmModelName = a} :: DescribeAlarmModelResponse)
+
+-- | The version of the alarm model.
+describeAlarmModelResponse_alarmModelVersion :: Lens.Lens' DescribeAlarmModelResponse (Prelude.Maybe Prelude.Text)
+describeAlarmModelResponse_alarmModelVersion = Lens.lens (\DescribeAlarmModelResponse' {alarmModelVersion} -> alarmModelVersion) (\s@DescribeAlarmModelResponse' {} a -> s {alarmModelVersion = a} :: DescribeAlarmModelResponse)
+
+-- | Contains information about one or more notification actions.
+describeAlarmModelResponse_alarmNotification :: Lens.Lens' DescribeAlarmModelResponse (Prelude.Maybe AlarmNotification)
+describeAlarmModelResponse_alarmNotification = Lens.lens (\DescribeAlarmModelResponse' {alarmNotification} -> alarmNotification) (\s@DescribeAlarmModelResponse' {} a -> s {alarmNotification = a} :: DescribeAlarmModelResponse)
+
+-- | Defines when your alarm is invoked.
+describeAlarmModelResponse_alarmRule :: Lens.Lens' DescribeAlarmModelResponse (Prelude.Maybe AlarmRule)
+describeAlarmModelResponse_alarmRule = Lens.lens (\DescribeAlarmModelResponse' {alarmRule} -> alarmRule) (\s@DescribeAlarmModelResponse' {} a -> s {alarmRule = a} :: DescribeAlarmModelResponse)
+
+-- | The time the alarm model was created, in the Unix epoch format.
+describeAlarmModelResponse_creationTime :: Lens.Lens' DescribeAlarmModelResponse (Prelude.Maybe Prelude.UTCTime)
+describeAlarmModelResponse_creationTime = Lens.lens (\DescribeAlarmModelResponse' {creationTime} -> creationTime) (\s@DescribeAlarmModelResponse' {} a -> s {creationTime = a} :: DescribeAlarmModelResponse) Prelude.. Lens.mapping Data._Time
+
+-- | An input attribute used as a key to create an alarm. AWS IoT Events
+-- routes
+-- <https://docs.aws.amazon.com/iotevents/latest/apireference/API_Input.html inputs>
+-- associated with this key to the alarm.
+describeAlarmModelResponse_key :: Lens.Lens' DescribeAlarmModelResponse (Prelude.Maybe Prelude.Text)
+describeAlarmModelResponse_key = Lens.lens (\DescribeAlarmModelResponse' {key} -> key) (\s@DescribeAlarmModelResponse' {} a -> s {key = a} :: DescribeAlarmModelResponse)
+
+-- | The time the alarm model was last updated, in the Unix epoch format.
+describeAlarmModelResponse_lastUpdateTime :: Lens.Lens' DescribeAlarmModelResponse (Prelude.Maybe Prelude.UTCTime)
+describeAlarmModelResponse_lastUpdateTime = Lens.lens (\DescribeAlarmModelResponse' {lastUpdateTime} -> lastUpdateTime) (\s@DescribeAlarmModelResponse' {} a -> s {lastUpdateTime = a} :: DescribeAlarmModelResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The ARN of the IAM role that allows the alarm to perform actions and
+-- access AWS resources. For more information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+describeAlarmModelResponse_roleArn :: Lens.Lens' DescribeAlarmModelResponse (Prelude.Maybe Prelude.Text)
+describeAlarmModelResponse_roleArn = Lens.lens (\DescribeAlarmModelResponse' {roleArn} -> roleArn) (\s@DescribeAlarmModelResponse' {} a -> s {roleArn = a} :: DescribeAlarmModelResponse)
+
+-- | A non-negative integer that reflects the severity level of the alarm.
+describeAlarmModelResponse_severity :: Lens.Lens' DescribeAlarmModelResponse (Prelude.Maybe Prelude.Natural)
+describeAlarmModelResponse_severity = Lens.lens (\DescribeAlarmModelResponse' {severity} -> severity) (\s@DescribeAlarmModelResponse' {} a -> s {severity = a} :: DescribeAlarmModelResponse)
+
+-- | The status of the alarm model. The status can be one of the following
+-- values:
+--
+-- -   @ACTIVE@ - The alarm model is active and it\'s ready to evaluate
+--     data.
+--
+-- -   @ACTIVATING@ - AWS IoT Events is activating your alarm model.
+--     Activating an alarm model can take up to a few minutes.
+--
+-- -   @INACTIVE@ - The alarm model is inactive, so it isn\'t ready to
+--     evaluate data. Check your alarm model information and update the
+--     alarm model.
+--
+-- -   @FAILED@ - You couldn\'t create or update the alarm model. Check
+--     your alarm model information and try again.
+describeAlarmModelResponse_status :: Lens.Lens' DescribeAlarmModelResponse (Prelude.Maybe AlarmModelVersionStatus)
+describeAlarmModelResponse_status = Lens.lens (\DescribeAlarmModelResponse' {status} -> status) (\s@DescribeAlarmModelResponse' {} a -> s {status = a} :: DescribeAlarmModelResponse)
+
+-- | Contains information about the status of the alarm model.
+describeAlarmModelResponse_statusMessage :: Lens.Lens' DescribeAlarmModelResponse (Prelude.Maybe Prelude.Text)
+describeAlarmModelResponse_statusMessage = Lens.lens (\DescribeAlarmModelResponse' {statusMessage} -> statusMessage) (\s@DescribeAlarmModelResponse' {} a -> s {statusMessage = a} :: DescribeAlarmModelResponse)
+
+-- | The response's http status code.
+describeAlarmModelResponse_httpStatus :: Lens.Lens' DescribeAlarmModelResponse Prelude.Int
+describeAlarmModelResponse_httpStatus = Lens.lens (\DescribeAlarmModelResponse' {httpStatus} -> httpStatus) (\s@DescribeAlarmModelResponse' {} a -> s {httpStatus = a} :: DescribeAlarmModelResponse)
+
+instance Prelude.NFData DescribeAlarmModelResponse where
+  rnf DescribeAlarmModelResponse' {..} =
+    Prelude.rnf alarmCapabilities
+      `Prelude.seq` Prelude.rnf alarmEventActions
+      `Prelude.seq` Prelude.rnf alarmModelArn
+      `Prelude.seq` Prelude.rnf alarmModelDescription
+      `Prelude.seq` Prelude.rnf alarmModelName
+      `Prelude.seq` Prelude.rnf alarmModelVersion
+      `Prelude.seq` Prelude.rnf alarmNotification
+      `Prelude.seq` Prelude.rnf alarmRule
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf key
+      `Prelude.seq` Prelude.rnf lastUpdateTime
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf severity
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTEvents/DescribeDetectorModel.hs b/gen/Amazonka/IoTEvents/DescribeDetectorModel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/DescribeDetectorModel.hs
@@ -0,0 +1,171 @@
+{-# 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.IoTEvents.DescribeDetectorModel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes a detector model. If the @version@ parameter is not specified,
+-- information about the latest version is returned.
+module Amazonka.IoTEvents.DescribeDetectorModel
+  ( -- * Creating a Request
+    DescribeDetectorModel (..),
+    newDescribeDetectorModel,
+
+    -- * Request Lenses
+    describeDetectorModel_detectorModelVersion,
+    describeDetectorModel_detectorModelName,
+
+    -- * Destructuring the Response
+    DescribeDetectorModelResponse (..),
+    newDescribeDetectorModelResponse,
+
+    -- * Response Lenses
+    describeDetectorModelResponse_detectorModel,
+    describeDetectorModelResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeDetectorModel' smart constructor.
+data DescribeDetectorModel = DescribeDetectorModel'
+  { -- | The version of the detector model.
+    detectorModelVersion :: Prelude.Maybe Prelude.Text,
+    -- | The name of the detector model.
+    detectorModelName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeDetectorModel' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detectorModelVersion', 'describeDetectorModel_detectorModelVersion' - The version of the detector model.
+--
+-- 'detectorModelName', 'describeDetectorModel_detectorModelName' - The name of the detector model.
+newDescribeDetectorModel ::
+  -- | 'detectorModelName'
+  Prelude.Text ->
+  DescribeDetectorModel
+newDescribeDetectorModel pDetectorModelName_ =
+  DescribeDetectorModel'
+    { detectorModelVersion =
+        Prelude.Nothing,
+      detectorModelName = pDetectorModelName_
+    }
+
+-- | The version of the detector model.
+describeDetectorModel_detectorModelVersion :: Lens.Lens' DescribeDetectorModel (Prelude.Maybe Prelude.Text)
+describeDetectorModel_detectorModelVersion = Lens.lens (\DescribeDetectorModel' {detectorModelVersion} -> detectorModelVersion) (\s@DescribeDetectorModel' {} a -> s {detectorModelVersion = a} :: DescribeDetectorModel)
+
+-- | The name of the detector model.
+describeDetectorModel_detectorModelName :: Lens.Lens' DescribeDetectorModel Prelude.Text
+describeDetectorModel_detectorModelName = Lens.lens (\DescribeDetectorModel' {detectorModelName} -> detectorModelName) (\s@DescribeDetectorModel' {} a -> s {detectorModelName = a} :: DescribeDetectorModel)
+
+instance Core.AWSRequest DescribeDetectorModel where
+  type
+    AWSResponse DescribeDetectorModel =
+      DescribeDetectorModelResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeDetectorModelResponse'
+            Prelude.<$> (x Data..?> "detectorModel")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeDetectorModel where
+  hashWithSalt _salt DescribeDetectorModel' {..} =
+    _salt
+      `Prelude.hashWithSalt` detectorModelVersion
+      `Prelude.hashWithSalt` detectorModelName
+
+instance Prelude.NFData DescribeDetectorModel where
+  rnf DescribeDetectorModel' {..} =
+    Prelude.rnf detectorModelVersion
+      `Prelude.seq` Prelude.rnf detectorModelName
+
+instance Data.ToHeaders DescribeDetectorModel where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeDetectorModel where
+  toPath DescribeDetectorModel' {..} =
+    Prelude.mconcat
+      ["/detector-models/", Data.toBS detectorModelName]
+
+instance Data.ToQuery DescribeDetectorModel where
+  toQuery DescribeDetectorModel' {..} =
+    Prelude.mconcat
+      ["version" Data.=: detectorModelVersion]
+
+-- | /See:/ 'newDescribeDetectorModelResponse' smart constructor.
+data DescribeDetectorModelResponse = DescribeDetectorModelResponse'
+  { -- | Information about the detector model.
+    detectorModel :: Prelude.Maybe DetectorModel,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeDetectorModelResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detectorModel', 'describeDetectorModelResponse_detectorModel' - Information about the detector model.
+--
+-- 'httpStatus', 'describeDetectorModelResponse_httpStatus' - The response's http status code.
+newDescribeDetectorModelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeDetectorModelResponse
+newDescribeDetectorModelResponse pHttpStatus_ =
+  DescribeDetectorModelResponse'
+    { detectorModel =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the detector model.
+describeDetectorModelResponse_detectorModel :: Lens.Lens' DescribeDetectorModelResponse (Prelude.Maybe DetectorModel)
+describeDetectorModelResponse_detectorModel = Lens.lens (\DescribeDetectorModelResponse' {detectorModel} -> detectorModel) (\s@DescribeDetectorModelResponse' {} a -> s {detectorModel = a} :: DescribeDetectorModelResponse)
+
+-- | The response's http status code.
+describeDetectorModelResponse_httpStatus :: Lens.Lens' DescribeDetectorModelResponse Prelude.Int
+describeDetectorModelResponse_httpStatus = Lens.lens (\DescribeDetectorModelResponse' {httpStatus} -> httpStatus) (\s@DescribeDetectorModelResponse' {} a -> s {httpStatus = a} :: DescribeDetectorModelResponse)
+
+instance Prelude.NFData DescribeDetectorModelResponse where
+  rnf DescribeDetectorModelResponse' {..} =
+    Prelude.rnf detectorModel
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTEvents/DescribeDetectorModelAnalysis.hs b/gen/Amazonka/IoTEvents/DescribeDetectorModelAnalysis.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/DescribeDetectorModelAnalysis.hs
@@ -0,0 +1,194 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.DescribeDetectorModelAnalysis
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves runtime information about a detector model analysis.
+--
+-- After AWS IoT Events starts analyzing your detector model, you have up
+-- to 24 hours to retrieve the analysis results.
+module Amazonka.IoTEvents.DescribeDetectorModelAnalysis
+  ( -- * Creating a Request
+    DescribeDetectorModelAnalysis (..),
+    newDescribeDetectorModelAnalysis,
+
+    -- * Request Lenses
+    describeDetectorModelAnalysis_analysisId,
+
+    -- * Destructuring the Response
+    DescribeDetectorModelAnalysisResponse (..),
+    newDescribeDetectorModelAnalysisResponse,
+
+    -- * Response Lenses
+    describeDetectorModelAnalysisResponse_status,
+    describeDetectorModelAnalysisResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeDetectorModelAnalysis' smart constructor.
+data DescribeDetectorModelAnalysis = DescribeDetectorModelAnalysis'
+  { -- | The ID of the analysis result that you want to retrieve.
+    analysisId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeDetectorModelAnalysis' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'analysisId', 'describeDetectorModelAnalysis_analysisId' - The ID of the analysis result that you want to retrieve.
+newDescribeDetectorModelAnalysis ::
+  -- | 'analysisId'
+  Prelude.Text ->
+  DescribeDetectorModelAnalysis
+newDescribeDetectorModelAnalysis pAnalysisId_ =
+  DescribeDetectorModelAnalysis'
+    { analysisId =
+        pAnalysisId_
+    }
+
+-- | The ID of the analysis result that you want to retrieve.
+describeDetectorModelAnalysis_analysisId :: Lens.Lens' DescribeDetectorModelAnalysis Prelude.Text
+describeDetectorModelAnalysis_analysisId = Lens.lens (\DescribeDetectorModelAnalysis' {analysisId} -> analysisId) (\s@DescribeDetectorModelAnalysis' {} a -> s {analysisId = a} :: DescribeDetectorModelAnalysis)
+
+instance
+  Core.AWSRequest
+    DescribeDetectorModelAnalysis
+  where
+  type
+    AWSResponse DescribeDetectorModelAnalysis =
+      DescribeDetectorModelAnalysisResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeDetectorModelAnalysisResponse'
+            Prelude.<$> (x Data..?> "status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeDetectorModelAnalysis
+  where
+  hashWithSalt _salt DescribeDetectorModelAnalysis' {..} =
+    _salt `Prelude.hashWithSalt` analysisId
+
+instance Prelude.NFData DescribeDetectorModelAnalysis where
+  rnf DescribeDetectorModelAnalysis' {..} =
+    Prelude.rnf analysisId
+
+instance Data.ToHeaders DescribeDetectorModelAnalysis where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeDetectorModelAnalysis where
+  toPath DescribeDetectorModelAnalysis' {..} =
+    Prelude.mconcat
+      ["/analysis/detector-models/", Data.toBS analysisId]
+
+instance Data.ToQuery DescribeDetectorModelAnalysis where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeDetectorModelAnalysisResponse' smart constructor.
+data DescribeDetectorModelAnalysisResponse = DescribeDetectorModelAnalysisResponse'
+  { -- | The status of the analysis activity. The status can be one of the
+    -- following values:
+    --
+    -- -   @RUNNING@ - AWS IoT Events is analyzing your detector model. This
+    --     process can take several minutes to complete.
+    --
+    -- -   @COMPLETE@ - AWS IoT Events finished analyzing your detector model.
+    --
+    -- -   @FAILED@ - AWS IoT Events couldn\'t analyze your detector model. Try
+    --     again later.
+    status :: Prelude.Maybe AnalysisStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeDetectorModelAnalysisResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'status', 'describeDetectorModelAnalysisResponse_status' - The status of the analysis activity. The status can be one of the
+-- following values:
+--
+-- -   @RUNNING@ - AWS IoT Events is analyzing your detector model. This
+--     process can take several minutes to complete.
+--
+-- -   @COMPLETE@ - AWS IoT Events finished analyzing your detector model.
+--
+-- -   @FAILED@ - AWS IoT Events couldn\'t analyze your detector model. Try
+--     again later.
+--
+-- 'httpStatus', 'describeDetectorModelAnalysisResponse_httpStatus' - The response's http status code.
+newDescribeDetectorModelAnalysisResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeDetectorModelAnalysisResponse
+newDescribeDetectorModelAnalysisResponse pHttpStatus_ =
+  DescribeDetectorModelAnalysisResponse'
+    { status =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The status of the analysis activity. The status can be one of the
+-- following values:
+--
+-- -   @RUNNING@ - AWS IoT Events is analyzing your detector model. This
+--     process can take several minutes to complete.
+--
+-- -   @COMPLETE@ - AWS IoT Events finished analyzing your detector model.
+--
+-- -   @FAILED@ - AWS IoT Events couldn\'t analyze your detector model. Try
+--     again later.
+describeDetectorModelAnalysisResponse_status :: Lens.Lens' DescribeDetectorModelAnalysisResponse (Prelude.Maybe AnalysisStatus)
+describeDetectorModelAnalysisResponse_status = Lens.lens (\DescribeDetectorModelAnalysisResponse' {status} -> status) (\s@DescribeDetectorModelAnalysisResponse' {} a -> s {status = a} :: DescribeDetectorModelAnalysisResponse)
+
+-- | The response's http status code.
+describeDetectorModelAnalysisResponse_httpStatus :: Lens.Lens' DescribeDetectorModelAnalysisResponse Prelude.Int
+describeDetectorModelAnalysisResponse_httpStatus = Lens.lens (\DescribeDetectorModelAnalysisResponse' {httpStatus} -> httpStatus) (\s@DescribeDetectorModelAnalysisResponse' {} a -> s {httpStatus = a} :: DescribeDetectorModelAnalysisResponse)
+
+instance
+  Prelude.NFData
+    DescribeDetectorModelAnalysisResponse
+  where
+  rnf DescribeDetectorModelAnalysisResponse' {..} =
+    Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTEvents/DescribeInput.hs b/gen/Amazonka/IoTEvents/DescribeInput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/DescribeInput.hs
@@ -0,0 +1,149 @@
+{-# 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.IoTEvents.DescribeInput
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes an input.
+module Amazonka.IoTEvents.DescribeInput
+  ( -- * Creating a Request
+    DescribeInput (..),
+    newDescribeInput,
+
+    -- * Request Lenses
+    describeInput_inputName,
+
+    -- * Destructuring the Response
+    DescribeInputResponse (..),
+    newDescribeInputResponse,
+
+    -- * Response Lenses
+    describeInputResponse_input,
+    describeInputResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeInput' smart constructor.
+data DescribeInput = DescribeInput'
+  { -- | The name of the input.
+    inputName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeInput' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'inputName', 'describeInput_inputName' - The name of the input.
+newDescribeInput ::
+  -- | 'inputName'
+  Prelude.Text ->
+  DescribeInput
+newDescribeInput pInputName_ =
+  DescribeInput' {inputName = pInputName_}
+
+-- | The name of the input.
+describeInput_inputName :: Lens.Lens' DescribeInput Prelude.Text
+describeInput_inputName = Lens.lens (\DescribeInput' {inputName} -> inputName) (\s@DescribeInput' {} a -> s {inputName = a} :: DescribeInput)
+
+instance Core.AWSRequest DescribeInput where
+  type
+    AWSResponse DescribeInput =
+      DescribeInputResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeInputResponse'
+            Prelude.<$> (x Data..?> "input")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeInput where
+  hashWithSalt _salt DescribeInput' {..} =
+    _salt `Prelude.hashWithSalt` inputName
+
+instance Prelude.NFData DescribeInput where
+  rnf DescribeInput' {..} = Prelude.rnf inputName
+
+instance Data.ToHeaders DescribeInput where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeInput where
+  toPath DescribeInput' {..} =
+    Prelude.mconcat ["/inputs/", Data.toBS inputName]
+
+instance Data.ToQuery DescribeInput where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeInputResponse' smart constructor.
+data DescribeInputResponse = DescribeInputResponse'
+  { -- | Information about the input.
+    input :: Prelude.Maybe Input,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeInputResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'input', 'describeInputResponse_input' - Information about the input.
+--
+-- 'httpStatus', 'describeInputResponse_httpStatus' - The response's http status code.
+newDescribeInputResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeInputResponse
+newDescribeInputResponse pHttpStatus_ =
+  DescribeInputResponse'
+    { input = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the input.
+describeInputResponse_input :: Lens.Lens' DescribeInputResponse (Prelude.Maybe Input)
+describeInputResponse_input = Lens.lens (\DescribeInputResponse' {input} -> input) (\s@DescribeInputResponse' {} a -> s {input = a} :: DescribeInputResponse)
+
+-- | The response's http status code.
+describeInputResponse_httpStatus :: Lens.Lens' DescribeInputResponse Prelude.Int
+describeInputResponse_httpStatus = Lens.lens (\DescribeInputResponse' {httpStatus} -> httpStatus) (\s@DescribeInputResponse' {} a -> s {httpStatus = a} :: DescribeInputResponse)
+
+instance Prelude.NFData DescribeInputResponse where
+  rnf DescribeInputResponse' {..} =
+    Prelude.rnf input
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTEvents/DescribeLoggingOptions.hs b/gen/Amazonka/IoTEvents/DescribeLoggingOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/DescribeLoggingOptions.hs
@@ -0,0 +1,136 @@
+{-# 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.IoTEvents.DescribeLoggingOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the current settings of the AWS IoT Events logging options.
+module Amazonka.IoTEvents.DescribeLoggingOptions
+  ( -- * Creating a Request
+    DescribeLoggingOptions (..),
+    newDescribeLoggingOptions,
+
+    -- * Destructuring the Response
+    DescribeLoggingOptionsResponse (..),
+    newDescribeLoggingOptionsResponse,
+
+    -- * Response Lenses
+    describeLoggingOptionsResponse_loggingOptions,
+    describeLoggingOptionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeLoggingOptions' smart constructor.
+data DescribeLoggingOptions = DescribeLoggingOptions'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLoggingOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDescribeLoggingOptions ::
+  DescribeLoggingOptions
+newDescribeLoggingOptions = DescribeLoggingOptions'
+
+instance Core.AWSRequest DescribeLoggingOptions where
+  type
+    AWSResponse DescribeLoggingOptions =
+      DescribeLoggingOptionsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeLoggingOptionsResponse'
+            Prelude.<$> (x Data..?> "loggingOptions")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeLoggingOptions where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData DescribeLoggingOptions where
+  rnf _ = ()
+
+instance Data.ToHeaders DescribeLoggingOptions where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeLoggingOptions where
+  toPath = Prelude.const "/logging"
+
+instance Data.ToQuery DescribeLoggingOptions where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeLoggingOptionsResponse' smart constructor.
+data DescribeLoggingOptionsResponse = DescribeLoggingOptionsResponse'
+  { -- | The current settings of the AWS IoT Events logging options.
+    loggingOptions :: Prelude.Maybe LoggingOptions,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLoggingOptionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'loggingOptions', 'describeLoggingOptionsResponse_loggingOptions' - The current settings of the AWS IoT Events logging options.
+--
+-- 'httpStatus', 'describeLoggingOptionsResponse_httpStatus' - The response's http status code.
+newDescribeLoggingOptionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeLoggingOptionsResponse
+newDescribeLoggingOptionsResponse pHttpStatus_ =
+  DescribeLoggingOptionsResponse'
+    { loggingOptions =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The current settings of the AWS IoT Events logging options.
+describeLoggingOptionsResponse_loggingOptions :: Lens.Lens' DescribeLoggingOptionsResponse (Prelude.Maybe LoggingOptions)
+describeLoggingOptionsResponse_loggingOptions = Lens.lens (\DescribeLoggingOptionsResponse' {loggingOptions} -> loggingOptions) (\s@DescribeLoggingOptionsResponse' {} a -> s {loggingOptions = a} :: DescribeLoggingOptionsResponse)
+
+-- | The response's http status code.
+describeLoggingOptionsResponse_httpStatus :: Lens.Lens' DescribeLoggingOptionsResponse Prelude.Int
+describeLoggingOptionsResponse_httpStatus = Lens.lens (\DescribeLoggingOptionsResponse' {httpStatus} -> httpStatus) (\s@DescribeLoggingOptionsResponse' {} a -> s {httpStatus = a} :: DescribeLoggingOptionsResponse)
+
+instance
+  Prelude.NFData
+    DescribeLoggingOptionsResponse
+  where
+  rnf DescribeLoggingOptionsResponse' {..} =
+    Prelude.rnf loggingOptions
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTEvents/GetDetectorModelAnalysisResults.hs b/gen/Amazonka/IoTEvents/GetDetectorModelAnalysisResults.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/GetDetectorModelAnalysisResults.hs
@@ -0,0 +1,226 @@
+{-# 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.IoTEvents.GetDetectorModelAnalysisResults
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves one or more analysis results of the detector model.
+--
+-- After AWS IoT Events starts analyzing your detector model, you have up
+-- to 24 hours to retrieve the analysis results.
+module Amazonka.IoTEvents.GetDetectorModelAnalysisResults
+  ( -- * Creating a Request
+    GetDetectorModelAnalysisResults (..),
+    newGetDetectorModelAnalysisResults,
+
+    -- * Request Lenses
+    getDetectorModelAnalysisResults_maxResults,
+    getDetectorModelAnalysisResults_nextToken,
+    getDetectorModelAnalysisResults_analysisId,
+
+    -- * Destructuring the Response
+    GetDetectorModelAnalysisResultsResponse (..),
+    newGetDetectorModelAnalysisResultsResponse,
+
+    -- * Response Lenses
+    getDetectorModelAnalysisResultsResponse_analysisResults,
+    getDetectorModelAnalysisResultsResponse_nextToken,
+    getDetectorModelAnalysisResultsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDetectorModelAnalysisResults' smart constructor.
+data GetDetectorModelAnalysisResults = GetDetectorModelAnalysisResults'
+  { -- | The maximum number of results to be returned per request.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token that you can use to return the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the analysis result that you want to retrieve.
+    analysisId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDetectorModelAnalysisResults' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getDetectorModelAnalysisResults_maxResults' - The maximum number of results to be returned per request.
+--
+-- 'nextToken', 'getDetectorModelAnalysisResults_nextToken' - The token that you can use to return the next set of results.
+--
+-- 'analysisId', 'getDetectorModelAnalysisResults_analysisId' - The ID of the analysis result that you want to retrieve.
+newGetDetectorModelAnalysisResults ::
+  -- | 'analysisId'
+  Prelude.Text ->
+  GetDetectorModelAnalysisResults
+newGetDetectorModelAnalysisResults pAnalysisId_ =
+  GetDetectorModelAnalysisResults'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      analysisId = pAnalysisId_
+    }
+
+-- | The maximum number of results to be returned per request.
+getDetectorModelAnalysisResults_maxResults :: Lens.Lens' GetDetectorModelAnalysisResults (Prelude.Maybe Prelude.Int)
+getDetectorModelAnalysisResults_maxResults = Lens.lens (\GetDetectorModelAnalysisResults' {maxResults} -> maxResults) (\s@GetDetectorModelAnalysisResults' {} a -> s {maxResults = a} :: GetDetectorModelAnalysisResults)
+
+-- | The token that you can use to return the next set of results.
+getDetectorModelAnalysisResults_nextToken :: Lens.Lens' GetDetectorModelAnalysisResults (Prelude.Maybe Prelude.Text)
+getDetectorModelAnalysisResults_nextToken = Lens.lens (\GetDetectorModelAnalysisResults' {nextToken} -> nextToken) (\s@GetDetectorModelAnalysisResults' {} a -> s {nextToken = a} :: GetDetectorModelAnalysisResults)
+
+-- | The ID of the analysis result that you want to retrieve.
+getDetectorModelAnalysisResults_analysisId :: Lens.Lens' GetDetectorModelAnalysisResults Prelude.Text
+getDetectorModelAnalysisResults_analysisId = Lens.lens (\GetDetectorModelAnalysisResults' {analysisId} -> analysisId) (\s@GetDetectorModelAnalysisResults' {} a -> s {analysisId = a} :: GetDetectorModelAnalysisResults)
+
+instance
+  Core.AWSRequest
+    GetDetectorModelAnalysisResults
+  where
+  type
+    AWSResponse GetDetectorModelAnalysisResults =
+      GetDetectorModelAnalysisResultsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDetectorModelAnalysisResultsResponse'
+            Prelude.<$> ( x
+                            Data..?> "analysisResults"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetDetectorModelAnalysisResults
+  where
+  hashWithSalt
+    _salt
+    GetDetectorModelAnalysisResults' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` analysisId
+
+instance
+  Prelude.NFData
+    GetDetectorModelAnalysisResults
+  where
+  rnf GetDetectorModelAnalysisResults' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf analysisId
+
+instance
+  Data.ToHeaders
+    GetDetectorModelAnalysisResults
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetDetectorModelAnalysisResults where
+  toPath GetDetectorModelAnalysisResults' {..} =
+    Prelude.mconcat
+      [ "/analysis/detector-models/",
+        Data.toBS analysisId,
+        "/results"
+      ]
+
+instance Data.ToQuery GetDetectorModelAnalysisResults where
+  toQuery GetDetectorModelAnalysisResults' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newGetDetectorModelAnalysisResultsResponse' smart constructor.
+data GetDetectorModelAnalysisResultsResponse = GetDetectorModelAnalysisResultsResponse'
+  { -- | Contains information about one or more analysis results.
+    analysisResults :: Prelude.Maybe [AnalysisResult],
+    -- | The token that you can use to return the next set of results, or @null@
+    -- if there are no more 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 'GetDetectorModelAnalysisResultsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'analysisResults', 'getDetectorModelAnalysisResultsResponse_analysisResults' - Contains information about one or more analysis results.
+--
+-- 'nextToken', 'getDetectorModelAnalysisResultsResponse_nextToken' - The token that you can use to return the next set of results, or @null@
+-- if there are no more results.
+--
+-- 'httpStatus', 'getDetectorModelAnalysisResultsResponse_httpStatus' - The response's http status code.
+newGetDetectorModelAnalysisResultsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetDetectorModelAnalysisResultsResponse
+newGetDetectorModelAnalysisResultsResponse
+  pHttpStatus_ =
+    GetDetectorModelAnalysisResultsResponse'
+      { analysisResults =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Contains information about one or more analysis results.
+getDetectorModelAnalysisResultsResponse_analysisResults :: Lens.Lens' GetDetectorModelAnalysisResultsResponse (Prelude.Maybe [AnalysisResult])
+getDetectorModelAnalysisResultsResponse_analysisResults = Lens.lens (\GetDetectorModelAnalysisResultsResponse' {analysisResults} -> analysisResults) (\s@GetDetectorModelAnalysisResultsResponse' {} a -> s {analysisResults = a} :: GetDetectorModelAnalysisResultsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token that you can use to return the next set of results, or @null@
+-- if there are no more results.
+getDetectorModelAnalysisResultsResponse_nextToken :: Lens.Lens' GetDetectorModelAnalysisResultsResponse (Prelude.Maybe Prelude.Text)
+getDetectorModelAnalysisResultsResponse_nextToken = Lens.lens (\GetDetectorModelAnalysisResultsResponse' {nextToken} -> nextToken) (\s@GetDetectorModelAnalysisResultsResponse' {} a -> s {nextToken = a} :: GetDetectorModelAnalysisResultsResponse)
+
+-- | The response's http status code.
+getDetectorModelAnalysisResultsResponse_httpStatus :: Lens.Lens' GetDetectorModelAnalysisResultsResponse Prelude.Int
+getDetectorModelAnalysisResultsResponse_httpStatus = Lens.lens (\GetDetectorModelAnalysisResultsResponse' {httpStatus} -> httpStatus) (\s@GetDetectorModelAnalysisResultsResponse' {} a -> s {httpStatus = a} :: GetDetectorModelAnalysisResultsResponse)
+
+instance
+  Prelude.NFData
+    GetDetectorModelAnalysisResultsResponse
+  where
+  rnf GetDetectorModelAnalysisResultsResponse' {..} =
+    Prelude.rnf analysisResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTEvents/Lens.hs b/gen/Amazonka/IoTEvents/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Lens.hs
@@ -0,0 +1,614 @@
+{-# 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.IoTEvents.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.IoTEvents.Lens
+  ( -- * Operations
+
+    -- ** CreateAlarmModel
+    createAlarmModel_alarmCapabilities,
+    createAlarmModel_alarmEventActions,
+    createAlarmModel_alarmModelDescription,
+    createAlarmModel_alarmNotification,
+    createAlarmModel_key,
+    createAlarmModel_severity,
+    createAlarmModel_tags,
+    createAlarmModel_alarmModelName,
+    createAlarmModel_roleArn,
+    createAlarmModel_alarmRule,
+    createAlarmModelResponse_alarmModelArn,
+    createAlarmModelResponse_alarmModelVersion,
+    createAlarmModelResponse_creationTime,
+    createAlarmModelResponse_lastUpdateTime,
+    createAlarmModelResponse_status,
+    createAlarmModelResponse_httpStatus,
+
+    -- ** CreateDetectorModel
+    createDetectorModel_detectorModelDescription,
+    createDetectorModel_evaluationMethod,
+    createDetectorModel_key,
+    createDetectorModel_tags,
+    createDetectorModel_detectorModelName,
+    createDetectorModel_detectorModelDefinition,
+    createDetectorModel_roleArn,
+    createDetectorModelResponse_detectorModelConfiguration,
+    createDetectorModelResponse_httpStatus,
+
+    -- ** CreateInput
+    createInput_inputDescription,
+    createInput_tags,
+    createInput_inputName,
+    createInput_inputDefinition,
+    createInputResponse_inputConfiguration,
+    createInputResponse_httpStatus,
+
+    -- ** DeleteAlarmModel
+    deleteAlarmModel_alarmModelName,
+    deleteAlarmModelResponse_httpStatus,
+
+    -- ** DeleteDetectorModel
+    deleteDetectorModel_detectorModelName,
+    deleteDetectorModelResponse_httpStatus,
+
+    -- ** DeleteInput
+    deleteInput_inputName,
+    deleteInputResponse_httpStatus,
+
+    -- ** DescribeAlarmModel
+    describeAlarmModel_alarmModelVersion,
+    describeAlarmModel_alarmModelName,
+    describeAlarmModelResponse_alarmCapabilities,
+    describeAlarmModelResponse_alarmEventActions,
+    describeAlarmModelResponse_alarmModelArn,
+    describeAlarmModelResponse_alarmModelDescription,
+    describeAlarmModelResponse_alarmModelName,
+    describeAlarmModelResponse_alarmModelVersion,
+    describeAlarmModelResponse_alarmNotification,
+    describeAlarmModelResponse_alarmRule,
+    describeAlarmModelResponse_creationTime,
+    describeAlarmModelResponse_key,
+    describeAlarmModelResponse_lastUpdateTime,
+    describeAlarmModelResponse_roleArn,
+    describeAlarmModelResponse_severity,
+    describeAlarmModelResponse_status,
+    describeAlarmModelResponse_statusMessage,
+    describeAlarmModelResponse_httpStatus,
+
+    -- ** DescribeDetectorModel
+    describeDetectorModel_detectorModelVersion,
+    describeDetectorModel_detectorModelName,
+    describeDetectorModelResponse_detectorModel,
+    describeDetectorModelResponse_httpStatus,
+
+    -- ** DescribeDetectorModelAnalysis
+    describeDetectorModelAnalysis_analysisId,
+    describeDetectorModelAnalysisResponse_status,
+    describeDetectorModelAnalysisResponse_httpStatus,
+
+    -- ** DescribeInput
+    describeInput_inputName,
+    describeInputResponse_input,
+    describeInputResponse_httpStatus,
+
+    -- ** DescribeLoggingOptions
+    describeLoggingOptionsResponse_loggingOptions,
+    describeLoggingOptionsResponse_httpStatus,
+
+    -- ** GetDetectorModelAnalysisResults
+    getDetectorModelAnalysisResults_maxResults,
+    getDetectorModelAnalysisResults_nextToken,
+    getDetectorModelAnalysisResults_analysisId,
+    getDetectorModelAnalysisResultsResponse_analysisResults,
+    getDetectorModelAnalysisResultsResponse_nextToken,
+    getDetectorModelAnalysisResultsResponse_httpStatus,
+
+    -- ** ListAlarmModelVersions
+    listAlarmModelVersions_maxResults,
+    listAlarmModelVersions_nextToken,
+    listAlarmModelVersions_alarmModelName,
+    listAlarmModelVersionsResponse_alarmModelVersionSummaries,
+    listAlarmModelVersionsResponse_nextToken,
+    listAlarmModelVersionsResponse_httpStatus,
+
+    -- ** ListAlarmModels
+    listAlarmModels_maxResults,
+    listAlarmModels_nextToken,
+    listAlarmModelsResponse_alarmModelSummaries,
+    listAlarmModelsResponse_nextToken,
+    listAlarmModelsResponse_httpStatus,
+
+    -- ** ListDetectorModelVersions
+    listDetectorModelVersions_maxResults,
+    listDetectorModelVersions_nextToken,
+    listDetectorModelVersions_detectorModelName,
+    listDetectorModelVersionsResponse_detectorModelVersionSummaries,
+    listDetectorModelVersionsResponse_nextToken,
+    listDetectorModelVersionsResponse_httpStatus,
+
+    -- ** ListDetectorModels
+    listDetectorModels_maxResults,
+    listDetectorModels_nextToken,
+    listDetectorModelsResponse_detectorModelSummaries,
+    listDetectorModelsResponse_nextToken,
+    listDetectorModelsResponse_httpStatus,
+
+    -- ** ListInputRoutings
+    listInputRoutings_maxResults,
+    listInputRoutings_nextToken,
+    listInputRoutings_inputIdentifier,
+    listInputRoutingsResponse_nextToken,
+    listInputRoutingsResponse_routedResources,
+    listInputRoutingsResponse_httpStatus,
+
+    -- ** ListInputs
+    listInputs_maxResults,
+    listInputs_nextToken,
+    listInputsResponse_inputSummaries,
+    listInputsResponse_nextToken,
+    listInputsResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** PutLoggingOptions
+    putLoggingOptions_loggingOptions,
+
+    -- ** StartDetectorModelAnalysis
+    startDetectorModelAnalysis_detectorModelDefinition,
+    startDetectorModelAnalysisResponse_analysisId,
+    startDetectorModelAnalysisResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateAlarmModel
+    updateAlarmModel_alarmCapabilities,
+    updateAlarmModel_alarmEventActions,
+    updateAlarmModel_alarmModelDescription,
+    updateAlarmModel_alarmNotification,
+    updateAlarmModel_severity,
+    updateAlarmModel_alarmModelName,
+    updateAlarmModel_roleArn,
+    updateAlarmModel_alarmRule,
+    updateAlarmModelResponse_alarmModelArn,
+    updateAlarmModelResponse_alarmModelVersion,
+    updateAlarmModelResponse_creationTime,
+    updateAlarmModelResponse_lastUpdateTime,
+    updateAlarmModelResponse_status,
+    updateAlarmModelResponse_httpStatus,
+
+    -- ** UpdateDetectorModel
+    updateDetectorModel_detectorModelDescription,
+    updateDetectorModel_evaluationMethod,
+    updateDetectorModel_detectorModelName,
+    updateDetectorModel_detectorModelDefinition,
+    updateDetectorModel_roleArn,
+    updateDetectorModelResponse_detectorModelConfiguration,
+    updateDetectorModelResponse_httpStatus,
+
+    -- ** UpdateInput
+    updateInput_inputDescription,
+    updateInput_inputName,
+    updateInput_inputDefinition,
+    updateInputResponse_inputConfiguration,
+    updateInputResponse_httpStatus,
+
+    -- * Types
+
+    -- ** AcknowledgeFlow
+    acknowledgeFlow_enabled,
+
+    -- ** Action
+    action_clearTimer,
+    action_dynamoDB,
+    action_dynamoDBv2,
+    action_firehose,
+    action_iotEvents,
+    action_iotSiteWise,
+    action_iotTopicPublish,
+    action_lambda,
+    action_resetTimer,
+    action_setTimer,
+    action_setVariable,
+    action_sns,
+    action_sqs,
+
+    -- ** AlarmAction
+    alarmAction_dynamoDB,
+    alarmAction_dynamoDBv2,
+    alarmAction_firehose,
+    alarmAction_iotEvents,
+    alarmAction_iotSiteWise,
+    alarmAction_iotTopicPublish,
+    alarmAction_lambda,
+    alarmAction_sns,
+    alarmAction_sqs,
+
+    -- ** AlarmCapabilities
+    alarmCapabilities_acknowledgeFlow,
+    alarmCapabilities_initializationConfiguration,
+
+    -- ** AlarmEventActions
+    alarmEventActions_alarmActions,
+
+    -- ** AlarmModelSummary
+    alarmModelSummary_alarmModelDescription,
+    alarmModelSummary_alarmModelName,
+    alarmModelSummary_creationTime,
+
+    -- ** AlarmModelVersionSummary
+    alarmModelVersionSummary_alarmModelArn,
+    alarmModelVersionSummary_alarmModelName,
+    alarmModelVersionSummary_alarmModelVersion,
+    alarmModelVersionSummary_creationTime,
+    alarmModelVersionSummary_lastUpdateTime,
+    alarmModelVersionSummary_roleArn,
+    alarmModelVersionSummary_status,
+    alarmModelVersionSummary_statusMessage,
+
+    -- ** AlarmNotification
+    alarmNotification_notificationActions,
+
+    -- ** AlarmRule
+    alarmRule_simpleRule,
+
+    -- ** AnalysisResult
+    analysisResult_level,
+    analysisResult_locations,
+    analysisResult_message,
+    analysisResult_type,
+
+    -- ** AnalysisResultLocation
+    analysisResultLocation_path,
+
+    -- ** AssetPropertyTimestamp
+    assetPropertyTimestamp_offsetInNanos,
+    assetPropertyTimestamp_timeInSeconds,
+
+    -- ** AssetPropertyValue
+    assetPropertyValue_quality,
+    assetPropertyValue_timestamp,
+    assetPropertyValue_value,
+
+    -- ** AssetPropertyVariant
+    assetPropertyVariant_booleanValue,
+    assetPropertyVariant_doubleValue,
+    assetPropertyVariant_integerValue,
+    assetPropertyVariant_stringValue,
+
+    -- ** Attribute
+    attribute_jsonPath,
+
+    -- ** ClearTimerAction
+    clearTimerAction_timerName,
+
+    -- ** DetectorDebugOption
+    detectorDebugOption_keyValue,
+    detectorDebugOption_detectorModelName,
+
+    -- ** DetectorModel
+    detectorModel_detectorModelConfiguration,
+    detectorModel_detectorModelDefinition,
+
+    -- ** DetectorModelConfiguration
+    detectorModelConfiguration_creationTime,
+    detectorModelConfiguration_detectorModelArn,
+    detectorModelConfiguration_detectorModelDescription,
+    detectorModelConfiguration_detectorModelName,
+    detectorModelConfiguration_detectorModelVersion,
+    detectorModelConfiguration_evaluationMethod,
+    detectorModelConfiguration_key,
+    detectorModelConfiguration_lastUpdateTime,
+    detectorModelConfiguration_roleArn,
+    detectorModelConfiguration_status,
+
+    -- ** DetectorModelDefinition
+    detectorModelDefinition_states,
+    detectorModelDefinition_initialStateName,
+
+    -- ** DetectorModelSummary
+    detectorModelSummary_creationTime,
+    detectorModelSummary_detectorModelDescription,
+    detectorModelSummary_detectorModelName,
+
+    -- ** DetectorModelVersionSummary
+    detectorModelVersionSummary_creationTime,
+    detectorModelVersionSummary_detectorModelArn,
+    detectorModelVersionSummary_detectorModelName,
+    detectorModelVersionSummary_detectorModelVersion,
+    detectorModelVersionSummary_evaluationMethod,
+    detectorModelVersionSummary_lastUpdateTime,
+    detectorModelVersionSummary_roleArn,
+    detectorModelVersionSummary_status,
+
+    -- ** DynamoDBAction
+    dynamoDBAction_hashKeyType,
+    dynamoDBAction_operation,
+    dynamoDBAction_payload,
+    dynamoDBAction_payloadField,
+    dynamoDBAction_rangeKeyField,
+    dynamoDBAction_rangeKeyType,
+    dynamoDBAction_rangeKeyValue,
+    dynamoDBAction_hashKeyField,
+    dynamoDBAction_hashKeyValue,
+    dynamoDBAction_tableName,
+
+    -- ** DynamoDBv2Action
+    dynamoDBv2Action_payload,
+    dynamoDBv2Action_tableName,
+
+    -- ** EmailConfiguration
+    emailConfiguration_content,
+    emailConfiguration_from,
+    emailConfiguration_recipients,
+
+    -- ** EmailContent
+    emailContent_additionalMessage,
+    emailContent_subject,
+
+    -- ** EmailRecipients
+    emailRecipients_to,
+
+    -- ** Event
+    event_actions,
+    event_condition,
+    event_eventName,
+
+    -- ** FirehoseAction
+    firehoseAction_payload,
+    firehoseAction_separator,
+    firehoseAction_deliveryStreamName,
+
+    -- ** InitializationConfiguration
+    initializationConfiguration_disabledOnInitialization,
+
+    -- ** Input
+    input_inputConfiguration,
+    input_inputDefinition,
+
+    -- ** InputConfiguration
+    inputConfiguration_inputDescription,
+    inputConfiguration_inputName,
+    inputConfiguration_inputArn,
+    inputConfiguration_creationTime,
+    inputConfiguration_lastUpdateTime,
+    inputConfiguration_status,
+
+    -- ** InputDefinition
+    inputDefinition_attributes,
+
+    -- ** InputIdentifier
+    inputIdentifier_iotEventsInputIdentifier,
+    inputIdentifier_iotSiteWiseInputIdentifier,
+
+    -- ** InputSummary
+    inputSummary_creationTime,
+    inputSummary_inputArn,
+    inputSummary_inputDescription,
+    inputSummary_inputName,
+    inputSummary_lastUpdateTime,
+    inputSummary_status,
+
+    -- ** IotEventsAction
+    iotEventsAction_payload,
+    iotEventsAction_inputName,
+
+    -- ** IotEventsInputIdentifier
+    iotEventsInputIdentifier_inputName,
+
+    -- ** IotSiteWiseAction
+    iotSiteWiseAction_assetId,
+    iotSiteWiseAction_entryId,
+    iotSiteWiseAction_propertyAlias,
+    iotSiteWiseAction_propertyId,
+    iotSiteWiseAction_propertyValue,
+
+    -- ** IotSiteWiseAssetModelPropertyIdentifier
+    iotSiteWiseAssetModelPropertyIdentifier_assetModelId,
+    iotSiteWiseAssetModelPropertyIdentifier_propertyId,
+
+    -- ** IotSiteWiseInputIdentifier
+    iotSiteWiseInputIdentifier_iotSiteWiseAssetModelPropertyIdentifier,
+
+    -- ** IotTopicPublishAction
+    iotTopicPublishAction_payload,
+    iotTopicPublishAction_mqttTopic,
+
+    -- ** LambdaAction
+    lambdaAction_payload,
+    lambdaAction_functionArn,
+
+    -- ** LoggingOptions
+    loggingOptions_detectorDebugOptions,
+    loggingOptions_roleArn,
+    loggingOptions_level,
+    loggingOptions_enabled,
+
+    -- ** NotificationAction
+    notificationAction_emailConfigurations,
+    notificationAction_smsConfigurations,
+    notificationAction_action,
+
+    -- ** NotificationTargetActions
+    notificationTargetActions_lambdaAction,
+
+    -- ** OnEnterLifecycle
+    onEnterLifecycle_events,
+
+    -- ** OnExitLifecycle
+    onExitLifecycle_events,
+
+    -- ** OnInputLifecycle
+    onInputLifecycle_events,
+    onInputLifecycle_transitionEvents,
+
+    -- ** Payload
+    payload_contentExpression,
+    payload_type,
+
+    -- ** RecipientDetail
+    recipientDetail_ssoIdentity,
+
+    -- ** ResetTimerAction
+    resetTimerAction_timerName,
+
+    -- ** RoutedResource
+    routedResource_arn,
+    routedResource_name,
+
+    -- ** SMSConfiguration
+    sMSConfiguration_additionalMessage,
+    sMSConfiguration_senderId,
+    sMSConfiguration_recipients,
+
+    -- ** SNSTopicPublishAction
+    sNSTopicPublishAction_payload,
+    sNSTopicPublishAction_targetArn,
+
+    -- ** SSOIdentity
+    sSOIdentity_userId,
+    sSOIdentity_identityStoreId,
+
+    -- ** SetTimerAction
+    setTimerAction_durationExpression,
+    setTimerAction_seconds,
+    setTimerAction_timerName,
+
+    -- ** SetVariableAction
+    setVariableAction_variableName,
+    setVariableAction_value,
+
+    -- ** SimpleRule
+    simpleRule_inputProperty,
+    simpleRule_comparisonOperator,
+    simpleRule_threshold,
+
+    -- ** SqsAction
+    sqsAction_payload,
+    sqsAction_useBase64,
+    sqsAction_queueUrl,
+
+    -- ** State
+    state_onEnter,
+    state_onExit,
+    state_onInput,
+    state_stateName,
+
+    -- ** Tag
+    tag_key,
+    tag_value,
+
+    -- ** TransitionEvent
+    transitionEvent_actions,
+    transitionEvent_eventName,
+    transitionEvent_condition,
+    transitionEvent_nextState,
+  )
+where
+
+import Amazonka.IoTEvents.CreateAlarmModel
+import Amazonka.IoTEvents.CreateDetectorModel
+import Amazonka.IoTEvents.CreateInput
+import Amazonka.IoTEvents.DeleteAlarmModel
+import Amazonka.IoTEvents.DeleteDetectorModel
+import Amazonka.IoTEvents.DeleteInput
+import Amazonka.IoTEvents.DescribeAlarmModel
+import Amazonka.IoTEvents.DescribeDetectorModel
+import Amazonka.IoTEvents.DescribeDetectorModelAnalysis
+import Amazonka.IoTEvents.DescribeInput
+import Amazonka.IoTEvents.DescribeLoggingOptions
+import Amazonka.IoTEvents.GetDetectorModelAnalysisResults
+import Amazonka.IoTEvents.ListAlarmModelVersions
+import Amazonka.IoTEvents.ListAlarmModels
+import Amazonka.IoTEvents.ListDetectorModelVersions
+import Amazonka.IoTEvents.ListDetectorModels
+import Amazonka.IoTEvents.ListInputRoutings
+import Amazonka.IoTEvents.ListInputs
+import Amazonka.IoTEvents.ListTagsForResource
+import Amazonka.IoTEvents.PutLoggingOptions
+import Amazonka.IoTEvents.StartDetectorModelAnalysis
+import Amazonka.IoTEvents.TagResource
+import Amazonka.IoTEvents.Types.AcknowledgeFlow
+import Amazonka.IoTEvents.Types.Action
+import Amazonka.IoTEvents.Types.AlarmAction
+import Amazonka.IoTEvents.Types.AlarmCapabilities
+import Amazonka.IoTEvents.Types.AlarmEventActions
+import Amazonka.IoTEvents.Types.AlarmModelSummary
+import Amazonka.IoTEvents.Types.AlarmModelVersionSummary
+import Amazonka.IoTEvents.Types.AlarmNotification
+import Amazonka.IoTEvents.Types.AlarmRule
+import Amazonka.IoTEvents.Types.AnalysisResult
+import Amazonka.IoTEvents.Types.AnalysisResultLocation
+import Amazonka.IoTEvents.Types.AssetPropertyTimestamp
+import Amazonka.IoTEvents.Types.AssetPropertyValue
+import Amazonka.IoTEvents.Types.AssetPropertyVariant
+import Amazonka.IoTEvents.Types.Attribute
+import Amazonka.IoTEvents.Types.ClearTimerAction
+import Amazonka.IoTEvents.Types.DetectorDebugOption
+import Amazonka.IoTEvents.Types.DetectorModel
+import Amazonka.IoTEvents.Types.DetectorModelConfiguration
+import Amazonka.IoTEvents.Types.DetectorModelDefinition
+import Amazonka.IoTEvents.Types.DetectorModelSummary
+import Amazonka.IoTEvents.Types.DetectorModelVersionSummary
+import Amazonka.IoTEvents.Types.DynamoDBAction
+import Amazonka.IoTEvents.Types.DynamoDBv2Action
+import Amazonka.IoTEvents.Types.EmailConfiguration
+import Amazonka.IoTEvents.Types.EmailContent
+import Amazonka.IoTEvents.Types.EmailRecipients
+import Amazonka.IoTEvents.Types.Event
+import Amazonka.IoTEvents.Types.FirehoseAction
+import Amazonka.IoTEvents.Types.InitializationConfiguration
+import Amazonka.IoTEvents.Types.Input
+import Amazonka.IoTEvents.Types.InputConfiguration
+import Amazonka.IoTEvents.Types.InputDefinition
+import Amazonka.IoTEvents.Types.InputIdentifier
+import Amazonka.IoTEvents.Types.InputSummary
+import Amazonka.IoTEvents.Types.IotEventsAction
+import Amazonka.IoTEvents.Types.IotEventsInputIdentifier
+import Amazonka.IoTEvents.Types.IotSiteWiseAction
+import Amazonka.IoTEvents.Types.IotSiteWiseAssetModelPropertyIdentifier
+import Amazonka.IoTEvents.Types.IotSiteWiseInputIdentifier
+import Amazonka.IoTEvents.Types.IotTopicPublishAction
+import Amazonka.IoTEvents.Types.LambdaAction
+import Amazonka.IoTEvents.Types.LoggingOptions
+import Amazonka.IoTEvents.Types.NotificationAction
+import Amazonka.IoTEvents.Types.NotificationTargetActions
+import Amazonka.IoTEvents.Types.OnEnterLifecycle
+import Amazonka.IoTEvents.Types.OnExitLifecycle
+import Amazonka.IoTEvents.Types.OnInputLifecycle
+import Amazonka.IoTEvents.Types.Payload
+import Amazonka.IoTEvents.Types.RecipientDetail
+import Amazonka.IoTEvents.Types.ResetTimerAction
+import Amazonka.IoTEvents.Types.RoutedResource
+import Amazonka.IoTEvents.Types.SMSConfiguration
+import Amazonka.IoTEvents.Types.SNSTopicPublishAction
+import Amazonka.IoTEvents.Types.SSOIdentity
+import Amazonka.IoTEvents.Types.SetTimerAction
+import Amazonka.IoTEvents.Types.SetVariableAction
+import Amazonka.IoTEvents.Types.SimpleRule
+import Amazonka.IoTEvents.Types.SqsAction
+import Amazonka.IoTEvents.Types.State
+import Amazonka.IoTEvents.Types.Tag
+import Amazonka.IoTEvents.Types.TransitionEvent
+import Amazonka.IoTEvents.UntagResource
+import Amazonka.IoTEvents.UpdateAlarmModel
+import Amazonka.IoTEvents.UpdateDetectorModel
+import Amazonka.IoTEvents.UpdateInput
diff --git a/gen/Amazonka/IoTEvents/ListAlarmModelVersions.hs b/gen/Amazonka/IoTEvents/ListAlarmModelVersions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/ListAlarmModelVersions.hs
@@ -0,0 +1,209 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.ListAlarmModelVersions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all the versions of an alarm model. The operation returns only the
+-- metadata associated with each alarm model version.
+module Amazonka.IoTEvents.ListAlarmModelVersions
+  ( -- * Creating a Request
+    ListAlarmModelVersions (..),
+    newListAlarmModelVersions,
+
+    -- * Request Lenses
+    listAlarmModelVersions_maxResults,
+    listAlarmModelVersions_nextToken,
+    listAlarmModelVersions_alarmModelName,
+
+    -- * Destructuring the Response
+    ListAlarmModelVersionsResponse (..),
+    newListAlarmModelVersionsResponse,
+
+    -- * Response Lenses
+    listAlarmModelVersionsResponse_alarmModelVersionSummaries,
+    listAlarmModelVersionsResponse_nextToken,
+    listAlarmModelVersionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListAlarmModelVersions' smart constructor.
+data ListAlarmModelVersions = ListAlarmModelVersions'
+  { -- | The maximum number of results to be returned per request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token that you can use to return the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the alarm model.
+    alarmModelName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAlarmModelVersions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listAlarmModelVersions_maxResults' - The maximum number of results to be returned per request.
+--
+-- 'nextToken', 'listAlarmModelVersions_nextToken' - The token that you can use to return the next set of results.
+--
+-- 'alarmModelName', 'listAlarmModelVersions_alarmModelName' - The name of the alarm model.
+newListAlarmModelVersions ::
+  -- | 'alarmModelName'
+  Prelude.Text ->
+  ListAlarmModelVersions
+newListAlarmModelVersions pAlarmModelName_ =
+  ListAlarmModelVersions'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      alarmModelName = pAlarmModelName_
+    }
+
+-- | The maximum number of results to be returned per request.
+listAlarmModelVersions_maxResults :: Lens.Lens' ListAlarmModelVersions (Prelude.Maybe Prelude.Natural)
+listAlarmModelVersions_maxResults = Lens.lens (\ListAlarmModelVersions' {maxResults} -> maxResults) (\s@ListAlarmModelVersions' {} a -> s {maxResults = a} :: ListAlarmModelVersions)
+
+-- | The token that you can use to return the next set of results.
+listAlarmModelVersions_nextToken :: Lens.Lens' ListAlarmModelVersions (Prelude.Maybe Prelude.Text)
+listAlarmModelVersions_nextToken = Lens.lens (\ListAlarmModelVersions' {nextToken} -> nextToken) (\s@ListAlarmModelVersions' {} a -> s {nextToken = a} :: ListAlarmModelVersions)
+
+-- | The name of the alarm model.
+listAlarmModelVersions_alarmModelName :: Lens.Lens' ListAlarmModelVersions Prelude.Text
+listAlarmModelVersions_alarmModelName = Lens.lens (\ListAlarmModelVersions' {alarmModelName} -> alarmModelName) (\s@ListAlarmModelVersions' {} a -> s {alarmModelName = a} :: ListAlarmModelVersions)
+
+instance Core.AWSRequest ListAlarmModelVersions where
+  type
+    AWSResponse ListAlarmModelVersions =
+      ListAlarmModelVersionsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAlarmModelVersionsResponse'
+            Prelude.<$> ( x
+                            Data..?> "alarmModelVersionSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListAlarmModelVersions where
+  hashWithSalt _salt ListAlarmModelVersions' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` alarmModelName
+
+instance Prelude.NFData ListAlarmModelVersions where
+  rnf ListAlarmModelVersions' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf alarmModelName
+
+instance Data.ToHeaders ListAlarmModelVersions where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ListAlarmModelVersions where
+  toPath ListAlarmModelVersions' {..} =
+    Prelude.mconcat
+      [ "/alarm-models/",
+        Data.toBS alarmModelName,
+        "/versions"
+      ]
+
+instance Data.ToQuery ListAlarmModelVersions where
+  toQuery ListAlarmModelVersions' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListAlarmModelVersionsResponse' smart constructor.
+data ListAlarmModelVersionsResponse = ListAlarmModelVersionsResponse'
+  { -- | A list that summarizes each alarm model version.
+    alarmModelVersionSummaries :: Prelude.Maybe [AlarmModelVersionSummary],
+    -- | The token that you can use to return the next set of results, or @null@
+    -- if there are no more 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 'ListAlarmModelVersionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'alarmModelVersionSummaries', 'listAlarmModelVersionsResponse_alarmModelVersionSummaries' - A list that summarizes each alarm model version.
+--
+-- 'nextToken', 'listAlarmModelVersionsResponse_nextToken' - The token that you can use to return the next set of results, or @null@
+-- if there are no more results.
+--
+-- 'httpStatus', 'listAlarmModelVersionsResponse_httpStatus' - The response's http status code.
+newListAlarmModelVersionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAlarmModelVersionsResponse
+newListAlarmModelVersionsResponse pHttpStatus_ =
+  ListAlarmModelVersionsResponse'
+    { alarmModelVersionSummaries =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list that summarizes each alarm model version.
+listAlarmModelVersionsResponse_alarmModelVersionSummaries :: Lens.Lens' ListAlarmModelVersionsResponse (Prelude.Maybe [AlarmModelVersionSummary])
+listAlarmModelVersionsResponse_alarmModelVersionSummaries = Lens.lens (\ListAlarmModelVersionsResponse' {alarmModelVersionSummaries} -> alarmModelVersionSummaries) (\s@ListAlarmModelVersionsResponse' {} a -> s {alarmModelVersionSummaries = a} :: ListAlarmModelVersionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token that you can use to return the next set of results, or @null@
+-- if there are no more results.
+listAlarmModelVersionsResponse_nextToken :: Lens.Lens' ListAlarmModelVersionsResponse (Prelude.Maybe Prelude.Text)
+listAlarmModelVersionsResponse_nextToken = Lens.lens (\ListAlarmModelVersionsResponse' {nextToken} -> nextToken) (\s@ListAlarmModelVersionsResponse' {} a -> s {nextToken = a} :: ListAlarmModelVersionsResponse)
+
+-- | The response's http status code.
+listAlarmModelVersionsResponse_httpStatus :: Lens.Lens' ListAlarmModelVersionsResponse Prelude.Int
+listAlarmModelVersionsResponse_httpStatus = Lens.lens (\ListAlarmModelVersionsResponse' {httpStatus} -> httpStatus) (\s@ListAlarmModelVersionsResponse' {} a -> s {httpStatus = a} :: ListAlarmModelVersionsResponse)
+
+instance
+  Prelude.NFData
+    ListAlarmModelVersionsResponse
+  where
+  rnf ListAlarmModelVersionsResponse' {..} =
+    Prelude.rnf alarmModelVersionSummaries
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTEvents/ListAlarmModels.hs b/gen/Amazonka/IoTEvents/ListAlarmModels.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/ListAlarmModels.hs
@@ -0,0 +1,186 @@
+{-# 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.IoTEvents.ListAlarmModels
+-- 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 alarm models that you created. The operation returns only the
+-- metadata associated with each alarm model.
+module Amazonka.IoTEvents.ListAlarmModels
+  ( -- * Creating a Request
+    ListAlarmModels (..),
+    newListAlarmModels,
+
+    -- * Request Lenses
+    listAlarmModels_maxResults,
+    listAlarmModels_nextToken,
+
+    -- * Destructuring the Response
+    ListAlarmModelsResponse (..),
+    newListAlarmModelsResponse,
+
+    -- * Response Lenses
+    listAlarmModelsResponse_alarmModelSummaries,
+    listAlarmModelsResponse_nextToken,
+    listAlarmModelsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListAlarmModels' smart constructor.
+data ListAlarmModels = ListAlarmModels'
+  { -- | The maximum number of results to be returned per request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token that you can use to return the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAlarmModels' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listAlarmModels_maxResults' - The maximum number of results to be returned per request.
+--
+-- 'nextToken', 'listAlarmModels_nextToken' - The token that you can use to return the next set of results.
+newListAlarmModels ::
+  ListAlarmModels
+newListAlarmModels =
+  ListAlarmModels'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results to be returned per request.
+listAlarmModels_maxResults :: Lens.Lens' ListAlarmModels (Prelude.Maybe Prelude.Natural)
+listAlarmModels_maxResults = Lens.lens (\ListAlarmModels' {maxResults} -> maxResults) (\s@ListAlarmModels' {} a -> s {maxResults = a} :: ListAlarmModels)
+
+-- | The token that you can use to return the next set of results.
+listAlarmModels_nextToken :: Lens.Lens' ListAlarmModels (Prelude.Maybe Prelude.Text)
+listAlarmModels_nextToken = Lens.lens (\ListAlarmModels' {nextToken} -> nextToken) (\s@ListAlarmModels' {} a -> s {nextToken = a} :: ListAlarmModels)
+
+instance Core.AWSRequest ListAlarmModels where
+  type
+    AWSResponse ListAlarmModels =
+      ListAlarmModelsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAlarmModelsResponse'
+            Prelude.<$> ( x
+                            Data..?> "alarmModelSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListAlarmModels where
+  hashWithSalt _salt ListAlarmModels' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListAlarmModels where
+  rnf ListAlarmModels' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListAlarmModels where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ListAlarmModels where
+  toPath = Prelude.const "/alarm-models"
+
+instance Data.ToQuery ListAlarmModels where
+  toQuery ListAlarmModels' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListAlarmModelsResponse' smart constructor.
+data ListAlarmModelsResponse = ListAlarmModelsResponse'
+  { -- | A list that summarizes each alarm model.
+    alarmModelSummaries :: Prelude.Maybe [AlarmModelSummary],
+    -- | The token that you can use to return the next set of results, or @null@
+    -- if there are no more 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 'ListAlarmModelsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'alarmModelSummaries', 'listAlarmModelsResponse_alarmModelSummaries' - A list that summarizes each alarm model.
+--
+-- 'nextToken', 'listAlarmModelsResponse_nextToken' - The token that you can use to return the next set of results, or @null@
+-- if there are no more results.
+--
+-- 'httpStatus', 'listAlarmModelsResponse_httpStatus' - The response's http status code.
+newListAlarmModelsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAlarmModelsResponse
+newListAlarmModelsResponse pHttpStatus_ =
+  ListAlarmModelsResponse'
+    { alarmModelSummaries =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list that summarizes each alarm model.
+listAlarmModelsResponse_alarmModelSummaries :: Lens.Lens' ListAlarmModelsResponse (Prelude.Maybe [AlarmModelSummary])
+listAlarmModelsResponse_alarmModelSummaries = Lens.lens (\ListAlarmModelsResponse' {alarmModelSummaries} -> alarmModelSummaries) (\s@ListAlarmModelsResponse' {} a -> s {alarmModelSummaries = a} :: ListAlarmModelsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token that you can use to return the next set of results, or @null@
+-- if there are no more results.
+listAlarmModelsResponse_nextToken :: Lens.Lens' ListAlarmModelsResponse (Prelude.Maybe Prelude.Text)
+listAlarmModelsResponse_nextToken = Lens.lens (\ListAlarmModelsResponse' {nextToken} -> nextToken) (\s@ListAlarmModelsResponse' {} a -> s {nextToken = a} :: ListAlarmModelsResponse)
+
+-- | The response's http status code.
+listAlarmModelsResponse_httpStatus :: Lens.Lens' ListAlarmModelsResponse Prelude.Int
+listAlarmModelsResponse_httpStatus = Lens.lens (\ListAlarmModelsResponse' {httpStatus} -> httpStatus) (\s@ListAlarmModelsResponse' {} a -> s {httpStatus = a} :: ListAlarmModelsResponse)
+
+instance Prelude.NFData ListAlarmModelsResponse where
+  rnf ListAlarmModelsResponse' {..} =
+    Prelude.rnf alarmModelSummaries
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTEvents/ListDetectorModelVersions.hs b/gen/Amazonka/IoTEvents/ListDetectorModelVersions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/ListDetectorModelVersions.hs
@@ -0,0 +1,209 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.ListDetectorModelVersions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all the versions of a detector model. Only the metadata associated
+-- with each detector model version is returned.
+module Amazonka.IoTEvents.ListDetectorModelVersions
+  ( -- * Creating a Request
+    ListDetectorModelVersions (..),
+    newListDetectorModelVersions,
+
+    -- * Request Lenses
+    listDetectorModelVersions_maxResults,
+    listDetectorModelVersions_nextToken,
+    listDetectorModelVersions_detectorModelName,
+
+    -- * Destructuring the Response
+    ListDetectorModelVersionsResponse (..),
+    newListDetectorModelVersionsResponse,
+
+    -- * Response Lenses
+    listDetectorModelVersionsResponse_detectorModelVersionSummaries,
+    listDetectorModelVersionsResponse_nextToken,
+    listDetectorModelVersionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListDetectorModelVersions' smart constructor.
+data ListDetectorModelVersions = ListDetectorModelVersions'
+  { -- | The maximum number of results to be returned per request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token that you can use to return the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the detector model whose versions are returned.
+    detectorModelName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDetectorModelVersions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDetectorModelVersions_maxResults' - The maximum number of results to be returned per request.
+--
+-- 'nextToken', 'listDetectorModelVersions_nextToken' - The token that you can use to return the next set of results.
+--
+-- 'detectorModelName', 'listDetectorModelVersions_detectorModelName' - The name of the detector model whose versions are returned.
+newListDetectorModelVersions ::
+  -- | 'detectorModelName'
+  Prelude.Text ->
+  ListDetectorModelVersions
+newListDetectorModelVersions pDetectorModelName_ =
+  ListDetectorModelVersions'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      detectorModelName = pDetectorModelName_
+    }
+
+-- | The maximum number of results to be returned per request.
+listDetectorModelVersions_maxResults :: Lens.Lens' ListDetectorModelVersions (Prelude.Maybe Prelude.Natural)
+listDetectorModelVersions_maxResults = Lens.lens (\ListDetectorModelVersions' {maxResults} -> maxResults) (\s@ListDetectorModelVersions' {} a -> s {maxResults = a} :: ListDetectorModelVersions)
+
+-- | The token that you can use to return the next set of results.
+listDetectorModelVersions_nextToken :: Lens.Lens' ListDetectorModelVersions (Prelude.Maybe Prelude.Text)
+listDetectorModelVersions_nextToken = Lens.lens (\ListDetectorModelVersions' {nextToken} -> nextToken) (\s@ListDetectorModelVersions' {} a -> s {nextToken = a} :: ListDetectorModelVersions)
+
+-- | The name of the detector model whose versions are returned.
+listDetectorModelVersions_detectorModelName :: Lens.Lens' ListDetectorModelVersions Prelude.Text
+listDetectorModelVersions_detectorModelName = Lens.lens (\ListDetectorModelVersions' {detectorModelName} -> detectorModelName) (\s@ListDetectorModelVersions' {} a -> s {detectorModelName = a} :: ListDetectorModelVersions)
+
+instance Core.AWSRequest ListDetectorModelVersions where
+  type
+    AWSResponse ListDetectorModelVersions =
+      ListDetectorModelVersionsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDetectorModelVersionsResponse'
+            Prelude.<$> ( x
+                            Data..?> "detectorModelVersionSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListDetectorModelVersions where
+  hashWithSalt _salt ListDetectorModelVersions' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` detectorModelName
+
+instance Prelude.NFData ListDetectorModelVersions where
+  rnf ListDetectorModelVersions' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf detectorModelName
+
+instance Data.ToHeaders ListDetectorModelVersions where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ListDetectorModelVersions where
+  toPath ListDetectorModelVersions' {..} =
+    Prelude.mconcat
+      [ "/detector-models/",
+        Data.toBS detectorModelName,
+        "/versions"
+      ]
+
+instance Data.ToQuery ListDetectorModelVersions where
+  toQuery ListDetectorModelVersions' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListDetectorModelVersionsResponse' smart constructor.
+data ListDetectorModelVersionsResponse = ListDetectorModelVersionsResponse'
+  { -- | Summary information about the detector model versions.
+    detectorModelVersionSummaries :: Prelude.Maybe [DetectorModelVersionSummary],
+    -- | The token that you can use to return the next set of results, or @null@
+    -- if there are no more 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 'ListDetectorModelVersionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detectorModelVersionSummaries', 'listDetectorModelVersionsResponse_detectorModelVersionSummaries' - Summary information about the detector model versions.
+--
+-- 'nextToken', 'listDetectorModelVersionsResponse_nextToken' - The token that you can use to return the next set of results, or @null@
+-- if there are no more results.
+--
+-- 'httpStatus', 'listDetectorModelVersionsResponse_httpStatus' - The response's http status code.
+newListDetectorModelVersionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDetectorModelVersionsResponse
+newListDetectorModelVersionsResponse pHttpStatus_ =
+  ListDetectorModelVersionsResponse'
+    { detectorModelVersionSummaries =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Summary information about the detector model versions.
+listDetectorModelVersionsResponse_detectorModelVersionSummaries :: Lens.Lens' ListDetectorModelVersionsResponse (Prelude.Maybe [DetectorModelVersionSummary])
+listDetectorModelVersionsResponse_detectorModelVersionSummaries = Lens.lens (\ListDetectorModelVersionsResponse' {detectorModelVersionSummaries} -> detectorModelVersionSummaries) (\s@ListDetectorModelVersionsResponse' {} a -> s {detectorModelVersionSummaries = a} :: ListDetectorModelVersionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token that you can use to return the next set of results, or @null@
+-- if there are no more results.
+listDetectorModelVersionsResponse_nextToken :: Lens.Lens' ListDetectorModelVersionsResponse (Prelude.Maybe Prelude.Text)
+listDetectorModelVersionsResponse_nextToken = Lens.lens (\ListDetectorModelVersionsResponse' {nextToken} -> nextToken) (\s@ListDetectorModelVersionsResponse' {} a -> s {nextToken = a} :: ListDetectorModelVersionsResponse)
+
+-- | The response's http status code.
+listDetectorModelVersionsResponse_httpStatus :: Lens.Lens' ListDetectorModelVersionsResponse Prelude.Int
+listDetectorModelVersionsResponse_httpStatus = Lens.lens (\ListDetectorModelVersionsResponse' {httpStatus} -> httpStatus) (\s@ListDetectorModelVersionsResponse' {} a -> s {httpStatus = a} :: ListDetectorModelVersionsResponse)
+
+instance
+  Prelude.NFData
+    ListDetectorModelVersionsResponse
+  where
+  rnf ListDetectorModelVersionsResponse' {..} =
+    Prelude.rnf detectorModelVersionSummaries
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTEvents/ListDetectorModels.hs b/gen/Amazonka/IoTEvents/ListDetectorModels.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/ListDetectorModels.hs
@@ -0,0 +1,186 @@
+{-# 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.IoTEvents.ListDetectorModels
+-- 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 detector models you have created. Only the metadata associated
+-- with each detector model is returned.
+module Amazonka.IoTEvents.ListDetectorModels
+  ( -- * Creating a Request
+    ListDetectorModels (..),
+    newListDetectorModels,
+
+    -- * Request Lenses
+    listDetectorModels_maxResults,
+    listDetectorModels_nextToken,
+
+    -- * Destructuring the Response
+    ListDetectorModelsResponse (..),
+    newListDetectorModelsResponse,
+
+    -- * Response Lenses
+    listDetectorModelsResponse_detectorModelSummaries,
+    listDetectorModelsResponse_nextToken,
+    listDetectorModelsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListDetectorModels' smart constructor.
+data ListDetectorModels = ListDetectorModels'
+  { -- | The maximum number of results to be returned per request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token that you can use to return the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDetectorModels' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDetectorModels_maxResults' - The maximum number of results to be returned per request.
+--
+-- 'nextToken', 'listDetectorModels_nextToken' - The token that you can use to return the next set of results.
+newListDetectorModels ::
+  ListDetectorModels
+newListDetectorModels =
+  ListDetectorModels'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results to be returned per request.
+listDetectorModels_maxResults :: Lens.Lens' ListDetectorModels (Prelude.Maybe Prelude.Natural)
+listDetectorModels_maxResults = Lens.lens (\ListDetectorModels' {maxResults} -> maxResults) (\s@ListDetectorModels' {} a -> s {maxResults = a} :: ListDetectorModels)
+
+-- | The token that you can use to return the next set of results.
+listDetectorModels_nextToken :: Lens.Lens' ListDetectorModels (Prelude.Maybe Prelude.Text)
+listDetectorModels_nextToken = Lens.lens (\ListDetectorModels' {nextToken} -> nextToken) (\s@ListDetectorModels' {} a -> s {nextToken = a} :: ListDetectorModels)
+
+instance Core.AWSRequest ListDetectorModels where
+  type
+    AWSResponse ListDetectorModels =
+      ListDetectorModelsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDetectorModelsResponse'
+            Prelude.<$> ( x
+                            Data..?> "detectorModelSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListDetectorModels where
+  hashWithSalt _salt ListDetectorModels' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListDetectorModels where
+  rnf ListDetectorModels' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListDetectorModels where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ListDetectorModels where
+  toPath = Prelude.const "/detector-models"
+
+instance Data.ToQuery ListDetectorModels where
+  toQuery ListDetectorModels' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListDetectorModelsResponse' smart constructor.
+data ListDetectorModelsResponse = ListDetectorModelsResponse'
+  { -- | Summary information about the detector models.
+    detectorModelSummaries :: Prelude.Maybe [DetectorModelSummary],
+    -- | The token that you can use to return the next set of results, or @null@
+    -- if there are no more 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 'ListDetectorModelsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detectorModelSummaries', 'listDetectorModelsResponse_detectorModelSummaries' - Summary information about the detector models.
+--
+-- 'nextToken', 'listDetectorModelsResponse_nextToken' - The token that you can use to return the next set of results, or @null@
+-- if there are no more results.
+--
+-- 'httpStatus', 'listDetectorModelsResponse_httpStatus' - The response's http status code.
+newListDetectorModelsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDetectorModelsResponse
+newListDetectorModelsResponse pHttpStatus_ =
+  ListDetectorModelsResponse'
+    { detectorModelSummaries =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Summary information about the detector models.
+listDetectorModelsResponse_detectorModelSummaries :: Lens.Lens' ListDetectorModelsResponse (Prelude.Maybe [DetectorModelSummary])
+listDetectorModelsResponse_detectorModelSummaries = Lens.lens (\ListDetectorModelsResponse' {detectorModelSummaries} -> detectorModelSummaries) (\s@ListDetectorModelsResponse' {} a -> s {detectorModelSummaries = a} :: ListDetectorModelsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token that you can use to return the next set of results, or @null@
+-- if there are no more results.
+listDetectorModelsResponse_nextToken :: Lens.Lens' ListDetectorModelsResponse (Prelude.Maybe Prelude.Text)
+listDetectorModelsResponse_nextToken = Lens.lens (\ListDetectorModelsResponse' {nextToken} -> nextToken) (\s@ListDetectorModelsResponse' {} a -> s {nextToken = a} :: ListDetectorModelsResponse)
+
+-- | The response's http status code.
+listDetectorModelsResponse_httpStatus :: Lens.Lens' ListDetectorModelsResponse Prelude.Int
+listDetectorModelsResponse_httpStatus = Lens.lens (\ListDetectorModelsResponse' {httpStatus} -> httpStatus) (\s@ListDetectorModelsResponse' {} a -> s {httpStatus = a} :: ListDetectorModelsResponse)
+
+instance Prelude.NFData ListDetectorModelsResponse where
+  rnf ListDetectorModelsResponse' {..} =
+    Prelude.rnf detectorModelSummaries
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTEvents/ListInputRoutings.hs b/gen/Amazonka/IoTEvents/ListInputRoutings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/ListInputRoutings.hs
@@ -0,0 +1,206 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.ListInputRoutings
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists one or more input routings.
+module Amazonka.IoTEvents.ListInputRoutings
+  ( -- * Creating a Request
+    ListInputRoutings (..),
+    newListInputRoutings,
+
+    -- * Request Lenses
+    listInputRoutings_maxResults,
+    listInputRoutings_nextToken,
+    listInputRoutings_inputIdentifier,
+
+    -- * Destructuring the Response
+    ListInputRoutingsResponse (..),
+    newListInputRoutingsResponse,
+
+    -- * Response Lenses
+    listInputRoutingsResponse_nextToken,
+    listInputRoutingsResponse_routedResources,
+    listInputRoutingsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListInputRoutings' smart constructor.
+data ListInputRoutings = ListInputRoutings'
+  { -- | The maximum number of results to be returned per request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token that you can use to return the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The identifer of the routed input.
+    inputIdentifier :: InputIdentifier
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListInputRoutings' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listInputRoutings_maxResults' - The maximum number of results to be returned per request.
+--
+-- 'nextToken', 'listInputRoutings_nextToken' - The token that you can use to return the next set of results.
+--
+-- 'inputIdentifier', 'listInputRoutings_inputIdentifier' - The identifer of the routed input.
+newListInputRoutings ::
+  -- | 'inputIdentifier'
+  InputIdentifier ->
+  ListInputRoutings
+newListInputRoutings pInputIdentifier_ =
+  ListInputRoutings'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      inputIdentifier = pInputIdentifier_
+    }
+
+-- | The maximum number of results to be returned per request.
+listInputRoutings_maxResults :: Lens.Lens' ListInputRoutings (Prelude.Maybe Prelude.Natural)
+listInputRoutings_maxResults = Lens.lens (\ListInputRoutings' {maxResults} -> maxResults) (\s@ListInputRoutings' {} a -> s {maxResults = a} :: ListInputRoutings)
+
+-- | The token that you can use to return the next set of results.
+listInputRoutings_nextToken :: Lens.Lens' ListInputRoutings (Prelude.Maybe Prelude.Text)
+listInputRoutings_nextToken = Lens.lens (\ListInputRoutings' {nextToken} -> nextToken) (\s@ListInputRoutings' {} a -> s {nextToken = a} :: ListInputRoutings)
+
+-- | The identifer of the routed input.
+listInputRoutings_inputIdentifier :: Lens.Lens' ListInputRoutings InputIdentifier
+listInputRoutings_inputIdentifier = Lens.lens (\ListInputRoutings' {inputIdentifier} -> inputIdentifier) (\s@ListInputRoutings' {} a -> s {inputIdentifier = a} :: ListInputRoutings)
+
+instance Core.AWSRequest ListInputRoutings where
+  type
+    AWSResponse ListInputRoutings =
+      ListInputRoutingsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListInputRoutingsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> ( x
+                            Data..?> "routedResources"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListInputRoutings where
+  hashWithSalt _salt ListInputRoutings' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` inputIdentifier
+
+instance Prelude.NFData ListInputRoutings where
+  rnf ListInputRoutings' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf inputIdentifier
+
+instance Data.ToHeaders ListInputRoutings where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON ListInputRoutings where
+  toJSON ListInputRoutings' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just
+              ("inputIdentifier" Data..= inputIdentifier)
+          ]
+      )
+
+instance Data.ToPath ListInputRoutings where
+  toPath = Prelude.const "/input-routings"
+
+instance Data.ToQuery ListInputRoutings where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListInputRoutingsResponse' smart constructor.
+data ListInputRoutingsResponse = ListInputRoutingsResponse'
+  { -- | The token that you can use to return the next set of results, or @null@
+    -- if there are no more results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Summary information about the routed resources.
+    routedResources :: Prelude.Maybe [RoutedResource],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListInputRoutingsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listInputRoutingsResponse_nextToken' - The token that you can use to return the next set of results, or @null@
+-- if there are no more results.
+--
+-- 'routedResources', 'listInputRoutingsResponse_routedResources' - Summary information about the routed resources.
+--
+-- 'httpStatus', 'listInputRoutingsResponse_httpStatus' - The response's http status code.
+newListInputRoutingsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListInputRoutingsResponse
+newListInputRoutingsResponse pHttpStatus_ =
+  ListInputRoutingsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      routedResources = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token that you can use to return the next set of results, or @null@
+-- if there are no more results.
+listInputRoutingsResponse_nextToken :: Lens.Lens' ListInputRoutingsResponse (Prelude.Maybe Prelude.Text)
+listInputRoutingsResponse_nextToken = Lens.lens (\ListInputRoutingsResponse' {nextToken} -> nextToken) (\s@ListInputRoutingsResponse' {} a -> s {nextToken = a} :: ListInputRoutingsResponse)
+
+-- | Summary information about the routed resources.
+listInputRoutingsResponse_routedResources :: Lens.Lens' ListInputRoutingsResponse (Prelude.Maybe [RoutedResource])
+listInputRoutingsResponse_routedResources = Lens.lens (\ListInputRoutingsResponse' {routedResources} -> routedResources) (\s@ListInputRoutingsResponse' {} a -> s {routedResources = a} :: ListInputRoutingsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listInputRoutingsResponse_httpStatus :: Lens.Lens' ListInputRoutingsResponse Prelude.Int
+listInputRoutingsResponse_httpStatus = Lens.lens (\ListInputRoutingsResponse' {httpStatus} -> httpStatus) (\s@ListInputRoutingsResponse' {} a -> s {httpStatus = a} :: ListInputRoutingsResponse)
+
+instance Prelude.NFData ListInputRoutingsResponse where
+  rnf ListInputRoutingsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf routedResources
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTEvents/ListInputs.hs b/gen/Amazonka/IoTEvents/ListInputs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/ListInputs.hs
@@ -0,0 +1,180 @@
+{-# 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.IoTEvents.ListInputs
+-- 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 inputs you have created.
+module Amazonka.IoTEvents.ListInputs
+  ( -- * Creating a Request
+    ListInputs (..),
+    newListInputs,
+
+    -- * Request Lenses
+    listInputs_maxResults,
+    listInputs_nextToken,
+
+    -- * Destructuring the Response
+    ListInputsResponse (..),
+    newListInputsResponse,
+
+    -- * Response Lenses
+    listInputsResponse_inputSummaries,
+    listInputsResponse_nextToken,
+    listInputsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListInputs' smart constructor.
+data ListInputs = ListInputs'
+  { -- | The maximum number of results to be returned per request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token that you can use to return the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListInputs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listInputs_maxResults' - The maximum number of results to be returned per request.
+--
+-- 'nextToken', 'listInputs_nextToken' - The token that you can use to return the next set of results.
+newListInputs ::
+  ListInputs
+newListInputs =
+  ListInputs'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results to be returned per request.
+listInputs_maxResults :: Lens.Lens' ListInputs (Prelude.Maybe Prelude.Natural)
+listInputs_maxResults = Lens.lens (\ListInputs' {maxResults} -> maxResults) (\s@ListInputs' {} a -> s {maxResults = a} :: ListInputs)
+
+-- | The token that you can use to return the next set of results.
+listInputs_nextToken :: Lens.Lens' ListInputs (Prelude.Maybe Prelude.Text)
+listInputs_nextToken = Lens.lens (\ListInputs' {nextToken} -> nextToken) (\s@ListInputs' {} a -> s {nextToken = a} :: ListInputs)
+
+instance Core.AWSRequest ListInputs where
+  type AWSResponse ListInputs = ListInputsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListInputsResponse'
+            Prelude.<$> (x Data..?> "inputSummaries" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListInputs where
+  hashWithSalt _salt ListInputs' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListInputs where
+  rnf ListInputs' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListInputs where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ListInputs where
+  toPath = Prelude.const "/inputs"
+
+instance Data.ToQuery ListInputs where
+  toQuery ListInputs' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListInputsResponse' smart constructor.
+data ListInputsResponse = ListInputsResponse'
+  { -- | Summary information about the inputs.
+    inputSummaries :: Prelude.Maybe [InputSummary],
+    -- | The token that you can use to return the next set of results, or @null@
+    -- if there are no more 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 'ListInputsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'inputSummaries', 'listInputsResponse_inputSummaries' - Summary information about the inputs.
+--
+-- 'nextToken', 'listInputsResponse_nextToken' - The token that you can use to return the next set of results, or @null@
+-- if there are no more results.
+--
+-- 'httpStatus', 'listInputsResponse_httpStatus' - The response's http status code.
+newListInputsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListInputsResponse
+newListInputsResponse pHttpStatus_ =
+  ListInputsResponse'
+    { inputSummaries =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Summary information about the inputs.
+listInputsResponse_inputSummaries :: Lens.Lens' ListInputsResponse (Prelude.Maybe [InputSummary])
+listInputsResponse_inputSummaries = Lens.lens (\ListInputsResponse' {inputSummaries} -> inputSummaries) (\s@ListInputsResponse' {} a -> s {inputSummaries = a} :: ListInputsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token that you can use to return the next set of results, or @null@
+-- if there are no more results.
+listInputsResponse_nextToken :: Lens.Lens' ListInputsResponse (Prelude.Maybe Prelude.Text)
+listInputsResponse_nextToken = Lens.lens (\ListInputsResponse' {nextToken} -> nextToken) (\s@ListInputsResponse' {} a -> s {nextToken = a} :: ListInputsResponse)
+
+-- | The response's http status code.
+listInputsResponse_httpStatus :: Lens.Lens' ListInputsResponse Prelude.Int
+listInputsResponse_httpStatus = Lens.lens (\ListInputsResponse' {httpStatus} -> httpStatus) (\s@ListInputsResponse' {} a -> s {httpStatus = a} :: ListInputsResponse)
+
+instance Prelude.NFData ListInputsResponse where
+  rnf ListInputsResponse' {..} =
+    Prelude.rnf inputSummaries
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTEvents/ListTagsForResource.hs b/gen/Amazonka/IoTEvents/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/ListTagsForResource.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.IoTEvents.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 (metadata) you have assigned to the resource.
+module Amazonka.IoTEvents.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The 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 ARN of the resource.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The 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.mempty
+
+instance Data.ToPath ListTagsForResource where
+  toPath = Prelude.const "/tags"
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery ListTagsForResource' {..} =
+    Prelude.mconcat ["resourceArn" Data.=: resourceArn]
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | The list of tags assigned to the resource.
+    tags :: Prelude.Maybe [Tag],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - The list of tags assigned to the resource.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of tags assigned to the resource.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe [Tag])
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTEvents/PutLoggingOptions.hs b/gen/Amazonka/IoTEvents/PutLoggingOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/PutLoggingOptions.hs
@@ -0,0 +1,133 @@
+{-# 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.IoTEvents.PutLoggingOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Sets or updates the AWS IoT Events logging options.
+--
+-- If you update the value of any @loggingOptions@ field, it takes up to
+-- one minute for the change to take effect. If you change the policy
+-- attached to the role you specified in the @roleArn@ field (for example,
+-- to correct an invalid policy), it takes up to five minutes for that
+-- change to take effect.
+module Amazonka.IoTEvents.PutLoggingOptions
+  ( -- * Creating a Request
+    PutLoggingOptions (..),
+    newPutLoggingOptions,
+
+    -- * Request Lenses
+    putLoggingOptions_loggingOptions,
+
+    -- * Destructuring the Response
+    PutLoggingOptionsResponse (..),
+    newPutLoggingOptionsResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutLoggingOptions' smart constructor.
+data PutLoggingOptions = PutLoggingOptions'
+  { -- | The new values of the AWS IoT Events logging options.
+    loggingOptions :: LoggingOptions
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutLoggingOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'loggingOptions', 'putLoggingOptions_loggingOptions' - The new values of the AWS IoT Events logging options.
+newPutLoggingOptions ::
+  -- | 'loggingOptions'
+  LoggingOptions ->
+  PutLoggingOptions
+newPutLoggingOptions pLoggingOptions_ =
+  PutLoggingOptions'
+    { loggingOptions =
+        pLoggingOptions_
+    }
+
+-- | The new values of the AWS IoT Events logging options.
+putLoggingOptions_loggingOptions :: Lens.Lens' PutLoggingOptions LoggingOptions
+putLoggingOptions_loggingOptions = Lens.lens (\PutLoggingOptions' {loggingOptions} -> loggingOptions) (\s@PutLoggingOptions' {} a -> s {loggingOptions = a} :: PutLoggingOptions)
+
+instance Core.AWSRequest PutLoggingOptions where
+  type
+    AWSResponse PutLoggingOptions =
+      PutLoggingOptionsResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveNull PutLoggingOptionsResponse'
+
+instance Prelude.Hashable PutLoggingOptions where
+  hashWithSalt _salt PutLoggingOptions' {..} =
+    _salt `Prelude.hashWithSalt` loggingOptions
+
+instance Prelude.NFData PutLoggingOptions where
+  rnf PutLoggingOptions' {..} =
+    Prelude.rnf loggingOptions
+
+instance Data.ToHeaders PutLoggingOptions where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON PutLoggingOptions where
+  toJSON PutLoggingOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("loggingOptions" Data..= loggingOptions)
+          ]
+      )
+
+instance Data.ToPath PutLoggingOptions where
+  toPath = Prelude.const "/logging"
+
+instance Data.ToQuery PutLoggingOptions where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutLoggingOptionsResponse' smart constructor.
+data PutLoggingOptionsResponse = PutLoggingOptionsResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutLoggingOptionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newPutLoggingOptionsResponse ::
+  PutLoggingOptionsResponse
+newPutLoggingOptionsResponse =
+  PutLoggingOptionsResponse'
+
+instance Prelude.NFData PutLoggingOptionsResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/IoTEvents/StartDetectorModelAnalysis.hs b/gen/Amazonka/IoTEvents/StartDetectorModelAnalysis.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/StartDetectorModelAnalysis.hs
@@ -0,0 +1,170 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.StartDetectorModelAnalysis
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Performs an analysis of your detector model. For more information, see
+-- <https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-analyze-api.html Troubleshooting a detector model>
+-- in the /AWS IoT Events Developer Guide/.
+module Amazonka.IoTEvents.StartDetectorModelAnalysis
+  ( -- * Creating a Request
+    StartDetectorModelAnalysis (..),
+    newStartDetectorModelAnalysis,
+
+    -- * Request Lenses
+    startDetectorModelAnalysis_detectorModelDefinition,
+
+    -- * Destructuring the Response
+    StartDetectorModelAnalysisResponse (..),
+    newStartDetectorModelAnalysisResponse,
+
+    -- * Response Lenses
+    startDetectorModelAnalysisResponse_analysisId,
+    startDetectorModelAnalysisResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartDetectorModelAnalysis' smart constructor.
+data StartDetectorModelAnalysis = StartDetectorModelAnalysis'
+  { detectorModelDefinition :: DetectorModelDefinition
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartDetectorModelAnalysis' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detectorModelDefinition', 'startDetectorModelAnalysis_detectorModelDefinition' - Undocumented member.
+newStartDetectorModelAnalysis ::
+  -- | 'detectorModelDefinition'
+  DetectorModelDefinition ->
+  StartDetectorModelAnalysis
+newStartDetectorModelAnalysis
+  pDetectorModelDefinition_ =
+    StartDetectorModelAnalysis'
+      { detectorModelDefinition =
+          pDetectorModelDefinition_
+      }
+
+-- | Undocumented member.
+startDetectorModelAnalysis_detectorModelDefinition :: Lens.Lens' StartDetectorModelAnalysis DetectorModelDefinition
+startDetectorModelAnalysis_detectorModelDefinition = Lens.lens (\StartDetectorModelAnalysis' {detectorModelDefinition} -> detectorModelDefinition) (\s@StartDetectorModelAnalysis' {} a -> s {detectorModelDefinition = a} :: StartDetectorModelAnalysis)
+
+instance Core.AWSRequest StartDetectorModelAnalysis where
+  type
+    AWSResponse StartDetectorModelAnalysis =
+      StartDetectorModelAnalysisResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartDetectorModelAnalysisResponse'
+            Prelude.<$> (x Data..?> "analysisId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartDetectorModelAnalysis where
+  hashWithSalt _salt StartDetectorModelAnalysis' {..} =
+    _salt
+      `Prelude.hashWithSalt` detectorModelDefinition
+
+instance Prelude.NFData StartDetectorModelAnalysis where
+  rnf StartDetectorModelAnalysis' {..} =
+    Prelude.rnf detectorModelDefinition
+
+instance Data.ToHeaders StartDetectorModelAnalysis where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON StartDetectorModelAnalysis where
+  toJSON StartDetectorModelAnalysis' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "detectorModelDefinition"
+                  Data..= detectorModelDefinition
+              )
+          ]
+      )
+
+instance Data.ToPath StartDetectorModelAnalysis where
+  toPath = Prelude.const "/analysis/detector-models/"
+
+instance Data.ToQuery StartDetectorModelAnalysis where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartDetectorModelAnalysisResponse' smart constructor.
+data StartDetectorModelAnalysisResponse = StartDetectorModelAnalysisResponse'
+  { -- | The ID that you can use to retrieve the analysis result.
+    analysisId :: 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 'StartDetectorModelAnalysisResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'analysisId', 'startDetectorModelAnalysisResponse_analysisId' - The ID that you can use to retrieve the analysis result.
+--
+-- 'httpStatus', 'startDetectorModelAnalysisResponse_httpStatus' - The response's http status code.
+newStartDetectorModelAnalysisResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartDetectorModelAnalysisResponse
+newStartDetectorModelAnalysisResponse pHttpStatus_ =
+  StartDetectorModelAnalysisResponse'
+    { analysisId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID that you can use to retrieve the analysis result.
+startDetectorModelAnalysisResponse_analysisId :: Lens.Lens' StartDetectorModelAnalysisResponse (Prelude.Maybe Prelude.Text)
+startDetectorModelAnalysisResponse_analysisId = Lens.lens (\StartDetectorModelAnalysisResponse' {analysisId} -> analysisId) (\s@StartDetectorModelAnalysisResponse' {} a -> s {analysisId = a} :: StartDetectorModelAnalysisResponse)
+
+-- | The response's http status code.
+startDetectorModelAnalysisResponse_httpStatus :: Lens.Lens' StartDetectorModelAnalysisResponse Prelude.Int
+startDetectorModelAnalysisResponse_httpStatus = Lens.lens (\StartDetectorModelAnalysisResponse' {httpStatus} -> httpStatus) (\s@StartDetectorModelAnalysisResponse' {} a -> s {httpStatus = a} :: StartDetectorModelAnalysisResponse)
+
+instance
+  Prelude.NFData
+    StartDetectorModelAnalysisResponse
+  where
+  rnf StartDetectorModelAnalysisResponse' {..} =
+    Prelude.rnf analysisId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTEvents/TagResource.hs b/gen/Amazonka/IoTEvents/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/TagResource.hs
@@ -0,0 +1,156 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.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 to or modifies the tags of the given resource. Tags are metadata
+-- that can be used to manage a resource.
+module Amazonka.IoTEvents.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+
+    -- * Response Lenses
+    tagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The ARN of the resource.
+    resourceArn :: Prelude.Text,
+    -- | The new or modified tags for the resource.
+    tags :: [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The ARN of the resource.
+--
+-- 'tags', 'tagResource_tags' - The new or modified tags for the resource.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The ARN of the resource.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | The new or modified tags for the resource.
+tagResource_tags :: Lens.Lens' TagResource [Tag]
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("tags" Data..= tags)]
+      )
+
+instance Data.ToPath TagResource where
+  toPath = Prelude.const "/tags"
+
+instance Data.ToQuery TagResource where
+  toQuery TagResource' {..} =
+    Prelude.mconcat ["resourceArn" Data.=: resourceArn]
+
+-- | /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/IoTEvents/Types.hs b/gen/Amazonka/IoTEvents/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types.hs
@@ -0,0 +1,709 @@
+{-# 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.IoTEvents.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.IoTEvents.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _InternalFailureException,
+    _InvalidRequestException,
+    _LimitExceededException,
+    _ResourceAlreadyExistsException,
+    _ResourceInUseException,
+    _ResourceNotFoundException,
+    _ServiceUnavailableException,
+    _ThrottlingException,
+    _UnsupportedOperationException,
+
+    -- * AlarmModelVersionStatus
+    AlarmModelVersionStatus (..),
+
+    -- * AnalysisResultLevel
+    AnalysisResultLevel (..),
+
+    -- * AnalysisStatus
+    AnalysisStatus (..),
+
+    -- * ComparisonOperator
+    ComparisonOperator (..),
+
+    -- * DetectorModelVersionStatus
+    DetectorModelVersionStatus (..),
+
+    -- * EvaluationMethod
+    EvaluationMethod (..),
+
+    -- * InputStatus
+    InputStatus (..),
+
+    -- * LoggingLevel
+    LoggingLevel (..),
+
+    -- * PayloadType
+    PayloadType (..),
+
+    -- * AcknowledgeFlow
+    AcknowledgeFlow (..),
+    newAcknowledgeFlow,
+    acknowledgeFlow_enabled,
+
+    -- * Action
+    Action (..),
+    newAction,
+    action_clearTimer,
+    action_dynamoDB,
+    action_dynamoDBv2,
+    action_firehose,
+    action_iotEvents,
+    action_iotSiteWise,
+    action_iotTopicPublish,
+    action_lambda,
+    action_resetTimer,
+    action_setTimer,
+    action_setVariable,
+    action_sns,
+    action_sqs,
+
+    -- * AlarmAction
+    AlarmAction (..),
+    newAlarmAction,
+    alarmAction_dynamoDB,
+    alarmAction_dynamoDBv2,
+    alarmAction_firehose,
+    alarmAction_iotEvents,
+    alarmAction_iotSiteWise,
+    alarmAction_iotTopicPublish,
+    alarmAction_lambda,
+    alarmAction_sns,
+    alarmAction_sqs,
+
+    -- * AlarmCapabilities
+    AlarmCapabilities (..),
+    newAlarmCapabilities,
+    alarmCapabilities_acknowledgeFlow,
+    alarmCapabilities_initializationConfiguration,
+
+    -- * AlarmEventActions
+    AlarmEventActions (..),
+    newAlarmEventActions,
+    alarmEventActions_alarmActions,
+
+    -- * AlarmModelSummary
+    AlarmModelSummary (..),
+    newAlarmModelSummary,
+    alarmModelSummary_alarmModelDescription,
+    alarmModelSummary_alarmModelName,
+    alarmModelSummary_creationTime,
+
+    -- * AlarmModelVersionSummary
+    AlarmModelVersionSummary (..),
+    newAlarmModelVersionSummary,
+    alarmModelVersionSummary_alarmModelArn,
+    alarmModelVersionSummary_alarmModelName,
+    alarmModelVersionSummary_alarmModelVersion,
+    alarmModelVersionSummary_creationTime,
+    alarmModelVersionSummary_lastUpdateTime,
+    alarmModelVersionSummary_roleArn,
+    alarmModelVersionSummary_status,
+    alarmModelVersionSummary_statusMessage,
+
+    -- * AlarmNotification
+    AlarmNotification (..),
+    newAlarmNotification,
+    alarmNotification_notificationActions,
+
+    -- * AlarmRule
+    AlarmRule (..),
+    newAlarmRule,
+    alarmRule_simpleRule,
+
+    -- * AnalysisResult
+    AnalysisResult (..),
+    newAnalysisResult,
+    analysisResult_level,
+    analysisResult_locations,
+    analysisResult_message,
+    analysisResult_type,
+
+    -- * AnalysisResultLocation
+    AnalysisResultLocation (..),
+    newAnalysisResultLocation,
+    analysisResultLocation_path,
+
+    -- * AssetPropertyTimestamp
+    AssetPropertyTimestamp (..),
+    newAssetPropertyTimestamp,
+    assetPropertyTimestamp_offsetInNanos,
+    assetPropertyTimestamp_timeInSeconds,
+
+    -- * AssetPropertyValue
+    AssetPropertyValue (..),
+    newAssetPropertyValue,
+    assetPropertyValue_quality,
+    assetPropertyValue_timestamp,
+    assetPropertyValue_value,
+
+    -- * AssetPropertyVariant
+    AssetPropertyVariant (..),
+    newAssetPropertyVariant,
+    assetPropertyVariant_booleanValue,
+    assetPropertyVariant_doubleValue,
+    assetPropertyVariant_integerValue,
+    assetPropertyVariant_stringValue,
+
+    -- * Attribute
+    Attribute (..),
+    newAttribute,
+    attribute_jsonPath,
+
+    -- * ClearTimerAction
+    ClearTimerAction (..),
+    newClearTimerAction,
+    clearTimerAction_timerName,
+
+    -- * DetectorDebugOption
+    DetectorDebugOption (..),
+    newDetectorDebugOption,
+    detectorDebugOption_keyValue,
+    detectorDebugOption_detectorModelName,
+
+    -- * DetectorModel
+    DetectorModel (..),
+    newDetectorModel,
+    detectorModel_detectorModelConfiguration,
+    detectorModel_detectorModelDefinition,
+
+    -- * DetectorModelConfiguration
+    DetectorModelConfiguration (..),
+    newDetectorModelConfiguration,
+    detectorModelConfiguration_creationTime,
+    detectorModelConfiguration_detectorModelArn,
+    detectorModelConfiguration_detectorModelDescription,
+    detectorModelConfiguration_detectorModelName,
+    detectorModelConfiguration_detectorModelVersion,
+    detectorModelConfiguration_evaluationMethod,
+    detectorModelConfiguration_key,
+    detectorModelConfiguration_lastUpdateTime,
+    detectorModelConfiguration_roleArn,
+    detectorModelConfiguration_status,
+
+    -- * DetectorModelDefinition
+    DetectorModelDefinition (..),
+    newDetectorModelDefinition,
+    detectorModelDefinition_states,
+    detectorModelDefinition_initialStateName,
+
+    -- * DetectorModelSummary
+    DetectorModelSummary (..),
+    newDetectorModelSummary,
+    detectorModelSummary_creationTime,
+    detectorModelSummary_detectorModelDescription,
+    detectorModelSummary_detectorModelName,
+
+    -- * DetectorModelVersionSummary
+    DetectorModelVersionSummary (..),
+    newDetectorModelVersionSummary,
+    detectorModelVersionSummary_creationTime,
+    detectorModelVersionSummary_detectorModelArn,
+    detectorModelVersionSummary_detectorModelName,
+    detectorModelVersionSummary_detectorModelVersion,
+    detectorModelVersionSummary_evaluationMethod,
+    detectorModelVersionSummary_lastUpdateTime,
+    detectorModelVersionSummary_roleArn,
+    detectorModelVersionSummary_status,
+
+    -- * DynamoDBAction
+    DynamoDBAction (..),
+    newDynamoDBAction,
+    dynamoDBAction_hashKeyType,
+    dynamoDBAction_operation,
+    dynamoDBAction_payload,
+    dynamoDBAction_payloadField,
+    dynamoDBAction_rangeKeyField,
+    dynamoDBAction_rangeKeyType,
+    dynamoDBAction_rangeKeyValue,
+    dynamoDBAction_hashKeyField,
+    dynamoDBAction_hashKeyValue,
+    dynamoDBAction_tableName,
+
+    -- * DynamoDBv2Action
+    DynamoDBv2Action (..),
+    newDynamoDBv2Action,
+    dynamoDBv2Action_payload,
+    dynamoDBv2Action_tableName,
+
+    -- * EmailConfiguration
+    EmailConfiguration (..),
+    newEmailConfiguration,
+    emailConfiguration_content,
+    emailConfiguration_from,
+    emailConfiguration_recipients,
+
+    -- * EmailContent
+    EmailContent (..),
+    newEmailContent,
+    emailContent_additionalMessage,
+    emailContent_subject,
+
+    -- * EmailRecipients
+    EmailRecipients (..),
+    newEmailRecipients,
+    emailRecipients_to,
+
+    -- * Event
+    Event (..),
+    newEvent,
+    event_actions,
+    event_condition,
+    event_eventName,
+
+    -- * FirehoseAction
+    FirehoseAction (..),
+    newFirehoseAction,
+    firehoseAction_payload,
+    firehoseAction_separator,
+    firehoseAction_deliveryStreamName,
+
+    -- * InitializationConfiguration
+    InitializationConfiguration (..),
+    newInitializationConfiguration,
+    initializationConfiguration_disabledOnInitialization,
+
+    -- * Input
+    Input (..),
+    newInput,
+    input_inputConfiguration,
+    input_inputDefinition,
+
+    -- * InputConfiguration
+    InputConfiguration (..),
+    newInputConfiguration,
+    inputConfiguration_inputDescription,
+    inputConfiguration_inputName,
+    inputConfiguration_inputArn,
+    inputConfiguration_creationTime,
+    inputConfiguration_lastUpdateTime,
+    inputConfiguration_status,
+
+    -- * InputDefinition
+    InputDefinition (..),
+    newInputDefinition,
+    inputDefinition_attributes,
+
+    -- * InputIdentifier
+    InputIdentifier (..),
+    newInputIdentifier,
+    inputIdentifier_iotEventsInputIdentifier,
+    inputIdentifier_iotSiteWiseInputIdentifier,
+
+    -- * InputSummary
+    InputSummary (..),
+    newInputSummary,
+    inputSummary_creationTime,
+    inputSummary_inputArn,
+    inputSummary_inputDescription,
+    inputSummary_inputName,
+    inputSummary_lastUpdateTime,
+    inputSummary_status,
+
+    -- * IotEventsAction
+    IotEventsAction (..),
+    newIotEventsAction,
+    iotEventsAction_payload,
+    iotEventsAction_inputName,
+
+    -- * IotEventsInputIdentifier
+    IotEventsInputIdentifier (..),
+    newIotEventsInputIdentifier,
+    iotEventsInputIdentifier_inputName,
+
+    -- * IotSiteWiseAction
+    IotSiteWiseAction (..),
+    newIotSiteWiseAction,
+    iotSiteWiseAction_assetId,
+    iotSiteWiseAction_entryId,
+    iotSiteWiseAction_propertyAlias,
+    iotSiteWiseAction_propertyId,
+    iotSiteWiseAction_propertyValue,
+
+    -- * IotSiteWiseAssetModelPropertyIdentifier
+    IotSiteWiseAssetModelPropertyIdentifier (..),
+    newIotSiteWiseAssetModelPropertyIdentifier,
+    iotSiteWiseAssetModelPropertyIdentifier_assetModelId,
+    iotSiteWiseAssetModelPropertyIdentifier_propertyId,
+
+    -- * IotSiteWiseInputIdentifier
+    IotSiteWiseInputIdentifier (..),
+    newIotSiteWiseInputIdentifier,
+    iotSiteWiseInputIdentifier_iotSiteWiseAssetModelPropertyIdentifier,
+
+    -- * IotTopicPublishAction
+    IotTopicPublishAction (..),
+    newIotTopicPublishAction,
+    iotTopicPublishAction_payload,
+    iotTopicPublishAction_mqttTopic,
+
+    -- * LambdaAction
+    LambdaAction (..),
+    newLambdaAction,
+    lambdaAction_payload,
+    lambdaAction_functionArn,
+
+    -- * LoggingOptions
+    LoggingOptions (..),
+    newLoggingOptions,
+    loggingOptions_detectorDebugOptions,
+    loggingOptions_roleArn,
+    loggingOptions_level,
+    loggingOptions_enabled,
+
+    -- * NotificationAction
+    NotificationAction (..),
+    newNotificationAction,
+    notificationAction_emailConfigurations,
+    notificationAction_smsConfigurations,
+    notificationAction_action,
+
+    -- * NotificationTargetActions
+    NotificationTargetActions (..),
+    newNotificationTargetActions,
+    notificationTargetActions_lambdaAction,
+
+    -- * OnEnterLifecycle
+    OnEnterLifecycle (..),
+    newOnEnterLifecycle,
+    onEnterLifecycle_events,
+
+    -- * OnExitLifecycle
+    OnExitLifecycle (..),
+    newOnExitLifecycle,
+    onExitLifecycle_events,
+
+    -- * OnInputLifecycle
+    OnInputLifecycle (..),
+    newOnInputLifecycle,
+    onInputLifecycle_events,
+    onInputLifecycle_transitionEvents,
+
+    -- * Payload
+    Payload (..),
+    newPayload,
+    payload_contentExpression,
+    payload_type,
+
+    -- * RecipientDetail
+    RecipientDetail (..),
+    newRecipientDetail,
+    recipientDetail_ssoIdentity,
+
+    -- * ResetTimerAction
+    ResetTimerAction (..),
+    newResetTimerAction,
+    resetTimerAction_timerName,
+
+    -- * RoutedResource
+    RoutedResource (..),
+    newRoutedResource,
+    routedResource_arn,
+    routedResource_name,
+
+    -- * SMSConfiguration
+    SMSConfiguration (..),
+    newSMSConfiguration,
+    sMSConfiguration_additionalMessage,
+    sMSConfiguration_senderId,
+    sMSConfiguration_recipients,
+
+    -- * SNSTopicPublishAction
+    SNSTopicPublishAction (..),
+    newSNSTopicPublishAction,
+    sNSTopicPublishAction_payload,
+    sNSTopicPublishAction_targetArn,
+
+    -- * SSOIdentity
+    SSOIdentity (..),
+    newSSOIdentity,
+    sSOIdentity_userId,
+    sSOIdentity_identityStoreId,
+
+    -- * SetTimerAction
+    SetTimerAction (..),
+    newSetTimerAction,
+    setTimerAction_durationExpression,
+    setTimerAction_seconds,
+    setTimerAction_timerName,
+
+    -- * SetVariableAction
+    SetVariableAction (..),
+    newSetVariableAction,
+    setVariableAction_variableName,
+    setVariableAction_value,
+
+    -- * SimpleRule
+    SimpleRule (..),
+    newSimpleRule,
+    simpleRule_inputProperty,
+    simpleRule_comparisonOperator,
+    simpleRule_threshold,
+
+    -- * SqsAction
+    SqsAction (..),
+    newSqsAction,
+    sqsAction_payload,
+    sqsAction_useBase64,
+    sqsAction_queueUrl,
+
+    -- * State
+    State (..),
+    newState,
+    state_onEnter,
+    state_onExit,
+    state_onInput,
+    state_stateName,
+
+    -- * Tag
+    Tag (..),
+    newTag,
+    tag_key,
+    tag_value,
+
+    -- * TransitionEvent
+    TransitionEvent (..),
+    newTransitionEvent,
+    transitionEvent_actions,
+    transitionEvent_eventName,
+    transitionEvent_condition,
+    transitionEvent_nextState,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.IoTEvents.Types.AcknowledgeFlow
+import Amazonka.IoTEvents.Types.Action
+import Amazonka.IoTEvents.Types.AlarmAction
+import Amazonka.IoTEvents.Types.AlarmCapabilities
+import Amazonka.IoTEvents.Types.AlarmEventActions
+import Amazonka.IoTEvents.Types.AlarmModelSummary
+import Amazonka.IoTEvents.Types.AlarmModelVersionStatus
+import Amazonka.IoTEvents.Types.AlarmModelVersionSummary
+import Amazonka.IoTEvents.Types.AlarmNotification
+import Amazonka.IoTEvents.Types.AlarmRule
+import Amazonka.IoTEvents.Types.AnalysisResult
+import Amazonka.IoTEvents.Types.AnalysisResultLevel
+import Amazonka.IoTEvents.Types.AnalysisResultLocation
+import Amazonka.IoTEvents.Types.AnalysisStatus
+import Amazonka.IoTEvents.Types.AssetPropertyTimestamp
+import Amazonka.IoTEvents.Types.AssetPropertyValue
+import Amazonka.IoTEvents.Types.AssetPropertyVariant
+import Amazonka.IoTEvents.Types.Attribute
+import Amazonka.IoTEvents.Types.ClearTimerAction
+import Amazonka.IoTEvents.Types.ComparisonOperator
+import Amazonka.IoTEvents.Types.DetectorDebugOption
+import Amazonka.IoTEvents.Types.DetectorModel
+import Amazonka.IoTEvents.Types.DetectorModelConfiguration
+import Amazonka.IoTEvents.Types.DetectorModelDefinition
+import Amazonka.IoTEvents.Types.DetectorModelSummary
+import Amazonka.IoTEvents.Types.DetectorModelVersionStatus
+import Amazonka.IoTEvents.Types.DetectorModelVersionSummary
+import Amazonka.IoTEvents.Types.DynamoDBAction
+import Amazonka.IoTEvents.Types.DynamoDBv2Action
+import Amazonka.IoTEvents.Types.EmailConfiguration
+import Amazonka.IoTEvents.Types.EmailContent
+import Amazonka.IoTEvents.Types.EmailRecipients
+import Amazonka.IoTEvents.Types.EvaluationMethod
+import Amazonka.IoTEvents.Types.Event
+import Amazonka.IoTEvents.Types.FirehoseAction
+import Amazonka.IoTEvents.Types.InitializationConfiguration
+import Amazonka.IoTEvents.Types.Input
+import Amazonka.IoTEvents.Types.InputConfiguration
+import Amazonka.IoTEvents.Types.InputDefinition
+import Amazonka.IoTEvents.Types.InputIdentifier
+import Amazonka.IoTEvents.Types.InputStatus
+import Amazonka.IoTEvents.Types.InputSummary
+import Amazonka.IoTEvents.Types.IotEventsAction
+import Amazonka.IoTEvents.Types.IotEventsInputIdentifier
+import Amazonka.IoTEvents.Types.IotSiteWiseAction
+import Amazonka.IoTEvents.Types.IotSiteWiseAssetModelPropertyIdentifier
+import Amazonka.IoTEvents.Types.IotSiteWiseInputIdentifier
+import Amazonka.IoTEvents.Types.IotTopicPublishAction
+import Amazonka.IoTEvents.Types.LambdaAction
+import Amazonka.IoTEvents.Types.LoggingLevel
+import Amazonka.IoTEvents.Types.LoggingOptions
+import Amazonka.IoTEvents.Types.NotificationAction
+import Amazonka.IoTEvents.Types.NotificationTargetActions
+import Amazonka.IoTEvents.Types.OnEnterLifecycle
+import Amazonka.IoTEvents.Types.OnExitLifecycle
+import Amazonka.IoTEvents.Types.OnInputLifecycle
+import Amazonka.IoTEvents.Types.Payload
+import Amazonka.IoTEvents.Types.PayloadType
+import Amazonka.IoTEvents.Types.RecipientDetail
+import Amazonka.IoTEvents.Types.ResetTimerAction
+import Amazonka.IoTEvents.Types.RoutedResource
+import Amazonka.IoTEvents.Types.SMSConfiguration
+import Amazonka.IoTEvents.Types.SNSTopicPublishAction
+import Amazonka.IoTEvents.Types.SSOIdentity
+import Amazonka.IoTEvents.Types.SetTimerAction
+import Amazonka.IoTEvents.Types.SetVariableAction
+import Amazonka.IoTEvents.Types.SimpleRule
+import Amazonka.IoTEvents.Types.SqsAction
+import Amazonka.IoTEvents.Types.State
+import Amazonka.IoTEvents.Types.Tag
+import Amazonka.IoTEvents.Types.TransitionEvent
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2018-07-27@ of the Amazon IoT Events SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "IoTEvents",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "iotevents",
+      Core.signingName = "iotevents",
+      Core.version = "2018-07-27",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "IoTEvents",
+      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
+
+-- | An internal failure occurred.
+_InternalFailureException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalFailureException =
+  Core._MatchServiceError
+    defaultService
+    "InternalFailureException"
+    Prelude.. Core.hasStatus 500
+
+-- | The request was invalid.
+_InvalidRequestException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidRequestException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidRequestException"
+    Prelude.. Core.hasStatus 400
+
+-- | A limit was exceeded.
+_LimitExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_LimitExceededException =
+  Core._MatchServiceError
+    defaultService
+    "LimitExceededException"
+    Prelude.. Core.hasStatus 410
+
+-- | The resource already exists.
+_ResourceAlreadyExistsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceAlreadyExistsException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceAlreadyExistsException"
+    Prelude.. Core.hasStatus 409
+
+-- | The resource is in use.
+_ResourceInUseException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceInUseException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceInUseException"
+    Prelude.. Core.hasStatus 409
+
+-- | The resource was not found.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | The service is currently unavailable.
+_ServiceUnavailableException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceUnavailableException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceUnavailableException"
+    Prelude.. Core.hasStatus 503
+
+-- | The request could not be completed due to throttling.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+    Prelude.. Core.hasStatus 429
+
+-- | The requested operation is not supported.
+_UnsupportedOperationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_UnsupportedOperationException =
+  Core._MatchServiceError
+    defaultService
+    "UnsupportedOperationException"
+    Prelude.. Core.hasStatus 501
diff --git a/gen/Amazonka/IoTEvents/Types/AcknowledgeFlow.hs b/gen/Amazonka/IoTEvents/Types/AcknowledgeFlow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/AcknowledgeFlow.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.AcknowledgeFlow
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.AcknowledgeFlow where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies whether to get notified for alarm state changes.
+--
+-- /See:/ 'newAcknowledgeFlow' smart constructor.
+data AcknowledgeFlow = AcknowledgeFlow'
+  { -- | The value must be @TRUE@ or @FALSE@. If @TRUE@, you receive a
+    -- notification when the alarm state changes. You must choose to
+    -- acknowledge the notification before the alarm state can return to
+    -- @NORMAL@. If @FALSE@, you won\'t receive notifications. The alarm
+    -- automatically changes to the @NORMAL@ state when the input property
+    -- value returns to the specified range.
+    enabled :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AcknowledgeFlow' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enabled', 'acknowledgeFlow_enabled' - The value must be @TRUE@ or @FALSE@. If @TRUE@, you receive a
+-- notification when the alarm state changes. You must choose to
+-- acknowledge the notification before the alarm state can return to
+-- @NORMAL@. If @FALSE@, you won\'t receive notifications. The alarm
+-- automatically changes to the @NORMAL@ state when the input property
+-- value returns to the specified range.
+newAcknowledgeFlow ::
+  -- | 'enabled'
+  Prelude.Bool ->
+  AcknowledgeFlow
+newAcknowledgeFlow pEnabled_ =
+  AcknowledgeFlow' {enabled = pEnabled_}
+
+-- | The value must be @TRUE@ or @FALSE@. If @TRUE@, you receive a
+-- notification when the alarm state changes. You must choose to
+-- acknowledge the notification before the alarm state can return to
+-- @NORMAL@. If @FALSE@, you won\'t receive notifications. The alarm
+-- automatically changes to the @NORMAL@ state when the input property
+-- value returns to the specified range.
+acknowledgeFlow_enabled :: Lens.Lens' AcknowledgeFlow Prelude.Bool
+acknowledgeFlow_enabled = Lens.lens (\AcknowledgeFlow' {enabled} -> enabled) (\s@AcknowledgeFlow' {} a -> s {enabled = a} :: AcknowledgeFlow)
+
+instance Data.FromJSON AcknowledgeFlow where
+  parseJSON =
+    Data.withObject
+      "AcknowledgeFlow"
+      ( \x ->
+          AcknowledgeFlow' Prelude.<$> (x Data..: "enabled")
+      )
+
+instance Prelude.Hashable AcknowledgeFlow where
+  hashWithSalt _salt AcknowledgeFlow' {..} =
+    _salt `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData AcknowledgeFlow where
+  rnf AcknowledgeFlow' {..} = Prelude.rnf enabled
+
+instance Data.ToJSON AcknowledgeFlow where
+  toJSON AcknowledgeFlow' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("enabled" Data..= enabled)]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/Action.hs b/gen/Amazonka/IoTEvents/Types/Action.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/Action.hs
@@ -0,0 +1,316 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.Action
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.Action where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.ClearTimerAction
+import Amazonka.IoTEvents.Types.DynamoDBAction
+import Amazonka.IoTEvents.Types.DynamoDBv2Action
+import Amazonka.IoTEvents.Types.FirehoseAction
+import Amazonka.IoTEvents.Types.IotEventsAction
+import Amazonka.IoTEvents.Types.IotSiteWiseAction
+import Amazonka.IoTEvents.Types.IotTopicPublishAction
+import Amazonka.IoTEvents.Types.LambdaAction
+import Amazonka.IoTEvents.Types.ResetTimerAction
+import Amazonka.IoTEvents.Types.SNSTopicPublishAction
+import Amazonka.IoTEvents.Types.SetTimerAction
+import Amazonka.IoTEvents.Types.SetVariableAction
+import Amazonka.IoTEvents.Types.SqsAction
+import qualified Amazonka.Prelude as Prelude
+
+-- | An action to be performed when the @condition@ is TRUE.
+--
+-- /See:/ 'newAction' smart constructor.
+data Action = Action'
+  { -- | Information needed to clear the timer.
+    clearTimer :: Prelude.Maybe ClearTimerAction,
+    -- | Writes to the DynamoDB table that you created. The default action
+    -- payload contains all attribute-value pairs that have the information
+    -- about the detector model instance and the event that triggered the
+    -- action. You can customize the
+    -- <https://docs.aws.amazon.com/iotevents/latest/apireference/API_Payload.html payload>.
+    -- One column of the DynamoDB table receives all attribute-value pairs in
+    -- the payload that you specify. For more information, see
+    -- <https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-event-actions.html Actions>
+    -- in /AWS IoT Events Developer Guide/.
+    dynamoDB :: Prelude.Maybe DynamoDBAction,
+    -- | Writes to the DynamoDB table that you created. The default action
+    -- payload contains all attribute-value pairs that have the information
+    -- about the detector model instance and the event that triggered the
+    -- action. You can customize the
+    -- <https://docs.aws.amazon.com/iotevents/latest/apireference/API_Payload.html payload>.
+    -- A separate column of the DynamoDB table receives one attribute-value
+    -- pair in the payload that you specify. For more information, see
+    -- <https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-event-actions.html Actions>
+    -- in /AWS IoT Events Developer Guide/.
+    dynamoDBv2 :: Prelude.Maybe DynamoDBv2Action,
+    -- | Sends information about the detector model instance and the event that
+    -- triggered the action to an Amazon Kinesis Data Firehose delivery stream.
+    firehose :: Prelude.Maybe FirehoseAction,
+    -- | Sends AWS IoT Events input, which passes information about the detector
+    -- model instance and the event that triggered the action.
+    iotEvents :: Prelude.Maybe IotEventsAction,
+    -- | Sends information about the detector model instance and the event that
+    -- triggered the action to an asset property in AWS IoT SiteWise .
+    iotSiteWise :: Prelude.Maybe IotSiteWiseAction,
+    -- | Publishes an MQTT message with the given topic to the AWS IoT message
+    -- broker.
+    iotTopicPublish :: Prelude.Maybe IotTopicPublishAction,
+    -- | Calls a Lambda function, passing in information about the detector model
+    -- instance and the event that triggered the action.
+    lambda :: Prelude.Maybe LambdaAction,
+    -- | Information needed to reset the timer.
+    resetTimer :: Prelude.Maybe ResetTimerAction,
+    -- | Information needed to set the timer.
+    setTimer :: Prelude.Maybe SetTimerAction,
+    -- | Sets a variable to a specified value.
+    setVariable :: Prelude.Maybe SetVariableAction,
+    -- | Sends an Amazon SNS message.
+    sns :: Prelude.Maybe SNSTopicPublishAction,
+    -- | Sends information about the detector model instance and the event that
+    -- triggered the action to an Amazon SQS queue.
+    sqs :: Prelude.Maybe SqsAction
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Action' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clearTimer', 'action_clearTimer' - Information needed to clear the timer.
+--
+-- 'dynamoDB', 'action_dynamoDB' - Writes to the DynamoDB table that you created. The default action
+-- payload contains all attribute-value pairs that have the information
+-- about the detector model instance and the event that triggered the
+-- action. You can customize the
+-- <https://docs.aws.amazon.com/iotevents/latest/apireference/API_Payload.html payload>.
+-- One column of the DynamoDB table receives all attribute-value pairs in
+-- the payload that you specify. For more information, see
+-- <https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-event-actions.html Actions>
+-- in /AWS IoT Events Developer Guide/.
+--
+-- 'dynamoDBv2', 'action_dynamoDBv2' - Writes to the DynamoDB table that you created. The default action
+-- payload contains all attribute-value pairs that have the information
+-- about the detector model instance and the event that triggered the
+-- action. You can customize the
+-- <https://docs.aws.amazon.com/iotevents/latest/apireference/API_Payload.html payload>.
+-- A separate column of the DynamoDB table receives one attribute-value
+-- pair in the payload that you specify. For more information, see
+-- <https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-event-actions.html Actions>
+-- in /AWS IoT Events Developer Guide/.
+--
+-- 'firehose', 'action_firehose' - Sends information about the detector model instance and the event that
+-- triggered the action to an Amazon Kinesis Data Firehose delivery stream.
+--
+-- 'iotEvents', 'action_iotEvents' - Sends AWS IoT Events input, which passes information about the detector
+-- model instance and the event that triggered the action.
+--
+-- 'iotSiteWise', 'action_iotSiteWise' - Sends information about the detector model instance and the event that
+-- triggered the action to an asset property in AWS IoT SiteWise .
+--
+-- 'iotTopicPublish', 'action_iotTopicPublish' - Publishes an MQTT message with the given topic to the AWS IoT message
+-- broker.
+--
+-- 'lambda', 'action_lambda' - Calls a Lambda function, passing in information about the detector model
+-- instance and the event that triggered the action.
+--
+-- 'resetTimer', 'action_resetTimer' - Information needed to reset the timer.
+--
+-- 'setTimer', 'action_setTimer' - Information needed to set the timer.
+--
+-- 'setVariable', 'action_setVariable' - Sets a variable to a specified value.
+--
+-- 'sns', 'action_sns' - Sends an Amazon SNS message.
+--
+-- 'sqs', 'action_sqs' - Sends information about the detector model instance and the event that
+-- triggered the action to an Amazon SQS queue.
+newAction ::
+  Action
+newAction =
+  Action'
+    { clearTimer = Prelude.Nothing,
+      dynamoDB = Prelude.Nothing,
+      dynamoDBv2 = Prelude.Nothing,
+      firehose = Prelude.Nothing,
+      iotEvents = Prelude.Nothing,
+      iotSiteWise = Prelude.Nothing,
+      iotTopicPublish = Prelude.Nothing,
+      lambda = Prelude.Nothing,
+      resetTimer = Prelude.Nothing,
+      setTimer = Prelude.Nothing,
+      setVariable = Prelude.Nothing,
+      sns = Prelude.Nothing,
+      sqs = Prelude.Nothing
+    }
+
+-- | Information needed to clear the timer.
+action_clearTimer :: Lens.Lens' Action (Prelude.Maybe ClearTimerAction)
+action_clearTimer = Lens.lens (\Action' {clearTimer} -> clearTimer) (\s@Action' {} a -> s {clearTimer = a} :: Action)
+
+-- | Writes to the DynamoDB table that you created. The default action
+-- payload contains all attribute-value pairs that have the information
+-- about the detector model instance and the event that triggered the
+-- action. You can customize the
+-- <https://docs.aws.amazon.com/iotevents/latest/apireference/API_Payload.html payload>.
+-- One column of the DynamoDB table receives all attribute-value pairs in
+-- the payload that you specify. For more information, see
+-- <https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-event-actions.html Actions>
+-- in /AWS IoT Events Developer Guide/.
+action_dynamoDB :: Lens.Lens' Action (Prelude.Maybe DynamoDBAction)
+action_dynamoDB = Lens.lens (\Action' {dynamoDB} -> dynamoDB) (\s@Action' {} a -> s {dynamoDB = a} :: Action)
+
+-- | Writes to the DynamoDB table that you created. The default action
+-- payload contains all attribute-value pairs that have the information
+-- about the detector model instance and the event that triggered the
+-- action. You can customize the
+-- <https://docs.aws.amazon.com/iotevents/latest/apireference/API_Payload.html payload>.
+-- A separate column of the DynamoDB table receives one attribute-value
+-- pair in the payload that you specify. For more information, see
+-- <https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-event-actions.html Actions>
+-- in /AWS IoT Events Developer Guide/.
+action_dynamoDBv2 :: Lens.Lens' Action (Prelude.Maybe DynamoDBv2Action)
+action_dynamoDBv2 = Lens.lens (\Action' {dynamoDBv2} -> dynamoDBv2) (\s@Action' {} a -> s {dynamoDBv2 = a} :: Action)
+
+-- | Sends information about the detector model instance and the event that
+-- triggered the action to an Amazon Kinesis Data Firehose delivery stream.
+action_firehose :: Lens.Lens' Action (Prelude.Maybe FirehoseAction)
+action_firehose = Lens.lens (\Action' {firehose} -> firehose) (\s@Action' {} a -> s {firehose = a} :: Action)
+
+-- | Sends AWS IoT Events input, which passes information about the detector
+-- model instance and the event that triggered the action.
+action_iotEvents :: Lens.Lens' Action (Prelude.Maybe IotEventsAction)
+action_iotEvents = Lens.lens (\Action' {iotEvents} -> iotEvents) (\s@Action' {} a -> s {iotEvents = a} :: Action)
+
+-- | Sends information about the detector model instance and the event that
+-- triggered the action to an asset property in AWS IoT SiteWise .
+action_iotSiteWise :: Lens.Lens' Action (Prelude.Maybe IotSiteWiseAction)
+action_iotSiteWise = Lens.lens (\Action' {iotSiteWise} -> iotSiteWise) (\s@Action' {} a -> s {iotSiteWise = a} :: Action)
+
+-- | Publishes an MQTT message with the given topic to the AWS IoT message
+-- broker.
+action_iotTopicPublish :: Lens.Lens' Action (Prelude.Maybe IotTopicPublishAction)
+action_iotTopicPublish = Lens.lens (\Action' {iotTopicPublish} -> iotTopicPublish) (\s@Action' {} a -> s {iotTopicPublish = a} :: Action)
+
+-- | Calls a Lambda function, passing in information about the detector model
+-- instance and the event that triggered the action.
+action_lambda :: Lens.Lens' Action (Prelude.Maybe LambdaAction)
+action_lambda = Lens.lens (\Action' {lambda} -> lambda) (\s@Action' {} a -> s {lambda = a} :: Action)
+
+-- | Information needed to reset the timer.
+action_resetTimer :: Lens.Lens' Action (Prelude.Maybe ResetTimerAction)
+action_resetTimer = Lens.lens (\Action' {resetTimer} -> resetTimer) (\s@Action' {} a -> s {resetTimer = a} :: Action)
+
+-- | Information needed to set the timer.
+action_setTimer :: Lens.Lens' Action (Prelude.Maybe SetTimerAction)
+action_setTimer = Lens.lens (\Action' {setTimer} -> setTimer) (\s@Action' {} a -> s {setTimer = a} :: Action)
+
+-- | Sets a variable to a specified value.
+action_setVariable :: Lens.Lens' Action (Prelude.Maybe SetVariableAction)
+action_setVariable = Lens.lens (\Action' {setVariable} -> setVariable) (\s@Action' {} a -> s {setVariable = a} :: Action)
+
+-- | Sends an Amazon SNS message.
+action_sns :: Lens.Lens' Action (Prelude.Maybe SNSTopicPublishAction)
+action_sns = Lens.lens (\Action' {sns} -> sns) (\s@Action' {} a -> s {sns = a} :: Action)
+
+-- | Sends information about the detector model instance and the event that
+-- triggered the action to an Amazon SQS queue.
+action_sqs :: Lens.Lens' Action (Prelude.Maybe SqsAction)
+action_sqs = Lens.lens (\Action' {sqs} -> sqs) (\s@Action' {} a -> s {sqs = a} :: Action)
+
+instance Data.FromJSON Action where
+  parseJSON =
+    Data.withObject
+      "Action"
+      ( \x ->
+          Action'
+            Prelude.<$> (x Data..:? "clearTimer")
+            Prelude.<*> (x Data..:? "dynamoDB")
+            Prelude.<*> (x Data..:? "dynamoDBv2")
+            Prelude.<*> (x Data..:? "firehose")
+            Prelude.<*> (x Data..:? "iotEvents")
+            Prelude.<*> (x Data..:? "iotSiteWise")
+            Prelude.<*> (x Data..:? "iotTopicPublish")
+            Prelude.<*> (x Data..:? "lambda")
+            Prelude.<*> (x Data..:? "resetTimer")
+            Prelude.<*> (x Data..:? "setTimer")
+            Prelude.<*> (x Data..:? "setVariable")
+            Prelude.<*> (x Data..:? "sns")
+            Prelude.<*> (x Data..:? "sqs")
+      )
+
+instance Prelude.Hashable Action where
+  hashWithSalt _salt Action' {..} =
+    _salt
+      `Prelude.hashWithSalt` clearTimer
+      `Prelude.hashWithSalt` dynamoDB
+      `Prelude.hashWithSalt` dynamoDBv2
+      `Prelude.hashWithSalt` firehose
+      `Prelude.hashWithSalt` iotEvents
+      `Prelude.hashWithSalt` iotSiteWise
+      `Prelude.hashWithSalt` iotTopicPublish
+      `Prelude.hashWithSalt` lambda
+      `Prelude.hashWithSalt` resetTimer
+      `Prelude.hashWithSalt` setTimer
+      `Prelude.hashWithSalt` setVariable
+      `Prelude.hashWithSalt` sns
+      `Prelude.hashWithSalt` sqs
+
+instance Prelude.NFData Action where
+  rnf Action' {..} =
+    Prelude.rnf clearTimer
+      `Prelude.seq` Prelude.rnf dynamoDB
+      `Prelude.seq` Prelude.rnf dynamoDBv2
+      `Prelude.seq` Prelude.rnf firehose
+      `Prelude.seq` Prelude.rnf iotEvents
+      `Prelude.seq` Prelude.rnf iotSiteWise
+      `Prelude.seq` Prelude.rnf iotTopicPublish
+      `Prelude.seq` Prelude.rnf lambda
+      `Prelude.seq` Prelude.rnf resetTimer
+      `Prelude.seq` Prelude.rnf setTimer
+      `Prelude.seq` Prelude.rnf setVariable
+      `Prelude.seq` Prelude.rnf sns
+      `Prelude.seq` Prelude.rnf sqs
+
+instance Data.ToJSON Action where
+  toJSON Action' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clearTimer" Data..=) Prelude.<$> clearTimer,
+            ("dynamoDB" Data..=) Prelude.<$> dynamoDB,
+            ("dynamoDBv2" Data..=) Prelude.<$> dynamoDBv2,
+            ("firehose" Data..=) Prelude.<$> firehose,
+            ("iotEvents" Data..=) Prelude.<$> iotEvents,
+            ("iotSiteWise" Data..=) Prelude.<$> iotSiteWise,
+            ("iotTopicPublish" Data..=)
+              Prelude.<$> iotTopicPublish,
+            ("lambda" Data..=) Prelude.<$> lambda,
+            ("resetTimer" Data..=) Prelude.<$> resetTimer,
+            ("setTimer" Data..=) Prelude.<$> setTimer,
+            ("setVariable" Data..=) Prelude.<$> setVariable,
+            ("sns" Data..=) Prelude.<$> sns,
+            ("sqs" Data..=) Prelude.<$> sqs
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/AlarmAction.hs b/gen/Amazonka/IoTEvents/Types/AlarmAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/AlarmAction.hs
@@ -0,0 +1,186 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.AlarmAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.AlarmAction where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.DynamoDBAction
+import Amazonka.IoTEvents.Types.DynamoDBv2Action
+import Amazonka.IoTEvents.Types.FirehoseAction
+import Amazonka.IoTEvents.Types.IotEventsAction
+import Amazonka.IoTEvents.Types.IotSiteWiseAction
+import Amazonka.IoTEvents.Types.IotTopicPublishAction
+import Amazonka.IoTEvents.Types.LambdaAction
+import Amazonka.IoTEvents.Types.SNSTopicPublishAction
+import Amazonka.IoTEvents.Types.SqsAction
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies one of the following actions to receive notifications when the
+-- alarm state changes.
+--
+-- /See:/ 'newAlarmAction' smart constructor.
+data AlarmAction = AlarmAction'
+  { dynamoDB :: Prelude.Maybe DynamoDBAction,
+    dynamoDBv2 :: Prelude.Maybe DynamoDBv2Action,
+    firehose :: Prelude.Maybe FirehoseAction,
+    iotEvents :: Prelude.Maybe IotEventsAction,
+    iotSiteWise :: Prelude.Maybe IotSiteWiseAction,
+    iotTopicPublish :: Prelude.Maybe IotTopicPublishAction,
+    lambda :: Prelude.Maybe LambdaAction,
+    sns :: Prelude.Maybe SNSTopicPublishAction,
+    sqs :: Prelude.Maybe SqsAction
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AlarmAction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dynamoDB', 'alarmAction_dynamoDB' - Undocumented member.
+--
+-- 'dynamoDBv2', 'alarmAction_dynamoDBv2' - Undocumented member.
+--
+-- 'firehose', 'alarmAction_firehose' - Undocumented member.
+--
+-- 'iotEvents', 'alarmAction_iotEvents' - Undocumented member.
+--
+-- 'iotSiteWise', 'alarmAction_iotSiteWise' - Undocumented member.
+--
+-- 'iotTopicPublish', 'alarmAction_iotTopicPublish' - Undocumented member.
+--
+-- 'lambda', 'alarmAction_lambda' - Undocumented member.
+--
+-- 'sns', 'alarmAction_sns' - Undocumented member.
+--
+-- 'sqs', 'alarmAction_sqs' - Undocumented member.
+newAlarmAction ::
+  AlarmAction
+newAlarmAction =
+  AlarmAction'
+    { dynamoDB = Prelude.Nothing,
+      dynamoDBv2 = Prelude.Nothing,
+      firehose = Prelude.Nothing,
+      iotEvents = Prelude.Nothing,
+      iotSiteWise = Prelude.Nothing,
+      iotTopicPublish = Prelude.Nothing,
+      lambda = Prelude.Nothing,
+      sns = Prelude.Nothing,
+      sqs = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+alarmAction_dynamoDB :: Lens.Lens' AlarmAction (Prelude.Maybe DynamoDBAction)
+alarmAction_dynamoDB = Lens.lens (\AlarmAction' {dynamoDB} -> dynamoDB) (\s@AlarmAction' {} a -> s {dynamoDB = a} :: AlarmAction)
+
+-- | Undocumented member.
+alarmAction_dynamoDBv2 :: Lens.Lens' AlarmAction (Prelude.Maybe DynamoDBv2Action)
+alarmAction_dynamoDBv2 = Lens.lens (\AlarmAction' {dynamoDBv2} -> dynamoDBv2) (\s@AlarmAction' {} a -> s {dynamoDBv2 = a} :: AlarmAction)
+
+-- | Undocumented member.
+alarmAction_firehose :: Lens.Lens' AlarmAction (Prelude.Maybe FirehoseAction)
+alarmAction_firehose = Lens.lens (\AlarmAction' {firehose} -> firehose) (\s@AlarmAction' {} a -> s {firehose = a} :: AlarmAction)
+
+-- | Undocumented member.
+alarmAction_iotEvents :: Lens.Lens' AlarmAction (Prelude.Maybe IotEventsAction)
+alarmAction_iotEvents = Lens.lens (\AlarmAction' {iotEvents} -> iotEvents) (\s@AlarmAction' {} a -> s {iotEvents = a} :: AlarmAction)
+
+-- | Undocumented member.
+alarmAction_iotSiteWise :: Lens.Lens' AlarmAction (Prelude.Maybe IotSiteWiseAction)
+alarmAction_iotSiteWise = Lens.lens (\AlarmAction' {iotSiteWise} -> iotSiteWise) (\s@AlarmAction' {} a -> s {iotSiteWise = a} :: AlarmAction)
+
+-- | Undocumented member.
+alarmAction_iotTopicPublish :: Lens.Lens' AlarmAction (Prelude.Maybe IotTopicPublishAction)
+alarmAction_iotTopicPublish = Lens.lens (\AlarmAction' {iotTopicPublish} -> iotTopicPublish) (\s@AlarmAction' {} a -> s {iotTopicPublish = a} :: AlarmAction)
+
+-- | Undocumented member.
+alarmAction_lambda :: Lens.Lens' AlarmAction (Prelude.Maybe LambdaAction)
+alarmAction_lambda = Lens.lens (\AlarmAction' {lambda} -> lambda) (\s@AlarmAction' {} a -> s {lambda = a} :: AlarmAction)
+
+-- | Undocumented member.
+alarmAction_sns :: Lens.Lens' AlarmAction (Prelude.Maybe SNSTopicPublishAction)
+alarmAction_sns = Lens.lens (\AlarmAction' {sns} -> sns) (\s@AlarmAction' {} a -> s {sns = a} :: AlarmAction)
+
+-- | Undocumented member.
+alarmAction_sqs :: Lens.Lens' AlarmAction (Prelude.Maybe SqsAction)
+alarmAction_sqs = Lens.lens (\AlarmAction' {sqs} -> sqs) (\s@AlarmAction' {} a -> s {sqs = a} :: AlarmAction)
+
+instance Data.FromJSON AlarmAction where
+  parseJSON =
+    Data.withObject
+      "AlarmAction"
+      ( \x ->
+          AlarmAction'
+            Prelude.<$> (x Data..:? "dynamoDB")
+            Prelude.<*> (x Data..:? "dynamoDBv2")
+            Prelude.<*> (x Data..:? "firehose")
+            Prelude.<*> (x Data..:? "iotEvents")
+            Prelude.<*> (x Data..:? "iotSiteWise")
+            Prelude.<*> (x Data..:? "iotTopicPublish")
+            Prelude.<*> (x Data..:? "lambda")
+            Prelude.<*> (x Data..:? "sns")
+            Prelude.<*> (x Data..:? "sqs")
+      )
+
+instance Prelude.Hashable AlarmAction where
+  hashWithSalt _salt AlarmAction' {..} =
+    _salt
+      `Prelude.hashWithSalt` dynamoDB
+      `Prelude.hashWithSalt` dynamoDBv2
+      `Prelude.hashWithSalt` firehose
+      `Prelude.hashWithSalt` iotEvents
+      `Prelude.hashWithSalt` iotSiteWise
+      `Prelude.hashWithSalt` iotTopicPublish
+      `Prelude.hashWithSalt` lambda
+      `Prelude.hashWithSalt` sns
+      `Prelude.hashWithSalt` sqs
+
+instance Prelude.NFData AlarmAction where
+  rnf AlarmAction' {..} =
+    Prelude.rnf dynamoDB
+      `Prelude.seq` Prelude.rnf dynamoDBv2
+      `Prelude.seq` Prelude.rnf firehose
+      `Prelude.seq` Prelude.rnf iotEvents
+      `Prelude.seq` Prelude.rnf iotSiteWise
+      `Prelude.seq` Prelude.rnf iotTopicPublish
+      `Prelude.seq` Prelude.rnf lambda
+      `Prelude.seq` Prelude.rnf sns
+      `Prelude.seq` Prelude.rnf sqs
+
+instance Data.ToJSON AlarmAction where
+  toJSON AlarmAction' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("dynamoDB" Data..=) Prelude.<$> dynamoDB,
+            ("dynamoDBv2" Data..=) Prelude.<$> dynamoDBv2,
+            ("firehose" Data..=) Prelude.<$> firehose,
+            ("iotEvents" Data..=) Prelude.<$> iotEvents,
+            ("iotSiteWise" Data..=) Prelude.<$> iotSiteWise,
+            ("iotTopicPublish" Data..=)
+              Prelude.<$> iotTopicPublish,
+            ("lambda" Data..=) Prelude.<$> lambda,
+            ("sns" Data..=) Prelude.<$> sns,
+            ("sqs" Data..=) Prelude.<$> sqs
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/AlarmCapabilities.hs b/gen/Amazonka/IoTEvents/Types/AlarmCapabilities.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/AlarmCapabilities.hs
@@ -0,0 +1,101 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.AlarmCapabilities
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.AlarmCapabilities where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.AcknowledgeFlow
+import Amazonka.IoTEvents.Types.InitializationConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains the configuration information of alarm state changes.
+--
+-- /See:/ 'newAlarmCapabilities' smart constructor.
+data AlarmCapabilities = AlarmCapabilities'
+  { -- | Specifies whether to get notified for alarm state changes.
+    acknowledgeFlow :: Prelude.Maybe AcknowledgeFlow,
+    -- | Specifies the default alarm state. The configuration applies to all
+    -- alarms that were created based on this alarm model.
+    initializationConfiguration :: Prelude.Maybe InitializationConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AlarmCapabilities' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'acknowledgeFlow', 'alarmCapabilities_acknowledgeFlow' - Specifies whether to get notified for alarm state changes.
+--
+-- 'initializationConfiguration', 'alarmCapabilities_initializationConfiguration' - Specifies the default alarm state. The configuration applies to all
+-- alarms that were created based on this alarm model.
+newAlarmCapabilities ::
+  AlarmCapabilities
+newAlarmCapabilities =
+  AlarmCapabilities'
+    { acknowledgeFlow =
+        Prelude.Nothing,
+      initializationConfiguration = Prelude.Nothing
+    }
+
+-- | Specifies whether to get notified for alarm state changes.
+alarmCapabilities_acknowledgeFlow :: Lens.Lens' AlarmCapabilities (Prelude.Maybe AcknowledgeFlow)
+alarmCapabilities_acknowledgeFlow = Lens.lens (\AlarmCapabilities' {acknowledgeFlow} -> acknowledgeFlow) (\s@AlarmCapabilities' {} a -> s {acknowledgeFlow = a} :: AlarmCapabilities)
+
+-- | Specifies the default alarm state. The configuration applies to all
+-- alarms that were created based on this alarm model.
+alarmCapabilities_initializationConfiguration :: Lens.Lens' AlarmCapabilities (Prelude.Maybe InitializationConfiguration)
+alarmCapabilities_initializationConfiguration = Lens.lens (\AlarmCapabilities' {initializationConfiguration} -> initializationConfiguration) (\s@AlarmCapabilities' {} a -> s {initializationConfiguration = a} :: AlarmCapabilities)
+
+instance Data.FromJSON AlarmCapabilities where
+  parseJSON =
+    Data.withObject
+      "AlarmCapabilities"
+      ( \x ->
+          AlarmCapabilities'
+            Prelude.<$> (x Data..:? "acknowledgeFlow")
+            Prelude.<*> (x Data..:? "initializationConfiguration")
+      )
+
+instance Prelude.Hashable AlarmCapabilities where
+  hashWithSalt _salt AlarmCapabilities' {..} =
+    _salt
+      `Prelude.hashWithSalt` acknowledgeFlow
+      `Prelude.hashWithSalt` initializationConfiguration
+
+instance Prelude.NFData AlarmCapabilities where
+  rnf AlarmCapabilities' {..} =
+    Prelude.rnf acknowledgeFlow
+      `Prelude.seq` Prelude.rnf initializationConfiguration
+
+instance Data.ToJSON AlarmCapabilities where
+  toJSON AlarmCapabilities' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("acknowledgeFlow" Data..=)
+              Prelude.<$> acknowledgeFlow,
+            ("initializationConfiguration" Data..=)
+              Prelude.<$> initializationConfiguration
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/AlarmEventActions.hs b/gen/Amazonka/IoTEvents/Types/AlarmEventActions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/AlarmEventActions.hs
@@ -0,0 +1,79 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.AlarmEventActions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.AlarmEventActions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.AlarmAction
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains information about one or more alarm actions.
+--
+-- /See:/ 'newAlarmEventActions' smart constructor.
+data AlarmEventActions = AlarmEventActions'
+  { -- | Specifies one or more supported actions to receive notifications when
+    -- the alarm state changes.
+    alarmActions :: Prelude.Maybe [AlarmAction]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AlarmEventActions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'alarmActions', 'alarmEventActions_alarmActions' - Specifies one or more supported actions to receive notifications when
+-- the alarm state changes.
+newAlarmEventActions ::
+  AlarmEventActions
+newAlarmEventActions =
+  AlarmEventActions' {alarmActions = Prelude.Nothing}
+
+-- | Specifies one or more supported actions to receive notifications when
+-- the alarm state changes.
+alarmEventActions_alarmActions :: Lens.Lens' AlarmEventActions (Prelude.Maybe [AlarmAction])
+alarmEventActions_alarmActions = Lens.lens (\AlarmEventActions' {alarmActions} -> alarmActions) (\s@AlarmEventActions' {} a -> s {alarmActions = a} :: AlarmEventActions) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON AlarmEventActions where
+  parseJSON =
+    Data.withObject
+      "AlarmEventActions"
+      ( \x ->
+          AlarmEventActions'
+            Prelude.<$> (x Data..:? "alarmActions" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable AlarmEventActions where
+  hashWithSalt _salt AlarmEventActions' {..} =
+    _salt `Prelude.hashWithSalt` alarmActions
+
+instance Prelude.NFData AlarmEventActions where
+  rnf AlarmEventActions' {..} = Prelude.rnf alarmActions
+
+instance Data.ToJSON AlarmEventActions where
+  toJSON AlarmEventActions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("alarmActions" Data..=) Prelude.<$> alarmActions]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/AlarmModelSummary.hs b/gen/Amazonka/IoTEvents/Types/AlarmModelSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/AlarmModelSummary.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.AlarmModelSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.AlarmModelSummary 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
+
+-- | Contains a summary of an alarm model.
+--
+-- /See:/ 'newAlarmModelSummary' smart constructor.
+data AlarmModelSummary = AlarmModelSummary'
+  { -- | The description of the alarm model.
+    alarmModelDescription :: Prelude.Maybe Prelude.Text,
+    -- | The name of the alarm model.
+    alarmModelName :: Prelude.Maybe Prelude.Text,
+    -- | The time the alarm model was created, in the Unix epoch format.
+    creationTime :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AlarmModelSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'alarmModelDescription', 'alarmModelSummary_alarmModelDescription' - The description of the alarm model.
+--
+-- 'alarmModelName', 'alarmModelSummary_alarmModelName' - The name of the alarm model.
+--
+-- 'creationTime', 'alarmModelSummary_creationTime' - The time the alarm model was created, in the Unix epoch format.
+newAlarmModelSummary ::
+  AlarmModelSummary
+newAlarmModelSummary =
+  AlarmModelSummary'
+    { alarmModelDescription =
+        Prelude.Nothing,
+      alarmModelName = Prelude.Nothing,
+      creationTime = Prelude.Nothing
+    }
+
+-- | The description of the alarm model.
+alarmModelSummary_alarmModelDescription :: Lens.Lens' AlarmModelSummary (Prelude.Maybe Prelude.Text)
+alarmModelSummary_alarmModelDescription = Lens.lens (\AlarmModelSummary' {alarmModelDescription} -> alarmModelDescription) (\s@AlarmModelSummary' {} a -> s {alarmModelDescription = a} :: AlarmModelSummary)
+
+-- | The name of the alarm model.
+alarmModelSummary_alarmModelName :: Lens.Lens' AlarmModelSummary (Prelude.Maybe Prelude.Text)
+alarmModelSummary_alarmModelName = Lens.lens (\AlarmModelSummary' {alarmModelName} -> alarmModelName) (\s@AlarmModelSummary' {} a -> s {alarmModelName = a} :: AlarmModelSummary)
+
+-- | The time the alarm model was created, in the Unix epoch format.
+alarmModelSummary_creationTime :: Lens.Lens' AlarmModelSummary (Prelude.Maybe Prelude.UTCTime)
+alarmModelSummary_creationTime = Lens.lens (\AlarmModelSummary' {creationTime} -> creationTime) (\s@AlarmModelSummary' {} a -> s {creationTime = a} :: AlarmModelSummary) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON AlarmModelSummary where
+  parseJSON =
+    Data.withObject
+      "AlarmModelSummary"
+      ( \x ->
+          AlarmModelSummary'
+            Prelude.<$> (x Data..:? "alarmModelDescription")
+            Prelude.<*> (x Data..:? "alarmModelName")
+            Prelude.<*> (x Data..:? "creationTime")
+      )
+
+instance Prelude.Hashable AlarmModelSummary where
+  hashWithSalt _salt AlarmModelSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` alarmModelDescription
+      `Prelude.hashWithSalt` alarmModelName
+      `Prelude.hashWithSalt` creationTime
+
+instance Prelude.NFData AlarmModelSummary where
+  rnf AlarmModelSummary' {..} =
+    Prelude.rnf alarmModelDescription
+      `Prelude.seq` Prelude.rnf alarmModelName
+      `Prelude.seq` Prelude.rnf creationTime
diff --git a/gen/Amazonka/IoTEvents/Types/AlarmModelVersionStatus.hs b/gen/Amazonka/IoTEvents/Types/AlarmModelVersionStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/AlarmModelVersionStatus.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.AlarmModelVersionStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.AlarmModelVersionStatus
+  ( AlarmModelVersionStatus
+      ( ..,
+        AlarmModelVersionStatus_ACTIVATING,
+        AlarmModelVersionStatus_ACTIVE,
+        AlarmModelVersionStatus_FAILED,
+        AlarmModelVersionStatus_INACTIVE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AlarmModelVersionStatus = AlarmModelVersionStatus'
+  { fromAlarmModelVersionStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AlarmModelVersionStatus_ACTIVATING :: AlarmModelVersionStatus
+pattern AlarmModelVersionStatus_ACTIVATING = AlarmModelVersionStatus' "ACTIVATING"
+
+pattern AlarmModelVersionStatus_ACTIVE :: AlarmModelVersionStatus
+pattern AlarmModelVersionStatus_ACTIVE = AlarmModelVersionStatus' "ACTIVE"
+
+pattern AlarmModelVersionStatus_FAILED :: AlarmModelVersionStatus
+pattern AlarmModelVersionStatus_FAILED = AlarmModelVersionStatus' "FAILED"
+
+pattern AlarmModelVersionStatus_INACTIVE :: AlarmModelVersionStatus
+pattern AlarmModelVersionStatus_INACTIVE = AlarmModelVersionStatus' "INACTIVE"
+
+{-# COMPLETE
+  AlarmModelVersionStatus_ACTIVATING,
+  AlarmModelVersionStatus_ACTIVE,
+  AlarmModelVersionStatus_FAILED,
+  AlarmModelVersionStatus_INACTIVE,
+  AlarmModelVersionStatus'
+  #-}
diff --git a/gen/Amazonka/IoTEvents/Types/AlarmModelVersionSummary.hs b/gen/Amazonka/IoTEvents/Types/AlarmModelVersionSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/AlarmModelVersionSummary.hs
@@ -0,0 +1,215 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.AlarmModelVersionSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.AlarmModelVersionSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.AlarmModelVersionStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains a summary of an alarm model version.
+--
+-- /See:/ 'newAlarmModelVersionSummary' smart constructor.
+data AlarmModelVersionSummary = AlarmModelVersionSummary'
+  { -- | The ARN of the alarm model. For more information, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    alarmModelArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the alarm model.
+    alarmModelName :: Prelude.Maybe Prelude.Text,
+    -- | The version of the alarm model.
+    alarmModelVersion :: Prelude.Maybe Prelude.Text,
+    -- | The time the alarm model was created, in the Unix epoch format.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The time the alarm model was last updated, in the Unix epoch format.
+    lastUpdateTime :: Prelude.Maybe Data.POSIX,
+    -- | The ARN of the IAM role that allows the alarm to perform actions and
+    -- access AWS resources. For more information, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | The status of the alarm model. The status can be one of the following
+    -- values:
+    --
+    -- -   @ACTIVE@ - The alarm model is active and it\'s ready to evaluate
+    --     data.
+    --
+    -- -   @ACTIVATING@ - AWS IoT Events is activating your alarm model.
+    --     Activating an alarm model can take up to a few minutes.
+    --
+    -- -   @INACTIVE@ - The alarm model is inactive, so it isn\'t ready to
+    --     evaluate data. Check your alarm model information and update the
+    --     alarm model.
+    --
+    -- -   @FAILED@ - You couldn\'t create or update the alarm model. Check
+    --     your alarm model information and try again.
+    status :: Prelude.Maybe AlarmModelVersionStatus,
+    -- | Contains information about the status of the alarm model version.
+    statusMessage :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AlarmModelVersionSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'alarmModelArn', 'alarmModelVersionSummary_alarmModelArn' - The ARN of the alarm model. For more information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'alarmModelName', 'alarmModelVersionSummary_alarmModelName' - The name of the alarm model.
+--
+-- 'alarmModelVersion', 'alarmModelVersionSummary_alarmModelVersion' - The version of the alarm model.
+--
+-- 'creationTime', 'alarmModelVersionSummary_creationTime' - The time the alarm model was created, in the Unix epoch format.
+--
+-- 'lastUpdateTime', 'alarmModelVersionSummary_lastUpdateTime' - The time the alarm model was last updated, in the Unix epoch format.
+--
+-- 'roleArn', 'alarmModelVersionSummary_roleArn' - The ARN of the IAM role that allows the alarm to perform actions and
+-- access AWS resources. For more information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'status', 'alarmModelVersionSummary_status' - The status of the alarm model. The status can be one of the following
+-- values:
+--
+-- -   @ACTIVE@ - The alarm model is active and it\'s ready to evaluate
+--     data.
+--
+-- -   @ACTIVATING@ - AWS IoT Events is activating your alarm model.
+--     Activating an alarm model can take up to a few minutes.
+--
+-- -   @INACTIVE@ - The alarm model is inactive, so it isn\'t ready to
+--     evaluate data. Check your alarm model information and update the
+--     alarm model.
+--
+-- -   @FAILED@ - You couldn\'t create or update the alarm model. Check
+--     your alarm model information and try again.
+--
+-- 'statusMessage', 'alarmModelVersionSummary_statusMessage' - Contains information about the status of the alarm model version.
+newAlarmModelVersionSummary ::
+  AlarmModelVersionSummary
+newAlarmModelVersionSummary =
+  AlarmModelVersionSummary'
+    { alarmModelArn =
+        Prelude.Nothing,
+      alarmModelName = Prelude.Nothing,
+      alarmModelVersion = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      lastUpdateTime = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      status = Prelude.Nothing,
+      statusMessage = Prelude.Nothing
+    }
+
+-- | The ARN of the alarm model. For more information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+alarmModelVersionSummary_alarmModelArn :: Lens.Lens' AlarmModelVersionSummary (Prelude.Maybe Prelude.Text)
+alarmModelVersionSummary_alarmModelArn = Lens.lens (\AlarmModelVersionSummary' {alarmModelArn} -> alarmModelArn) (\s@AlarmModelVersionSummary' {} a -> s {alarmModelArn = a} :: AlarmModelVersionSummary)
+
+-- | The name of the alarm model.
+alarmModelVersionSummary_alarmModelName :: Lens.Lens' AlarmModelVersionSummary (Prelude.Maybe Prelude.Text)
+alarmModelVersionSummary_alarmModelName = Lens.lens (\AlarmModelVersionSummary' {alarmModelName} -> alarmModelName) (\s@AlarmModelVersionSummary' {} a -> s {alarmModelName = a} :: AlarmModelVersionSummary)
+
+-- | The version of the alarm model.
+alarmModelVersionSummary_alarmModelVersion :: Lens.Lens' AlarmModelVersionSummary (Prelude.Maybe Prelude.Text)
+alarmModelVersionSummary_alarmModelVersion = Lens.lens (\AlarmModelVersionSummary' {alarmModelVersion} -> alarmModelVersion) (\s@AlarmModelVersionSummary' {} a -> s {alarmModelVersion = a} :: AlarmModelVersionSummary)
+
+-- | The time the alarm model was created, in the Unix epoch format.
+alarmModelVersionSummary_creationTime :: Lens.Lens' AlarmModelVersionSummary (Prelude.Maybe Prelude.UTCTime)
+alarmModelVersionSummary_creationTime = Lens.lens (\AlarmModelVersionSummary' {creationTime} -> creationTime) (\s@AlarmModelVersionSummary' {} a -> s {creationTime = a} :: AlarmModelVersionSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The time the alarm model was last updated, in the Unix epoch format.
+alarmModelVersionSummary_lastUpdateTime :: Lens.Lens' AlarmModelVersionSummary (Prelude.Maybe Prelude.UTCTime)
+alarmModelVersionSummary_lastUpdateTime = Lens.lens (\AlarmModelVersionSummary' {lastUpdateTime} -> lastUpdateTime) (\s@AlarmModelVersionSummary' {} a -> s {lastUpdateTime = a} :: AlarmModelVersionSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The ARN of the IAM role that allows the alarm to perform actions and
+-- access AWS resources. For more information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+alarmModelVersionSummary_roleArn :: Lens.Lens' AlarmModelVersionSummary (Prelude.Maybe Prelude.Text)
+alarmModelVersionSummary_roleArn = Lens.lens (\AlarmModelVersionSummary' {roleArn} -> roleArn) (\s@AlarmModelVersionSummary' {} a -> s {roleArn = a} :: AlarmModelVersionSummary)
+
+-- | The status of the alarm model. The status can be one of the following
+-- values:
+--
+-- -   @ACTIVE@ - The alarm model is active and it\'s ready to evaluate
+--     data.
+--
+-- -   @ACTIVATING@ - AWS IoT Events is activating your alarm model.
+--     Activating an alarm model can take up to a few minutes.
+--
+-- -   @INACTIVE@ - The alarm model is inactive, so it isn\'t ready to
+--     evaluate data. Check your alarm model information and update the
+--     alarm model.
+--
+-- -   @FAILED@ - You couldn\'t create or update the alarm model. Check
+--     your alarm model information and try again.
+alarmModelVersionSummary_status :: Lens.Lens' AlarmModelVersionSummary (Prelude.Maybe AlarmModelVersionStatus)
+alarmModelVersionSummary_status = Lens.lens (\AlarmModelVersionSummary' {status} -> status) (\s@AlarmModelVersionSummary' {} a -> s {status = a} :: AlarmModelVersionSummary)
+
+-- | Contains information about the status of the alarm model version.
+alarmModelVersionSummary_statusMessage :: Lens.Lens' AlarmModelVersionSummary (Prelude.Maybe Prelude.Text)
+alarmModelVersionSummary_statusMessage = Lens.lens (\AlarmModelVersionSummary' {statusMessage} -> statusMessage) (\s@AlarmModelVersionSummary' {} a -> s {statusMessage = a} :: AlarmModelVersionSummary)
+
+instance Data.FromJSON AlarmModelVersionSummary where
+  parseJSON =
+    Data.withObject
+      "AlarmModelVersionSummary"
+      ( \x ->
+          AlarmModelVersionSummary'
+            Prelude.<$> (x Data..:? "alarmModelArn")
+            Prelude.<*> (x Data..:? "alarmModelName")
+            Prelude.<*> (x Data..:? "alarmModelVersion")
+            Prelude.<*> (x Data..:? "creationTime")
+            Prelude.<*> (x Data..:? "lastUpdateTime")
+            Prelude.<*> (x Data..:? "roleArn")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "statusMessage")
+      )
+
+instance Prelude.Hashable AlarmModelVersionSummary where
+  hashWithSalt _salt AlarmModelVersionSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` alarmModelArn
+      `Prelude.hashWithSalt` alarmModelName
+      `Prelude.hashWithSalt` alarmModelVersion
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` lastUpdateTime
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` statusMessage
+
+instance Prelude.NFData AlarmModelVersionSummary where
+  rnf AlarmModelVersionSummary' {..} =
+    Prelude.rnf alarmModelArn
+      `Prelude.seq` Prelude.rnf alarmModelName
+      `Prelude.seq` Prelude.rnf alarmModelVersion
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf lastUpdateTime
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf statusMessage
diff --git a/gen/Amazonka/IoTEvents/Types/AlarmNotification.hs b/gen/Amazonka/IoTEvents/Types/AlarmNotification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/AlarmNotification.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.AlarmNotification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.AlarmNotification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.NotificationAction
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains information about one or more notification actions.
+--
+-- /See:/ 'newAlarmNotification' smart constructor.
+data AlarmNotification = AlarmNotification'
+  { -- | Contains the notification settings of an alarm model. The settings apply
+    -- to all alarms that were created based on this alarm model.
+    notificationActions :: Prelude.Maybe (Prelude.NonEmpty NotificationAction)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AlarmNotification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'notificationActions', 'alarmNotification_notificationActions' - Contains the notification settings of an alarm model. The settings apply
+-- to all alarms that were created based on this alarm model.
+newAlarmNotification ::
+  AlarmNotification
+newAlarmNotification =
+  AlarmNotification'
+    { notificationActions =
+        Prelude.Nothing
+    }
+
+-- | Contains the notification settings of an alarm model. The settings apply
+-- to all alarms that were created based on this alarm model.
+alarmNotification_notificationActions :: Lens.Lens' AlarmNotification (Prelude.Maybe (Prelude.NonEmpty NotificationAction))
+alarmNotification_notificationActions = Lens.lens (\AlarmNotification' {notificationActions} -> notificationActions) (\s@AlarmNotification' {} a -> s {notificationActions = a} :: AlarmNotification) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON AlarmNotification where
+  parseJSON =
+    Data.withObject
+      "AlarmNotification"
+      ( \x ->
+          AlarmNotification'
+            Prelude.<$> (x Data..:? "notificationActions")
+      )
+
+instance Prelude.Hashable AlarmNotification where
+  hashWithSalt _salt AlarmNotification' {..} =
+    _salt `Prelude.hashWithSalt` notificationActions
+
+instance Prelude.NFData AlarmNotification where
+  rnf AlarmNotification' {..} =
+    Prelude.rnf notificationActions
+
+instance Data.ToJSON AlarmNotification where
+  toJSON AlarmNotification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("notificationActions" Data..=)
+              Prelude.<$> notificationActions
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/AlarmRule.hs b/gen/Amazonka/IoTEvents/Types/AlarmRule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/AlarmRule.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.AlarmRule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.AlarmRule where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.SimpleRule
+import qualified Amazonka.Prelude as Prelude
+
+-- | Defines when your alarm is invoked.
+--
+-- /See:/ 'newAlarmRule' smart constructor.
+data AlarmRule = AlarmRule'
+  { -- | A rule that compares an input property value to a threshold value with a
+    -- comparison operator.
+    simpleRule :: Prelude.Maybe SimpleRule
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AlarmRule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'simpleRule', 'alarmRule_simpleRule' - A rule that compares an input property value to a threshold value with a
+-- comparison operator.
+newAlarmRule ::
+  AlarmRule
+newAlarmRule =
+  AlarmRule' {simpleRule = Prelude.Nothing}
+
+-- | A rule that compares an input property value to a threshold value with a
+-- comparison operator.
+alarmRule_simpleRule :: Lens.Lens' AlarmRule (Prelude.Maybe SimpleRule)
+alarmRule_simpleRule = Lens.lens (\AlarmRule' {simpleRule} -> simpleRule) (\s@AlarmRule' {} a -> s {simpleRule = a} :: AlarmRule)
+
+instance Data.FromJSON AlarmRule where
+  parseJSON =
+    Data.withObject
+      "AlarmRule"
+      ( \x ->
+          AlarmRule' Prelude.<$> (x Data..:? "simpleRule")
+      )
+
+instance Prelude.Hashable AlarmRule where
+  hashWithSalt _salt AlarmRule' {..} =
+    _salt `Prelude.hashWithSalt` simpleRule
+
+instance Prelude.NFData AlarmRule where
+  rnf AlarmRule' {..} = Prelude.rnf simpleRule
+
+instance Data.ToJSON AlarmRule where
+  toJSON AlarmRule' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("simpleRule" Data..=) Prelude.<$> simpleRule]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/AnalysisResult.hs b/gen/Amazonka/IoTEvents/Types/AnalysisResult.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/AnalysisResult.hs
@@ -0,0 +1,239 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.AnalysisResult
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.AnalysisResult where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.AnalysisResultLevel
+import Amazonka.IoTEvents.Types.AnalysisResultLocation
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains the result of the analysis.
+--
+-- /See:/ 'newAnalysisResult' smart constructor.
+data AnalysisResult = AnalysisResult'
+  { -- | The severity level of the analysis result. Based on the severity level,
+    -- analysis results fall into three general categories:
+    --
+    -- -   @INFO@ - An information result tells you about a significant field
+    --     in your detector model. This type of result usually doesn\'t require
+    --     immediate action.
+    --
+    -- -   @WARNING@ - A warning result draws special attention to fields that
+    --     might cause issues for your detector model. We recommend that you
+    --     review warnings and take necessary actions before you use your
+    --     detector model in production environments. Otherwise, the detector
+    --     model might not work as expected.
+    --
+    -- -   @ERROR@ - An error result notifies you about a problem found in your
+    --     detector model. You must fix all errors before you can publish your
+    --     detector model.
+    level :: Prelude.Maybe AnalysisResultLevel,
+    -- | Contains one or more locations that you can use to locate the fields in
+    -- your detector model that the analysis result references.
+    locations :: Prelude.Maybe [AnalysisResultLocation],
+    -- | Contains additional information about the analysis result.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The type of the analysis result. Analyses fall into the following types
+    -- based on the validators used to generate the analysis result:
+    --
+    -- -   @supported-actions@ - You must specify AWS IoT Events supported
+    --     actions that work with other AWS services in a supported AWS Region.
+    --
+    -- -   @service-limits@ - Resources or API operations can\'t exceed service
+    --     quotas (also known as limits). Update your detector model or request
+    --     a quota increase.
+    --
+    -- -   @structure@ - The detector model must follow a structure that AWS
+    --     IoT Events supports.
+    --
+    -- -   @expression-syntax@ - Your expression must follow the required
+    --     syntax.
+    --
+    -- -   @data-type@ - Data types referenced in the detector model must be
+    --     compatible.
+    --
+    -- -   @referenced-data@ - You must define the data referenced in your
+    --     detector model before you can use the data.
+    --
+    -- -   @referenced-resource@ - Resources that the detector model uses must
+    --     be available.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-analyze-api.html Running detector model analyses>
+    -- in the /AWS IoT Events Developer Guide/.
+    type' :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AnalysisResult' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'level', 'analysisResult_level' - The severity level of the analysis result. Based on the severity level,
+-- analysis results fall into three general categories:
+--
+-- -   @INFO@ - An information result tells you about a significant field
+--     in your detector model. This type of result usually doesn\'t require
+--     immediate action.
+--
+-- -   @WARNING@ - A warning result draws special attention to fields that
+--     might cause issues for your detector model. We recommend that you
+--     review warnings and take necessary actions before you use your
+--     detector model in production environments. Otherwise, the detector
+--     model might not work as expected.
+--
+-- -   @ERROR@ - An error result notifies you about a problem found in your
+--     detector model. You must fix all errors before you can publish your
+--     detector model.
+--
+-- 'locations', 'analysisResult_locations' - Contains one or more locations that you can use to locate the fields in
+-- your detector model that the analysis result references.
+--
+-- 'message', 'analysisResult_message' - Contains additional information about the analysis result.
+--
+-- 'type'', 'analysisResult_type' - The type of the analysis result. Analyses fall into the following types
+-- based on the validators used to generate the analysis result:
+--
+-- -   @supported-actions@ - You must specify AWS IoT Events supported
+--     actions that work with other AWS services in a supported AWS Region.
+--
+-- -   @service-limits@ - Resources or API operations can\'t exceed service
+--     quotas (also known as limits). Update your detector model or request
+--     a quota increase.
+--
+-- -   @structure@ - The detector model must follow a structure that AWS
+--     IoT Events supports.
+--
+-- -   @expression-syntax@ - Your expression must follow the required
+--     syntax.
+--
+-- -   @data-type@ - Data types referenced in the detector model must be
+--     compatible.
+--
+-- -   @referenced-data@ - You must define the data referenced in your
+--     detector model before you can use the data.
+--
+-- -   @referenced-resource@ - Resources that the detector model uses must
+--     be available.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-analyze-api.html Running detector model analyses>
+-- in the /AWS IoT Events Developer Guide/.
+newAnalysisResult ::
+  AnalysisResult
+newAnalysisResult =
+  AnalysisResult'
+    { level = Prelude.Nothing,
+      locations = Prelude.Nothing,
+      message = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The severity level of the analysis result. Based on the severity level,
+-- analysis results fall into three general categories:
+--
+-- -   @INFO@ - An information result tells you about a significant field
+--     in your detector model. This type of result usually doesn\'t require
+--     immediate action.
+--
+-- -   @WARNING@ - A warning result draws special attention to fields that
+--     might cause issues for your detector model. We recommend that you
+--     review warnings and take necessary actions before you use your
+--     detector model in production environments. Otherwise, the detector
+--     model might not work as expected.
+--
+-- -   @ERROR@ - An error result notifies you about a problem found in your
+--     detector model. You must fix all errors before you can publish your
+--     detector model.
+analysisResult_level :: Lens.Lens' AnalysisResult (Prelude.Maybe AnalysisResultLevel)
+analysisResult_level = Lens.lens (\AnalysisResult' {level} -> level) (\s@AnalysisResult' {} a -> s {level = a} :: AnalysisResult)
+
+-- | Contains one or more locations that you can use to locate the fields in
+-- your detector model that the analysis result references.
+analysisResult_locations :: Lens.Lens' AnalysisResult (Prelude.Maybe [AnalysisResultLocation])
+analysisResult_locations = Lens.lens (\AnalysisResult' {locations} -> locations) (\s@AnalysisResult' {} a -> s {locations = a} :: AnalysisResult) Prelude.. Lens.mapping Lens.coerced
+
+-- | Contains additional information about the analysis result.
+analysisResult_message :: Lens.Lens' AnalysisResult (Prelude.Maybe Prelude.Text)
+analysisResult_message = Lens.lens (\AnalysisResult' {message} -> message) (\s@AnalysisResult' {} a -> s {message = a} :: AnalysisResult)
+
+-- | The type of the analysis result. Analyses fall into the following types
+-- based on the validators used to generate the analysis result:
+--
+-- -   @supported-actions@ - You must specify AWS IoT Events supported
+--     actions that work with other AWS services in a supported AWS Region.
+--
+-- -   @service-limits@ - Resources or API operations can\'t exceed service
+--     quotas (also known as limits). Update your detector model or request
+--     a quota increase.
+--
+-- -   @structure@ - The detector model must follow a structure that AWS
+--     IoT Events supports.
+--
+-- -   @expression-syntax@ - Your expression must follow the required
+--     syntax.
+--
+-- -   @data-type@ - Data types referenced in the detector model must be
+--     compatible.
+--
+-- -   @referenced-data@ - You must define the data referenced in your
+--     detector model before you can use the data.
+--
+-- -   @referenced-resource@ - Resources that the detector model uses must
+--     be available.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-analyze-api.html Running detector model analyses>
+-- in the /AWS IoT Events Developer Guide/.
+analysisResult_type :: Lens.Lens' AnalysisResult (Prelude.Maybe Prelude.Text)
+analysisResult_type = Lens.lens (\AnalysisResult' {type'} -> type') (\s@AnalysisResult' {} a -> s {type' = a} :: AnalysisResult)
+
+instance Data.FromJSON AnalysisResult where
+  parseJSON =
+    Data.withObject
+      "AnalysisResult"
+      ( \x ->
+          AnalysisResult'
+            Prelude.<$> (x Data..:? "level")
+            Prelude.<*> (x Data..:? "locations" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "message")
+            Prelude.<*> (x Data..:? "type")
+      )
+
+instance Prelude.Hashable AnalysisResult where
+  hashWithSalt _salt AnalysisResult' {..} =
+    _salt
+      `Prelude.hashWithSalt` level
+      `Prelude.hashWithSalt` locations
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData AnalysisResult where
+  rnf AnalysisResult' {..} =
+    Prelude.rnf level
+      `Prelude.seq` Prelude.rnf locations
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/IoTEvents/Types/AnalysisResultLevel.hs b/gen/Amazonka/IoTEvents/Types/AnalysisResultLevel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/AnalysisResultLevel.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.AnalysisResultLevel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.AnalysisResultLevel
+  ( AnalysisResultLevel
+      ( ..,
+        AnalysisResultLevel_ERROR,
+        AnalysisResultLevel_INFO,
+        AnalysisResultLevel_WARNING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AnalysisResultLevel = AnalysisResultLevel'
+  { fromAnalysisResultLevel ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AnalysisResultLevel_ERROR :: AnalysisResultLevel
+pattern AnalysisResultLevel_ERROR = AnalysisResultLevel' "ERROR"
+
+pattern AnalysisResultLevel_INFO :: AnalysisResultLevel
+pattern AnalysisResultLevel_INFO = AnalysisResultLevel' "INFO"
+
+pattern AnalysisResultLevel_WARNING :: AnalysisResultLevel
+pattern AnalysisResultLevel_WARNING = AnalysisResultLevel' "WARNING"
+
+{-# COMPLETE
+  AnalysisResultLevel_ERROR,
+  AnalysisResultLevel_INFO,
+  AnalysisResultLevel_WARNING,
+  AnalysisResultLevel'
+  #-}
diff --git a/gen/Amazonka/IoTEvents/Types/AnalysisResultLocation.hs b/gen/Amazonka/IoTEvents/Types/AnalysisResultLocation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/AnalysisResultLocation.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.AnalysisResultLocation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.AnalysisResultLocation 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
+
+-- | Contains information that you can use to locate the field in your
+-- detector model that the analysis result references.
+--
+-- /See:/ 'newAnalysisResultLocation' smart constructor.
+data AnalysisResultLocation = AnalysisResultLocation'
+  { -- | A <https://github.com/json-path/JsonPath JsonPath> expression that
+    -- identifies the error field in your detector model.
+    path :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AnalysisResultLocation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'path', 'analysisResultLocation_path' - A <https://github.com/json-path/JsonPath JsonPath> expression that
+-- identifies the error field in your detector model.
+newAnalysisResultLocation ::
+  AnalysisResultLocation
+newAnalysisResultLocation =
+  AnalysisResultLocation' {path = Prelude.Nothing}
+
+-- | A <https://github.com/json-path/JsonPath JsonPath> expression that
+-- identifies the error field in your detector model.
+analysisResultLocation_path :: Lens.Lens' AnalysisResultLocation (Prelude.Maybe Prelude.Text)
+analysisResultLocation_path = Lens.lens (\AnalysisResultLocation' {path} -> path) (\s@AnalysisResultLocation' {} a -> s {path = a} :: AnalysisResultLocation)
+
+instance Data.FromJSON AnalysisResultLocation where
+  parseJSON =
+    Data.withObject
+      "AnalysisResultLocation"
+      ( \x ->
+          AnalysisResultLocation'
+            Prelude.<$> (x Data..:? "path")
+      )
+
+instance Prelude.Hashable AnalysisResultLocation where
+  hashWithSalt _salt AnalysisResultLocation' {..} =
+    _salt `Prelude.hashWithSalt` path
+
+instance Prelude.NFData AnalysisResultLocation where
+  rnf AnalysisResultLocation' {..} = Prelude.rnf path
diff --git a/gen/Amazonka/IoTEvents/Types/AnalysisStatus.hs b/gen/Amazonka/IoTEvents/Types/AnalysisStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/AnalysisStatus.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.AnalysisStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.AnalysisStatus
+  ( AnalysisStatus
+      ( ..,
+        AnalysisStatus_COMPLETE,
+        AnalysisStatus_FAILED,
+        AnalysisStatus_RUNNING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AnalysisStatus = AnalysisStatus'
+  { fromAnalysisStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AnalysisStatus_COMPLETE :: AnalysisStatus
+pattern AnalysisStatus_COMPLETE = AnalysisStatus' "COMPLETE"
+
+pattern AnalysisStatus_FAILED :: AnalysisStatus
+pattern AnalysisStatus_FAILED = AnalysisStatus' "FAILED"
+
+pattern AnalysisStatus_RUNNING :: AnalysisStatus
+pattern AnalysisStatus_RUNNING = AnalysisStatus' "RUNNING"
+
+{-# COMPLETE
+  AnalysisStatus_COMPLETE,
+  AnalysisStatus_FAILED,
+  AnalysisStatus_RUNNING,
+  AnalysisStatus'
+  #-}
diff --git a/gen/Amazonka/IoTEvents/Types/AssetPropertyTimestamp.hs b/gen/Amazonka/IoTEvents/Types/AssetPropertyTimestamp.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/AssetPropertyTimestamp.hs
@@ -0,0 +1,134 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.AssetPropertyTimestamp
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.AssetPropertyTimestamp where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A structure that contains timestamp information. For more information,
+-- see
+-- <https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_TimeInNanos.html TimeInNanos>
+-- in the /AWS IoT SiteWise API Reference/.
+--
+-- You must use expressions for all parameters in @AssetPropertyTimestamp@.
+-- The expressions accept literals, operators, functions, references, and
+-- substitution templates.
+--
+-- __Examples__
+--
+-- -   For literal values, the expressions must contain single quotes. For
+--     example, the value for the @timeInSeconds@ parameter can be
+--     @\'1586400675\'@.
+--
+-- -   For references, you must specify either variables or input values.
+--     For example, the value for the @offsetInNanos@ parameter can be
+--     @$variable.time@.
+--
+-- -   For a substitution template, you must use @${}@, and the template
+--     must be in single quotes. A substitution template can also contain a
+--     combination of literals, operators, functions, references, and
+--     substitution templates.
+--
+--     In the following example, the value for the @timeInSeconds@
+--     parameter uses a substitution template.
+--
+--     @\'${$input.TemperatureInput.sensorData.timestamp \/ 1000}\'@
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-expressions.html Expressions>
+-- in the /AWS IoT Events Developer Guide/.
+--
+-- /See:/ 'newAssetPropertyTimestamp' smart constructor.
+data AssetPropertyTimestamp = AssetPropertyTimestamp'
+  { -- | The nanosecond offset converted from @timeInSeconds@. The valid range is
+    -- between 0-999999999.
+    offsetInNanos :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp, in seconds, in the Unix epoch format. The valid range is
+    -- between 1-31556889864403199.
+    timeInSeconds :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssetPropertyTimestamp' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'offsetInNanos', 'assetPropertyTimestamp_offsetInNanos' - The nanosecond offset converted from @timeInSeconds@. The valid range is
+-- between 0-999999999.
+--
+-- 'timeInSeconds', 'assetPropertyTimestamp_timeInSeconds' - The timestamp, in seconds, in the Unix epoch format. The valid range is
+-- between 1-31556889864403199.
+newAssetPropertyTimestamp ::
+  -- | 'timeInSeconds'
+  Prelude.Text ->
+  AssetPropertyTimestamp
+newAssetPropertyTimestamp pTimeInSeconds_ =
+  AssetPropertyTimestamp'
+    { offsetInNanos =
+        Prelude.Nothing,
+      timeInSeconds = pTimeInSeconds_
+    }
+
+-- | The nanosecond offset converted from @timeInSeconds@. The valid range is
+-- between 0-999999999.
+assetPropertyTimestamp_offsetInNanos :: Lens.Lens' AssetPropertyTimestamp (Prelude.Maybe Prelude.Text)
+assetPropertyTimestamp_offsetInNanos = Lens.lens (\AssetPropertyTimestamp' {offsetInNanos} -> offsetInNanos) (\s@AssetPropertyTimestamp' {} a -> s {offsetInNanos = a} :: AssetPropertyTimestamp)
+
+-- | The timestamp, in seconds, in the Unix epoch format. The valid range is
+-- between 1-31556889864403199.
+assetPropertyTimestamp_timeInSeconds :: Lens.Lens' AssetPropertyTimestamp Prelude.Text
+assetPropertyTimestamp_timeInSeconds = Lens.lens (\AssetPropertyTimestamp' {timeInSeconds} -> timeInSeconds) (\s@AssetPropertyTimestamp' {} a -> s {timeInSeconds = a} :: AssetPropertyTimestamp)
+
+instance Data.FromJSON AssetPropertyTimestamp where
+  parseJSON =
+    Data.withObject
+      "AssetPropertyTimestamp"
+      ( \x ->
+          AssetPropertyTimestamp'
+            Prelude.<$> (x Data..:? "offsetInNanos")
+            Prelude.<*> (x Data..: "timeInSeconds")
+      )
+
+instance Prelude.Hashable AssetPropertyTimestamp where
+  hashWithSalt _salt AssetPropertyTimestamp' {..} =
+    _salt
+      `Prelude.hashWithSalt` offsetInNanos
+      `Prelude.hashWithSalt` timeInSeconds
+
+instance Prelude.NFData AssetPropertyTimestamp where
+  rnf AssetPropertyTimestamp' {..} =
+    Prelude.rnf offsetInNanos
+      `Prelude.seq` Prelude.rnf timeInSeconds
+
+instance Data.ToJSON AssetPropertyTimestamp where
+  toJSON AssetPropertyTimestamp' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("offsetInNanos" Data..=) Prelude.<$> offsetInNanos,
+            Prelude.Just
+              ("timeInSeconds" Data..= timeInSeconds)
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/AssetPropertyValue.hs b/gen/Amazonka/IoTEvents/Types/AssetPropertyValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/AssetPropertyValue.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.IoTEvents.Types.AssetPropertyValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.AssetPropertyValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.AssetPropertyTimestamp
+import Amazonka.IoTEvents.Types.AssetPropertyVariant
+import qualified Amazonka.Prelude as Prelude
+
+-- | A structure that contains value information. For more information, see
+-- <https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_AssetPropertyValue.html AssetPropertyValue>
+-- in the /AWS IoT SiteWise API Reference/.
+--
+-- You must use expressions for all parameters in @AssetPropertyValue@. The
+-- expressions accept literals, operators, functions, references, and
+-- substitution templates.
+--
+-- __Examples__
+--
+-- -   For literal values, the expressions must contain single quotes. For
+--     example, the value for the @quality@ parameter can be @\'GOOD\'@.
+--
+-- -   For references, you must specify either variables or input values.
+--     For example, the value for the @quality@ parameter can be
+--     @$input.TemperatureInput.sensorData.quality@.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-expressions.html Expressions>
+-- in the /AWS IoT Events Developer Guide/.
+--
+-- /See:/ 'newAssetPropertyValue' smart constructor.
+data AssetPropertyValue = AssetPropertyValue'
+  { -- | The quality of the asset property value. The value must be @\'GOOD\'@,
+    -- @\'BAD\'@, or @\'UNCERTAIN\'@.
+    quality :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp associated with the asset property value. The default is
+    -- the current event time.
+    timestamp :: Prelude.Maybe AssetPropertyTimestamp,
+    -- | The value to send to an asset property.
+    value :: Prelude.Maybe AssetPropertyVariant
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssetPropertyValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'quality', 'assetPropertyValue_quality' - The quality of the asset property value. The value must be @\'GOOD\'@,
+-- @\'BAD\'@, or @\'UNCERTAIN\'@.
+--
+-- 'timestamp', 'assetPropertyValue_timestamp' - The timestamp associated with the asset property value. The default is
+-- the current event time.
+--
+-- 'value', 'assetPropertyValue_value' - The value to send to an asset property.
+newAssetPropertyValue ::
+  AssetPropertyValue
+newAssetPropertyValue =
+  AssetPropertyValue'
+    { quality = Prelude.Nothing,
+      timestamp = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | The quality of the asset property value. The value must be @\'GOOD\'@,
+-- @\'BAD\'@, or @\'UNCERTAIN\'@.
+assetPropertyValue_quality :: Lens.Lens' AssetPropertyValue (Prelude.Maybe Prelude.Text)
+assetPropertyValue_quality = Lens.lens (\AssetPropertyValue' {quality} -> quality) (\s@AssetPropertyValue' {} a -> s {quality = a} :: AssetPropertyValue)
+
+-- | The timestamp associated with the asset property value. The default is
+-- the current event time.
+assetPropertyValue_timestamp :: Lens.Lens' AssetPropertyValue (Prelude.Maybe AssetPropertyTimestamp)
+assetPropertyValue_timestamp = Lens.lens (\AssetPropertyValue' {timestamp} -> timestamp) (\s@AssetPropertyValue' {} a -> s {timestamp = a} :: AssetPropertyValue)
+
+-- | The value to send to an asset property.
+assetPropertyValue_value :: Lens.Lens' AssetPropertyValue (Prelude.Maybe AssetPropertyVariant)
+assetPropertyValue_value = Lens.lens (\AssetPropertyValue' {value} -> value) (\s@AssetPropertyValue' {} a -> s {value = a} :: AssetPropertyValue)
+
+instance Data.FromJSON AssetPropertyValue where
+  parseJSON =
+    Data.withObject
+      "AssetPropertyValue"
+      ( \x ->
+          AssetPropertyValue'
+            Prelude.<$> (x Data..:? "quality")
+            Prelude.<*> (x Data..:? "timestamp")
+            Prelude.<*> (x Data..:? "value")
+      )
+
+instance Prelude.Hashable AssetPropertyValue where
+  hashWithSalt _salt AssetPropertyValue' {..} =
+    _salt
+      `Prelude.hashWithSalt` quality
+      `Prelude.hashWithSalt` timestamp
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData AssetPropertyValue where
+  rnf AssetPropertyValue' {..} =
+    Prelude.rnf quality
+      `Prelude.seq` Prelude.rnf timestamp
+      `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON AssetPropertyValue where
+  toJSON AssetPropertyValue' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("quality" Data..=) Prelude.<$> quality,
+            ("timestamp" Data..=) Prelude.<$> timestamp,
+            ("value" Data..=) Prelude.<$> value
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/AssetPropertyVariant.hs b/gen/Amazonka/IoTEvents/Types/AssetPropertyVariant.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/AssetPropertyVariant.hs
@@ -0,0 +1,171 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.AssetPropertyVariant
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.AssetPropertyVariant where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A structure that contains an asset property value. For more information,
+-- see
+-- <https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_Variant.html Variant>
+-- in the /AWS IoT SiteWise API Reference/.
+--
+-- You must use expressions for all parameters in @AssetPropertyVariant@.
+-- The expressions accept literals, operators, functions, references, and
+-- substitution templates.
+--
+-- __Examples__
+--
+-- -   For literal values, the expressions must contain single quotes. For
+--     example, the value for the @integerValue@ parameter can be
+--     @\'100\'@.
+--
+-- -   For references, you must specify either variables or parameters. For
+--     example, the value for the @booleanValue@ parameter can be
+--     @$variable.offline@.
+--
+-- -   For a substitution template, you must use @${}@, and the template
+--     must be in single quotes. A substitution template can also contain a
+--     combination of literals, operators, functions, references, and
+--     substitution templates.
+--
+--     In the following example, the value for the @doubleValue@ parameter
+--     uses a substitution template.
+--
+--     @\'${$input.TemperatureInput.sensorData.temperature * 6 \/ 5 + 32}\'@
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-expressions.html Expressions>
+-- in the /AWS IoT Events Developer Guide/.
+--
+-- You must specify one of the following value types, depending on the
+-- @dataType@ of the specified asset property. For more information, see
+-- <https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_AssetProperty.html AssetProperty>
+-- in the /AWS IoT SiteWise API Reference/.
+--
+-- /See:/ 'newAssetPropertyVariant' smart constructor.
+data AssetPropertyVariant = AssetPropertyVariant'
+  { -- | The asset property value is a Boolean value that must be @\'TRUE\'@ or
+    -- @\'FALSE\'@. You must use an expression, and the evaluated result should
+    -- be a Boolean value.
+    booleanValue :: Prelude.Maybe Prelude.Text,
+    -- | The asset property value is a double. You must use an expression, and
+    -- the evaluated result should be a double.
+    doubleValue :: Prelude.Maybe Prelude.Text,
+    -- | The asset property value is an integer. You must use an expression, and
+    -- the evaluated result should be an integer.
+    integerValue :: Prelude.Maybe Prelude.Text,
+    -- | The asset property value is a string. You must use an expression, and
+    -- the evaluated result should be a string.
+    stringValue :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssetPropertyVariant' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'booleanValue', 'assetPropertyVariant_booleanValue' - The asset property value is a Boolean value that must be @\'TRUE\'@ or
+-- @\'FALSE\'@. You must use an expression, and the evaluated result should
+-- be a Boolean value.
+--
+-- 'doubleValue', 'assetPropertyVariant_doubleValue' - The asset property value is a double. You must use an expression, and
+-- the evaluated result should be a double.
+--
+-- 'integerValue', 'assetPropertyVariant_integerValue' - The asset property value is an integer. You must use an expression, and
+-- the evaluated result should be an integer.
+--
+-- 'stringValue', 'assetPropertyVariant_stringValue' - The asset property value is a string. You must use an expression, and
+-- the evaluated result should be a string.
+newAssetPropertyVariant ::
+  AssetPropertyVariant
+newAssetPropertyVariant =
+  AssetPropertyVariant'
+    { booleanValue =
+        Prelude.Nothing,
+      doubleValue = Prelude.Nothing,
+      integerValue = Prelude.Nothing,
+      stringValue = Prelude.Nothing
+    }
+
+-- | The asset property value is a Boolean value that must be @\'TRUE\'@ or
+-- @\'FALSE\'@. You must use an expression, and the evaluated result should
+-- be a Boolean value.
+assetPropertyVariant_booleanValue :: Lens.Lens' AssetPropertyVariant (Prelude.Maybe Prelude.Text)
+assetPropertyVariant_booleanValue = Lens.lens (\AssetPropertyVariant' {booleanValue} -> booleanValue) (\s@AssetPropertyVariant' {} a -> s {booleanValue = a} :: AssetPropertyVariant)
+
+-- | The asset property value is a double. You must use an expression, and
+-- the evaluated result should be a double.
+assetPropertyVariant_doubleValue :: Lens.Lens' AssetPropertyVariant (Prelude.Maybe Prelude.Text)
+assetPropertyVariant_doubleValue = Lens.lens (\AssetPropertyVariant' {doubleValue} -> doubleValue) (\s@AssetPropertyVariant' {} a -> s {doubleValue = a} :: AssetPropertyVariant)
+
+-- | The asset property value is an integer. You must use an expression, and
+-- the evaluated result should be an integer.
+assetPropertyVariant_integerValue :: Lens.Lens' AssetPropertyVariant (Prelude.Maybe Prelude.Text)
+assetPropertyVariant_integerValue = Lens.lens (\AssetPropertyVariant' {integerValue} -> integerValue) (\s@AssetPropertyVariant' {} a -> s {integerValue = a} :: AssetPropertyVariant)
+
+-- | The asset property value is a string. You must use an expression, and
+-- the evaluated result should be a string.
+assetPropertyVariant_stringValue :: Lens.Lens' AssetPropertyVariant (Prelude.Maybe Prelude.Text)
+assetPropertyVariant_stringValue = Lens.lens (\AssetPropertyVariant' {stringValue} -> stringValue) (\s@AssetPropertyVariant' {} a -> s {stringValue = a} :: AssetPropertyVariant)
+
+instance Data.FromJSON AssetPropertyVariant where
+  parseJSON =
+    Data.withObject
+      "AssetPropertyVariant"
+      ( \x ->
+          AssetPropertyVariant'
+            Prelude.<$> (x Data..:? "booleanValue")
+            Prelude.<*> (x Data..:? "doubleValue")
+            Prelude.<*> (x Data..:? "integerValue")
+            Prelude.<*> (x Data..:? "stringValue")
+      )
+
+instance Prelude.Hashable AssetPropertyVariant where
+  hashWithSalt _salt AssetPropertyVariant' {..} =
+    _salt
+      `Prelude.hashWithSalt` booleanValue
+      `Prelude.hashWithSalt` doubleValue
+      `Prelude.hashWithSalt` integerValue
+      `Prelude.hashWithSalt` stringValue
+
+instance Prelude.NFData AssetPropertyVariant where
+  rnf AssetPropertyVariant' {..} =
+    Prelude.rnf booleanValue
+      `Prelude.seq` Prelude.rnf doubleValue
+      `Prelude.seq` Prelude.rnf integerValue
+      `Prelude.seq` Prelude.rnf stringValue
+
+instance Data.ToJSON AssetPropertyVariant where
+  toJSON AssetPropertyVariant' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("booleanValue" Data..=) Prelude.<$> booleanValue,
+            ("doubleValue" Data..=) Prelude.<$> doubleValue,
+            ("integerValue" Data..=) Prelude.<$> integerValue,
+            ("stringValue" Data..=) Prelude.<$> stringValue
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/Attribute.hs b/gen/Amazonka/IoTEvents/Types/Attribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/Attribute.hs
@@ -0,0 +1,101 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.Attribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.Attribute 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 attributes from the JSON payload that are made available by the
+-- input. Inputs are derived from messages sent to the AWS IoT Events
+-- system using @BatchPutMessage@. Each such message contains a JSON
+-- payload. Those attributes (and their paired values) specified here are
+-- available for use in the @condition@ expressions used by detectors.
+--
+-- /See:/ 'newAttribute' smart constructor.
+data Attribute = Attribute'
+  { -- | An expression that specifies an attribute-value pair in a JSON
+    -- structure. Use this to specify an attribute from the JSON payload that
+    -- is made available by the input. Inputs are derived from messages sent to
+    -- AWS IoT Events (@BatchPutMessage@). Each such message contains a JSON
+    -- payload. The attribute (and its paired value) specified here are
+    -- available for use in the @condition@ expressions used by detectors.
+    --
+    -- Syntax: @\<field-name>.\<field-name>...@
+    jsonPath :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Attribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jsonPath', 'attribute_jsonPath' - An expression that specifies an attribute-value pair in a JSON
+-- structure. Use this to specify an attribute from the JSON payload that
+-- is made available by the input. Inputs are derived from messages sent to
+-- AWS IoT Events (@BatchPutMessage@). Each such message contains a JSON
+-- payload. The attribute (and its paired value) specified here are
+-- available for use in the @condition@ expressions used by detectors.
+--
+-- Syntax: @\<field-name>.\<field-name>...@
+newAttribute ::
+  -- | 'jsonPath'
+  Prelude.Text ->
+  Attribute
+newAttribute pJsonPath_ =
+  Attribute' {jsonPath = pJsonPath_}
+
+-- | An expression that specifies an attribute-value pair in a JSON
+-- structure. Use this to specify an attribute from the JSON payload that
+-- is made available by the input. Inputs are derived from messages sent to
+-- AWS IoT Events (@BatchPutMessage@). Each such message contains a JSON
+-- payload. The attribute (and its paired value) specified here are
+-- available for use in the @condition@ expressions used by detectors.
+--
+-- Syntax: @\<field-name>.\<field-name>...@
+attribute_jsonPath :: Lens.Lens' Attribute Prelude.Text
+attribute_jsonPath = Lens.lens (\Attribute' {jsonPath} -> jsonPath) (\s@Attribute' {} a -> s {jsonPath = a} :: Attribute)
+
+instance Data.FromJSON Attribute where
+  parseJSON =
+    Data.withObject
+      "Attribute"
+      ( \x ->
+          Attribute' Prelude.<$> (x Data..: "jsonPath")
+      )
+
+instance Prelude.Hashable Attribute where
+  hashWithSalt _salt Attribute' {..} =
+    _salt `Prelude.hashWithSalt` jsonPath
+
+instance Prelude.NFData Attribute where
+  rnf Attribute' {..} = Prelude.rnf jsonPath
+
+instance Data.ToJSON Attribute where
+  toJSON Attribute' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("jsonPath" Data..= jsonPath)]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/ClearTimerAction.hs b/gen/Amazonka/IoTEvents/Types/ClearTimerAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/ClearTimerAction.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.ClearTimerAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.ClearTimerAction where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information needed to clear the timer.
+--
+-- /See:/ 'newClearTimerAction' smart constructor.
+data ClearTimerAction = ClearTimerAction'
+  { -- | The name of the timer to clear.
+    timerName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClearTimerAction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'timerName', 'clearTimerAction_timerName' - The name of the timer to clear.
+newClearTimerAction ::
+  -- | 'timerName'
+  Prelude.Text ->
+  ClearTimerAction
+newClearTimerAction pTimerName_ =
+  ClearTimerAction' {timerName = pTimerName_}
+
+-- | The name of the timer to clear.
+clearTimerAction_timerName :: Lens.Lens' ClearTimerAction Prelude.Text
+clearTimerAction_timerName = Lens.lens (\ClearTimerAction' {timerName} -> timerName) (\s@ClearTimerAction' {} a -> s {timerName = a} :: ClearTimerAction)
+
+instance Data.FromJSON ClearTimerAction where
+  parseJSON =
+    Data.withObject
+      "ClearTimerAction"
+      ( \x ->
+          ClearTimerAction'
+            Prelude.<$> (x Data..: "timerName")
+      )
+
+instance Prelude.Hashable ClearTimerAction where
+  hashWithSalt _salt ClearTimerAction' {..} =
+    _salt `Prelude.hashWithSalt` timerName
+
+instance Prelude.NFData ClearTimerAction where
+  rnf ClearTimerAction' {..} = Prelude.rnf timerName
+
+instance Data.ToJSON ClearTimerAction where
+  toJSON ClearTimerAction' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("timerName" Data..= timerName)]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/ComparisonOperator.hs b/gen/Amazonka/IoTEvents/Types/ComparisonOperator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/ComparisonOperator.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.ComparisonOperator
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.ComparisonOperator
+  ( ComparisonOperator
+      ( ..,
+        ComparisonOperator_EQUAL,
+        ComparisonOperator_GREATER,
+        ComparisonOperator_GREATER_OR_EQUAL,
+        ComparisonOperator_LESS,
+        ComparisonOperator_LESS_OR_EQUAL,
+        ComparisonOperator_NOT_EQUAL
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ComparisonOperator = ComparisonOperator'
+  { fromComparisonOperator ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ComparisonOperator_EQUAL :: ComparisonOperator
+pattern ComparisonOperator_EQUAL = ComparisonOperator' "EQUAL"
+
+pattern ComparisonOperator_GREATER :: ComparisonOperator
+pattern ComparisonOperator_GREATER = ComparisonOperator' "GREATER"
+
+pattern ComparisonOperator_GREATER_OR_EQUAL :: ComparisonOperator
+pattern ComparisonOperator_GREATER_OR_EQUAL = ComparisonOperator' "GREATER_OR_EQUAL"
+
+pattern ComparisonOperator_LESS :: ComparisonOperator
+pattern ComparisonOperator_LESS = ComparisonOperator' "LESS"
+
+pattern ComparisonOperator_LESS_OR_EQUAL :: ComparisonOperator
+pattern ComparisonOperator_LESS_OR_EQUAL = ComparisonOperator' "LESS_OR_EQUAL"
+
+pattern ComparisonOperator_NOT_EQUAL :: ComparisonOperator
+pattern ComparisonOperator_NOT_EQUAL = ComparisonOperator' "NOT_EQUAL"
+
+{-# COMPLETE
+  ComparisonOperator_EQUAL,
+  ComparisonOperator_GREATER,
+  ComparisonOperator_GREATER_OR_EQUAL,
+  ComparisonOperator_LESS,
+  ComparisonOperator_LESS_OR_EQUAL,
+  ComparisonOperator_NOT_EQUAL,
+  ComparisonOperator'
+  #-}
diff --git a/gen/Amazonka/IoTEvents/Types/DetectorDebugOption.hs b/gen/Amazonka/IoTEvents/Types/DetectorDebugOption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/DetectorDebugOption.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.DetectorDebugOption
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.DetectorDebugOption 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 detector model and the specific detectors (instances) for which the
+-- logging level is given.
+--
+-- /See:/ 'newDetectorDebugOption' smart constructor.
+data DetectorDebugOption = DetectorDebugOption'
+  { -- | The value of the input attribute key used to create the detector (the
+    -- instance of the detector model).
+    keyValue :: Prelude.Maybe Prelude.Text,
+    -- | The name of the detector model.
+    detectorModelName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetectorDebugOption' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'keyValue', 'detectorDebugOption_keyValue' - The value of the input attribute key used to create the detector (the
+-- instance of the detector model).
+--
+-- 'detectorModelName', 'detectorDebugOption_detectorModelName' - The name of the detector model.
+newDetectorDebugOption ::
+  -- | 'detectorModelName'
+  Prelude.Text ->
+  DetectorDebugOption
+newDetectorDebugOption pDetectorModelName_ =
+  DetectorDebugOption'
+    { keyValue = Prelude.Nothing,
+      detectorModelName = pDetectorModelName_
+    }
+
+-- | The value of the input attribute key used to create the detector (the
+-- instance of the detector model).
+detectorDebugOption_keyValue :: Lens.Lens' DetectorDebugOption (Prelude.Maybe Prelude.Text)
+detectorDebugOption_keyValue = Lens.lens (\DetectorDebugOption' {keyValue} -> keyValue) (\s@DetectorDebugOption' {} a -> s {keyValue = a} :: DetectorDebugOption)
+
+-- | The name of the detector model.
+detectorDebugOption_detectorModelName :: Lens.Lens' DetectorDebugOption Prelude.Text
+detectorDebugOption_detectorModelName = Lens.lens (\DetectorDebugOption' {detectorModelName} -> detectorModelName) (\s@DetectorDebugOption' {} a -> s {detectorModelName = a} :: DetectorDebugOption)
+
+instance Data.FromJSON DetectorDebugOption where
+  parseJSON =
+    Data.withObject
+      "DetectorDebugOption"
+      ( \x ->
+          DetectorDebugOption'
+            Prelude.<$> (x Data..:? "keyValue")
+            Prelude.<*> (x Data..: "detectorModelName")
+      )
+
+instance Prelude.Hashable DetectorDebugOption where
+  hashWithSalt _salt DetectorDebugOption' {..} =
+    _salt
+      `Prelude.hashWithSalt` keyValue
+      `Prelude.hashWithSalt` detectorModelName
+
+instance Prelude.NFData DetectorDebugOption where
+  rnf DetectorDebugOption' {..} =
+    Prelude.rnf keyValue
+      `Prelude.seq` Prelude.rnf detectorModelName
+
+instance Data.ToJSON DetectorDebugOption where
+  toJSON DetectorDebugOption' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("keyValue" Data..=) Prelude.<$> keyValue,
+            Prelude.Just
+              ("detectorModelName" Data..= detectorModelName)
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/DetectorModel.hs b/gen/Amazonka/IoTEvents/Types/DetectorModel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/DetectorModel.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.DetectorModel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.DetectorModel where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.DetectorModelConfiguration
+import Amazonka.IoTEvents.Types.DetectorModelDefinition
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the detector model.
+--
+-- /See:/ 'newDetectorModel' smart constructor.
+data DetectorModel = DetectorModel'
+  { -- | Information about how the detector is configured.
+    detectorModelConfiguration :: Prelude.Maybe DetectorModelConfiguration,
+    -- | Information that defines how a detector operates.
+    detectorModelDefinition :: Prelude.Maybe DetectorModelDefinition
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetectorModel' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detectorModelConfiguration', 'detectorModel_detectorModelConfiguration' - Information about how the detector is configured.
+--
+-- 'detectorModelDefinition', 'detectorModel_detectorModelDefinition' - Information that defines how a detector operates.
+newDetectorModel ::
+  DetectorModel
+newDetectorModel =
+  DetectorModel'
+    { detectorModelConfiguration =
+        Prelude.Nothing,
+      detectorModelDefinition = Prelude.Nothing
+    }
+
+-- | Information about how the detector is configured.
+detectorModel_detectorModelConfiguration :: Lens.Lens' DetectorModel (Prelude.Maybe DetectorModelConfiguration)
+detectorModel_detectorModelConfiguration = Lens.lens (\DetectorModel' {detectorModelConfiguration} -> detectorModelConfiguration) (\s@DetectorModel' {} a -> s {detectorModelConfiguration = a} :: DetectorModel)
+
+-- | Information that defines how a detector operates.
+detectorModel_detectorModelDefinition :: Lens.Lens' DetectorModel (Prelude.Maybe DetectorModelDefinition)
+detectorModel_detectorModelDefinition = Lens.lens (\DetectorModel' {detectorModelDefinition} -> detectorModelDefinition) (\s@DetectorModel' {} a -> s {detectorModelDefinition = a} :: DetectorModel)
+
+instance Data.FromJSON DetectorModel where
+  parseJSON =
+    Data.withObject
+      "DetectorModel"
+      ( \x ->
+          DetectorModel'
+            Prelude.<$> (x Data..:? "detectorModelConfiguration")
+            Prelude.<*> (x Data..:? "detectorModelDefinition")
+      )
+
+instance Prelude.Hashable DetectorModel where
+  hashWithSalt _salt DetectorModel' {..} =
+    _salt
+      `Prelude.hashWithSalt` detectorModelConfiguration
+      `Prelude.hashWithSalt` detectorModelDefinition
+
+instance Prelude.NFData DetectorModel where
+  rnf DetectorModel' {..} =
+    Prelude.rnf detectorModelConfiguration
+      `Prelude.seq` Prelude.rnf detectorModelDefinition
diff --git a/gen/Amazonka/IoTEvents/Types/DetectorModelConfiguration.hs b/gen/Amazonka/IoTEvents/Types/DetectorModelConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/DetectorModelConfiguration.hs
@@ -0,0 +1,213 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.DetectorModelConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.DetectorModelConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.DetectorModelVersionStatus
+import Amazonka.IoTEvents.Types.EvaluationMethod
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about how the detector model is configured.
+--
+-- /See:/ 'newDetectorModelConfiguration' smart constructor.
+data DetectorModelConfiguration = DetectorModelConfiguration'
+  { -- | The time the detector model was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The ARN of the detector model.
+    detectorModelArn :: Prelude.Maybe Prelude.Text,
+    -- | A brief description of the detector model.
+    detectorModelDescription :: Prelude.Maybe Prelude.Text,
+    -- | The name of the detector model.
+    detectorModelName :: Prelude.Maybe Prelude.Text,
+    -- | The version of the detector model.
+    detectorModelVersion :: Prelude.Maybe Prelude.Text,
+    -- | Information about the order in which events are evaluated and how
+    -- actions are executed.
+    evaluationMethod :: Prelude.Maybe EvaluationMethod,
+    -- | The value used to identify a detector instance. When a device or system
+    -- sends input, a new detector instance with a unique key value is created.
+    -- AWS IoT Events can continue to route input to its corresponding detector
+    -- instance based on this identifying information.
+    --
+    -- This parameter uses a JSON-path expression to select the attribute-value
+    -- pair in the message payload that is used for identification. To route
+    -- the message to the correct detector instance, the device must send a
+    -- message payload that contains the same attribute-value.
+    key :: Prelude.Maybe Prelude.Text,
+    -- | The time the detector model was last updated.
+    lastUpdateTime :: Prelude.Maybe Data.POSIX,
+    -- | The ARN of the role that grants permission to AWS IoT Events to perform
+    -- its operations.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | The status of the detector model.
+    status :: Prelude.Maybe DetectorModelVersionStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetectorModelConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'detectorModelConfiguration_creationTime' - The time the detector model was created.
+--
+-- 'detectorModelArn', 'detectorModelConfiguration_detectorModelArn' - The ARN of the detector model.
+--
+-- 'detectorModelDescription', 'detectorModelConfiguration_detectorModelDescription' - A brief description of the detector model.
+--
+-- 'detectorModelName', 'detectorModelConfiguration_detectorModelName' - The name of the detector model.
+--
+-- 'detectorModelVersion', 'detectorModelConfiguration_detectorModelVersion' - The version of the detector model.
+--
+-- 'evaluationMethod', 'detectorModelConfiguration_evaluationMethod' - Information about the order in which events are evaluated and how
+-- actions are executed.
+--
+-- 'key', 'detectorModelConfiguration_key' - The value used to identify a detector instance. When a device or system
+-- sends input, a new detector instance with a unique key value is created.
+-- AWS IoT Events can continue to route input to its corresponding detector
+-- instance based on this identifying information.
+--
+-- This parameter uses a JSON-path expression to select the attribute-value
+-- pair in the message payload that is used for identification. To route
+-- the message to the correct detector instance, the device must send a
+-- message payload that contains the same attribute-value.
+--
+-- 'lastUpdateTime', 'detectorModelConfiguration_lastUpdateTime' - The time the detector model was last updated.
+--
+-- 'roleArn', 'detectorModelConfiguration_roleArn' - The ARN of the role that grants permission to AWS IoT Events to perform
+-- its operations.
+--
+-- 'status', 'detectorModelConfiguration_status' - The status of the detector model.
+newDetectorModelConfiguration ::
+  DetectorModelConfiguration
+newDetectorModelConfiguration =
+  DetectorModelConfiguration'
+    { creationTime =
+        Prelude.Nothing,
+      detectorModelArn = Prelude.Nothing,
+      detectorModelDescription = Prelude.Nothing,
+      detectorModelName = Prelude.Nothing,
+      detectorModelVersion = Prelude.Nothing,
+      evaluationMethod = Prelude.Nothing,
+      key = Prelude.Nothing,
+      lastUpdateTime = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The time the detector model was created.
+detectorModelConfiguration_creationTime :: Lens.Lens' DetectorModelConfiguration (Prelude.Maybe Prelude.UTCTime)
+detectorModelConfiguration_creationTime = Lens.lens (\DetectorModelConfiguration' {creationTime} -> creationTime) (\s@DetectorModelConfiguration' {} a -> s {creationTime = a} :: DetectorModelConfiguration) Prelude.. Lens.mapping Data._Time
+
+-- | The ARN of the detector model.
+detectorModelConfiguration_detectorModelArn :: Lens.Lens' DetectorModelConfiguration (Prelude.Maybe Prelude.Text)
+detectorModelConfiguration_detectorModelArn = Lens.lens (\DetectorModelConfiguration' {detectorModelArn} -> detectorModelArn) (\s@DetectorModelConfiguration' {} a -> s {detectorModelArn = a} :: DetectorModelConfiguration)
+
+-- | A brief description of the detector model.
+detectorModelConfiguration_detectorModelDescription :: Lens.Lens' DetectorModelConfiguration (Prelude.Maybe Prelude.Text)
+detectorModelConfiguration_detectorModelDescription = Lens.lens (\DetectorModelConfiguration' {detectorModelDescription} -> detectorModelDescription) (\s@DetectorModelConfiguration' {} a -> s {detectorModelDescription = a} :: DetectorModelConfiguration)
+
+-- | The name of the detector model.
+detectorModelConfiguration_detectorModelName :: Lens.Lens' DetectorModelConfiguration (Prelude.Maybe Prelude.Text)
+detectorModelConfiguration_detectorModelName = Lens.lens (\DetectorModelConfiguration' {detectorModelName} -> detectorModelName) (\s@DetectorModelConfiguration' {} a -> s {detectorModelName = a} :: DetectorModelConfiguration)
+
+-- | The version of the detector model.
+detectorModelConfiguration_detectorModelVersion :: Lens.Lens' DetectorModelConfiguration (Prelude.Maybe Prelude.Text)
+detectorModelConfiguration_detectorModelVersion = Lens.lens (\DetectorModelConfiguration' {detectorModelVersion} -> detectorModelVersion) (\s@DetectorModelConfiguration' {} a -> s {detectorModelVersion = a} :: DetectorModelConfiguration)
+
+-- | Information about the order in which events are evaluated and how
+-- actions are executed.
+detectorModelConfiguration_evaluationMethod :: Lens.Lens' DetectorModelConfiguration (Prelude.Maybe EvaluationMethod)
+detectorModelConfiguration_evaluationMethod = Lens.lens (\DetectorModelConfiguration' {evaluationMethod} -> evaluationMethod) (\s@DetectorModelConfiguration' {} a -> s {evaluationMethod = a} :: DetectorModelConfiguration)
+
+-- | The value used to identify a detector instance. When a device or system
+-- sends input, a new detector instance with a unique key value is created.
+-- AWS IoT Events can continue to route input to its corresponding detector
+-- instance based on this identifying information.
+--
+-- This parameter uses a JSON-path expression to select the attribute-value
+-- pair in the message payload that is used for identification. To route
+-- the message to the correct detector instance, the device must send a
+-- message payload that contains the same attribute-value.
+detectorModelConfiguration_key :: Lens.Lens' DetectorModelConfiguration (Prelude.Maybe Prelude.Text)
+detectorModelConfiguration_key = Lens.lens (\DetectorModelConfiguration' {key} -> key) (\s@DetectorModelConfiguration' {} a -> s {key = a} :: DetectorModelConfiguration)
+
+-- | The time the detector model was last updated.
+detectorModelConfiguration_lastUpdateTime :: Lens.Lens' DetectorModelConfiguration (Prelude.Maybe Prelude.UTCTime)
+detectorModelConfiguration_lastUpdateTime = Lens.lens (\DetectorModelConfiguration' {lastUpdateTime} -> lastUpdateTime) (\s@DetectorModelConfiguration' {} a -> s {lastUpdateTime = a} :: DetectorModelConfiguration) Prelude.. Lens.mapping Data._Time
+
+-- | The ARN of the role that grants permission to AWS IoT Events to perform
+-- its operations.
+detectorModelConfiguration_roleArn :: Lens.Lens' DetectorModelConfiguration (Prelude.Maybe Prelude.Text)
+detectorModelConfiguration_roleArn = Lens.lens (\DetectorModelConfiguration' {roleArn} -> roleArn) (\s@DetectorModelConfiguration' {} a -> s {roleArn = a} :: DetectorModelConfiguration)
+
+-- | The status of the detector model.
+detectorModelConfiguration_status :: Lens.Lens' DetectorModelConfiguration (Prelude.Maybe DetectorModelVersionStatus)
+detectorModelConfiguration_status = Lens.lens (\DetectorModelConfiguration' {status} -> status) (\s@DetectorModelConfiguration' {} a -> s {status = a} :: DetectorModelConfiguration)
+
+instance Data.FromJSON DetectorModelConfiguration where
+  parseJSON =
+    Data.withObject
+      "DetectorModelConfiguration"
+      ( \x ->
+          DetectorModelConfiguration'
+            Prelude.<$> (x Data..:? "creationTime")
+            Prelude.<*> (x Data..:? "detectorModelArn")
+            Prelude.<*> (x Data..:? "detectorModelDescription")
+            Prelude.<*> (x Data..:? "detectorModelName")
+            Prelude.<*> (x Data..:? "detectorModelVersion")
+            Prelude.<*> (x Data..:? "evaluationMethod")
+            Prelude.<*> (x Data..:? "key")
+            Prelude.<*> (x Data..:? "lastUpdateTime")
+            Prelude.<*> (x Data..:? "roleArn")
+            Prelude.<*> (x Data..:? "status")
+      )
+
+instance Prelude.Hashable DetectorModelConfiguration where
+  hashWithSalt _salt DetectorModelConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` detectorModelArn
+      `Prelude.hashWithSalt` detectorModelDescription
+      `Prelude.hashWithSalt` detectorModelName
+      `Prelude.hashWithSalt` detectorModelVersion
+      `Prelude.hashWithSalt` evaluationMethod
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` lastUpdateTime
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData DetectorModelConfiguration where
+  rnf DetectorModelConfiguration' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf detectorModelArn
+      `Prelude.seq` Prelude.rnf detectorModelDescription
+      `Prelude.seq` Prelude.rnf detectorModelName
+      `Prelude.seq` Prelude.rnf detectorModelVersion
+      `Prelude.seq` Prelude.rnf evaluationMethod
+      `Prelude.seq` Prelude.rnf key
+      `Prelude.seq` Prelude.rnf lastUpdateTime
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/IoTEvents/Types/DetectorModelDefinition.hs b/gen/Amazonka/IoTEvents/Types/DetectorModelDefinition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/DetectorModelDefinition.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.DetectorModelDefinition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.DetectorModelDefinition where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.State
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information that defines how a detector operates.
+--
+-- /See:/ 'newDetectorModelDefinition' smart constructor.
+data DetectorModelDefinition = DetectorModelDefinition'
+  { -- | Information about the states of the detector.
+    states :: Prelude.NonEmpty State,
+    -- | The state that is entered at the creation of each detector (instance).
+    initialStateName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetectorModelDefinition' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'states', 'detectorModelDefinition_states' - Information about the states of the detector.
+--
+-- 'initialStateName', 'detectorModelDefinition_initialStateName' - The state that is entered at the creation of each detector (instance).
+newDetectorModelDefinition ::
+  -- | 'states'
+  Prelude.NonEmpty State ->
+  -- | 'initialStateName'
+  Prelude.Text ->
+  DetectorModelDefinition
+newDetectorModelDefinition
+  pStates_
+  pInitialStateName_ =
+    DetectorModelDefinition'
+      { states =
+          Lens.coerced Lens.# pStates_,
+        initialStateName = pInitialStateName_
+      }
+
+-- | Information about the states of the detector.
+detectorModelDefinition_states :: Lens.Lens' DetectorModelDefinition (Prelude.NonEmpty State)
+detectorModelDefinition_states = Lens.lens (\DetectorModelDefinition' {states} -> states) (\s@DetectorModelDefinition' {} a -> s {states = a} :: DetectorModelDefinition) Prelude.. Lens.coerced
+
+-- | The state that is entered at the creation of each detector (instance).
+detectorModelDefinition_initialStateName :: Lens.Lens' DetectorModelDefinition Prelude.Text
+detectorModelDefinition_initialStateName = Lens.lens (\DetectorModelDefinition' {initialStateName} -> initialStateName) (\s@DetectorModelDefinition' {} a -> s {initialStateName = a} :: DetectorModelDefinition)
+
+instance Data.FromJSON DetectorModelDefinition where
+  parseJSON =
+    Data.withObject
+      "DetectorModelDefinition"
+      ( \x ->
+          DetectorModelDefinition'
+            Prelude.<$> (x Data..: "states")
+            Prelude.<*> (x Data..: "initialStateName")
+      )
+
+instance Prelude.Hashable DetectorModelDefinition where
+  hashWithSalt _salt DetectorModelDefinition' {..} =
+    _salt
+      `Prelude.hashWithSalt` states
+      `Prelude.hashWithSalt` initialStateName
+
+instance Prelude.NFData DetectorModelDefinition where
+  rnf DetectorModelDefinition' {..} =
+    Prelude.rnf states
+      `Prelude.seq` Prelude.rnf initialStateName
+
+instance Data.ToJSON DetectorModelDefinition where
+  toJSON DetectorModelDefinition' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("states" Data..= states),
+            Prelude.Just
+              ("initialStateName" Data..= initialStateName)
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/DetectorModelSummary.hs b/gen/Amazonka/IoTEvents/Types/DetectorModelSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/DetectorModelSummary.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.DetectorModelSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.DetectorModelSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the detector model.
+--
+-- /See:/ 'newDetectorModelSummary' smart constructor.
+data DetectorModelSummary = DetectorModelSummary'
+  { -- | The time the detector model was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | A brief description of the detector model.
+    detectorModelDescription :: Prelude.Maybe Prelude.Text,
+    -- | The name of the detector model.
+    detectorModelName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetectorModelSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'detectorModelSummary_creationTime' - The time the detector model was created.
+--
+-- 'detectorModelDescription', 'detectorModelSummary_detectorModelDescription' - A brief description of the detector model.
+--
+-- 'detectorModelName', 'detectorModelSummary_detectorModelName' - The name of the detector model.
+newDetectorModelSummary ::
+  DetectorModelSummary
+newDetectorModelSummary =
+  DetectorModelSummary'
+    { creationTime =
+        Prelude.Nothing,
+      detectorModelDescription = Prelude.Nothing,
+      detectorModelName = Prelude.Nothing
+    }
+
+-- | The time the detector model was created.
+detectorModelSummary_creationTime :: Lens.Lens' DetectorModelSummary (Prelude.Maybe Prelude.UTCTime)
+detectorModelSummary_creationTime = Lens.lens (\DetectorModelSummary' {creationTime} -> creationTime) (\s@DetectorModelSummary' {} a -> s {creationTime = a} :: DetectorModelSummary) Prelude.. Lens.mapping Data._Time
+
+-- | A brief description of the detector model.
+detectorModelSummary_detectorModelDescription :: Lens.Lens' DetectorModelSummary (Prelude.Maybe Prelude.Text)
+detectorModelSummary_detectorModelDescription = Lens.lens (\DetectorModelSummary' {detectorModelDescription} -> detectorModelDescription) (\s@DetectorModelSummary' {} a -> s {detectorModelDescription = a} :: DetectorModelSummary)
+
+-- | The name of the detector model.
+detectorModelSummary_detectorModelName :: Lens.Lens' DetectorModelSummary (Prelude.Maybe Prelude.Text)
+detectorModelSummary_detectorModelName = Lens.lens (\DetectorModelSummary' {detectorModelName} -> detectorModelName) (\s@DetectorModelSummary' {} a -> s {detectorModelName = a} :: DetectorModelSummary)
+
+instance Data.FromJSON DetectorModelSummary where
+  parseJSON =
+    Data.withObject
+      "DetectorModelSummary"
+      ( \x ->
+          DetectorModelSummary'
+            Prelude.<$> (x Data..:? "creationTime")
+            Prelude.<*> (x Data..:? "detectorModelDescription")
+            Prelude.<*> (x Data..:? "detectorModelName")
+      )
+
+instance Prelude.Hashable DetectorModelSummary where
+  hashWithSalt _salt DetectorModelSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` detectorModelDescription
+      `Prelude.hashWithSalt` detectorModelName
+
+instance Prelude.NFData DetectorModelSummary where
+  rnf DetectorModelSummary' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf detectorModelDescription
+      `Prelude.seq` Prelude.rnf detectorModelName
diff --git a/gen/Amazonka/IoTEvents/Types/DetectorModelVersionStatus.hs b/gen/Amazonka/IoTEvents/Types/DetectorModelVersionStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/DetectorModelVersionStatus.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.DetectorModelVersionStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.DetectorModelVersionStatus
+  ( DetectorModelVersionStatus
+      ( ..,
+        DetectorModelVersionStatus_ACTIVATING,
+        DetectorModelVersionStatus_ACTIVE,
+        DetectorModelVersionStatus_DEPRECATED,
+        DetectorModelVersionStatus_DRAFT,
+        DetectorModelVersionStatus_FAILED,
+        DetectorModelVersionStatus_INACTIVE,
+        DetectorModelVersionStatus_PAUSED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DetectorModelVersionStatus = DetectorModelVersionStatus'
+  { fromDetectorModelVersionStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DetectorModelVersionStatus_ACTIVATING :: DetectorModelVersionStatus
+pattern DetectorModelVersionStatus_ACTIVATING = DetectorModelVersionStatus' "ACTIVATING"
+
+pattern DetectorModelVersionStatus_ACTIVE :: DetectorModelVersionStatus
+pattern DetectorModelVersionStatus_ACTIVE = DetectorModelVersionStatus' "ACTIVE"
+
+pattern DetectorModelVersionStatus_DEPRECATED :: DetectorModelVersionStatus
+pattern DetectorModelVersionStatus_DEPRECATED = DetectorModelVersionStatus' "DEPRECATED"
+
+pattern DetectorModelVersionStatus_DRAFT :: DetectorModelVersionStatus
+pattern DetectorModelVersionStatus_DRAFT = DetectorModelVersionStatus' "DRAFT"
+
+pattern DetectorModelVersionStatus_FAILED :: DetectorModelVersionStatus
+pattern DetectorModelVersionStatus_FAILED = DetectorModelVersionStatus' "FAILED"
+
+pattern DetectorModelVersionStatus_INACTIVE :: DetectorModelVersionStatus
+pattern DetectorModelVersionStatus_INACTIVE = DetectorModelVersionStatus' "INACTIVE"
+
+pattern DetectorModelVersionStatus_PAUSED :: DetectorModelVersionStatus
+pattern DetectorModelVersionStatus_PAUSED = DetectorModelVersionStatus' "PAUSED"
+
+{-# COMPLETE
+  DetectorModelVersionStatus_ACTIVATING,
+  DetectorModelVersionStatus_ACTIVE,
+  DetectorModelVersionStatus_DEPRECATED,
+  DetectorModelVersionStatus_DRAFT,
+  DetectorModelVersionStatus_FAILED,
+  DetectorModelVersionStatus_INACTIVE,
+  DetectorModelVersionStatus_PAUSED,
+  DetectorModelVersionStatus'
+  #-}
diff --git a/gen/Amazonka/IoTEvents/Types/DetectorModelVersionSummary.hs b/gen/Amazonka/IoTEvents/Types/DetectorModelVersionSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/DetectorModelVersionSummary.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.DetectorModelVersionSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.DetectorModelVersionSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.DetectorModelVersionStatus
+import Amazonka.IoTEvents.Types.EvaluationMethod
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the detector model version.
+--
+-- /See:/ 'newDetectorModelVersionSummary' smart constructor.
+data DetectorModelVersionSummary = DetectorModelVersionSummary'
+  { -- | The time the detector model version was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The ARN of the detector model version.
+    detectorModelArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the detector model.
+    detectorModelName :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the detector model version.
+    detectorModelVersion :: Prelude.Maybe Prelude.Text,
+    -- | Information about the order in which events are evaluated and how
+    -- actions are executed.
+    evaluationMethod :: Prelude.Maybe EvaluationMethod,
+    -- | The last time the detector model version was updated.
+    lastUpdateTime :: Prelude.Maybe Data.POSIX,
+    -- | The ARN of the role that grants the detector model permission to perform
+    -- its tasks.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | The status of the detector model version.
+    status :: Prelude.Maybe DetectorModelVersionStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetectorModelVersionSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'detectorModelVersionSummary_creationTime' - The time the detector model version was created.
+--
+-- 'detectorModelArn', 'detectorModelVersionSummary_detectorModelArn' - The ARN of the detector model version.
+--
+-- 'detectorModelName', 'detectorModelVersionSummary_detectorModelName' - The name of the detector model.
+--
+-- 'detectorModelVersion', 'detectorModelVersionSummary_detectorModelVersion' - The ID of the detector model version.
+--
+-- 'evaluationMethod', 'detectorModelVersionSummary_evaluationMethod' - Information about the order in which events are evaluated and how
+-- actions are executed.
+--
+-- 'lastUpdateTime', 'detectorModelVersionSummary_lastUpdateTime' - The last time the detector model version was updated.
+--
+-- 'roleArn', 'detectorModelVersionSummary_roleArn' - The ARN of the role that grants the detector model permission to perform
+-- its tasks.
+--
+-- 'status', 'detectorModelVersionSummary_status' - The status of the detector model version.
+newDetectorModelVersionSummary ::
+  DetectorModelVersionSummary
+newDetectorModelVersionSummary =
+  DetectorModelVersionSummary'
+    { creationTime =
+        Prelude.Nothing,
+      detectorModelArn = Prelude.Nothing,
+      detectorModelName = Prelude.Nothing,
+      detectorModelVersion = Prelude.Nothing,
+      evaluationMethod = Prelude.Nothing,
+      lastUpdateTime = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The time the detector model version was created.
+detectorModelVersionSummary_creationTime :: Lens.Lens' DetectorModelVersionSummary (Prelude.Maybe Prelude.UTCTime)
+detectorModelVersionSummary_creationTime = Lens.lens (\DetectorModelVersionSummary' {creationTime} -> creationTime) (\s@DetectorModelVersionSummary' {} a -> s {creationTime = a} :: DetectorModelVersionSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The ARN of the detector model version.
+detectorModelVersionSummary_detectorModelArn :: Lens.Lens' DetectorModelVersionSummary (Prelude.Maybe Prelude.Text)
+detectorModelVersionSummary_detectorModelArn = Lens.lens (\DetectorModelVersionSummary' {detectorModelArn} -> detectorModelArn) (\s@DetectorModelVersionSummary' {} a -> s {detectorModelArn = a} :: DetectorModelVersionSummary)
+
+-- | The name of the detector model.
+detectorModelVersionSummary_detectorModelName :: Lens.Lens' DetectorModelVersionSummary (Prelude.Maybe Prelude.Text)
+detectorModelVersionSummary_detectorModelName = Lens.lens (\DetectorModelVersionSummary' {detectorModelName} -> detectorModelName) (\s@DetectorModelVersionSummary' {} a -> s {detectorModelName = a} :: DetectorModelVersionSummary)
+
+-- | The ID of the detector model version.
+detectorModelVersionSummary_detectorModelVersion :: Lens.Lens' DetectorModelVersionSummary (Prelude.Maybe Prelude.Text)
+detectorModelVersionSummary_detectorModelVersion = Lens.lens (\DetectorModelVersionSummary' {detectorModelVersion} -> detectorModelVersion) (\s@DetectorModelVersionSummary' {} a -> s {detectorModelVersion = a} :: DetectorModelVersionSummary)
+
+-- | Information about the order in which events are evaluated and how
+-- actions are executed.
+detectorModelVersionSummary_evaluationMethod :: Lens.Lens' DetectorModelVersionSummary (Prelude.Maybe EvaluationMethod)
+detectorModelVersionSummary_evaluationMethod = Lens.lens (\DetectorModelVersionSummary' {evaluationMethod} -> evaluationMethod) (\s@DetectorModelVersionSummary' {} a -> s {evaluationMethod = a} :: DetectorModelVersionSummary)
+
+-- | The last time the detector model version was updated.
+detectorModelVersionSummary_lastUpdateTime :: Lens.Lens' DetectorModelVersionSummary (Prelude.Maybe Prelude.UTCTime)
+detectorModelVersionSummary_lastUpdateTime = Lens.lens (\DetectorModelVersionSummary' {lastUpdateTime} -> lastUpdateTime) (\s@DetectorModelVersionSummary' {} a -> s {lastUpdateTime = a} :: DetectorModelVersionSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The ARN of the role that grants the detector model permission to perform
+-- its tasks.
+detectorModelVersionSummary_roleArn :: Lens.Lens' DetectorModelVersionSummary (Prelude.Maybe Prelude.Text)
+detectorModelVersionSummary_roleArn = Lens.lens (\DetectorModelVersionSummary' {roleArn} -> roleArn) (\s@DetectorModelVersionSummary' {} a -> s {roleArn = a} :: DetectorModelVersionSummary)
+
+-- | The status of the detector model version.
+detectorModelVersionSummary_status :: Lens.Lens' DetectorModelVersionSummary (Prelude.Maybe DetectorModelVersionStatus)
+detectorModelVersionSummary_status = Lens.lens (\DetectorModelVersionSummary' {status} -> status) (\s@DetectorModelVersionSummary' {} a -> s {status = a} :: DetectorModelVersionSummary)
+
+instance Data.FromJSON DetectorModelVersionSummary where
+  parseJSON =
+    Data.withObject
+      "DetectorModelVersionSummary"
+      ( \x ->
+          DetectorModelVersionSummary'
+            Prelude.<$> (x Data..:? "creationTime")
+            Prelude.<*> (x Data..:? "detectorModelArn")
+            Prelude.<*> (x Data..:? "detectorModelName")
+            Prelude.<*> (x Data..:? "detectorModelVersion")
+            Prelude.<*> (x Data..:? "evaluationMethod")
+            Prelude.<*> (x Data..:? "lastUpdateTime")
+            Prelude.<*> (x Data..:? "roleArn")
+            Prelude.<*> (x Data..:? "status")
+      )
+
+instance Prelude.Hashable DetectorModelVersionSummary where
+  hashWithSalt _salt DetectorModelVersionSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` detectorModelArn
+      `Prelude.hashWithSalt` detectorModelName
+      `Prelude.hashWithSalt` detectorModelVersion
+      `Prelude.hashWithSalt` evaluationMethod
+      `Prelude.hashWithSalt` lastUpdateTime
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData DetectorModelVersionSummary where
+  rnf DetectorModelVersionSummary' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf detectorModelArn
+      `Prelude.seq` Prelude.rnf detectorModelName
+      `Prelude.seq` Prelude.rnf detectorModelVersion
+      `Prelude.seq` Prelude.rnf evaluationMethod
+      `Prelude.seq` Prelude.rnf lastUpdateTime
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/IoTEvents/Types/DynamoDBAction.hs b/gen/Amazonka/IoTEvents/Types/DynamoDBAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/DynamoDBAction.hs
@@ -0,0 +1,374 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.DynamoDBAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.DynamoDBAction where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.Payload
+import qualified Amazonka.Prelude as Prelude
+
+-- | Defines an action to write to the Amazon DynamoDB table that you
+-- created. The standard action payload contains all the information about
+-- the detector model instance and the event that triggered the action. You
+-- can customize the
+-- <https://docs.aws.amazon.com/iotevents/latest/apireference/API_Payload.html payload>.
+-- One column of the DynamoDB table receives all attribute-value pairs in
+-- the payload that you specify.
+--
+-- You must use expressions for all parameters in @DynamoDBAction@. The
+-- expressions accept literals, operators, functions, references, and
+-- substitution templates.
+--
+-- __Examples__
+--
+-- -   For literal values, the expressions must contain single quotes. For
+--     example, the value for the @hashKeyType@ parameter can be
+--     @\'STRING\'@.
+--
+-- -   For references, you must specify either variables or input values.
+--     For example, the value for the @hashKeyField@ parameter can be
+--     @$input.GreenhouseInput.name@.
+--
+-- -   For a substitution template, you must use @${}@, and the template
+--     must be in single quotes. A substitution template can also contain a
+--     combination of literals, operators, functions, references, and
+--     substitution templates.
+--
+--     In the following example, the value for the @hashKeyValue@ parameter
+--     uses a substitution template.
+--
+--     @\'${$input.GreenhouseInput.temperature * 6 \/ 5 + 32} in Fahrenheit\'@
+--
+-- -   For a string concatenation, you must use @+@. A string concatenation
+--     can also contain a combination of literals, operators, functions,
+--     references, and substitution templates.
+--
+--     In the following example, the value for the @tableName@ parameter
+--     uses a string concatenation.
+--
+--     @\'GreenhouseTemperatureTable \' + $input.GreenhouseInput.date@
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-expressions.html Expressions>
+-- in the /AWS IoT Events Developer Guide/.
+--
+-- If the defined payload type is a string, @DynamoDBAction@ writes
+-- non-JSON data to the DynamoDB table as binary data. The DynamoDB console
+-- displays the data as Base64-encoded text. The value for the
+-- @payloadField@ parameter is @\<payload-field>_raw@.
+--
+-- /See:/ 'newDynamoDBAction' smart constructor.
+data DynamoDBAction = DynamoDBAction'
+  { -- | The data type for the hash key (also called the partition key). You can
+    -- specify the following values:
+    --
+    -- -   @\'STRING\'@ - The hash key is a string.
+    --
+    -- -   @\'NUMBER\'@ - The hash key is a number.
+    --
+    -- If you don\'t specify @hashKeyType@, the default value is @\'STRING\'@.
+    hashKeyType :: Prelude.Maybe Prelude.Text,
+    -- | The type of operation to perform. You can specify the following values:
+    --
+    -- -   @\'INSERT\'@ - Insert data as a new item into the DynamoDB table.
+    --     This item uses the specified hash key as a partition key. If you
+    --     specified a range key, the item uses the range key as a sort key.
+    --
+    -- -   @\'UPDATE\'@ - Update an existing item of the DynamoDB table with
+    --     new data. This item\'s partition key must match the specified hash
+    --     key. If you specified a range key, the range key must match the
+    --     item\'s sort key.
+    --
+    -- -   @\'DELETE\'@ - Delete an existing item of the DynamoDB table. This
+    --     item\'s partition key must match the specified hash key. If you
+    --     specified a range key, the range key must match the item\'s sort
+    --     key.
+    --
+    -- If you don\'t specify this parameter, AWS IoT Events triggers the
+    -- @\'INSERT\'@ operation.
+    operation :: Prelude.Maybe Prelude.Text,
+    payload :: Prelude.Maybe Payload,
+    -- | The name of the DynamoDB column that receives the action payload.
+    --
+    -- If you don\'t specify this parameter, the name of the DynamoDB column is
+    -- @payload@.
+    payloadField :: Prelude.Maybe Prelude.Text,
+    -- | The name of the range key (also called the sort key). The
+    -- @rangeKeyField@ value must match the sort key of the target DynamoDB
+    -- table.
+    rangeKeyField :: Prelude.Maybe Prelude.Text,
+    -- | The data type for the range key (also called the sort key), You can
+    -- specify the following values:
+    --
+    -- -   @\'STRING\'@ - The range key is a string.
+    --
+    -- -   @\'NUMBER\'@ - The range key is number.
+    --
+    -- If you don\'t specify @rangeKeyField@, the default value is
+    -- @\'STRING\'@.
+    rangeKeyType :: Prelude.Maybe Prelude.Text,
+    -- | The value of the range key (also called the sort key).
+    rangeKeyValue :: Prelude.Maybe Prelude.Text,
+    -- | The name of the hash key (also called the partition key). The
+    -- @hashKeyField@ value must match the partition key of the target DynamoDB
+    -- table.
+    hashKeyField :: Prelude.Text,
+    -- | The value of the hash key (also called the partition key).
+    hashKeyValue :: Prelude.Text,
+    -- | The name of the DynamoDB table. The @tableName@ value must match the
+    -- table name of the target DynamoDB table.
+    tableName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DynamoDBAction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'hashKeyType', 'dynamoDBAction_hashKeyType' - The data type for the hash key (also called the partition key). You can
+-- specify the following values:
+--
+-- -   @\'STRING\'@ - The hash key is a string.
+--
+-- -   @\'NUMBER\'@ - The hash key is a number.
+--
+-- If you don\'t specify @hashKeyType@, the default value is @\'STRING\'@.
+--
+-- 'operation', 'dynamoDBAction_operation' - The type of operation to perform. You can specify the following values:
+--
+-- -   @\'INSERT\'@ - Insert data as a new item into the DynamoDB table.
+--     This item uses the specified hash key as a partition key. If you
+--     specified a range key, the item uses the range key as a sort key.
+--
+-- -   @\'UPDATE\'@ - Update an existing item of the DynamoDB table with
+--     new data. This item\'s partition key must match the specified hash
+--     key. If you specified a range key, the range key must match the
+--     item\'s sort key.
+--
+-- -   @\'DELETE\'@ - Delete an existing item of the DynamoDB table. This
+--     item\'s partition key must match the specified hash key. If you
+--     specified a range key, the range key must match the item\'s sort
+--     key.
+--
+-- If you don\'t specify this parameter, AWS IoT Events triggers the
+-- @\'INSERT\'@ operation.
+--
+-- 'payload', 'dynamoDBAction_payload' - Undocumented member.
+--
+-- 'payloadField', 'dynamoDBAction_payloadField' - The name of the DynamoDB column that receives the action payload.
+--
+-- If you don\'t specify this parameter, the name of the DynamoDB column is
+-- @payload@.
+--
+-- 'rangeKeyField', 'dynamoDBAction_rangeKeyField' - The name of the range key (also called the sort key). The
+-- @rangeKeyField@ value must match the sort key of the target DynamoDB
+-- table.
+--
+-- 'rangeKeyType', 'dynamoDBAction_rangeKeyType' - The data type for the range key (also called the sort key), You can
+-- specify the following values:
+--
+-- -   @\'STRING\'@ - The range key is a string.
+--
+-- -   @\'NUMBER\'@ - The range key is number.
+--
+-- If you don\'t specify @rangeKeyField@, the default value is
+-- @\'STRING\'@.
+--
+-- 'rangeKeyValue', 'dynamoDBAction_rangeKeyValue' - The value of the range key (also called the sort key).
+--
+-- 'hashKeyField', 'dynamoDBAction_hashKeyField' - The name of the hash key (also called the partition key). The
+-- @hashKeyField@ value must match the partition key of the target DynamoDB
+-- table.
+--
+-- 'hashKeyValue', 'dynamoDBAction_hashKeyValue' - The value of the hash key (also called the partition key).
+--
+-- 'tableName', 'dynamoDBAction_tableName' - The name of the DynamoDB table. The @tableName@ value must match the
+-- table name of the target DynamoDB table.
+newDynamoDBAction ::
+  -- | 'hashKeyField'
+  Prelude.Text ->
+  -- | 'hashKeyValue'
+  Prelude.Text ->
+  -- | 'tableName'
+  Prelude.Text ->
+  DynamoDBAction
+newDynamoDBAction
+  pHashKeyField_
+  pHashKeyValue_
+  pTableName_ =
+    DynamoDBAction'
+      { hashKeyType = Prelude.Nothing,
+        operation = Prelude.Nothing,
+        payload = Prelude.Nothing,
+        payloadField = Prelude.Nothing,
+        rangeKeyField = Prelude.Nothing,
+        rangeKeyType = Prelude.Nothing,
+        rangeKeyValue = Prelude.Nothing,
+        hashKeyField = pHashKeyField_,
+        hashKeyValue = pHashKeyValue_,
+        tableName = pTableName_
+      }
+
+-- | The data type for the hash key (also called the partition key). You can
+-- specify the following values:
+--
+-- -   @\'STRING\'@ - The hash key is a string.
+--
+-- -   @\'NUMBER\'@ - The hash key is a number.
+--
+-- If you don\'t specify @hashKeyType@, the default value is @\'STRING\'@.
+dynamoDBAction_hashKeyType :: Lens.Lens' DynamoDBAction (Prelude.Maybe Prelude.Text)
+dynamoDBAction_hashKeyType = Lens.lens (\DynamoDBAction' {hashKeyType} -> hashKeyType) (\s@DynamoDBAction' {} a -> s {hashKeyType = a} :: DynamoDBAction)
+
+-- | The type of operation to perform. You can specify the following values:
+--
+-- -   @\'INSERT\'@ - Insert data as a new item into the DynamoDB table.
+--     This item uses the specified hash key as a partition key. If you
+--     specified a range key, the item uses the range key as a sort key.
+--
+-- -   @\'UPDATE\'@ - Update an existing item of the DynamoDB table with
+--     new data. This item\'s partition key must match the specified hash
+--     key. If you specified a range key, the range key must match the
+--     item\'s sort key.
+--
+-- -   @\'DELETE\'@ - Delete an existing item of the DynamoDB table. This
+--     item\'s partition key must match the specified hash key. If you
+--     specified a range key, the range key must match the item\'s sort
+--     key.
+--
+-- If you don\'t specify this parameter, AWS IoT Events triggers the
+-- @\'INSERT\'@ operation.
+dynamoDBAction_operation :: Lens.Lens' DynamoDBAction (Prelude.Maybe Prelude.Text)
+dynamoDBAction_operation = Lens.lens (\DynamoDBAction' {operation} -> operation) (\s@DynamoDBAction' {} a -> s {operation = a} :: DynamoDBAction)
+
+-- | Undocumented member.
+dynamoDBAction_payload :: Lens.Lens' DynamoDBAction (Prelude.Maybe Payload)
+dynamoDBAction_payload = Lens.lens (\DynamoDBAction' {payload} -> payload) (\s@DynamoDBAction' {} a -> s {payload = a} :: DynamoDBAction)
+
+-- | The name of the DynamoDB column that receives the action payload.
+--
+-- If you don\'t specify this parameter, the name of the DynamoDB column is
+-- @payload@.
+dynamoDBAction_payloadField :: Lens.Lens' DynamoDBAction (Prelude.Maybe Prelude.Text)
+dynamoDBAction_payloadField = Lens.lens (\DynamoDBAction' {payloadField} -> payloadField) (\s@DynamoDBAction' {} a -> s {payloadField = a} :: DynamoDBAction)
+
+-- | The name of the range key (also called the sort key). The
+-- @rangeKeyField@ value must match the sort key of the target DynamoDB
+-- table.
+dynamoDBAction_rangeKeyField :: Lens.Lens' DynamoDBAction (Prelude.Maybe Prelude.Text)
+dynamoDBAction_rangeKeyField = Lens.lens (\DynamoDBAction' {rangeKeyField} -> rangeKeyField) (\s@DynamoDBAction' {} a -> s {rangeKeyField = a} :: DynamoDBAction)
+
+-- | The data type for the range key (also called the sort key), You can
+-- specify the following values:
+--
+-- -   @\'STRING\'@ - The range key is a string.
+--
+-- -   @\'NUMBER\'@ - The range key is number.
+--
+-- If you don\'t specify @rangeKeyField@, the default value is
+-- @\'STRING\'@.
+dynamoDBAction_rangeKeyType :: Lens.Lens' DynamoDBAction (Prelude.Maybe Prelude.Text)
+dynamoDBAction_rangeKeyType = Lens.lens (\DynamoDBAction' {rangeKeyType} -> rangeKeyType) (\s@DynamoDBAction' {} a -> s {rangeKeyType = a} :: DynamoDBAction)
+
+-- | The value of the range key (also called the sort key).
+dynamoDBAction_rangeKeyValue :: Lens.Lens' DynamoDBAction (Prelude.Maybe Prelude.Text)
+dynamoDBAction_rangeKeyValue = Lens.lens (\DynamoDBAction' {rangeKeyValue} -> rangeKeyValue) (\s@DynamoDBAction' {} a -> s {rangeKeyValue = a} :: DynamoDBAction)
+
+-- | The name of the hash key (also called the partition key). The
+-- @hashKeyField@ value must match the partition key of the target DynamoDB
+-- table.
+dynamoDBAction_hashKeyField :: Lens.Lens' DynamoDBAction Prelude.Text
+dynamoDBAction_hashKeyField = Lens.lens (\DynamoDBAction' {hashKeyField} -> hashKeyField) (\s@DynamoDBAction' {} a -> s {hashKeyField = a} :: DynamoDBAction)
+
+-- | The value of the hash key (also called the partition key).
+dynamoDBAction_hashKeyValue :: Lens.Lens' DynamoDBAction Prelude.Text
+dynamoDBAction_hashKeyValue = Lens.lens (\DynamoDBAction' {hashKeyValue} -> hashKeyValue) (\s@DynamoDBAction' {} a -> s {hashKeyValue = a} :: DynamoDBAction)
+
+-- | The name of the DynamoDB table. The @tableName@ value must match the
+-- table name of the target DynamoDB table.
+dynamoDBAction_tableName :: Lens.Lens' DynamoDBAction Prelude.Text
+dynamoDBAction_tableName = Lens.lens (\DynamoDBAction' {tableName} -> tableName) (\s@DynamoDBAction' {} a -> s {tableName = a} :: DynamoDBAction)
+
+instance Data.FromJSON DynamoDBAction where
+  parseJSON =
+    Data.withObject
+      "DynamoDBAction"
+      ( \x ->
+          DynamoDBAction'
+            Prelude.<$> (x Data..:? "hashKeyType")
+            Prelude.<*> (x Data..:? "operation")
+            Prelude.<*> (x Data..:? "payload")
+            Prelude.<*> (x Data..:? "payloadField")
+            Prelude.<*> (x Data..:? "rangeKeyField")
+            Prelude.<*> (x Data..:? "rangeKeyType")
+            Prelude.<*> (x Data..:? "rangeKeyValue")
+            Prelude.<*> (x Data..: "hashKeyField")
+            Prelude.<*> (x Data..: "hashKeyValue")
+            Prelude.<*> (x Data..: "tableName")
+      )
+
+instance Prelude.Hashable DynamoDBAction where
+  hashWithSalt _salt DynamoDBAction' {..} =
+    _salt
+      `Prelude.hashWithSalt` hashKeyType
+      `Prelude.hashWithSalt` operation
+      `Prelude.hashWithSalt` payload
+      `Prelude.hashWithSalt` payloadField
+      `Prelude.hashWithSalt` rangeKeyField
+      `Prelude.hashWithSalt` rangeKeyType
+      `Prelude.hashWithSalt` rangeKeyValue
+      `Prelude.hashWithSalt` hashKeyField
+      `Prelude.hashWithSalt` hashKeyValue
+      `Prelude.hashWithSalt` tableName
+
+instance Prelude.NFData DynamoDBAction where
+  rnf DynamoDBAction' {..} =
+    Prelude.rnf hashKeyType
+      `Prelude.seq` Prelude.rnf operation
+      `Prelude.seq` Prelude.rnf payload
+      `Prelude.seq` Prelude.rnf payloadField
+      `Prelude.seq` Prelude.rnf rangeKeyField
+      `Prelude.seq` Prelude.rnf rangeKeyType
+      `Prelude.seq` Prelude.rnf rangeKeyValue
+      `Prelude.seq` Prelude.rnf hashKeyField
+      `Prelude.seq` Prelude.rnf hashKeyValue
+      `Prelude.seq` Prelude.rnf tableName
+
+instance Data.ToJSON DynamoDBAction where
+  toJSON DynamoDBAction' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("hashKeyType" Data..=) Prelude.<$> hashKeyType,
+            ("operation" Data..=) Prelude.<$> operation,
+            ("payload" Data..=) Prelude.<$> payload,
+            ("payloadField" Data..=) Prelude.<$> payloadField,
+            ("rangeKeyField" Data..=) Prelude.<$> rangeKeyField,
+            ("rangeKeyType" Data..=) Prelude.<$> rangeKeyType,
+            ("rangeKeyValue" Data..=) Prelude.<$> rangeKeyValue,
+            Prelude.Just ("hashKeyField" Data..= hashKeyField),
+            Prelude.Just ("hashKeyValue" Data..= hashKeyValue),
+            Prelude.Just ("tableName" Data..= tableName)
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/DynamoDBv2Action.hs b/gen/Amazonka/IoTEvents/Types/DynamoDBv2Action.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/DynamoDBv2Action.hs
@@ -0,0 +1,140 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.DynamoDBv2Action
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.DynamoDBv2Action where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.Payload
+import qualified Amazonka.Prelude as Prelude
+
+-- | Defines an action to write to the Amazon DynamoDB table that you
+-- created. The default action payload contains all the information about
+-- the detector model instance and the event that triggered the action. You
+-- can customize the
+-- <https://docs.aws.amazon.com/iotevents/latest/apireference/API_Payload.html payload>.
+-- A separate column of the DynamoDB table receives one attribute-value
+-- pair in the payload that you specify.
+--
+-- You must use expressions for all parameters in @DynamoDBv2Action@. The
+-- expressions accept literals, operators, functions, references, and
+-- substitution templates.
+--
+-- __Examples__
+--
+-- -   For literal values, the expressions must contain single quotes. For
+--     example, the value for the @tableName@ parameter can be
+--     @\'GreenhouseTemperatureTable\'@.
+--
+-- -   For references, you must specify either variables or input values.
+--     For example, the value for the @tableName@ parameter can be
+--     @$variable.ddbtableName@.
+--
+-- -   For a substitution template, you must use @${}@, and the template
+--     must be in single quotes. A substitution template can also contain a
+--     combination of literals, operators, functions, references, and
+--     substitution templates.
+--
+--     In the following example, the value for the @contentExpression@
+--     parameter in @Payload@ uses a substitution template.
+--
+--     @\'{\\\"sensorID\\\": \\\"${$input.GreenhouseInput.sensor_id}\\\", \\\"temperature\\\": \\\"${$input.GreenhouseInput.temperature * 9 \/ 5 + 32}\\\"}\'@
+--
+-- -   For a string concatenation, you must use @+@. A string concatenation
+--     can also contain a combination of literals, operators, functions,
+--     references, and substitution templates.
+--
+--     In the following example, the value for the @tableName@ parameter
+--     uses a string concatenation.
+--
+--     @\'GreenhouseTemperatureTable \' + $input.GreenhouseInput.date@
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-expressions.html Expressions>
+-- in the /AWS IoT Events Developer Guide/.
+--
+-- The value for the @type@ parameter in @Payload@ must be @JSON@.
+--
+-- /See:/ 'newDynamoDBv2Action' smart constructor.
+data DynamoDBv2Action = DynamoDBv2Action'
+  { payload :: Prelude.Maybe Payload,
+    -- | The name of the DynamoDB table.
+    tableName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DynamoDBv2Action' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'payload', 'dynamoDBv2Action_payload' - Undocumented member.
+--
+-- 'tableName', 'dynamoDBv2Action_tableName' - The name of the DynamoDB table.
+newDynamoDBv2Action ::
+  -- | 'tableName'
+  Prelude.Text ->
+  DynamoDBv2Action
+newDynamoDBv2Action pTableName_ =
+  DynamoDBv2Action'
+    { payload = Prelude.Nothing,
+      tableName = pTableName_
+    }
+
+-- | Undocumented member.
+dynamoDBv2Action_payload :: Lens.Lens' DynamoDBv2Action (Prelude.Maybe Payload)
+dynamoDBv2Action_payload = Lens.lens (\DynamoDBv2Action' {payload} -> payload) (\s@DynamoDBv2Action' {} a -> s {payload = a} :: DynamoDBv2Action)
+
+-- | The name of the DynamoDB table.
+dynamoDBv2Action_tableName :: Lens.Lens' DynamoDBv2Action Prelude.Text
+dynamoDBv2Action_tableName = Lens.lens (\DynamoDBv2Action' {tableName} -> tableName) (\s@DynamoDBv2Action' {} a -> s {tableName = a} :: DynamoDBv2Action)
+
+instance Data.FromJSON DynamoDBv2Action where
+  parseJSON =
+    Data.withObject
+      "DynamoDBv2Action"
+      ( \x ->
+          DynamoDBv2Action'
+            Prelude.<$> (x Data..:? "payload")
+            Prelude.<*> (x Data..: "tableName")
+      )
+
+instance Prelude.Hashable DynamoDBv2Action where
+  hashWithSalt _salt DynamoDBv2Action' {..} =
+    _salt
+      `Prelude.hashWithSalt` payload
+      `Prelude.hashWithSalt` tableName
+
+instance Prelude.NFData DynamoDBv2Action where
+  rnf DynamoDBv2Action' {..} =
+    Prelude.rnf payload
+      `Prelude.seq` Prelude.rnf tableName
+
+instance Data.ToJSON DynamoDBv2Action where
+  toJSON DynamoDBv2Action' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("payload" Data..=) Prelude.<$> payload,
+            Prelude.Just ("tableName" Data..= tableName)
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/EmailConfiguration.hs b/gen/Amazonka/IoTEvents/Types/EmailConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/EmailConfiguration.hs
@@ -0,0 +1,136 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.EmailConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.EmailConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.EmailContent
+import Amazonka.IoTEvents.Types.EmailRecipients
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains the configuration information of email notifications.
+--
+-- /See:/ 'newEmailConfiguration' smart constructor.
+data EmailConfiguration = EmailConfiguration'
+  { -- | Contains the subject and message of an email.
+    content :: Prelude.Maybe EmailContent,
+    -- | The email address that sends emails.
+    --
+    -- If you use the AWS IoT Events managed AWS Lambda function to manage your
+    -- emails, you must
+    -- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/verify-email-addresses.html verify the email address that sends emails in Amazon SES>.
+    from :: Prelude.Text,
+    -- | Contains the information of one or more recipients who receive the
+    -- emails.
+    --
+    -- You must
+    -- <https://docs.aws.amazon.com/singlesignon/latest/userguide/addusers.html add the users that receive emails to your AWS SSO store>.
+    recipients :: EmailRecipients
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EmailConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'content', 'emailConfiguration_content' - Contains the subject and message of an email.
+--
+-- 'from', 'emailConfiguration_from' - The email address that sends emails.
+--
+-- If you use the AWS IoT Events managed AWS Lambda function to manage your
+-- emails, you must
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/verify-email-addresses.html verify the email address that sends emails in Amazon SES>.
+--
+-- 'recipients', 'emailConfiguration_recipients' - Contains the information of one or more recipients who receive the
+-- emails.
+--
+-- You must
+-- <https://docs.aws.amazon.com/singlesignon/latest/userguide/addusers.html add the users that receive emails to your AWS SSO store>.
+newEmailConfiguration ::
+  -- | 'from'
+  Prelude.Text ->
+  -- | 'recipients'
+  EmailRecipients ->
+  EmailConfiguration
+newEmailConfiguration pFrom_ pRecipients_ =
+  EmailConfiguration'
+    { content = Prelude.Nothing,
+      from = pFrom_,
+      recipients = pRecipients_
+    }
+
+-- | Contains the subject and message of an email.
+emailConfiguration_content :: Lens.Lens' EmailConfiguration (Prelude.Maybe EmailContent)
+emailConfiguration_content = Lens.lens (\EmailConfiguration' {content} -> content) (\s@EmailConfiguration' {} a -> s {content = a} :: EmailConfiguration)
+
+-- | The email address that sends emails.
+--
+-- If you use the AWS IoT Events managed AWS Lambda function to manage your
+-- emails, you must
+-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/verify-email-addresses.html verify the email address that sends emails in Amazon SES>.
+emailConfiguration_from :: Lens.Lens' EmailConfiguration Prelude.Text
+emailConfiguration_from = Lens.lens (\EmailConfiguration' {from} -> from) (\s@EmailConfiguration' {} a -> s {from = a} :: EmailConfiguration)
+
+-- | Contains the information of one or more recipients who receive the
+-- emails.
+--
+-- You must
+-- <https://docs.aws.amazon.com/singlesignon/latest/userguide/addusers.html add the users that receive emails to your AWS SSO store>.
+emailConfiguration_recipients :: Lens.Lens' EmailConfiguration EmailRecipients
+emailConfiguration_recipients = Lens.lens (\EmailConfiguration' {recipients} -> recipients) (\s@EmailConfiguration' {} a -> s {recipients = a} :: EmailConfiguration)
+
+instance Data.FromJSON EmailConfiguration where
+  parseJSON =
+    Data.withObject
+      "EmailConfiguration"
+      ( \x ->
+          EmailConfiguration'
+            Prelude.<$> (x Data..:? "content")
+            Prelude.<*> (x Data..: "from")
+            Prelude.<*> (x Data..: "recipients")
+      )
+
+instance Prelude.Hashable EmailConfiguration where
+  hashWithSalt _salt EmailConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` content
+      `Prelude.hashWithSalt` from
+      `Prelude.hashWithSalt` recipients
+
+instance Prelude.NFData EmailConfiguration where
+  rnf EmailConfiguration' {..} =
+    Prelude.rnf content
+      `Prelude.seq` Prelude.rnf from
+      `Prelude.seq` Prelude.rnf recipients
+
+instance Data.ToJSON EmailConfiguration where
+  toJSON EmailConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("content" Data..=) Prelude.<$> content,
+            Prelude.Just ("from" Data..= from),
+            Prelude.Just ("recipients" Data..= recipients)
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/EmailContent.hs b/gen/Amazonka/IoTEvents/Types/EmailContent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/EmailContent.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.EmailContent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.EmailContent 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
+
+-- | Contains the subject and message of an email.
+--
+-- /See:/ 'newEmailContent' smart constructor.
+data EmailContent = EmailContent'
+  { -- | The message that you want to send. The message can be up to 200
+    -- characters.
+    additionalMessage :: Prelude.Maybe Prelude.Text,
+    -- | The subject of the email.
+    subject :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EmailContent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'additionalMessage', 'emailContent_additionalMessage' - The message that you want to send. The message can be up to 200
+-- characters.
+--
+-- 'subject', 'emailContent_subject' - The subject of the email.
+newEmailContent ::
+  EmailContent
+newEmailContent =
+  EmailContent'
+    { additionalMessage = Prelude.Nothing,
+      subject = Prelude.Nothing
+    }
+
+-- | The message that you want to send. The message can be up to 200
+-- characters.
+emailContent_additionalMessage :: Lens.Lens' EmailContent (Prelude.Maybe Prelude.Text)
+emailContent_additionalMessage = Lens.lens (\EmailContent' {additionalMessage} -> additionalMessage) (\s@EmailContent' {} a -> s {additionalMessage = a} :: EmailContent)
+
+-- | The subject of the email.
+emailContent_subject :: Lens.Lens' EmailContent (Prelude.Maybe Prelude.Text)
+emailContent_subject = Lens.lens (\EmailContent' {subject} -> subject) (\s@EmailContent' {} a -> s {subject = a} :: EmailContent)
+
+instance Data.FromJSON EmailContent where
+  parseJSON =
+    Data.withObject
+      "EmailContent"
+      ( \x ->
+          EmailContent'
+            Prelude.<$> (x Data..:? "additionalMessage")
+            Prelude.<*> (x Data..:? "subject")
+      )
+
+instance Prelude.Hashable EmailContent where
+  hashWithSalt _salt EmailContent' {..} =
+    _salt
+      `Prelude.hashWithSalt` additionalMessage
+      `Prelude.hashWithSalt` subject
+
+instance Prelude.NFData EmailContent where
+  rnf EmailContent' {..} =
+    Prelude.rnf additionalMessage
+      `Prelude.seq` Prelude.rnf subject
+
+instance Data.ToJSON EmailContent where
+  toJSON EmailContent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("additionalMessage" Data..=)
+              Prelude.<$> additionalMessage,
+            ("subject" Data..=) Prelude.<$> subject
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/EmailRecipients.hs b/gen/Amazonka/IoTEvents/Types/EmailRecipients.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/EmailRecipients.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.EmailRecipients
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.EmailRecipients where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.RecipientDetail
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains the information of one or more recipients who receive the
+-- emails.
+--
+-- You must
+-- <https://docs.aws.amazon.com/singlesignon/latest/userguide/addusers.html add the users that receive emails to your AWS SSO store>.
+--
+-- /See:/ 'newEmailRecipients' smart constructor.
+data EmailRecipients = EmailRecipients'
+  { -- | Specifies one or more recipients who receive the email.
+    to :: Prelude.Maybe (Prelude.NonEmpty RecipientDetail)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EmailRecipients' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'to', 'emailRecipients_to' - Specifies one or more recipients who receive the email.
+newEmailRecipients ::
+  EmailRecipients
+newEmailRecipients =
+  EmailRecipients' {to = Prelude.Nothing}
+
+-- | Specifies one or more recipients who receive the email.
+emailRecipients_to :: Lens.Lens' EmailRecipients (Prelude.Maybe (Prelude.NonEmpty RecipientDetail))
+emailRecipients_to = Lens.lens (\EmailRecipients' {to} -> to) (\s@EmailRecipients' {} a -> s {to = a} :: EmailRecipients) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON EmailRecipients where
+  parseJSON =
+    Data.withObject
+      "EmailRecipients"
+      ( \x ->
+          EmailRecipients' Prelude.<$> (x Data..:? "to")
+      )
+
+instance Prelude.Hashable EmailRecipients where
+  hashWithSalt _salt EmailRecipients' {..} =
+    _salt `Prelude.hashWithSalt` to
+
+instance Prelude.NFData EmailRecipients where
+  rnf EmailRecipients' {..} = Prelude.rnf to
+
+instance Data.ToJSON EmailRecipients where
+  toJSON EmailRecipients' {..} =
+    Data.object
+      (Prelude.catMaybes [("to" Data..=) Prelude.<$> to])
diff --git a/gen/Amazonka/IoTEvents/Types/EvaluationMethod.hs b/gen/Amazonka/IoTEvents/Types/EvaluationMethod.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/EvaluationMethod.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.EvaluationMethod
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.EvaluationMethod
+  ( EvaluationMethod
+      ( ..,
+        EvaluationMethod_BATCH,
+        EvaluationMethod_SERIAL
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EvaluationMethod = EvaluationMethod'
+  { fromEvaluationMethod ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern EvaluationMethod_BATCH :: EvaluationMethod
+pattern EvaluationMethod_BATCH = EvaluationMethod' "BATCH"
+
+pattern EvaluationMethod_SERIAL :: EvaluationMethod
+pattern EvaluationMethod_SERIAL = EvaluationMethod' "SERIAL"
+
+{-# COMPLETE
+  EvaluationMethod_BATCH,
+  EvaluationMethod_SERIAL,
+  EvaluationMethod'
+  #-}
diff --git a/gen/Amazonka/IoTEvents/Types/Event.hs b/gen/Amazonka/IoTEvents/Types/Event.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/Event.hs
@@ -0,0 +1,119 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.Event
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.Event where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.Action
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the @actions@ to be performed when the @condition@ evaluates
+-- to TRUE.
+--
+-- /See:/ 'newEvent' smart constructor.
+data Event = Event'
+  { -- | The actions to be performed.
+    actions :: Prelude.Maybe [Action],
+    -- | Optional. The Boolean expression that, when TRUE, causes the @actions@
+    -- to be performed. If not present, the actions are performed (=TRUE). If
+    -- the expression result is not a Boolean value, the actions are not
+    -- performed (=FALSE).
+    condition :: Prelude.Maybe Prelude.Text,
+    -- | The name of the event.
+    eventName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Event' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'actions', 'event_actions' - The actions to be performed.
+--
+-- 'condition', 'event_condition' - Optional. The Boolean expression that, when TRUE, causes the @actions@
+-- to be performed. If not present, the actions are performed (=TRUE). If
+-- the expression result is not a Boolean value, the actions are not
+-- performed (=FALSE).
+--
+-- 'eventName', 'event_eventName' - The name of the event.
+newEvent ::
+  -- | 'eventName'
+  Prelude.Text ->
+  Event
+newEvent pEventName_ =
+  Event'
+    { actions = Prelude.Nothing,
+      condition = Prelude.Nothing,
+      eventName = pEventName_
+    }
+
+-- | The actions to be performed.
+event_actions :: Lens.Lens' Event (Prelude.Maybe [Action])
+event_actions = Lens.lens (\Event' {actions} -> actions) (\s@Event' {} a -> s {actions = a} :: Event) Prelude.. Lens.mapping Lens.coerced
+
+-- | Optional. The Boolean expression that, when TRUE, causes the @actions@
+-- to be performed. If not present, the actions are performed (=TRUE). If
+-- the expression result is not a Boolean value, the actions are not
+-- performed (=FALSE).
+event_condition :: Lens.Lens' Event (Prelude.Maybe Prelude.Text)
+event_condition = Lens.lens (\Event' {condition} -> condition) (\s@Event' {} a -> s {condition = a} :: Event)
+
+-- | The name of the event.
+event_eventName :: Lens.Lens' Event Prelude.Text
+event_eventName = Lens.lens (\Event' {eventName} -> eventName) (\s@Event' {} a -> s {eventName = a} :: Event)
+
+instance Data.FromJSON Event where
+  parseJSON =
+    Data.withObject
+      "Event"
+      ( \x ->
+          Event'
+            Prelude.<$> (x Data..:? "actions" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "condition")
+            Prelude.<*> (x Data..: "eventName")
+      )
+
+instance Prelude.Hashable Event where
+  hashWithSalt _salt Event' {..} =
+    _salt
+      `Prelude.hashWithSalt` actions
+      `Prelude.hashWithSalt` condition
+      `Prelude.hashWithSalt` eventName
+
+instance Prelude.NFData Event where
+  rnf Event' {..} =
+    Prelude.rnf actions
+      `Prelude.seq` Prelude.rnf condition
+      `Prelude.seq` Prelude.rnf eventName
+
+instance Data.ToJSON Event where
+  toJSON Event' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("actions" Data..=) Prelude.<$> actions,
+            ("condition" Data..=) Prelude.<$> condition,
+            Prelude.Just ("eventName" Data..= eventName)
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/FirehoseAction.hs b/gen/Amazonka/IoTEvents/Types/FirehoseAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/FirehoseAction.hs
@@ -0,0 +1,123 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.FirehoseAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.FirehoseAction where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.Payload
+import qualified Amazonka.Prelude as Prelude
+
+-- | Sends information about the detector model instance and the event that
+-- triggered the action to an Amazon Kinesis Data Firehose delivery stream.
+--
+-- /See:/ 'newFirehoseAction' smart constructor.
+data FirehoseAction = FirehoseAction'
+  { -- | You can configure the action payload when you send a message to an
+    -- Amazon Kinesis Data Firehose delivery stream.
+    payload :: Prelude.Maybe Payload,
+    -- | A character separator that is used to separate records written to the
+    -- Kinesis Data Firehose delivery stream. Valid values are: \'\\n\'
+    -- (newline), \'\\t\' (tab), \'\\r\\n\' (Windows newline), \',\' (comma).
+    separator :: Prelude.Maybe Prelude.Text,
+    -- | The name of the Kinesis Data Firehose delivery stream where the data is
+    -- written.
+    deliveryStreamName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FirehoseAction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'payload', 'firehoseAction_payload' - You can configure the action payload when you send a message to an
+-- Amazon Kinesis Data Firehose delivery stream.
+--
+-- 'separator', 'firehoseAction_separator' - A character separator that is used to separate records written to the
+-- Kinesis Data Firehose delivery stream. Valid values are: \'\\n\'
+-- (newline), \'\\t\' (tab), \'\\r\\n\' (Windows newline), \',\' (comma).
+--
+-- 'deliveryStreamName', 'firehoseAction_deliveryStreamName' - The name of the Kinesis Data Firehose delivery stream where the data is
+-- written.
+newFirehoseAction ::
+  -- | 'deliveryStreamName'
+  Prelude.Text ->
+  FirehoseAction
+newFirehoseAction pDeliveryStreamName_ =
+  FirehoseAction'
+    { payload = Prelude.Nothing,
+      separator = Prelude.Nothing,
+      deliveryStreamName = pDeliveryStreamName_
+    }
+
+-- | You can configure the action payload when you send a message to an
+-- Amazon Kinesis Data Firehose delivery stream.
+firehoseAction_payload :: Lens.Lens' FirehoseAction (Prelude.Maybe Payload)
+firehoseAction_payload = Lens.lens (\FirehoseAction' {payload} -> payload) (\s@FirehoseAction' {} a -> s {payload = a} :: FirehoseAction)
+
+-- | A character separator that is used to separate records written to the
+-- Kinesis Data Firehose delivery stream. Valid values are: \'\\n\'
+-- (newline), \'\\t\' (tab), \'\\r\\n\' (Windows newline), \',\' (comma).
+firehoseAction_separator :: Lens.Lens' FirehoseAction (Prelude.Maybe Prelude.Text)
+firehoseAction_separator = Lens.lens (\FirehoseAction' {separator} -> separator) (\s@FirehoseAction' {} a -> s {separator = a} :: FirehoseAction)
+
+-- | The name of the Kinesis Data Firehose delivery stream where the data is
+-- written.
+firehoseAction_deliveryStreamName :: Lens.Lens' FirehoseAction Prelude.Text
+firehoseAction_deliveryStreamName = Lens.lens (\FirehoseAction' {deliveryStreamName} -> deliveryStreamName) (\s@FirehoseAction' {} a -> s {deliveryStreamName = a} :: FirehoseAction)
+
+instance Data.FromJSON FirehoseAction where
+  parseJSON =
+    Data.withObject
+      "FirehoseAction"
+      ( \x ->
+          FirehoseAction'
+            Prelude.<$> (x Data..:? "payload")
+            Prelude.<*> (x Data..:? "separator")
+            Prelude.<*> (x Data..: "deliveryStreamName")
+      )
+
+instance Prelude.Hashable FirehoseAction where
+  hashWithSalt _salt FirehoseAction' {..} =
+    _salt
+      `Prelude.hashWithSalt` payload
+      `Prelude.hashWithSalt` separator
+      `Prelude.hashWithSalt` deliveryStreamName
+
+instance Prelude.NFData FirehoseAction where
+  rnf FirehoseAction' {..} =
+    Prelude.rnf payload
+      `Prelude.seq` Prelude.rnf separator
+      `Prelude.seq` Prelude.rnf deliveryStreamName
+
+instance Data.ToJSON FirehoseAction where
+  toJSON FirehoseAction' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("payload" Data..=) Prelude.<$> payload,
+            ("separator" Data..=) Prelude.<$> separator,
+            Prelude.Just
+              ("deliveryStreamName" Data..= deliveryStreamName)
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/InitializationConfiguration.hs b/gen/Amazonka/IoTEvents/Types/InitializationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/InitializationConfiguration.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.InitializationConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.InitializationConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the default alarm state. The configuration applies to all
+-- alarms that were created based on this alarm model.
+--
+-- /See:/ 'newInitializationConfiguration' smart constructor.
+data InitializationConfiguration = InitializationConfiguration'
+  { -- | The value must be @TRUE@ or @FALSE@. If @FALSE@, all alarm instances
+    -- created based on the alarm model are activated. The default value is
+    -- @TRUE@.
+    disabledOnInitialization :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InitializationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'disabledOnInitialization', 'initializationConfiguration_disabledOnInitialization' - The value must be @TRUE@ or @FALSE@. If @FALSE@, all alarm instances
+-- created based on the alarm model are activated. The default value is
+-- @TRUE@.
+newInitializationConfiguration ::
+  -- | 'disabledOnInitialization'
+  Prelude.Bool ->
+  InitializationConfiguration
+newInitializationConfiguration
+  pDisabledOnInitialization_ =
+    InitializationConfiguration'
+      { disabledOnInitialization =
+          pDisabledOnInitialization_
+      }
+
+-- | The value must be @TRUE@ or @FALSE@. If @FALSE@, all alarm instances
+-- created based on the alarm model are activated. The default value is
+-- @TRUE@.
+initializationConfiguration_disabledOnInitialization :: Lens.Lens' InitializationConfiguration Prelude.Bool
+initializationConfiguration_disabledOnInitialization = Lens.lens (\InitializationConfiguration' {disabledOnInitialization} -> disabledOnInitialization) (\s@InitializationConfiguration' {} a -> s {disabledOnInitialization = a} :: InitializationConfiguration)
+
+instance Data.FromJSON InitializationConfiguration where
+  parseJSON =
+    Data.withObject
+      "InitializationConfiguration"
+      ( \x ->
+          InitializationConfiguration'
+            Prelude.<$> (x Data..: "disabledOnInitialization")
+      )
+
+instance Prelude.Hashable InitializationConfiguration where
+  hashWithSalt _salt InitializationConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` disabledOnInitialization
+
+instance Prelude.NFData InitializationConfiguration where
+  rnf InitializationConfiguration' {..} =
+    Prelude.rnf disabledOnInitialization
+
+instance Data.ToJSON InitializationConfiguration where
+  toJSON InitializationConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "disabledOnInitialization"
+                  Data..= disabledOnInitialization
+              )
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/Input.hs b/gen/Amazonka/IoTEvents/Types/Input.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/Input.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.Input
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.Input where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.InputConfiguration
+import Amazonka.IoTEvents.Types.InputDefinition
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the input.
+--
+-- /See:/ 'newInput' smart constructor.
+data Input = Input'
+  { -- | Information about the configuration of an input.
+    inputConfiguration :: Prelude.Maybe InputConfiguration,
+    -- | The definition of the input.
+    inputDefinition :: Prelude.Maybe InputDefinition
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Input' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'inputConfiguration', 'input_inputConfiguration' - Information about the configuration of an input.
+--
+-- 'inputDefinition', 'input_inputDefinition' - The definition of the input.
+newInput ::
+  Input
+newInput =
+  Input'
+    { inputConfiguration = Prelude.Nothing,
+      inputDefinition = Prelude.Nothing
+    }
+
+-- | Information about the configuration of an input.
+input_inputConfiguration :: Lens.Lens' Input (Prelude.Maybe InputConfiguration)
+input_inputConfiguration = Lens.lens (\Input' {inputConfiguration} -> inputConfiguration) (\s@Input' {} a -> s {inputConfiguration = a} :: Input)
+
+-- | The definition of the input.
+input_inputDefinition :: Lens.Lens' Input (Prelude.Maybe InputDefinition)
+input_inputDefinition = Lens.lens (\Input' {inputDefinition} -> inputDefinition) (\s@Input' {} a -> s {inputDefinition = a} :: Input)
+
+instance Data.FromJSON Input where
+  parseJSON =
+    Data.withObject
+      "Input"
+      ( \x ->
+          Input'
+            Prelude.<$> (x Data..:? "inputConfiguration")
+            Prelude.<*> (x Data..:? "inputDefinition")
+      )
+
+instance Prelude.Hashable Input where
+  hashWithSalt _salt Input' {..} =
+    _salt
+      `Prelude.hashWithSalt` inputConfiguration
+      `Prelude.hashWithSalt` inputDefinition
+
+instance Prelude.NFData Input where
+  rnf Input' {..} =
+    Prelude.rnf inputConfiguration
+      `Prelude.seq` Prelude.rnf inputDefinition
diff --git a/gen/Amazonka/IoTEvents/Types/InputConfiguration.hs b/gen/Amazonka/IoTEvents/Types/InputConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/InputConfiguration.hs
@@ -0,0 +1,149 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.InputConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.InputConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.InputStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the configuration of an input.
+--
+-- /See:/ 'newInputConfiguration' smart constructor.
+data InputConfiguration = InputConfiguration'
+  { -- | A brief description of the input.
+    inputDescription :: Prelude.Maybe Prelude.Text,
+    -- | The name of the input.
+    inputName :: Prelude.Text,
+    -- | The ARN of the input.
+    inputArn :: Prelude.Text,
+    -- | The time the input was created.
+    creationTime :: Data.POSIX,
+    -- | The last time the input was updated.
+    lastUpdateTime :: Data.POSIX,
+    -- | The status of the input.
+    status :: InputStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InputConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'inputDescription', 'inputConfiguration_inputDescription' - A brief description of the input.
+--
+-- 'inputName', 'inputConfiguration_inputName' - The name of the input.
+--
+-- 'inputArn', 'inputConfiguration_inputArn' - The ARN of the input.
+--
+-- 'creationTime', 'inputConfiguration_creationTime' - The time the input was created.
+--
+-- 'lastUpdateTime', 'inputConfiguration_lastUpdateTime' - The last time the input was updated.
+--
+-- 'status', 'inputConfiguration_status' - The status of the input.
+newInputConfiguration ::
+  -- | 'inputName'
+  Prelude.Text ->
+  -- | 'inputArn'
+  Prelude.Text ->
+  -- | 'creationTime'
+  Prelude.UTCTime ->
+  -- | 'lastUpdateTime'
+  Prelude.UTCTime ->
+  -- | 'status'
+  InputStatus ->
+  InputConfiguration
+newInputConfiguration
+  pInputName_
+  pInputArn_
+  pCreationTime_
+  pLastUpdateTime_
+  pStatus_ =
+    InputConfiguration'
+      { inputDescription =
+          Prelude.Nothing,
+        inputName = pInputName_,
+        inputArn = pInputArn_,
+        creationTime = Data._Time Lens.# pCreationTime_,
+        lastUpdateTime = Data._Time Lens.# pLastUpdateTime_,
+        status = pStatus_
+      }
+
+-- | A brief description of the input.
+inputConfiguration_inputDescription :: Lens.Lens' InputConfiguration (Prelude.Maybe Prelude.Text)
+inputConfiguration_inputDescription = Lens.lens (\InputConfiguration' {inputDescription} -> inputDescription) (\s@InputConfiguration' {} a -> s {inputDescription = a} :: InputConfiguration)
+
+-- | The name of the input.
+inputConfiguration_inputName :: Lens.Lens' InputConfiguration Prelude.Text
+inputConfiguration_inputName = Lens.lens (\InputConfiguration' {inputName} -> inputName) (\s@InputConfiguration' {} a -> s {inputName = a} :: InputConfiguration)
+
+-- | The ARN of the input.
+inputConfiguration_inputArn :: Lens.Lens' InputConfiguration Prelude.Text
+inputConfiguration_inputArn = Lens.lens (\InputConfiguration' {inputArn} -> inputArn) (\s@InputConfiguration' {} a -> s {inputArn = a} :: InputConfiguration)
+
+-- | The time the input was created.
+inputConfiguration_creationTime :: Lens.Lens' InputConfiguration Prelude.UTCTime
+inputConfiguration_creationTime = Lens.lens (\InputConfiguration' {creationTime} -> creationTime) (\s@InputConfiguration' {} a -> s {creationTime = a} :: InputConfiguration) Prelude.. Data._Time
+
+-- | The last time the input was updated.
+inputConfiguration_lastUpdateTime :: Lens.Lens' InputConfiguration Prelude.UTCTime
+inputConfiguration_lastUpdateTime = Lens.lens (\InputConfiguration' {lastUpdateTime} -> lastUpdateTime) (\s@InputConfiguration' {} a -> s {lastUpdateTime = a} :: InputConfiguration) Prelude.. Data._Time
+
+-- | The status of the input.
+inputConfiguration_status :: Lens.Lens' InputConfiguration InputStatus
+inputConfiguration_status = Lens.lens (\InputConfiguration' {status} -> status) (\s@InputConfiguration' {} a -> s {status = a} :: InputConfiguration)
+
+instance Data.FromJSON InputConfiguration where
+  parseJSON =
+    Data.withObject
+      "InputConfiguration"
+      ( \x ->
+          InputConfiguration'
+            Prelude.<$> (x Data..:? "inputDescription")
+            Prelude.<*> (x Data..: "inputName")
+            Prelude.<*> (x Data..: "inputArn")
+            Prelude.<*> (x Data..: "creationTime")
+            Prelude.<*> (x Data..: "lastUpdateTime")
+            Prelude.<*> (x Data..: "status")
+      )
+
+instance Prelude.Hashable InputConfiguration where
+  hashWithSalt _salt InputConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` inputDescription
+      `Prelude.hashWithSalt` inputName
+      `Prelude.hashWithSalt` inputArn
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` lastUpdateTime
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData InputConfiguration where
+  rnf InputConfiguration' {..} =
+    Prelude.rnf inputDescription
+      `Prelude.seq` Prelude.rnf inputName
+      `Prelude.seq` Prelude.rnf inputArn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf lastUpdateTime
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/IoTEvents/Types/InputDefinition.hs b/gen/Amazonka/IoTEvents/Types/InputDefinition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/InputDefinition.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.IoTEvents.Types.InputDefinition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.InputDefinition where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.Attribute
+import qualified Amazonka.Prelude as Prelude
+
+-- | The definition of the input.
+--
+-- /See:/ 'newInputDefinition' smart constructor.
+data InputDefinition = InputDefinition'
+  { -- | The attributes from the JSON payload that are made available by the
+    -- input. Inputs are derived from messages sent to the AWS IoT Events
+    -- system using @BatchPutMessage@. Each such message contains a JSON
+    -- payload, and those attributes (and their paired values) specified here
+    -- are available for use in the @condition@ expressions used by detectors
+    -- that monitor this input.
+    attributes :: Prelude.NonEmpty Attribute
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InputDefinition' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributes', 'inputDefinition_attributes' - The attributes from the JSON payload that are made available by the
+-- input. Inputs are derived from messages sent to the AWS IoT Events
+-- system using @BatchPutMessage@. Each such message contains a JSON
+-- payload, and those attributes (and their paired values) specified here
+-- are available for use in the @condition@ expressions used by detectors
+-- that monitor this input.
+newInputDefinition ::
+  -- | 'attributes'
+  Prelude.NonEmpty Attribute ->
+  InputDefinition
+newInputDefinition pAttributes_ =
+  InputDefinition'
+    { attributes =
+        Lens.coerced Lens.# pAttributes_
+    }
+
+-- | The attributes from the JSON payload that are made available by the
+-- input. Inputs are derived from messages sent to the AWS IoT Events
+-- system using @BatchPutMessage@. Each such message contains a JSON
+-- payload, and those attributes (and their paired values) specified here
+-- are available for use in the @condition@ expressions used by detectors
+-- that monitor this input.
+inputDefinition_attributes :: Lens.Lens' InputDefinition (Prelude.NonEmpty Attribute)
+inputDefinition_attributes = Lens.lens (\InputDefinition' {attributes} -> attributes) (\s@InputDefinition' {} a -> s {attributes = a} :: InputDefinition) Prelude.. Lens.coerced
+
+instance Data.FromJSON InputDefinition where
+  parseJSON =
+    Data.withObject
+      "InputDefinition"
+      ( \x ->
+          InputDefinition'
+            Prelude.<$> (x Data..: "attributes")
+      )
+
+instance Prelude.Hashable InputDefinition where
+  hashWithSalt _salt InputDefinition' {..} =
+    _salt `Prelude.hashWithSalt` attributes
+
+instance Prelude.NFData InputDefinition where
+  rnf InputDefinition' {..} = Prelude.rnf attributes
+
+instance Data.ToJSON InputDefinition where
+  toJSON InputDefinition' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("attributes" Data..= attributes)]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/InputIdentifier.hs b/gen/Amazonka/IoTEvents/Types/InputIdentifier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/InputIdentifier.hs
@@ -0,0 +1,88 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.InputIdentifier
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.InputIdentifier where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.IotEventsInputIdentifier
+import Amazonka.IoTEvents.Types.IotSiteWiseInputIdentifier
+import qualified Amazonka.Prelude as Prelude
+
+-- | The identifer of the input.
+--
+-- /See:/ 'newInputIdentifier' smart constructor.
+data InputIdentifier = InputIdentifier'
+  { -- | The identifier of the input routed to AWS IoT Events.
+    iotEventsInputIdentifier :: Prelude.Maybe IotEventsInputIdentifier,
+    -- | The identifer of the input routed from AWS IoT SiteWise.
+    iotSiteWiseInputIdentifier :: Prelude.Maybe IotSiteWiseInputIdentifier
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InputIdentifier' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'iotEventsInputIdentifier', 'inputIdentifier_iotEventsInputIdentifier' - The identifier of the input routed to AWS IoT Events.
+--
+-- 'iotSiteWiseInputIdentifier', 'inputIdentifier_iotSiteWiseInputIdentifier' - The identifer of the input routed from AWS IoT SiteWise.
+newInputIdentifier ::
+  InputIdentifier
+newInputIdentifier =
+  InputIdentifier'
+    { iotEventsInputIdentifier =
+        Prelude.Nothing,
+      iotSiteWiseInputIdentifier = Prelude.Nothing
+    }
+
+-- | The identifier of the input routed to AWS IoT Events.
+inputIdentifier_iotEventsInputIdentifier :: Lens.Lens' InputIdentifier (Prelude.Maybe IotEventsInputIdentifier)
+inputIdentifier_iotEventsInputIdentifier = Lens.lens (\InputIdentifier' {iotEventsInputIdentifier} -> iotEventsInputIdentifier) (\s@InputIdentifier' {} a -> s {iotEventsInputIdentifier = a} :: InputIdentifier)
+
+-- | The identifer of the input routed from AWS IoT SiteWise.
+inputIdentifier_iotSiteWiseInputIdentifier :: Lens.Lens' InputIdentifier (Prelude.Maybe IotSiteWiseInputIdentifier)
+inputIdentifier_iotSiteWiseInputIdentifier = Lens.lens (\InputIdentifier' {iotSiteWiseInputIdentifier} -> iotSiteWiseInputIdentifier) (\s@InputIdentifier' {} a -> s {iotSiteWiseInputIdentifier = a} :: InputIdentifier)
+
+instance Prelude.Hashable InputIdentifier where
+  hashWithSalt _salt InputIdentifier' {..} =
+    _salt
+      `Prelude.hashWithSalt` iotEventsInputIdentifier
+      `Prelude.hashWithSalt` iotSiteWiseInputIdentifier
+
+instance Prelude.NFData InputIdentifier where
+  rnf InputIdentifier' {..} =
+    Prelude.rnf iotEventsInputIdentifier
+      `Prelude.seq` Prelude.rnf iotSiteWiseInputIdentifier
+
+instance Data.ToJSON InputIdentifier where
+  toJSON InputIdentifier' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("iotEventsInputIdentifier" Data..=)
+              Prelude.<$> iotEventsInputIdentifier,
+            ("iotSiteWiseInputIdentifier" Data..=)
+              Prelude.<$> iotSiteWiseInputIdentifier
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/InputStatus.hs b/gen/Amazonka/IoTEvents/Types/InputStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/InputStatus.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.InputStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.InputStatus
+  ( InputStatus
+      ( ..,
+        InputStatus_ACTIVE,
+        InputStatus_CREATING,
+        InputStatus_DELETING,
+        InputStatus_UPDATING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype InputStatus = InputStatus'
+  { fromInputStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern InputStatus_ACTIVE :: InputStatus
+pattern InputStatus_ACTIVE = InputStatus' "ACTIVE"
+
+pattern InputStatus_CREATING :: InputStatus
+pattern InputStatus_CREATING = InputStatus' "CREATING"
+
+pattern InputStatus_DELETING :: InputStatus
+pattern InputStatus_DELETING = InputStatus' "DELETING"
+
+pattern InputStatus_UPDATING :: InputStatus
+pattern InputStatus_UPDATING = InputStatus' "UPDATING"
+
+{-# COMPLETE
+  InputStatus_ACTIVE,
+  InputStatus_CREATING,
+  InputStatus_DELETING,
+  InputStatus_UPDATING,
+  InputStatus'
+  #-}
diff --git a/gen/Amazonka/IoTEvents/Types/InputSummary.hs b/gen/Amazonka/IoTEvents/Types/InputSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/InputSummary.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.IoTEvents.Types.InputSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.InputSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.InputStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the input.
+--
+-- /See:/ 'newInputSummary' smart constructor.
+data InputSummary = InputSummary'
+  { -- | The time the input was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The ARN of the input.
+    inputArn :: Prelude.Maybe Prelude.Text,
+    -- | A brief description of the input.
+    inputDescription :: Prelude.Maybe Prelude.Text,
+    -- | The name of the input.
+    inputName :: Prelude.Maybe Prelude.Text,
+    -- | The last time the input was updated.
+    lastUpdateTime :: Prelude.Maybe Data.POSIX,
+    -- | The status of the input.
+    status :: Prelude.Maybe InputStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InputSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'inputSummary_creationTime' - The time the input was created.
+--
+-- 'inputArn', 'inputSummary_inputArn' - The ARN of the input.
+--
+-- 'inputDescription', 'inputSummary_inputDescription' - A brief description of the input.
+--
+-- 'inputName', 'inputSummary_inputName' - The name of the input.
+--
+-- 'lastUpdateTime', 'inputSummary_lastUpdateTime' - The last time the input was updated.
+--
+-- 'status', 'inputSummary_status' - The status of the input.
+newInputSummary ::
+  InputSummary
+newInputSummary =
+  InputSummary'
+    { creationTime = Prelude.Nothing,
+      inputArn = Prelude.Nothing,
+      inputDescription = Prelude.Nothing,
+      inputName = Prelude.Nothing,
+      lastUpdateTime = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The time the input was created.
+inputSummary_creationTime :: Lens.Lens' InputSummary (Prelude.Maybe Prelude.UTCTime)
+inputSummary_creationTime = Lens.lens (\InputSummary' {creationTime} -> creationTime) (\s@InputSummary' {} a -> s {creationTime = a} :: InputSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The ARN of the input.
+inputSummary_inputArn :: Lens.Lens' InputSummary (Prelude.Maybe Prelude.Text)
+inputSummary_inputArn = Lens.lens (\InputSummary' {inputArn} -> inputArn) (\s@InputSummary' {} a -> s {inputArn = a} :: InputSummary)
+
+-- | A brief description of the input.
+inputSummary_inputDescription :: Lens.Lens' InputSummary (Prelude.Maybe Prelude.Text)
+inputSummary_inputDescription = Lens.lens (\InputSummary' {inputDescription} -> inputDescription) (\s@InputSummary' {} a -> s {inputDescription = a} :: InputSummary)
+
+-- | The name of the input.
+inputSummary_inputName :: Lens.Lens' InputSummary (Prelude.Maybe Prelude.Text)
+inputSummary_inputName = Lens.lens (\InputSummary' {inputName} -> inputName) (\s@InputSummary' {} a -> s {inputName = a} :: InputSummary)
+
+-- | The last time the input was updated.
+inputSummary_lastUpdateTime :: Lens.Lens' InputSummary (Prelude.Maybe Prelude.UTCTime)
+inputSummary_lastUpdateTime = Lens.lens (\InputSummary' {lastUpdateTime} -> lastUpdateTime) (\s@InputSummary' {} a -> s {lastUpdateTime = a} :: InputSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The status of the input.
+inputSummary_status :: Lens.Lens' InputSummary (Prelude.Maybe InputStatus)
+inputSummary_status = Lens.lens (\InputSummary' {status} -> status) (\s@InputSummary' {} a -> s {status = a} :: InputSummary)
+
+instance Data.FromJSON InputSummary where
+  parseJSON =
+    Data.withObject
+      "InputSummary"
+      ( \x ->
+          InputSummary'
+            Prelude.<$> (x Data..:? "creationTime")
+            Prelude.<*> (x Data..:? "inputArn")
+            Prelude.<*> (x Data..:? "inputDescription")
+            Prelude.<*> (x Data..:? "inputName")
+            Prelude.<*> (x Data..:? "lastUpdateTime")
+            Prelude.<*> (x Data..:? "status")
+      )
+
+instance Prelude.Hashable InputSummary where
+  hashWithSalt _salt InputSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` inputArn
+      `Prelude.hashWithSalt` inputDescription
+      `Prelude.hashWithSalt` inputName
+      `Prelude.hashWithSalt` lastUpdateTime
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData InputSummary where
+  rnf InputSummary' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf inputArn
+      `Prelude.seq` Prelude.rnf inputDescription
+      `Prelude.seq` Prelude.rnf inputName
+      `Prelude.seq` Prelude.rnf lastUpdateTime
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/IoTEvents/Types/IotEventsAction.hs b/gen/Amazonka/IoTEvents/Types/IotEventsAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/IotEventsAction.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.IotEventsAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.IotEventsAction where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.Payload
+import qualified Amazonka.Prelude as Prelude
+
+-- | Sends an AWS IoT Events input, passing in information about the detector
+-- model instance and the event that triggered the action.
+--
+-- /See:/ 'newIotEventsAction' smart constructor.
+data IotEventsAction = IotEventsAction'
+  { -- | You can configure the action payload when you send a message to an AWS
+    -- IoT Events input.
+    payload :: Prelude.Maybe Payload,
+    -- | The name of the AWS IoT Events input where the data is sent.
+    inputName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IotEventsAction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'payload', 'iotEventsAction_payload' - You can configure the action payload when you send a message to an AWS
+-- IoT Events input.
+--
+-- 'inputName', 'iotEventsAction_inputName' - The name of the AWS IoT Events input where the data is sent.
+newIotEventsAction ::
+  -- | 'inputName'
+  Prelude.Text ->
+  IotEventsAction
+newIotEventsAction pInputName_ =
+  IotEventsAction'
+    { payload = Prelude.Nothing,
+      inputName = pInputName_
+    }
+
+-- | You can configure the action payload when you send a message to an AWS
+-- IoT Events input.
+iotEventsAction_payload :: Lens.Lens' IotEventsAction (Prelude.Maybe Payload)
+iotEventsAction_payload = Lens.lens (\IotEventsAction' {payload} -> payload) (\s@IotEventsAction' {} a -> s {payload = a} :: IotEventsAction)
+
+-- | The name of the AWS IoT Events input where the data is sent.
+iotEventsAction_inputName :: Lens.Lens' IotEventsAction Prelude.Text
+iotEventsAction_inputName = Lens.lens (\IotEventsAction' {inputName} -> inputName) (\s@IotEventsAction' {} a -> s {inputName = a} :: IotEventsAction)
+
+instance Data.FromJSON IotEventsAction where
+  parseJSON =
+    Data.withObject
+      "IotEventsAction"
+      ( \x ->
+          IotEventsAction'
+            Prelude.<$> (x Data..:? "payload")
+            Prelude.<*> (x Data..: "inputName")
+      )
+
+instance Prelude.Hashable IotEventsAction where
+  hashWithSalt _salt IotEventsAction' {..} =
+    _salt
+      `Prelude.hashWithSalt` payload
+      `Prelude.hashWithSalt` inputName
+
+instance Prelude.NFData IotEventsAction where
+  rnf IotEventsAction' {..} =
+    Prelude.rnf payload
+      `Prelude.seq` Prelude.rnf inputName
+
+instance Data.ToJSON IotEventsAction where
+  toJSON IotEventsAction' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("payload" Data..=) Prelude.<$> payload,
+            Prelude.Just ("inputName" Data..= inputName)
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/IotEventsInputIdentifier.hs b/gen/Amazonka/IoTEvents/Types/IotEventsInputIdentifier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/IotEventsInputIdentifier.hs
@@ -0,0 +1,69 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.IotEventsInputIdentifier
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.IotEventsInputIdentifier 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 identifier of the input routed to AWS IoT Events.
+--
+-- /See:/ 'newIotEventsInputIdentifier' smart constructor.
+data IotEventsInputIdentifier = IotEventsInputIdentifier'
+  { -- | The name of the input routed to AWS IoT Events.
+    inputName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IotEventsInputIdentifier' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'inputName', 'iotEventsInputIdentifier_inputName' - The name of the input routed to AWS IoT Events.
+newIotEventsInputIdentifier ::
+  -- | 'inputName'
+  Prelude.Text ->
+  IotEventsInputIdentifier
+newIotEventsInputIdentifier pInputName_ =
+  IotEventsInputIdentifier' {inputName = pInputName_}
+
+-- | The name of the input routed to AWS IoT Events.
+iotEventsInputIdentifier_inputName :: Lens.Lens' IotEventsInputIdentifier Prelude.Text
+iotEventsInputIdentifier_inputName = Lens.lens (\IotEventsInputIdentifier' {inputName} -> inputName) (\s@IotEventsInputIdentifier' {} a -> s {inputName = a} :: IotEventsInputIdentifier)
+
+instance Prelude.Hashable IotEventsInputIdentifier where
+  hashWithSalt _salt IotEventsInputIdentifier' {..} =
+    _salt `Prelude.hashWithSalt` inputName
+
+instance Prelude.NFData IotEventsInputIdentifier where
+  rnf IotEventsInputIdentifier' {..} =
+    Prelude.rnf inputName
+
+instance Data.ToJSON IotEventsInputIdentifier where
+  toJSON IotEventsInputIdentifier' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("inputName" Data..= inputName)]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/IotSiteWiseAction.hs b/gen/Amazonka/IoTEvents/Types/IotSiteWiseAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/IotSiteWiseAction.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.IotSiteWiseAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.IotSiteWiseAction where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.AssetPropertyValue
+import qualified Amazonka.Prelude as Prelude
+
+-- | Sends information about the detector model instance and the event that
+-- triggered the action to a specified asset property in AWS IoT SiteWise.
+--
+-- You must use expressions for all parameters in @IotSiteWiseAction@. The
+-- expressions accept literals, operators, functions, references, and
+-- substitutions templates.
+--
+-- __Examples__
+--
+-- -   For literal values, the expressions must contain single quotes. For
+--     example, the value for the @propertyAlias@ parameter can be
+--     @\'\/company\/windfarm\/3\/turbine\/7\/temperature\'@.
+--
+-- -   For references, you must specify either variables or input values.
+--     For example, the value for the @assetId@ parameter can be
+--     @$input.TurbineInput.assetId1@.
+--
+-- -   For a substitution template, you must use @${}@, and the template
+--     must be in single quotes. A substitution template can also contain a
+--     combination of literals, operators, functions, references, and
+--     substitution templates.
+--
+--     In the following example, the value for the @propertyAlias@
+--     parameter uses a substitution template.
+--
+--     @\'company\/windfarm\/${$input.TemperatureInput.sensorData.windfarmID}\/turbine\/ ${$input.TemperatureInput.sensorData.turbineID}\/temperature\'@
+--
+-- You must specify either @propertyAlias@ or both @assetId@ and
+-- @propertyId@ to identify the target asset property in AWS IoT SiteWise.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-expressions.html Expressions>
+-- in the /AWS IoT Events Developer Guide/.
+--
+-- /See:/ 'newIotSiteWiseAction' smart constructor.
+data IotSiteWiseAction = IotSiteWiseAction'
+  { -- | The ID of the asset that has the specified property.
+    assetId :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier for this entry. You can use the entry ID to track
+    -- which data entry causes an error in case of failure. The default is a
+    -- new unique identifier.
+    entryId :: Prelude.Maybe Prelude.Text,
+    -- | The alias of the asset property.
+    propertyAlias :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the asset property.
+    propertyId :: Prelude.Maybe Prelude.Text,
+    -- | The value to send to the asset property. This value contains timestamp,
+    -- quality, and value (TQV) information.
+    propertyValue :: Prelude.Maybe AssetPropertyValue
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IotSiteWiseAction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assetId', 'iotSiteWiseAction_assetId' - The ID of the asset that has the specified property.
+--
+-- 'entryId', 'iotSiteWiseAction_entryId' - A unique identifier for this entry. You can use the entry ID to track
+-- which data entry causes an error in case of failure. The default is a
+-- new unique identifier.
+--
+-- 'propertyAlias', 'iotSiteWiseAction_propertyAlias' - The alias of the asset property.
+--
+-- 'propertyId', 'iotSiteWiseAction_propertyId' - The ID of the asset property.
+--
+-- 'propertyValue', 'iotSiteWiseAction_propertyValue' - The value to send to the asset property. This value contains timestamp,
+-- quality, and value (TQV) information.
+newIotSiteWiseAction ::
+  IotSiteWiseAction
+newIotSiteWiseAction =
+  IotSiteWiseAction'
+    { assetId = Prelude.Nothing,
+      entryId = Prelude.Nothing,
+      propertyAlias = Prelude.Nothing,
+      propertyId = Prelude.Nothing,
+      propertyValue = Prelude.Nothing
+    }
+
+-- | The ID of the asset that has the specified property.
+iotSiteWiseAction_assetId :: Lens.Lens' IotSiteWiseAction (Prelude.Maybe Prelude.Text)
+iotSiteWiseAction_assetId = Lens.lens (\IotSiteWiseAction' {assetId} -> assetId) (\s@IotSiteWiseAction' {} a -> s {assetId = a} :: IotSiteWiseAction)
+
+-- | A unique identifier for this entry. You can use the entry ID to track
+-- which data entry causes an error in case of failure. The default is a
+-- new unique identifier.
+iotSiteWiseAction_entryId :: Lens.Lens' IotSiteWiseAction (Prelude.Maybe Prelude.Text)
+iotSiteWiseAction_entryId = Lens.lens (\IotSiteWiseAction' {entryId} -> entryId) (\s@IotSiteWiseAction' {} a -> s {entryId = a} :: IotSiteWiseAction)
+
+-- | The alias of the asset property.
+iotSiteWiseAction_propertyAlias :: Lens.Lens' IotSiteWiseAction (Prelude.Maybe Prelude.Text)
+iotSiteWiseAction_propertyAlias = Lens.lens (\IotSiteWiseAction' {propertyAlias} -> propertyAlias) (\s@IotSiteWiseAction' {} a -> s {propertyAlias = a} :: IotSiteWiseAction)
+
+-- | The ID of the asset property.
+iotSiteWiseAction_propertyId :: Lens.Lens' IotSiteWiseAction (Prelude.Maybe Prelude.Text)
+iotSiteWiseAction_propertyId = Lens.lens (\IotSiteWiseAction' {propertyId} -> propertyId) (\s@IotSiteWiseAction' {} a -> s {propertyId = a} :: IotSiteWiseAction)
+
+-- | The value to send to the asset property. This value contains timestamp,
+-- quality, and value (TQV) information.
+iotSiteWiseAction_propertyValue :: Lens.Lens' IotSiteWiseAction (Prelude.Maybe AssetPropertyValue)
+iotSiteWiseAction_propertyValue = Lens.lens (\IotSiteWiseAction' {propertyValue} -> propertyValue) (\s@IotSiteWiseAction' {} a -> s {propertyValue = a} :: IotSiteWiseAction)
+
+instance Data.FromJSON IotSiteWiseAction where
+  parseJSON =
+    Data.withObject
+      "IotSiteWiseAction"
+      ( \x ->
+          IotSiteWiseAction'
+            Prelude.<$> (x Data..:? "assetId")
+            Prelude.<*> (x Data..:? "entryId")
+            Prelude.<*> (x Data..:? "propertyAlias")
+            Prelude.<*> (x Data..:? "propertyId")
+            Prelude.<*> (x Data..:? "propertyValue")
+      )
+
+instance Prelude.Hashable IotSiteWiseAction where
+  hashWithSalt _salt IotSiteWiseAction' {..} =
+    _salt
+      `Prelude.hashWithSalt` assetId
+      `Prelude.hashWithSalt` entryId
+      `Prelude.hashWithSalt` propertyAlias
+      `Prelude.hashWithSalt` propertyId
+      `Prelude.hashWithSalt` propertyValue
+
+instance Prelude.NFData IotSiteWiseAction where
+  rnf IotSiteWiseAction' {..} =
+    Prelude.rnf assetId
+      `Prelude.seq` Prelude.rnf entryId
+      `Prelude.seq` Prelude.rnf propertyAlias
+      `Prelude.seq` Prelude.rnf propertyId
+      `Prelude.seq` Prelude.rnf propertyValue
+
+instance Data.ToJSON IotSiteWiseAction where
+  toJSON IotSiteWiseAction' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("assetId" Data..=) Prelude.<$> assetId,
+            ("entryId" Data..=) Prelude.<$> entryId,
+            ("propertyAlias" Data..=) Prelude.<$> propertyAlias,
+            ("propertyId" Data..=) Prelude.<$> propertyId,
+            ("propertyValue" Data..=) Prelude.<$> propertyValue
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/IotSiteWiseAssetModelPropertyIdentifier.hs b/gen/Amazonka/IoTEvents/Types/IotSiteWiseAssetModelPropertyIdentifier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/IotSiteWiseAssetModelPropertyIdentifier.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.IotSiteWiseAssetModelPropertyIdentifier
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.IotSiteWiseAssetModelPropertyIdentifier 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 asset model property identifer of the input routed from AWS IoT
+-- SiteWise.
+--
+-- /See:/ 'newIotSiteWiseAssetModelPropertyIdentifier' smart constructor.
+data IotSiteWiseAssetModelPropertyIdentifier = IotSiteWiseAssetModelPropertyIdentifier'
+  { -- | The ID of the AWS IoT SiteWise asset model.
+    assetModelId :: Prelude.Text,
+    -- | The ID of the AWS IoT SiteWise asset property.
+    propertyId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IotSiteWiseAssetModelPropertyIdentifier' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assetModelId', 'iotSiteWiseAssetModelPropertyIdentifier_assetModelId' - The ID of the AWS IoT SiteWise asset model.
+--
+-- 'propertyId', 'iotSiteWiseAssetModelPropertyIdentifier_propertyId' - The ID of the AWS IoT SiteWise asset property.
+newIotSiteWiseAssetModelPropertyIdentifier ::
+  -- | 'assetModelId'
+  Prelude.Text ->
+  -- | 'propertyId'
+  Prelude.Text ->
+  IotSiteWiseAssetModelPropertyIdentifier
+newIotSiteWiseAssetModelPropertyIdentifier
+  pAssetModelId_
+  pPropertyId_ =
+    IotSiteWiseAssetModelPropertyIdentifier'
+      { assetModelId =
+          pAssetModelId_,
+        propertyId = pPropertyId_
+      }
+
+-- | The ID of the AWS IoT SiteWise asset model.
+iotSiteWiseAssetModelPropertyIdentifier_assetModelId :: Lens.Lens' IotSiteWiseAssetModelPropertyIdentifier Prelude.Text
+iotSiteWiseAssetModelPropertyIdentifier_assetModelId = Lens.lens (\IotSiteWiseAssetModelPropertyIdentifier' {assetModelId} -> assetModelId) (\s@IotSiteWiseAssetModelPropertyIdentifier' {} a -> s {assetModelId = a} :: IotSiteWiseAssetModelPropertyIdentifier)
+
+-- | The ID of the AWS IoT SiteWise asset property.
+iotSiteWiseAssetModelPropertyIdentifier_propertyId :: Lens.Lens' IotSiteWiseAssetModelPropertyIdentifier Prelude.Text
+iotSiteWiseAssetModelPropertyIdentifier_propertyId = Lens.lens (\IotSiteWiseAssetModelPropertyIdentifier' {propertyId} -> propertyId) (\s@IotSiteWiseAssetModelPropertyIdentifier' {} a -> s {propertyId = a} :: IotSiteWiseAssetModelPropertyIdentifier)
+
+instance
+  Prelude.Hashable
+    IotSiteWiseAssetModelPropertyIdentifier
+  where
+  hashWithSalt
+    _salt
+    IotSiteWiseAssetModelPropertyIdentifier' {..} =
+      _salt
+        `Prelude.hashWithSalt` assetModelId
+        `Prelude.hashWithSalt` propertyId
+
+instance
+  Prelude.NFData
+    IotSiteWiseAssetModelPropertyIdentifier
+  where
+  rnf IotSiteWiseAssetModelPropertyIdentifier' {..} =
+    Prelude.rnf assetModelId
+      `Prelude.seq` Prelude.rnf propertyId
+
+instance
+  Data.ToJSON
+    IotSiteWiseAssetModelPropertyIdentifier
+  where
+  toJSON IotSiteWiseAssetModelPropertyIdentifier' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("assetModelId" Data..= assetModelId),
+            Prelude.Just ("propertyId" Data..= propertyId)
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/IotSiteWiseInputIdentifier.hs b/gen/Amazonka/IoTEvents/Types/IotSiteWiseInputIdentifier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/IotSiteWiseInputIdentifier.hs
@@ -0,0 +1,74 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.IotSiteWiseInputIdentifier
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.IotSiteWiseInputIdentifier where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.IotSiteWiseAssetModelPropertyIdentifier
+import qualified Amazonka.Prelude as Prelude
+
+-- | The identifer of the input routed from AWS IoT SiteWise.
+--
+-- /See:/ 'newIotSiteWiseInputIdentifier' smart constructor.
+data IotSiteWiseInputIdentifier = IotSiteWiseInputIdentifier'
+  { -- | The identifier of the AWS IoT SiteWise asset model property.
+    iotSiteWiseAssetModelPropertyIdentifier :: Prelude.Maybe IotSiteWiseAssetModelPropertyIdentifier
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IotSiteWiseInputIdentifier' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'iotSiteWiseAssetModelPropertyIdentifier', 'iotSiteWiseInputIdentifier_iotSiteWiseAssetModelPropertyIdentifier' - The identifier of the AWS IoT SiteWise asset model property.
+newIotSiteWiseInputIdentifier ::
+  IotSiteWiseInputIdentifier
+newIotSiteWiseInputIdentifier =
+  IotSiteWiseInputIdentifier'
+    { iotSiteWiseAssetModelPropertyIdentifier =
+        Prelude.Nothing
+    }
+
+-- | The identifier of the AWS IoT SiteWise asset model property.
+iotSiteWiseInputIdentifier_iotSiteWiseAssetModelPropertyIdentifier :: Lens.Lens' IotSiteWiseInputIdentifier (Prelude.Maybe IotSiteWiseAssetModelPropertyIdentifier)
+iotSiteWiseInputIdentifier_iotSiteWiseAssetModelPropertyIdentifier = Lens.lens (\IotSiteWiseInputIdentifier' {iotSiteWiseAssetModelPropertyIdentifier} -> iotSiteWiseAssetModelPropertyIdentifier) (\s@IotSiteWiseInputIdentifier' {} a -> s {iotSiteWiseAssetModelPropertyIdentifier = a} :: IotSiteWiseInputIdentifier)
+
+instance Prelude.Hashable IotSiteWiseInputIdentifier where
+  hashWithSalt _salt IotSiteWiseInputIdentifier' {..} =
+    _salt
+      `Prelude.hashWithSalt` iotSiteWiseAssetModelPropertyIdentifier
+
+instance Prelude.NFData IotSiteWiseInputIdentifier where
+  rnf IotSiteWiseInputIdentifier' {..} =
+    Prelude.rnf iotSiteWiseAssetModelPropertyIdentifier
+
+instance Data.ToJSON IotSiteWiseInputIdentifier where
+  toJSON IotSiteWiseInputIdentifier' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("iotSiteWiseAssetModelPropertyIdentifier" Data..=)
+              Prelude.<$> iotSiteWiseAssetModelPropertyIdentifier
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/IotTopicPublishAction.hs b/gen/Amazonka/IoTEvents/Types/IotTopicPublishAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/IotTopicPublishAction.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.IotTopicPublishAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.IotTopicPublishAction where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.Payload
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information required to publish the MQTT message through the AWS IoT
+-- message broker.
+--
+-- /See:/ 'newIotTopicPublishAction' smart constructor.
+data IotTopicPublishAction = IotTopicPublishAction'
+  { -- | You can configure the action payload when you publish a message to an
+    -- AWS IoT Core topic.
+    payload :: Prelude.Maybe Payload,
+    -- | The MQTT topic of the message. You can use a string expression that
+    -- includes variables (@$variable.\<variable-name>@) and input values
+    -- (@$input.\<input-name>.\<path-to-datum>@) as the topic string.
+    mqttTopic :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IotTopicPublishAction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'payload', 'iotTopicPublishAction_payload' - You can configure the action payload when you publish a message to an
+-- AWS IoT Core topic.
+--
+-- 'mqttTopic', 'iotTopicPublishAction_mqttTopic' - The MQTT topic of the message. You can use a string expression that
+-- includes variables (@$variable.\<variable-name>@) and input values
+-- (@$input.\<input-name>.\<path-to-datum>@) as the topic string.
+newIotTopicPublishAction ::
+  -- | 'mqttTopic'
+  Prelude.Text ->
+  IotTopicPublishAction
+newIotTopicPublishAction pMqttTopic_ =
+  IotTopicPublishAction'
+    { payload = Prelude.Nothing,
+      mqttTopic = pMqttTopic_
+    }
+
+-- | You can configure the action payload when you publish a message to an
+-- AWS IoT Core topic.
+iotTopicPublishAction_payload :: Lens.Lens' IotTopicPublishAction (Prelude.Maybe Payload)
+iotTopicPublishAction_payload = Lens.lens (\IotTopicPublishAction' {payload} -> payload) (\s@IotTopicPublishAction' {} a -> s {payload = a} :: IotTopicPublishAction)
+
+-- | The MQTT topic of the message. You can use a string expression that
+-- includes variables (@$variable.\<variable-name>@) and input values
+-- (@$input.\<input-name>.\<path-to-datum>@) as the topic string.
+iotTopicPublishAction_mqttTopic :: Lens.Lens' IotTopicPublishAction Prelude.Text
+iotTopicPublishAction_mqttTopic = Lens.lens (\IotTopicPublishAction' {mqttTopic} -> mqttTopic) (\s@IotTopicPublishAction' {} a -> s {mqttTopic = a} :: IotTopicPublishAction)
+
+instance Data.FromJSON IotTopicPublishAction where
+  parseJSON =
+    Data.withObject
+      "IotTopicPublishAction"
+      ( \x ->
+          IotTopicPublishAction'
+            Prelude.<$> (x Data..:? "payload")
+            Prelude.<*> (x Data..: "mqttTopic")
+      )
+
+instance Prelude.Hashable IotTopicPublishAction where
+  hashWithSalt _salt IotTopicPublishAction' {..} =
+    _salt
+      `Prelude.hashWithSalt` payload
+      `Prelude.hashWithSalt` mqttTopic
+
+instance Prelude.NFData IotTopicPublishAction where
+  rnf IotTopicPublishAction' {..} =
+    Prelude.rnf payload
+      `Prelude.seq` Prelude.rnf mqttTopic
+
+instance Data.ToJSON IotTopicPublishAction where
+  toJSON IotTopicPublishAction' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("payload" Data..=) Prelude.<$> payload,
+            Prelude.Just ("mqttTopic" Data..= mqttTopic)
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/LambdaAction.hs b/gen/Amazonka/IoTEvents/Types/LambdaAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/LambdaAction.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.LambdaAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.LambdaAction where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.Payload
+import qualified Amazonka.Prelude as Prelude
+
+-- | Calls a Lambda function, passing in information about the detector model
+-- instance and the event that triggered the action.
+--
+-- /See:/ 'newLambdaAction' smart constructor.
+data LambdaAction = LambdaAction'
+  { -- | You can configure the action payload when you send a message to a Lambda
+    -- function.
+    payload :: Prelude.Maybe Payload,
+    -- | The ARN of the Lambda function that is executed.
+    functionArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LambdaAction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'payload', 'lambdaAction_payload' - You can configure the action payload when you send a message to a Lambda
+-- function.
+--
+-- 'functionArn', 'lambdaAction_functionArn' - The ARN of the Lambda function that is executed.
+newLambdaAction ::
+  -- | 'functionArn'
+  Prelude.Text ->
+  LambdaAction
+newLambdaAction pFunctionArn_ =
+  LambdaAction'
+    { payload = Prelude.Nothing,
+      functionArn = pFunctionArn_
+    }
+
+-- | You can configure the action payload when you send a message to a Lambda
+-- function.
+lambdaAction_payload :: Lens.Lens' LambdaAction (Prelude.Maybe Payload)
+lambdaAction_payload = Lens.lens (\LambdaAction' {payload} -> payload) (\s@LambdaAction' {} a -> s {payload = a} :: LambdaAction)
+
+-- | The ARN of the Lambda function that is executed.
+lambdaAction_functionArn :: Lens.Lens' LambdaAction Prelude.Text
+lambdaAction_functionArn = Lens.lens (\LambdaAction' {functionArn} -> functionArn) (\s@LambdaAction' {} a -> s {functionArn = a} :: LambdaAction)
+
+instance Data.FromJSON LambdaAction where
+  parseJSON =
+    Data.withObject
+      "LambdaAction"
+      ( \x ->
+          LambdaAction'
+            Prelude.<$> (x Data..:? "payload")
+            Prelude.<*> (x Data..: "functionArn")
+      )
+
+instance Prelude.Hashable LambdaAction where
+  hashWithSalt _salt LambdaAction' {..} =
+    _salt
+      `Prelude.hashWithSalt` payload
+      `Prelude.hashWithSalt` functionArn
+
+instance Prelude.NFData LambdaAction where
+  rnf LambdaAction' {..} =
+    Prelude.rnf payload
+      `Prelude.seq` Prelude.rnf functionArn
+
+instance Data.ToJSON LambdaAction where
+  toJSON LambdaAction' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("payload" Data..=) Prelude.<$> payload,
+            Prelude.Just ("functionArn" Data..= functionArn)
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/LoggingLevel.hs b/gen/Amazonka/IoTEvents/Types/LoggingLevel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/LoggingLevel.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.LoggingLevel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.LoggingLevel
+  ( LoggingLevel
+      ( ..,
+        LoggingLevel_DEBUG,
+        LoggingLevel_ERROR,
+        LoggingLevel_INFO
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype LoggingLevel = LoggingLevel'
+  { fromLoggingLevel ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern LoggingLevel_DEBUG :: LoggingLevel
+pattern LoggingLevel_DEBUG = LoggingLevel' "DEBUG"
+
+pattern LoggingLevel_ERROR :: LoggingLevel
+pattern LoggingLevel_ERROR = LoggingLevel' "ERROR"
+
+pattern LoggingLevel_INFO :: LoggingLevel
+pattern LoggingLevel_INFO = LoggingLevel' "INFO"
+
+{-# COMPLETE
+  LoggingLevel_DEBUG,
+  LoggingLevel_ERROR,
+  LoggingLevel_INFO,
+  LoggingLevel'
+  #-}
diff --git a/gen/Amazonka/IoTEvents/Types/LoggingOptions.hs b/gen/Amazonka/IoTEvents/Types/LoggingOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/LoggingOptions.hs
@@ -0,0 +1,135 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.LoggingOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.LoggingOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.DetectorDebugOption
+import Amazonka.IoTEvents.Types.LoggingLevel
+import qualified Amazonka.Prelude as Prelude
+
+-- | The values of the AWS IoT Events logging options.
+--
+-- /See:/ 'newLoggingOptions' smart constructor.
+data LoggingOptions = LoggingOptions'
+  { -- | Information that identifies those detector models and their detectors
+    -- (instances) for which the logging level is given.
+    detectorDebugOptions :: Prelude.Maybe (Prelude.NonEmpty DetectorDebugOption),
+    -- | The ARN of the role that grants permission to AWS IoT Events to perform
+    -- logging.
+    roleArn :: Prelude.Text,
+    -- | The logging level.
+    level :: LoggingLevel,
+    -- | If TRUE, logging is enabled for AWS IoT Events.
+    enabled :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoggingOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detectorDebugOptions', 'loggingOptions_detectorDebugOptions' - Information that identifies those detector models and their detectors
+-- (instances) for which the logging level is given.
+--
+-- 'roleArn', 'loggingOptions_roleArn' - The ARN of the role that grants permission to AWS IoT Events to perform
+-- logging.
+--
+-- 'level', 'loggingOptions_level' - The logging level.
+--
+-- 'enabled', 'loggingOptions_enabled' - If TRUE, logging is enabled for AWS IoT Events.
+newLoggingOptions ::
+  -- | 'roleArn'
+  Prelude.Text ->
+  -- | 'level'
+  LoggingLevel ->
+  -- | 'enabled'
+  Prelude.Bool ->
+  LoggingOptions
+newLoggingOptions pRoleArn_ pLevel_ pEnabled_ =
+  LoggingOptions'
+    { detectorDebugOptions =
+        Prelude.Nothing,
+      roleArn = pRoleArn_,
+      level = pLevel_,
+      enabled = pEnabled_
+    }
+
+-- | Information that identifies those detector models and their detectors
+-- (instances) for which the logging level is given.
+loggingOptions_detectorDebugOptions :: Lens.Lens' LoggingOptions (Prelude.Maybe (Prelude.NonEmpty DetectorDebugOption))
+loggingOptions_detectorDebugOptions = Lens.lens (\LoggingOptions' {detectorDebugOptions} -> detectorDebugOptions) (\s@LoggingOptions' {} a -> s {detectorDebugOptions = a} :: LoggingOptions) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARN of the role that grants permission to AWS IoT Events to perform
+-- logging.
+loggingOptions_roleArn :: Lens.Lens' LoggingOptions Prelude.Text
+loggingOptions_roleArn = Lens.lens (\LoggingOptions' {roleArn} -> roleArn) (\s@LoggingOptions' {} a -> s {roleArn = a} :: LoggingOptions)
+
+-- | The logging level.
+loggingOptions_level :: Lens.Lens' LoggingOptions LoggingLevel
+loggingOptions_level = Lens.lens (\LoggingOptions' {level} -> level) (\s@LoggingOptions' {} a -> s {level = a} :: LoggingOptions)
+
+-- | If TRUE, logging is enabled for AWS IoT Events.
+loggingOptions_enabled :: Lens.Lens' LoggingOptions Prelude.Bool
+loggingOptions_enabled = Lens.lens (\LoggingOptions' {enabled} -> enabled) (\s@LoggingOptions' {} a -> s {enabled = a} :: LoggingOptions)
+
+instance Data.FromJSON LoggingOptions where
+  parseJSON =
+    Data.withObject
+      "LoggingOptions"
+      ( \x ->
+          LoggingOptions'
+            Prelude.<$> (x Data..:? "detectorDebugOptions")
+            Prelude.<*> (x Data..: "roleArn")
+            Prelude.<*> (x Data..: "level")
+            Prelude.<*> (x Data..: "enabled")
+      )
+
+instance Prelude.Hashable LoggingOptions where
+  hashWithSalt _salt LoggingOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` detectorDebugOptions
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` level
+      `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData LoggingOptions where
+  rnf LoggingOptions' {..} =
+    Prelude.rnf detectorDebugOptions
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf level
+      `Prelude.seq` Prelude.rnf enabled
+
+instance Data.ToJSON LoggingOptions where
+  toJSON LoggingOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("detectorDebugOptions" Data..=)
+              Prelude.<$> detectorDebugOptions,
+            Prelude.Just ("roleArn" Data..= roleArn),
+            Prelude.Just ("level" Data..= level),
+            Prelude.Just ("enabled" Data..= enabled)
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/NotificationAction.hs b/gen/Amazonka/IoTEvents/Types/NotificationAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/NotificationAction.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.NotificationAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.NotificationAction where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.EmailConfiguration
+import Amazonka.IoTEvents.Types.NotificationTargetActions
+import Amazonka.IoTEvents.Types.SMSConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains the notification settings of an alarm model. The settings apply
+-- to all alarms that were created based on this alarm model.
+--
+-- /See:/ 'newNotificationAction' smart constructor.
+data NotificationAction = NotificationAction'
+  { -- | Contains the configuration information of email notifications.
+    emailConfigurations :: Prelude.Maybe (Prelude.NonEmpty EmailConfiguration),
+    -- | Contains the configuration information of SMS notifications.
+    smsConfigurations :: Prelude.Maybe (Prelude.NonEmpty SMSConfiguration),
+    -- | Specifies an AWS Lambda function to manage alarm notifications. You can
+    -- create one or use the
+    -- <https://docs.aws.amazon.com/iotevents/latest/developerguide/lambda-support.html AWS Lambda function provided by AWS IoT Events>.
+    action :: NotificationTargetActions
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NotificationAction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'emailConfigurations', 'notificationAction_emailConfigurations' - Contains the configuration information of email notifications.
+--
+-- 'smsConfigurations', 'notificationAction_smsConfigurations' - Contains the configuration information of SMS notifications.
+--
+-- 'action', 'notificationAction_action' - Specifies an AWS Lambda function to manage alarm notifications. You can
+-- create one or use the
+-- <https://docs.aws.amazon.com/iotevents/latest/developerguide/lambda-support.html AWS Lambda function provided by AWS IoT Events>.
+newNotificationAction ::
+  -- | 'action'
+  NotificationTargetActions ->
+  NotificationAction
+newNotificationAction pAction_ =
+  NotificationAction'
+    { emailConfigurations =
+        Prelude.Nothing,
+      smsConfigurations = Prelude.Nothing,
+      action = pAction_
+    }
+
+-- | Contains the configuration information of email notifications.
+notificationAction_emailConfigurations :: Lens.Lens' NotificationAction (Prelude.Maybe (Prelude.NonEmpty EmailConfiguration))
+notificationAction_emailConfigurations = Lens.lens (\NotificationAction' {emailConfigurations} -> emailConfigurations) (\s@NotificationAction' {} a -> s {emailConfigurations = a} :: NotificationAction) Prelude.. Lens.mapping Lens.coerced
+
+-- | Contains the configuration information of SMS notifications.
+notificationAction_smsConfigurations :: Lens.Lens' NotificationAction (Prelude.Maybe (Prelude.NonEmpty SMSConfiguration))
+notificationAction_smsConfigurations = Lens.lens (\NotificationAction' {smsConfigurations} -> smsConfigurations) (\s@NotificationAction' {} a -> s {smsConfigurations = a} :: NotificationAction) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies an AWS Lambda function to manage alarm notifications. You can
+-- create one or use the
+-- <https://docs.aws.amazon.com/iotevents/latest/developerguide/lambda-support.html AWS Lambda function provided by AWS IoT Events>.
+notificationAction_action :: Lens.Lens' NotificationAction NotificationTargetActions
+notificationAction_action = Lens.lens (\NotificationAction' {action} -> action) (\s@NotificationAction' {} a -> s {action = a} :: NotificationAction)
+
+instance Data.FromJSON NotificationAction where
+  parseJSON =
+    Data.withObject
+      "NotificationAction"
+      ( \x ->
+          NotificationAction'
+            Prelude.<$> (x Data..:? "emailConfigurations")
+            Prelude.<*> (x Data..:? "smsConfigurations")
+            Prelude.<*> (x Data..: "action")
+      )
+
+instance Prelude.Hashable NotificationAction where
+  hashWithSalt _salt NotificationAction' {..} =
+    _salt
+      `Prelude.hashWithSalt` emailConfigurations
+      `Prelude.hashWithSalt` smsConfigurations
+      `Prelude.hashWithSalt` action
+
+instance Prelude.NFData NotificationAction where
+  rnf NotificationAction' {..} =
+    Prelude.rnf emailConfigurations
+      `Prelude.seq` Prelude.rnf smsConfigurations
+      `Prelude.seq` Prelude.rnf action
+
+instance Data.ToJSON NotificationAction where
+  toJSON NotificationAction' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("emailConfigurations" Data..=)
+              Prelude.<$> emailConfigurations,
+            ("smsConfigurations" Data..=)
+              Prelude.<$> smsConfigurations,
+            Prelude.Just ("action" Data..= action)
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/NotificationTargetActions.hs b/gen/Amazonka/IoTEvents/Types/NotificationTargetActions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/NotificationTargetActions.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.NotificationTargetActions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.NotificationTargetActions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.LambdaAction
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies an AWS Lambda function to manage alarm notifications. You can
+-- create one or use the
+-- <https://docs.aws.amazon.com/iotevents/latest/developerguide/lambda-support.html AWS Lambda function provided by AWS IoT Events>.
+--
+-- /See:/ 'newNotificationTargetActions' smart constructor.
+data NotificationTargetActions = NotificationTargetActions'
+  { lambdaAction :: Prelude.Maybe LambdaAction
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NotificationTargetActions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'lambdaAction', 'notificationTargetActions_lambdaAction' - Undocumented member.
+newNotificationTargetActions ::
+  NotificationTargetActions
+newNotificationTargetActions =
+  NotificationTargetActions'
+    { lambdaAction =
+        Prelude.Nothing
+    }
+
+-- | Undocumented member.
+notificationTargetActions_lambdaAction :: Lens.Lens' NotificationTargetActions (Prelude.Maybe LambdaAction)
+notificationTargetActions_lambdaAction = Lens.lens (\NotificationTargetActions' {lambdaAction} -> lambdaAction) (\s@NotificationTargetActions' {} a -> s {lambdaAction = a} :: NotificationTargetActions)
+
+instance Data.FromJSON NotificationTargetActions where
+  parseJSON =
+    Data.withObject
+      "NotificationTargetActions"
+      ( \x ->
+          NotificationTargetActions'
+            Prelude.<$> (x Data..:? "lambdaAction")
+      )
+
+instance Prelude.Hashable NotificationTargetActions where
+  hashWithSalt _salt NotificationTargetActions' {..} =
+    _salt `Prelude.hashWithSalt` lambdaAction
+
+instance Prelude.NFData NotificationTargetActions where
+  rnf NotificationTargetActions' {..} =
+    Prelude.rnf lambdaAction
+
+instance Data.ToJSON NotificationTargetActions where
+  toJSON NotificationTargetActions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("lambdaAction" Data..=) Prelude.<$> lambdaAction]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/OnEnterLifecycle.hs b/gen/Amazonka/IoTEvents/Types/OnEnterLifecycle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/OnEnterLifecycle.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.OnEnterLifecycle
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.OnEnterLifecycle where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.Event
+import qualified Amazonka.Prelude as Prelude
+
+-- | When entering this state, perform these @actions@ if the @condition@ is
+-- TRUE.
+--
+-- /See:/ 'newOnEnterLifecycle' smart constructor.
+data OnEnterLifecycle = OnEnterLifecycle'
+  { -- | Specifies the actions that are performed when the state is entered and
+    -- the @condition@ is @TRUE@.
+    events :: Prelude.Maybe [Event]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OnEnterLifecycle' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'events', 'onEnterLifecycle_events' - Specifies the actions that are performed when the state is entered and
+-- the @condition@ is @TRUE@.
+newOnEnterLifecycle ::
+  OnEnterLifecycle
+newOnEnterLifecycle =
+  OnEnterLifecycle' {events = Prelude.Nothing}
+
+-- | Specifies the actions that are performed when the state is entered and
+-- the @condition@ is @TRUE@.
+onEnterLifecycle_events :: Lens.Lens' OnEnterLifecycle (Prelude.Maybe [Event])
+onEnterLifecycle_events = Lens.lens (\OnEnterLifecycle' {events} -> events) (\s@OnEnterLifecycle' {} a -> s {events = a} :: OnEnterLifecycle) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON OnEnterLifecycle where
+  parseJSON =
+    Data.withObject
+      "OnEnterLifecycle"
+      ( \x ->
+          OnEnterLifecycle'
+            Prelude.<$> (x Data..:? "events" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable OnEnterLifecycle where
+  hashWithSalt _salt OnEnterLifecycle' {..} =
+    _salt `Prelude.hashWithSalt` events
+
+instance Prelude.NFData OnEnterLifecycle where
+  rnf OnEnterLifecycle' {..} = Prelude.rnf events
+
+instance Data.ToJSON OnEnterLifecycle where
+  toJSON OnEnterLifecycle' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("events" Data..=) Prelude.<$> events]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/OnExitLifecycle.hs b/gen/Amazonka/IoTEvents/Types/OnExitLifecycle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/OnExitLifecycle.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.OnExitLifecycle
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.OnExitLifecycle where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.Event
+import qualified Amazonka.Prelude as Prelude
+
+-- | When exiting this state, perform these @actions@ if the specified
+-- @condition@ is @TRUE@.
+--
+-- /See:/ 'newOnExitLifecycle' smart constructor.
+data OnExitLifecycle = OnExitLifecycle'
+  { -- | Specifies the @actions@ that are performed when the state is exited and
+    -- the @condition@ is @TRUE@.
+    events :: Prelude.Maybe [Event]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OnExitLifecycle' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'events', 'onExitLifecycle_events' - Specifies the @actions@ that are performed when the state is exited and
+-- the @condition@ is @TRUE@.
+newOnExitLifecycle ::
+  OnExitLifecycle
+newOnExitLifecycle =
+  OnExitLifecycle' {events = Prelude.Nothing}
+
+-- | Specifies the @actions@ that are performed when the state is exited and
+-- the @condition@ is @TRUE@.
+onExitLifecycle_events :: Lens.Lens' OnExitLifecycle (Prelude.Maybe [Event])
+onExitLifecycle_events = Lens.lens (\OnExitLifecycle' {events} -> events) (\s@OnExitLifecycle' {} a -> s {events = a} :: OnExitLifecycle) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON OnExitLifecycle where
+  parseJSON =
+    Data.withObject
+      "OnExitLifecycle"
+      ( \x ->
+          OnExitLifecycle'
+            Prelude.<$> (x Data..:? "events" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable OnExitLifecycle where
+  hashWithSalt _salt OnExitLifecycle' {..} =
+    _salt `Prelude.hashWithSalt` events
+
+instance Prelude.NFData OnExitLifecycle where
+  rnf OnExitLifecycle' {..} = Prelude.rnf events
+
+instance Data.ToJSON OnExitLifecycle where
+  toJSON OnExitLifecycle' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("events" Data..=) Prelude.<$> events]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/OnInputLifecycle.hs b/gen/Amazonka/IoTEvents/Types/OnInputLifecycle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/OnInputLifecycle.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.OnInputLifecycle
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.OnInputLifecycle where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.Event
+import Amazonka.IoTEvents.Types.TransitionEvent
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the actions performed when the @condition@ evaluates to TRUE.
+--
+-- /See:/ 'newOnInputLifecycle' smart constructor.
+data OnInputLifecycle = OnInputLifecycle'
+  { -- | Specifies the actions performed when the @condition@ evaluates to TRUE.
+    events :: Prelude.Maybe [Event],
+    -- | Specifies the actions performed, and the next state entered, when a
+    -- @condition@ evaluates to TRUE.
+    transitionEvents :: Prelude.Maybe [TransitionEvent]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OnInputLifecycle' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'events', 'onInputLifecycle_events' - Specifies the actions performed when the @condition@ evaluates to TRUE.
+--
+-- 'transitionEvents', 'onInputLifecycle_transitionEvents' - Specifies the actions performed, and the next state entered, when a
+-- @condition@ evaluates to TRUE.
+newOnInputLifecycle ::
+  OnInputLifecycle
+newOnInputLifecycle =
+  OnInputLifecycle'
+    { events = Prelude.Nothing,
+      transitionEvents = Prelude.Nothing
+    }
+
+-- | Specifies the actions performed when the @condition@ evaluates to TRUE.
+onInputLifecycle_events :: Lens.Lens' OnInputLifecycle (Prelude.Maybe [Event])
+onInputLifecycle_events = Lens.lens (\OnInputLifecycle' {events} -> events) (\s@OnInputLifecycle' {} a -> s {events = a} :: OnInputLifecycle) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies the actions performed, and the next state entered, when a
+-- @condition@ evaluates to TRUE.
+onInputLifecycle_transitionEvents :: Lens.Lens' OnInputLifecycle (Prelude.Maybe [TransitionEvent])
+onInputLifecycle_transitionEvents = Lens.lens (\OnInputLifecycle' {transitionEvents} -> transitionEvents) (\s@OnInputLifecycle' {} a -> s {transitionEvents = a} :: OnInputLifecycle) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON OnInputLifecycle where
+  parseJSON =
+    Data.withObject
+      "OnInputLifecycle"
+      ( \x ->
+          OnInputLifecycle'
+            Prelude.<$> (x Data..:? "events" Data..!= Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..:? "transitionEvents"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable OnInputLifecycle where
+  hashWithSalt _salt OnInputLifecycle' {..} =
+    _salt
+      `Prelude.hashWithSalt` events
+      `Prelude.hashWithSalt` transitionEvents
+
+instance Prelude.NFData OnInputLifecycle where
+  rnf OnInputLifecycle' {..} =
+    Prelude.rnf events
+      `Prelude.seq` Prelude.rnf transitionEvents
+
+instance Data.ToJSON OnInputLifecycle where
+  toJSON OnInputLifecycle' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("events" Data..=) Prelude.<$> events,
+            ("transitionEvents" Data..=)
+              Prelude.<$> transitionEvents
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/Payload.hs b/gen/Amazonka/IoTEvents/Types/Payload.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/Payload.hs
@@ -0,0 +1,120 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.Payload
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.Payload where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.PayloadType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information needed to configure the payload.
+--
+-- By default, AWS IoT Events generates a standard payload in JSON for any
+-- action. This action payload contains all attribute-value pairs that have
+-- the information about the detector model instance and the event
+-- triggered the action. To configure the action payload, you can use
+-- @contentExpression@.
+--
+-- /See:/ 'newPayload' smart constructor.
+data Payload = Payload'
+  { -- | The content of the payload. You can use a string expression that
+    -- includes quoted strings (@\'\<string>\'@), variables
+    -- (@$variable.\<variable-name>@), input values
+    -- (@$input.\<input-name>.\<path-to-datum>@), string concatenations, and
+    -- quoted strings that contain @${}@ as the content. The recommended
+    -- maximum size of a content expression is 1 KB.
+    contentExpression :: Prelude.Text,
+    -- | The value of the payload type can be either @STRING@ or @JSON@.
+    type' :: PayloadType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Payload' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contentExpression', 'payload_contentExpression' - The content of the payload. You can use a string expression that
+-- includes quoted strings (@\'\<string>\'@), variables
+-- (@$variable.\<variable-name>@), input values
+-- (@$input.\<input-name>.\<path-to-datum>@), string concatenations, and
+-- quoted strings that contain @${}@ as the content. The recommended
+-- maximum size of a content expression is 1 KB.
+--
+-- 'type'', 'payload_type' - The value of the payload type can be either @STRING@ or @JSON@.
+newPayload ::
+  -- | 'contentExpression'
+  Prelude.Text ->
+  -- | 'type''
+  PayloadType ->
+  Payload
+newPayload pContentExpression_ pType_ =
+  Payload'
+    { contentExpression = pContentExpression_,
+      type' = pType_
+    }
+
+-- | The content of the payload. You can use a string expression that
+-- includes quoted strings (@\'\<string>\'@), variables
+-- (@$variable.\<variable-name>@), input values
+-- (@$input.\<input-name>.\<path-to-datum>@), string concatenations, and
+-- quoted strings that contain @${}@ as the content. The recommended
+-- maximum size of a content expression is 1 KB.
+payload_contentExpression :: Lens.Lens' Payload Prelude.Text
+payload_contentExpression = Lens.lens (\Payload' {contentExpression} -> contentExpression) (\s@Payload' {} a -> s {contentExpression = a} :: Payload)
+
+-- | The value of the payload type can be either @STRING@ or @JSON@.
+payload_type :: Lens.Lens' Payload PayloadType
+payload_type = Lens.lens (\Payload' {type'} -> type') (\s@Payload' {} a -> s {type' = a} :: Payload)
+
+instance Data.FromJSON Payload where
+  parseJSON =
+    Data.withObject
+      "Payload"
+      ( \x ->
+          Payload'
+            Prelude.<$> (x Data..: "contentExpression")
+            Prelude.<*> (x Data..: "type")
+      )
+
+instance Prelude.Hashable Payload where
+  hashWithSalt _salt Payload' {..} =
+    _salt
+      `Prelude.hashWithSalt` contentExpression
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData Payload where
+  rnf Payload' {..} =
+    Prelude.rnf contentExpression
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToJSON Payload where
+  toJSON Payload' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("contentExpression" Data..= contentExpression),
+            Prelude.Just ("type" Data..= type')
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/PayloadType.hs b/gen/Amazonka/IoTEvents/Types/PayloadType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/PayloadType.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.PayloadType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.PayloadType
+  ( PayloadType
+      ( ..,
+        PayloadType_JSON,
+        PayloadType_STRING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PayloadType = PayloadType'
+  { fromPayloadType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern PayloadType_JSON :: PayloadType
+pattern PayloadType_JSON = PayloadType' "JSON"
+
+pattern PayloadType_STRING :: PayloadType
+pattern PayloadType_STRING = PayloadType' "STRING"
+
+{-# COMPLETE
+  PayloadType_JSON,
+  PayloadType_STRING,
+  PayloadType'
+  #-}
diff --git a/gen/Amazonka/IoTEvents/Types/RecipientDetail.hs b/gen/Amazonka/IoTEvents/Types/RecipientDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/RecipientDetail.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.IoTEvents.Types.RecipientDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.RecipientDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.SSOIdentity
+import qualified Amazonka.Prelude as Prelude
+
+-- | The information that identifies the recipient.
+--
+-- /See:/ 'newRecipientDetail' smart constructor.
+data RecipientDetail = RecipientDetail'
+  { -- | The AWS Single Sign-On (AWS SSO) authentication information.
+    ssoIdentity :: Prelude.Maybe SSOIdentity
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecipientDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ssoIdentity', 'recipientDetail_ssoIdentity' - The AWS Single Sign-On (AWS SSO) authentication information.
+newRecipientDetail ::
+  RecipientDetail
+newRecipientDetail =
+  RecipientDetail' {ssoIdentity = Prelude.Nothing}
+
+-- | The AWS Single Sign-On (AWS SSO) authentication information.
+recipientDetail_ssoIdentity :: Lens.Lens' RecipientDetail (Prelude.Maybe SSOIdentity)
+recipientDetail_ssoIdentity = Lens.lens (\RecipientDetail' {ssoIdentity} -> ssoIdentity) (\s@RecipientDetail' {} a -> s {ssoIdentity = a} :: RecipientDetail)
+
+instance Data.FromJSON RecipientDetail where
+  parseJSON =
+    Data.withObject
+      "RecipientDetail"
+      ( \x ->
+          RecipientDetail'
+            Prelude.<$> (x Data..:? "ssoIdentity")
+      )
+
+instance Prelude.Hashable RecipientDetail where
+  hashWithSalt _salt RecipientDetail' {..} =
+    _salt `Prelude.hashWithSalt` ssoIdentity
+
+instance Prelude.NFData RecipientDetail where
+  rnf RecipientDetail' {..} = Prelude.rnf ssoIdentity
+
+instance Data.ToJSON RecipientDetail where
+  toJSON RecipientDetail' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("ssoIdentity" Data..=) Prelude.<$> ssoIdentity]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/ResetTimerAction.hs b/gen/Amazonka/IoTEvents/Types/ResetTimerAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/ResetTimerAction.hs
@@ -0,0 +1,79 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.ResetTimerAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.ResetTimerAction where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information required to reset the timer. The timer is reset to the
+-- previously evaluated result of the duration. The duration expression
+-- isn\'t reevaluated when you reset the timer.
+--
+-- /See:/ 'newResetTimerAction' smart constructor.
+data ResetTimerAction = ResetTimerAction'
+  { -- | The name of the timer to reset.
+    timerName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResetTimerAction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'timerName', 'resetTimerAction_timerName' - The name of the timer to reset.
+newResetTimerAction ::
+  -- | 'timerName'
+  Prelude.Text ->
+  ResetTimerAction
+newResetTimerAction pTimerName_ =
+  ResetTimerAction' {timerName = pTimerName_}
+
+-- | The name of the timer to reset.
+resetTimerAction_timerName :: Lens.Lens' ResetTimerAction Prelude.Text
+resetTimerAction_timerName = Lens.lens (\ResetTimerAction' {timerName} -> timerName) (\s@ResetTimerAction' {} a -> s {timerName = a} :: ResetTimerAction)
+
+instance Data.FromJSON ResetTimerAction where
+  parseJSON =
+    Data.withObject
+      "ResetTimerAction"
+      ( \x ->
+          ResetTimerAction'
+            Prelude.<$> (x Data..: "timerName")
+      )
+
+instance Prelude.Hashable ResetTimerAction where
+  hashWithSalt _salt ResetTimerAction' {..} =
+    _salt `Prelude.hashWithSalt` timerName
+
+instance Prelude.NFData ResetTimerAction where
+  rnf ResetTimerAction' {..} = Prelude.rnf timerName
+
+instance Data.ToJSON ResetTimerAction where
+  toJSON ResetTimerAction' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("timerName" Data..= timerName)]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/RoutedResource.hs b/gen/Amazonka/IoTEvents/Types/RoutedResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/RoutedResource.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.RoutedResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.RoutedResource 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
+
+-- | Contains information about the routed resource.
+--
+-- /See:/ 'newRoutedResource' smart constructor.
+data RoutedResource = RoutedResource'
+  { -- | The ARN of the routed resource. For more information, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the routed resource.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RoutedResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'routedResource_arn' - The ARN of the routed resource. For more information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'name', 'routedResource_name' - The name of the routed resource.
+newRoutedResource ::
+  RoutedResource
+newRoutedResource =
+  RoutedResource'
+    { arn = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The ARN of the routed resource. For more information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+routedResource_arn :: Lens.Lens' RoutedResource (Prelude.Maybe Prelude.Text)
+routedResource_arn = Lens.lens (\RoutedResource' {arn} -> arn) (\s@RoutedResource' {} a -> s {arn = a} :: RoutedResource)
+
+-- | The name of the routed resource.
+routedResource_name :: Lens.Lens' RoutedResource (Prelude.Maybe Prelude.Text)
+routedResource_name = Lens.lens (\RoutedResource' {name} -> name) (\s@RoutedResource' {} a -> s {name = a} :: RoutedResource)
+
+instance Data.FromJSON RoutedResource where
+  parseJSON =
+    Data.withObject
+      "RoutedResource"
+      ( \x ->
+          RoutedResource'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "name")
+      )
+
+instance Prelude.Hashable RoutedResource where
+  hashWithSalt _salt RoutedResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData RoutedResource where
+  rnf RoutedResource' {..} =
+    Prelude.rnf arn `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/IoTEvents/Types/SMSConfiguration.hs b/gen/Amazonka/IoTEvents/Types/SMSConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/SMSConfiguration.hs
@@ -0,0 +1,123 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.SMSConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.SMSConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.RecipientDetail
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains the configuration information of SMS notifications.
+--
+-- /See:/ 'newSMSConfiguration' smart constructor.
+data SMSConfiguration = SMSConfiguration'
+  { -- | The message that you want to send. The message can be up to 200
+    -- characters.
+    additionalMessage :: Prelude.Maybe Prelude.Text,
+    -- | The sender ID.
+    senderId :: Prelude.Maybe Prelude.Text,
+    -- | Specifies one or more recipients who receive the message.
+    --
+    -- You must
+    -- <https://docs.aws.amazon.com/singlesignon/latest/userguide/addusers.html add the users that receive SMS messages to your AWS SSO store>.
+    recipients :: Prelude.NonEmpty RecipientDetail
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SMSConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'additionalMessage', 'sMSConfiguration_additionalMessage' - The message that you want to send. The message can be up to 200
+-- characters.
+--
+-- 'senderId', 'sMSConfiguration_senderId' - The sender ID.
+--
+-- 'recipients', 'sMSConfiguration_recipients' - Specifies one or more recipients who receive the message.
+--
+-- You must
+-- <https://docs.aws.amazon.com/singlesignon/latest/userguide/addusers.html add the users that receive SMS messages to your AWS SSO store>.
+newSMSConfiguration ::
+  -- | 'recipients'
+  Prelude.NonEmpty RecipientDetail ->
+  SMSConfiguration
+newSMSConfiguration pRecipients_ =
+  SMSConfiguration'
+    { additionalMessage =
+        Prelude.Nothing,
+      senderId = Prelude.Nothing,
+      recipients = Lens.coerced Lens.# pRecipients_
+    }
+
+-- | The message that you want to send. The message can be up to 200
+-- characters.
+sMSConfiguration_additionalMessage :: Lens.Lens' SMSConfiguration (Prelude.Maybe Prelude.Text)
+sMSConfiguration_additionalMessage = Lens.lens (\SMSConfiguration' {additionalMessage} -> additionalMessage) (\s@SMSConfiguration' {} a -> s {additionalMessage = a} :: SMSConfiguration)
+
+-- | The sender ID.
+sMSConfiguration_senderId :: Lens.Lens' SMSConfiguration (Prelude.Maybe Prelude.Text)
+sMSConfiguration_senderId = Lens.lens (\SMSConfiguration' {senderId} -> senderId) (\s@SMSConfiguration' {} a -> s {senderId = a} :: SMSConfiguration)
+
+-- | Specifies one or more recipients who receive the message.
+--
+-- You must
+-- <https://docs.aws.amazon.com/singlesignon/latest/userguide/addusers.html add the users that receive SMS messages to your AWS SSO store>.
+sMSConfiguration_recipients :: Lens.Lens' SMSConfiguration (Prelude.NonEmpty RecipientDetail)
+sMSConfiguration_recipients = Lens.lens (\SMSConfiguration' {recipients} -> recipients) (\s@SMSConfiguration' {} a -> s {recipients = a} :: SMSConfiguration) Prelude.. Lens.coerced
+
+instance Data.FromJSON SMSConfiguration where
+  parseJSON =
+    Data.withObject
+      "SMSConfiguration"
+      ( \x ->
+          SMSConfiguration'
+            Prelude.<$> (x Data..:? "additionalMessage")
+            Prelude.<*> (x Data..:? "senderId")
+            Prelude.<*> (x Data..: "recipients")
+      )
+
+instance Prelude.Hashable SMSConfiguration where
+  hashWithSalt _salt SMSConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` additionalMessage
+      `Prelude.hashWithSalt` senderId
+      `Prelude.hashWithSalt` recipients
+
+instance Prelude.NFData SMSConfiguration where
+  rnf SMSConfiguration' {..} =
+    Prelude.rnf additionalMessage
+      `Prelude.seq` Prelude.rnf senderId
+      `Prelude.seq` Prelude.rnf recipients
+
+instance Data.ToJSON SMSConfiguration where
+  toJSON SMSConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("additionalMessage" Data..=)
+              Prelude.<$> additionalMessage,
+            ("senderId" Data..=) Prelude.<$> senderId,
+            Prelude.Just ("recipients" Data..= recipients)
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/SNSTopicPublishAction.hs b/gen/Amazonka/IoTEvents/Types/SNSTopicPublishAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/SNSTopicPublishAction.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.SNSTopicPublishAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.SNSTopicPublishAction where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.Payload
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information required to publish the Amazon SNS message.
+--
+-- /See:/ 'newSNSTopicPublishAction' smart constructor.
+data SNSTopicPublishAction = SNSTopicPublishAction'
+  { -- | You can configure the action payload when you send a message as an
+    -- Amazon SNS push notification.
+    payload :: Prelude.Maybe Payload,
+    -- | The ARN of the Amazon SNS target where the message is sent.
+    targetArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SNSTopicPublishAction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'payload', 'sNSTopicPublishAction_payload' - You can configure the action payload when you send a message as an
+-- Amazon SNS push notification.
+--
+-- 'targetArn', 'sNSTopicPublishAction_targetArn' - The ARN of the Amazon SNS target where the message is sent.
+newSNSTopicPublishAction ::
+  -- | 'targetArn'
+  Prelude.Text ->
+  SNSTopicPublishAction
+newSNSTopicPublishAction pTargetArn_ =
+  SNSTopicPublishAction'
+    { payload = Prelude.Nothing,
+      targetArn = pTargetArn_
+    }
+
+-- | You can configure the action payload when you send a message as an
+-- Amazon SNS push notification.
+sNSTopicPublishAction_payload :: Lens.Lens' SNSTopicPublishAction (Prelude.Maybe Payload)
+sNSTopicPublishAction_payload = Lens.lens (\SNSTopicPublishAction' {payload} -> payload) (\s@SNSTopicPublishAction' {} a -> s {payload = a} :: SNSTopicPublishAction)
+
+-- | The ARN of the Amazon SNS target where the message is sent.
+sNSTopicPublishAction_targetArn :: Lens.Lens' SNSTopicPublishAction Prelude.Text
+sNSTopicPublishAction_targetArn = Lens.lens (\SNSTopicPublishAction' {targetArn} -> targetArn) (\s@SNSTopicPublishAction' {} a -> s {targetArn = a} :: SNSTopicPublishAction)
+
+instance Data.FromJSON SNSTopicPublishAction where
+  parseJSON =
+    Data.withObject
+      "SNSTopicPublishAction"
+      ( \x ->
+          SNSTopicPublishAction'
+            Prelude.<$> (x Data..:? "payload")
+            Prelude.<*> (x Data..: "targetArn")
+      )
+
+instance Prelude.Hashable SNSTopicPublishAction where
+  hashWithSalt _salt SNSTopicPublishAction' {..} =
+    _salt
+      `Prelude.hashWithSalt` payload
+      `Prelude.hashWithSalt` targetArn
+
+instance Prelude.NFData SNSTopicPublishAction where
+  rnf SNSTopicPublishAction' {..} =
+    Prelude.rnf payload
+      `Prelude.seq` Prelude.rnf targetArn
+
+instance Data.ToJSON SNSTopicPublishAction where
+  toJSON SNSTopicPublishAction' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("payload" Data..=) Prelude.<$> payload,
+            Prelude.Just ("targetArn" Data..= targetArn)
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/SSOIdentity.hs b/gen/Amazonka/IoTEvents/Types/SSOIdentity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/SSOIdentity.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.SSOIdentity
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.SSOIdentity 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
+
+-- | Contains information about your identity source in AWS Single Sign-On.
+-- For more information, see the
+-- <https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html AWS Single Sign-On User Guide>.
+--
+-- /See:/ 'newSSOIdentity' smart constructor.
+data SSOIdentity = SSOIdentity'
+  { -- | The user ID.
+    userId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the AWS SSO identity store.
+    identityStoreId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SSOIdentity' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'userId', 'sSOIdentity_userId' - The user ID.
+--
+-- 'identityStoreId', 'sSOIdentity_identityStoreId' - The ID of the AWS SSO identity store.
+newSSOIdentity ::
+  -- | 'identityStoreId'
+  Prelude.Text ->
+  SSOIdentity
+newSSOIdentity pIdentityStoreId_ =
+  SSOIdentity'
+    { userId = Prelude.Nothing,
+      identityStoreId = pIdentityStoreId_
+    }
+
+-- | The user ID.
+sSOIdentity_userId :: Lens.Lens' SSOIdentity (Prelude.Maybe Prelude.Text)
+sSOIdentity_userId = Lens.lens (\SSOIdentity' {userId} -> userId) (\s@SSOIdentity' {} a -> s {userId = a} :: SSOIdentity)
+
+-- | The ID of the AWS SSO identity store.
+sSOIdentity_identityStoreId :: Lens.Lens' SSOIdentity Prelude.Text
+sSOIdentity_identityStoreId = Lens.lens (\SSOIdentity' {identityStoreId} -> identityStoreId) (\s@SSOIdentity' {} a -> s {identityStoreId = a} :: SSOIdentity)
+
+instance Data.FromJSON SSOIdentity where
+  parseJSON =
+    Data.withObject
+      "SSOIdentity"
+      ( \x ->
+          SSOIdentity'
+            Prelude.<$> (x Data..:? "userId")
+            Prelude.<*> (x Data..: "identityStoreId")
+      )
+
+instance Prelude.Hashable SSOIdentity where
+  hashWithSalt _salt SSOIdentity' {..} =
+    _salt
+      `Prelude.hashWithSalt` userId
+      `Prelude.hashWithSalt` identityStoreId
+
+instance Prelude.NFData SSOIdentity where
+  rnf SSOIdentity' {..} =
+    Prelude.rnf userId
+      `Prelude.seq` Prelude.rnf identityStoreId
+
+instance Data.ToJSON SSOIdentity where
+  toJSON SSOIdentity' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("userId" Data..=) Prelude.<$> userId,
+            Prelude.Just
+              ("identityStoreId" Data..= identityStoreId)
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/SetTimerAction.hs b/gen/Amazonka/IoTEvents/Types/SetTimerAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/SetTimerAction.hs
@@ -0,0 +1,128 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.SetTimerAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.SetTimerAction where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information needed to set the timer.
+--
+-- /See:/ 'newSetTimerAction' smart constructor.
+data SetTimerAction = SetTimerAction'
+  { -- | The duration of the timer, in seconds. You can use a string expression
+    -- that includes numbers, variables (@$variable.\<variable-name>@), and
+    -- input values (@$input.\<input-name>.\<path-to-datum>@) as the duration.
+    -- The range of the duration is 1-31622400 seconds. To ensure accuracy, the
+    -- minimum duration is 60 seconds. The evaluated result of the duration is
+    -- rounded down to the nearest whole number.
+    durationExpression :: Prelude.Maybe Prelude.Text,
+    -- | The number of seconds until the timer expires. The minimum value is 60
+    -- seconds to ensure accuracy. The maximum value is 31622400 seconds.
+    seconds :: Prelude.Maybe Prelude.Natural,
+    -- | The name of the timer.
+    timerName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SetTimerAction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'durationExpression', 'setTimerAction_durationExpression' - The duration of the timer, in seconds. You can use a string expression
+-- that includes numbers, variables (@$variable.\<variable-name>@), and
+-- input values (@$input.\<input-name>.\<path-to-datum>@) as the duration.
+-- The range of the duration is 1-31622400 seconds. To ensure accuracy, the
+-- minimum duration is 60 seconds. The evaluated result of the duration is
+-- rounded down to the nearest whole number.
+--
+-- 'seconds', 'setTimerAction_seconds' - The number of seconds until the timer expires. The minimum value is 60
+-- seconds to ensure accuracy. The maximum value is 31622400 seconds.
+--
+-- 'timerName', 'setTimerAction_timerName' - The name of the timer.
+newSetTimerAction ::
+  -- | 'timerName'
+  Prelude.Text ->
+  SetTimerAction
+newSetTimerAction pTimerName_ =
+  SetTimerAction'
+    { durationExpression =
+        Prelude.Nothing,
+      seconds = Prelude.Nothing,
+      timerName = pTimerName_
+    }
+
+-- | The duration of the timer, in seconds. You can use a string expression
+-- that includes numbers, variables (@$variable.\<variable-name>@), and
+-- input values (@$input.\<input-name>.\<path-to-datum>@) as the duration.
+-- The range of the duration is 1-31622400 seconds. To ensure accuracy, the
+-- minimum duration is 60 seconds. The evaluated result of the duration is
+-- rounded down to the nearest whole number.
+setTimerAction_durationExpression :: Lens.Lens' SetTimerAction (Prelude.Maybe Prelude.Text)
+setTimerAction_durationExpression = Lens.lens (\SetTimerAction' {durationExpression} -> durationExpression) (\s@SetTimerAction' {} a -> s {durationExpression = a} :: SetTimerAction)
+
+-- | The number of seconds until the timer expires. The minimum value is 60
+-- seconds to ensure accuracy. The maximum value is 31622400 seconds.
+setTimerAction_seconds :: Lens.Lens' SetTimerAction (Prelude.Maybe Prelude.Natural)
+setTimerAction_seconds = Lens.lens (\SetTimerAction' {seconds} -> seconds) (\s@SetTimerAction' {} a -> s {seconds = a} :: SetTimerAction)
+
+-- | The name of the timer.
+setTimerAction_timerName :: Lens.Lens' SetTimerAction Prelude.Text
+setTimerAction_timerName = Lens.lens (\SetTimerAction' {timerName} -> timerName) (\s@SetTimerAction' {} a -> s {timerName = a} :: SetTimerAction)
+
+instance Data.FromJSON SetTimerAction where
+  parseJSON =
+    Data.withObject
+      "SetTimerAction"
+      ( \x ->
+          SetTimerAction'
+            Prelude.<$> (x Data..:? "durationExpression")
+            Prelude.<*> (x Data..:? "seconds")
+            Prelude.<*> (x Data..: "timerName")
+      )
+
+instance Prelude.Hashable SetTimerAction where
+  hashWithSalt _salt SetTimerAction' {..} =
+    _salt
+      `Prelude.hashWithSalt` durationExpression
+      `Prelude.hashWithSalt` seconds
+      `Prelude.hashWithSalt` timerName
+
+instance Prelude.NFData SetTimerAction where
+  rnf SetTimerAction' {..} =
+    Prelude.rnf durationExpression
+      `Prelude.seq` Prelude.rnf seconds
+      `Prelude.seq` Prelude.rnf timerName
+
+instance Data.ToJSON SetTimerAction where
+  toJSON SetTimerAction' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("durationExpression" Data..=)
+              Prelude.<$> durationExpression,
+            ("seconds" Data..=) Prelude.<$> seconds,
+            Prelude.Just ("timerName" Data..= timerName)
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/SetVariableAction.hs b/gen/Amazonka/IoTEvents/Types/SetVariableAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/SetVariableAction.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.SetVariableAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.SetVariableAction where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the variable and its new value.
+--
+-- /See:/ 'newSetVariableAction' smart constructor.
+data SetVariableAction = SetVariableAction'
+  { -- | The name of the variable.
+    variableName :: Prelude.Text,
+    -- | The new value of the variable.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SetVariableAction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'variableName', 'setVariableAction_variableName' - The name of the variable.
+--
+-- 'value', 'setVariableAction_value' - The new value of the variable.
+newSetVariableAction ::
+  -- | 'variableName'
+  Prelude.Text ->
+  -- | 'value'
+  Prelude.Text ->
+  SetVariableAction
+newSetVariableAction pVariableName_ pValue_ =
+  SetVariableAction'
+    { variableName = pVariableName_,
+      value = pValue_
+    }
+
+-- | The name of the variable.
+setVariableAction_variableName :: Lens.Lens' SetVariableAction Prelude.Text
+setVariableAction_variableName = Lens.lens (\SetVariableAction' {variableName} -> variableName) (\s@SetVariableAction' {} a -> s {variableName = a} :: SetVariableAction)
+
+-- | The new value of the variable.
+setVariableAction_value :: Lens.Lens' SetVariableAction Prelude.Text
+setVariableAction_value = Lens.lens (\SetVariableAction' {value} -> value) (\s@SetVariableAction' {} a -> s {value = a} :: SetVariableAction)
+
+instance Data.FromJSON SetVariableAction where
+  parseJSON =
+    Data.withObject
+      "SetVariableAction"
+      ( \x ->
+          SetVariableAction'
+            Prelude.<$> (x Data..: "variableName")
+            Prelude.<*> (x Data..: "value")
+      )
+
+instance Prelude.Hashable SetVariableAction where
+  hashWithSalt _salt SetVariableAction' {..} =
+    _salt
+      `Prelude.hashWithSalt` variableName
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData SetVariableAction where
+  rnf SetVariableAction' {..} =
+    Prelude.rnf variableName
+      `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON SetVariableAction where
+  toJSON SetVariableAction' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("variableName" Data..= variableName),
+            Prelude.Just ("value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/SimpleRule.hs b/gen/Amazonka/IoTEvents/Types/SimpleRule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/SimpleRule.hs
@@ -0,0 +1,125 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.SimpleRule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.SimpleRule where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.ComparisonOperator
+import qualified Amazonka.Prelude as Prelude
+
+-- | A rule that compares an input property value to a threshold value with a
+-- comparison operator.
+--
+-- /See:/ 'newSimpleRule' smart constructor.
+data SimpleRule = SimpleRule'
+  { -- | The value on the left side of the comparison operator. You can specify
+    -- an AWS IoT Events input attribute as an input property.
+    inputProperty :: Prelude.Text,
+    -- | The comparison operator.
+    comparisonOperator :: ComparisonOperator,
+    -- | The value on the right side of the comparison operator. You can enter a
+    -- number or specify an AWS IoT Events input attribute.
+    threshold :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SimpleRule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'inputProperty', 'simpleRule_inputProperty' - The value on the left side of the comparison operator. You can specify
+-- an AWS IoT Events input attribute as an input property.
+--
+-- 'comparisonOperator', 'simpleRule_comparisonOperator' - The comparison operator.
+--
+-- 'threshold', 'simpleRule_threshold' - The value on the right side of the comparison operator. You can enter a
+-- number or specify an AWS IoT Events input attribute.
+newSimpleRule ::
+  -- | 'inputProperty'
+  Prelude.Text ->
+  -- | 'comparisonOperator'
+  ComparisonOperator ->
+  -- | 'threshold'
+  Prelude.Text ->
+  SimpleRule
+newSimpleRule
+  pInputProperty_
+  pComparisonOperator_
+  pThreshold_ =
+    SimpleRule'
+      { inputProperty = pInputProperty_,
+        comparisonOperator = pComparisonOperator_,
+        threshold = pThreshold_
+      }
+
+-- | The value on the left side of the comparison operator. You can specify
+-- an AWS IoT Events input attribute as an input property.
+simpleRule_inputProperty :: Lens.Lens' SimpleRule Prelude.Text
+simpleRule_inputProperty = Lens.lens (\SimpleRule' {inputProperty} -> inputProperty) (\s@SimpleRule' {} a -> s {inputProperty = a} :: SimpleRule)
+
+-- | The comparison operator.
+simpleRule_comparisonOperator :: Lens.Lens' SimpleRule ComparisonOperator
+simpleRule_comparisonOperator = Lens.lens (\SimpleRule' {comparisonOperator} -> comparisonOperator) (\s@SimpleRule' {} a -> s {comparisonOperator = a} :: SimpleRule)
+
+-- | The value on the right side of the comparison operator. You can enter a
+-- number or specify an AWS IoT Events input attribute.
+simpleRule_threshold :: Lens.Lens' SimpleRule Prelude.Text
+simpleRule_threshold = Lens.lens (\SimpleRule' {threshold} -> threshold) (\s@SimpleRule' {} a -> s {threshold = a} :: SimpleRule)
+
+instance Data.FromJSON SimpleRule where
+  parseJSON =
+    Data.withObject
+      "SimpleRule"
+      ( \x ->
+          SimpleRule'
+            Prelude.<$> (x Data..: "inputProperty")
+            Prelude.<*> (x Data..: "comparisonOperator")
+            Prelude.<*> (x Data..: "threshold")
+      )
+
+instance Prelude.Hashable SimpleRule where
+  hashWithSalt _salt SimpleRule' {..} =
+    _salt
+      `Prelude.hashWithSalt` inputProperty
+      `Prelude.hashWithSalt` comparisonOperator
+      `Prelude.hashWithSalt` threshold
+
+instance Prelude.NFData SimpleRule where
+  rnf SimpleRule' {..} =
+    Prelude.rnf inputProperty
+      `Prelude.seq` Prelude.rnf comparisonOperator
+      `Prelude.seq` Prelude.rnf threshold
+
+instance Data.ToJSON SimpleRule where
+  toJSON SimpleRule' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("inputProperty" Data..= inputProperty),
+            Prelude.Just
+              ("comparisonOperator" Data..= comparisonOperator),
+            Prelude.Just ("threshold" Data..= threshold)
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/SqsAction.hs b/gen/Amazonka/IoTEvents/Types/SqsAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/SqsAction.hs
@@ -0,0 +1,116 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.SqsAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.SqsAction where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.Payload
+import qualified Amazonka.Prelude as Prelude
+
+-- | Sends information about the detector model instance and the event that
+-- triggered the action to an Amazon SQS queue.
+--
+-- /See:/ 'newSqsAction' smart constructor.
+data SqsAction = SqsAction'
+  { -- | You can configure the action payload when you send a message to an
+    -- Amazon SQS queue.
+    payload :: Prelude.Maybe Payload,
+    -- | Set this to TRUE if you want the data to be base-64 encoded before it is
+    -- written to the queue. Otherwise, set this to FALSE.
+    useBase64 :: Prelude.Maybe Prelude.Bool,
+    -- | The URL of the SQS queue where the data is written.
+    queueUrl :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SqsAction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'payload', 'sqsAction_payload' - You can configure the action payload when you send a message to an
+-- Amazon SQS queue.
+--
+-- 'useBase64', 'sqsAction_useBase64' - Set this to TRUE if you want the data to be base-64 encoded before it is
+-- written to the queue. Otherwise, set this to FALSE.
+--
+-- 'queueUrl', 'sqsAction_queueUrl' - The URL of the SQS queue where the data is written.
+newSqsAction ::
+  -- | 'queueUrl'
+  Prelude.Text ->
+  SqsAction
+newSqsAction pQueueUrl_ =
+  SqsAction'
+    { payload = Prelude.Nothing,
+      useBase64 = Prelude.Nothing,
+      queueUrl = pQueueUrl_
+    }
+
+-- | You can configure the action payload when you send a message to an
+-- Amazon SQS queue.
+sqsAction_payload :: Lens.Lens' SqsAction (Prelude.Maybe Payload)
+sqsAction_payload = Lens.lens (\SqsAction' {payload} -> payload) (\s@SqsAction' {} a -> s {payload = a} :: SqsAction)
+
+-- | Set this to TRUE if you want the data to be base-64 encoded before it is
+-- written to the queue. Otherwise, set this to FALSE.
+sqsAction_useBase64 :: Lens.Lens' SqsAction (Prelude.Maybe Prelude.Bool)
+sqsAction_useBase64 = Lens.lens (\SqsAction' {useBase64} -> useBase64) (\s@SqsAction' {} a -> s {useBase64 = a} :: SqsAction)
+
+-- | The URL of the SQS queue where the data is written.
+sqsAction_queueUrl :: Lens.Lens' SqsAction Prelude.Text
+sqsAction_queueUrl = Lens.lens (\SqsAction' {queueUrl} -> queueUrl) (\s@SqsAction' {} a -> s {queueUrl = a} :: SqsAction)
+
+instance Data.FromJSON SqsAction where
+  parseJSON =
+    Data.withObject
+      "SqsAction"
+      ( \x ->
+          SqsAction'
+            Prelude.<$> (x Data..:? "payload")
+            Prelude.<*> (x Data..:? "useBase64")
+            Prelude.<*> (x Data..: "queueUrl")
+      )
+
+instance Prelude.Hashable SqsAction where
+  hashWithSalt _salt SqsAction' {..} =
+    _salt
+      `Prelude.hashWithSalt` payload
+      `Prelude.hashWithSalt` useBase64
+      `Prelude.hashWithSalt` queueUrl
+
+instance Prelude.NFData SqsAction where
+  rnf SqsAction' {..} =
+    Prelude.rnf payload
+      `Prelude.seq` Prelude.rnf useBase64
+      `Prelude.seq` Prelude.rnf queueUrl
+
+instance Data.ToJSON SqsAction where
+  toJSON SqsAction' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("payload" Data..=) Prelude.<$> payload,
+            ("useBase64" Data..=) Prelude.<$> useBase64,
+            Prelude.Just ("queueUrl" Data..= queueUrl)
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/State.hs b/gen/Amazonka/IoTEvents/Types/State.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/State.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.IoTEvents.Types.State
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.State where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.OnEnterLifecycle
+import Amazonka.IoTEvents.Types.OnExitLifecycle
+import Amazonka.IoTEvents.Types.OnInputLifecycle
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information that defines a state of a detector.
+--
+-- /See:/ 'newState' smart constructor.
+data State = State'
+  { -- | When entering this state, perform these @actions@ if the @condition@ is
+    -- TRUE.
+    onEnter :: Prelude.Maybe OnEnterLifecycle,
+    -- | When exiting this state, perform these @actions@ if the specified
+    -- @condition@ is @TRUE@.
+    onExit :: Prelude.Maybe OnExitLifecycle,
+    -- | When an input is received and the @condition@ is TRUE, perform the
+    -- specified @actions@.
+    onInput :: Prelude.Maybe OnInputLifecycle,
+    -- | The name of the state.
+    stateName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'State' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'onEnter', 'state_onEnter' - When entering this state, perform these @actions@ if the @condition@ is
+-- TRUE.
+--
+-- 'onExit', 'state_onExit' - When exiting this state, perform these @actions@ if the specified
+-- @condition@ is @TRUE@.
+--
+-- 'onInput', 'state_onInput' - When an input is received and the @condition@ is TRUE, perform the
+-- specified @actions@.
+--
+-- 'stateName', 'state_stateName' - The name of the state.
+newState ::
+  -- | 'stateName'
+  Prelude.Text ->
+  State
+newState pStateName_ =
+  State'
+    { onEnter = Prelude.Nothing,
+      onExit = Prelude.Nothing,
+      onInput = Prelude.Nothing,
+      stateName = pStateName_
+    }
+
+-- | When entering this state, perform these @actions@ if the @condition@ is
+-- TRUE.
+state_onEnter :: Lens.Lens' State (Prelude.Maybe OnEnterLifecycle)
+state_onEnter = Lens.lens (\State' {onEnter} -> onEnter) (\s@State' {} a -> s {onEnter = a} :: State)
+
+-- | When exiting this state, perform these @actions@ if the specified
+-- @condition@ is @TRUE@.
+state_onExit :: Lens.Lens' State (Prelude.Maybe OnExitLifecycle)
+state_onExit = Lens.lens (\State' {onExit} -> onExit) (\s@State' {} a -> s {onExit = a} :: State)
+
+-- | When an input is received and the @condition@ is TRUE, perform the
+-- specified @actions@.
+state_onInput :: Lens.Lens' State (Prelude.Maybe OnInputLifecycle)
+state_onInput = Lens.lens (\State' {onInput} -> onInput) (\s@State' {} a -> s {onInput = a} :: State)
+
+-- | The name of the state.
+state_stateName :: Lens.Lens' State Prelude.Text
+state_stateName = Lens.lens (\State' {stateName} -> stateName) (\s@State' {} a -> s {stateName = a} :: State)
+
+instance Data.FromJSON State where
+  parseJSON =
+    Data.withObject
+      "State"
+      ( \x ->
+          State'
+            Prelude.<$> (x Data..:? "onEnter")
+            Prelude.<*> (x Data..:? "onExit")
+            Prelude.<*> (x Data..:? "onInput")
+            Prelude.<*> (x Data..: "stateName")
+      )
+
+instance Prelude.Hashable State where
+  hashWithSalt _salt State' {..} =
+    _salt
+      `Prelude.hashWithSalt` onEnter
+      `Prelude.hashWithSalt` onExit
+      `Prelude.hashWithSalt` onInput
+      `Prelude.hashWithSalt` stateName
+
+instance Prelude.NFData State where
+  rnf State' {..} =
+    Prelude.rnf onEnter
+      `Prelude.seq` Prelude.rnf onExit
+      `Prelude.seq` Prelude.rnf onInput
+      `Prelude.seq` Prelude.rnf stateName
+
+instance Data.ToJSON State where
+  toJSON State' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("onEnter" Data..=) Prelude.<$> onEnter,
+            ("onExit" Data..=) Prelude.<$> onExit,
+            ("onInput" Data..=) Prelude.<$> onInput,
+            Prelude.Just ("stateName" Data..= stateName)
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/Tag.hs b/gen/Amazonka/IoTEvents/Types/Tag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/Tag.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.Types.Tag
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.Tag where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Metadata that can be used to manage the resource.
+--
+-- /See:/ 'newTag' smart constructor.
+data Tag = Tag'
+  { -- | The tag\'s key.
+    key :: Prelude.Text,
+    -- | The tag\'s value.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Tag' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'key', 'tag_key' - The tag\'s key.
+--
+-- 'value', 'tag_value' - The tag\'s value.
+newTag ::
+  -- | 'key'
+  Prelude.Text ->
+  -- | 'value'
+  Prelude.Text ->
+  Tag
+newTag pKey_ pValue_ =
+  Tag' {key = pKey_, value = pValue_}
+
+-- | The tag\'s key.
+tag_key :: Lens.Lens' Tag Prelude.Text
+tag_key = Lens.lens (\Tag' {key} -> key) (\s@Tag' {} a -> s {key = a} :: Tag)
+
+-- | The tag\'s value.
+tag_value :: Lens.Lens' Tag Prelude.Text
+tag_value = Lens.lens (\Tag' {value} -> value) (\s@Tag' {} a -> s {value = a} :: Tag)
+
+instance Data.FromJSON Tag where
+  parseJSON =
+    Data.withObject
+      "Tag"
+      ( \x ->
+          Tag'
+            Prelude.<$> (x Data..: "key")
+            Prelude.<*> (x Data..: "value")
+      )
+
+instance Prelude.Hashable Tag where
+  hashWithSalt _salt Tag' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData Tag where
+  rnf Tag' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON Tag where
+  toJSON Tag' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("key" Data..= key),
+            Prelude.Just ("value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/Types/TransitionEvent.hs b/gen/Amazonka/IoTEvents/Types/TransitionEvent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/Types/TransitionEvent.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.IoTEvents.Types.TransitionEvent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.IoTEvents.Types.TransitionEvent where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types.Action
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the actions performed and the next state entered when a
+-- @condition@ evaluates to TRUE.
+--
+-- /See:/ 'newTransitionEvent' smart constructor.
+data TransitionEvent = TransitionEvent'
+  { -- | The actions to be performed.
+    actions :: Prelude.Maybe [Action],
+    -- | The name of the transition event.
+    eventName :: Prelude.Text,
+    -- | Required. A Boolean expression that when TRUE causes the actions to be
+    -- performed and the @nextState@ to be entered.
+    condition :: Prelude.Text,
+    -- | The next state to enter.
+    nextState :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitionEvent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'actions', 'transitionEvent_actions' - The actions to be performed.
+--
+-- 'eventName', 'transitionEvent_eventName' - The name of the transition event.
+--
+-- 'condition', 'transitionEvent_condition' - Required. A Boolean expression that when TRUE causes the actions to be
+-- performed and the @nextState@ to be entered.
+--
+-- 'nextState', 'transitionEvent_nextState' - The next state to enter.
+newTransitionEvent ::
+  -- | 'eventName'
+  Prelude.Text ->
+  -- | 'condition'
+  Prelude.Text ->
+  -- | 'nextState'
+  Prelude.Text ->
+  TransitionEvent
+newTransitionEvent
+  pEventName_
+  pCondition_
+  pNextState_ =
+    TransitionEvent'
+      { actions = Prelude.Nothing,
+        eventName = pEventName_,
+        condition = pCondition_,
+        nextState = pNextState_
+      }
+
+-- | The actions to be performed.
+transitionEvent_actions :: Lens.Lens' TransitionEvent (Prelude.Maybe [Action])
+transitionEvent_actions = Lens.lens (\TransitionEvent' {actions} -> actions) (\s@TransitionEvent' {} a -> s {actions = a} :: TransitionEvent) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the transition event.
+transitionEvent_eventName :: Lens.Lens' TransitionEvent Prelude.Text
+transitionEvent_eventName = Lens.lens (\TransitionEvent' {eventName} -> eventName) (\s@TransitionEvent' {} a -> s {eventName = a} :: TransitionEvent)
+
+-- | Required. A Boolean expression that when TRUE causes the actions to be
+-- performed and the @nextState@ to be entered.
+transitionEvent_condition :: Lens.Lens' TransitionEvent Prelude.Text
+transitionEvent_condition = Lens.lens (\TransitionEvent' {condition} -> condition) (\s@TransitionEvent' {} a -> s {condition = a} :: TransitionEvent)
+
+-- | The next state to enter.
+transitionEvent_nextState :: Lens.Lens' TransitionEvent Prelude.Text
+transitionEvent_nextState = Lens.lens (\TransitionEvent' {nextState} -> nextState) (\s@TransitionEvent' {} a -> s {nextState = a} :: TransitionEvent)
+
+instance Data.FromJSON TransitionEvent where
+  parseJSON =
+    Data.withObject
+      "TransitionEvent"
+      ( \x ->
+          TransitionEvent'
+            Prelude.<$> (x Data..:? "actions" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "eventName")
+            Prelude.<*> (x Data..: "condition")
+            Prelude.<*> (x Data..: "nextState")
+      )
+
+instance Prelude.Hashable TransitionEvent where
+  hashWithSalt _salt TransitionEvent' {..} =
+    _salt
+      `Prelude.hashWithSalt` actions
+      `Prelude.hashWithSalt` eventName
+      `Prelude.hashWithSalt` condition
+      `Prelude.hashWithSalt` nextState
+
+instance Prelude.NFData TransitionEvent where
+  rnf TransitionEvent' {..} =
+    Prelude.rnf actions
+      `Prelude.seq` Prelude.rnf eventName
+      `Prelude.seq` Prelude.rnf condition
+      `Prelude.seq` Prelude.rnf nextState
+
+instance Data.ToJSON TransitionEvent where
+  toJSON TransitionEvent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("actions" Data..=) Prelude.<$> actions,
+            Prelude.Just ("eventName" Data..= eventName),
+            Prelude.Just ("condition" Data..= condition),
+            Prelude.Just ("nextState" Data..= nextState)
+          ]
+      )
diff --git a/gen/Amazonka/IoTEvents/UntagResource.hs b/gen/Amazonka/IoTEvents/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/UntagResource.hs
@@ -0,0 +1,154 @@
+{-# 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.IoTEvents.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 given tags (metadata) from the resource.
+module Amazonka.IoTEvents.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+
+    -- * Response Lenses
+    untagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The ARN of the resource.
+    resourceArn :: Prelude.Text,
+    -- | A list of the keys of the tags to be removed from the resource.
+    tagKeys :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The ARN of the resource.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - A list of the keys of the tags to be removed from the resource.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | The 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)
+
+-- | A list of the keys of the tags to be removed from the resource.
+untagResource_tagKeys :: Lens.Lens' UntagResource [Prelude.Text]
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath UntagResource where
+  toPath = Prelude.const "/tags"
+
+instance Data.ToQuery UntagResource where
+  toQuery UntagResource' {..} =
+    Prelude.mconcat
+      [ "resourceArn" Data.=: resourceArn,
+        "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/IoTEvents/UpdateAlarmModel.hs b/gen/Amazonka/IoTEvents/UpdateAlarmModel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/UpdateAlarmModel.hs
@@ -0,0 +1,371 @@
+{-# 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.IoTEvents.UpdateAlarmModel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an alarm model. Any alarms that were created based on the
+-- previous version are deleted and then created again as new data arrives.
+module Amazonka.IoTEvents.UpdateAlarmModel
+  ( -- * Creating a Request
+    UpdateAlarmModel (..),
+    newUpdateAlarmModel,
+
+    -- * Request Lenses
+    updateAlarmModel_alarmCapabilities,
+    updateAlarmModel_alarmEventActions,
+    updateAlarmModel_alarmModelDescription,
+    updateAlarmModel_alarmNotification,
+    updateAlarmModel_severity,
+    updateAlarmModel_alarmModelName,
+    updateAlarmModel_roleArn,
+    updateAlarmModel_alarmRule,
+
+    -- * Destructuring the Response
+    UpdateAlarmModelResponse (..),
+    newUpdateAlarmModelResponse,
+
+    -- * Response Lenses
+    updateAlarmModelResponse_alarmModelArn,
+    updateAlarmModelResponse_alarmModelVersion,
+    updateAlarmModelResponse_creationTime,
+    updateAlarmModelResponse_lastUpdateTime,
+    updateAlarmModelResponse_status,
+    updateAlarmModelResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateAlarmModel' smart constructor.
+data UpdateAlarmModel = UpdateAlarmModel'
+  { -- | Contains the configuration information of alarm state changes.
+    alarmCapabilities :: Prelude.Maybe AlarmCapabilities,
+    -- | Contains information about one or more alarm actions.
+    alarmEventActions :: Prelude.Maybe AlarmEventActions,
+    -- | The description of the alarm model.
+    alarmModelDescription :: Prelude.Maybe Prelude.Text,
+    -- | Contains information about one or more notification actions.
+    alarmNotification :: Prelude.Maybe AlarmNotification,
+    -- | A non-negative integer that reflects the severity level of the alarm.
+    severity :: Prelude.Maybe Prelude.Natural,
+    -- | The name of the alarm model.
+    alarmModelName :: Prelude.Text,
+    -- | The ARN of the IAM role that allows the alarm to perform actions and
+    -- access AWS resources. For more information, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    roleArn :: Prelude.Text,
+    -- | Defines when your alarm is invoked.
+    alarmRule :: AlarmRule
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAlarmModel' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'alarmCapabilities', 'updateAlarmModel_alarmCapabilities' - Contains the configuration information of alarm state changes.
+--
+-- 'alarmEventActions', 'updateAlarmModel_alarmEventActions' - Contains information about one or more alarm actions.
+--
+-- 'alarmModelDescription', 'updateAlarmModel_alarmModelDescription' - The description of the alarm model.
+--
+-- 'alarmNotification', 'updateAlarmModel_alarmNotification' - Contains information about one or more notification actions.
+--
+-- 'severity', 'updateAlarmModel_severity' - A non-negative integer that reflects the severity level of the alarm.
+--
+-- 'alarmModelName', 'updateAlarmModel_alarmModelName' - The name of the alarm model.
+--
+-- 'roleArn', 'updateAlarmModel_roleArn' - The ARN of the IAM role that allows the alarm to perform actions and
+-- access AWS resources. For more information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'alarmRule', 'updateAlarmModel_alarmRule' - Defines when your alarm is invoked.
+newUpdateAlarmModel ::
+  -- | 'alarmModelName'
+  Prelude.Text ->
+  -- | 'roleArn'
+  Prelude.Text ->
+  -- | 'alarmRule'
+  AlarmRule ->
+  UpdateAlarmModel
+newUpdateAlarmModel
+  pAlarmModelName_
+  pRoleArn_
+  pAlarmRule_ =
+    UpdateAlarmModel'
+      { alarmCapabilities =
+          Prelude.Nothing,
+        alarmEventActions = Prelude.Nothing,
+        alarmModelDescription = Prelude.Nothing,
+        alarmNotification = Prelude.Nothing,
+        severity = Prelude.Nothing,
+        alarmModelName = pAlarmModelName_,
+        roleArn = pRoleArn_,
+        alarmRule = pAlarmRule_
+      }
+
+-- | Contains the configuration information of alarm state changes.
+updateAlarmModel_alarmCapabilities :: Lens.Lens' UpdateAlarmModel (Prelude.Maybe AlarmCapabilities)
+updateAlarmModel_alarmCapabilities = Lens.lens (\UpdateAlarmModel' {alarmCapabilities} -> alarmCapabilities) (\s@UpdateAlarmModel' {} a -> s {alarmCapabilities = a} :: UpdateAlarmModel)
+
+-- | Contains information about one or more alarm actions.
+updateAlarmModel_alarmEventActions :: Lens.Lens' UpdateAlarmModel (Prelude.Maybe AlarmEventActions)
+updateAlarmModel_alarmEventActions = Lens.lens (\UpdateAlarmModel' {alarmEventActions} -> alarmEventActions) (\s@UpdateAlarmModel' {} a -> s {alarmEventActions = a} :: UpdateAlarmModel)
+
+-- | The description of the alarm model.
+updateAlarmModel_alarmModelDescription :: Lens.Lens' UpdateAlarmModel (Prelude.Maybe Prelude.Text)
+updateAlarmModel_alarmModelDescription = Lens.lens (\UpdateAlarmModel' {alarmModelDescription} -> alarmModelDescription) (\s@UpdateAlarmModel' {} a -> s {alarmModelDescription = a} :: UpdateAlarmModel)
+
+-- | Contains information about one or more notification actions.
+updateAlarmModel_alarmNotification :: Lens.Lens' UpdateAlarmModel (Prelude.Maybe AlarmNotification)
+updateAlarmModel_alarmNotification = Lens.lens (\UpdateAlarmModel' {alarmNotification} -> alarmNotification) (\s@UpdateAlarmModel' {} a -> s {alarmNotification = a} :: UpdateAlarmModel)
+
+-- | A non-negative integer that reflects the severity level of the alarm.
+updateAlarmModel_severity :: Lens.Lens' UpdateAlarmModel (Prelude.Maybe Prelude.Natural)
+updateAlarmModel_severity = Lens.lens (\UpdateAlarmModel' {severity} -> severity) (\s@UpdateAlarmModel' {} a -> s {severity = a} :: UpdateAlarmModel)
+
+-- | The name of the alarm model.
+updateAlarmModel_alarmModelName :: Lens.Lens' UpdateAlarmModel Prelude.Text
+updateAlarmModel_alarmModelName = Lens.lens (\UpdateAlarmModel' {alarmModelName} -> alarmModelName) (\s@UpdateAlarmModel' {} a -> s {alarmModelName = a} :: UpdateAlarmModel)
+
+-- | The ARN of the IAM role that allows the alarm to perform actions and
+-- access AWS resources. For more information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+updateAlarmModel_roleArn :: Lens.Lens' UpdateAlarmModel Prelude.Text
+updateAlarmModel_roleArn = Lens.lens (\UpdateAlarmModel' {roleArn} -> roleArn) (\s@UpdateAlarmModel' {} a -> s {roleArn = a} :: UpdateAlarmModel)
+
+-- | Defines when your alarm is invoked.
+updateAlarmModel_alarmRule :: Lens.Lens' UpdateAlarmModel AlarmRule
+updateAlarmModel_alarmRule = Lens.lens (\UpdateAlarmModel' {alarmRule} -> alarmRule) (\s@UpdateAlarmModel' {} a -> s {alarmRule = a} :: UpdateAlarmModel)
+
+instance Core.AWSRequest UpdateAlarmModel where
+  type
+    AWSResponse UpdateAlarmModel =
+      UpdateAlarmModelResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateAlarmModelResponse'
+            Prelude.<$> (x Data..?> "alarmModelArn")
+            Prelude.<*> (x Data..?> "alarmModelVersion")
+            Prelude.<*> (x Data..?> "creationTime")
+            Prelude.<*> (x Data..?> "lastUpdateTime")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateAlarmModel where
+  hashWithSalt _salt UpdateAlarmModel' {..} =
+    _salt
+      `Prelude.hashWithSalt` alarmCapabilities
+      `Prelude.hashWithSalt` alarmEventActions
+      `Prelude.hashWithSalt` alarmModelDescription
+      `Prelude.hashWithSalt` alarmNotification
+      `Prelude.hashWithSalt` severity
+      `Prelude.hashWithSalt` alarmModelName
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` alarmRule
+
+instance Prelude.NFData UpdateAlarmModel where
+  rnf UpdateAlarmModel' {..} =
+    Prelude.rnf alarmCapabilities
+      `Prelude.seq` Prelude.rnf alarmEventActions
+      `Prelude.seq` Prelude.rnf alarmModelDescription
+      `Prelude.seq` Prelude.rnf alarmNotification
+      `Prelude.seq` Prelude.rnf severity
+      `Prelude.seq` Prelude.rnf alarmModelName
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf alarmRule
+
+instance Data.ToHeaders UpdateAlarmModel where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON UpdateAlarmModel where
+  toJSON UpdateAlarmModel' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("alarmCapabilities" Data..=)
+              Prelude.<$> alarmCapabilities,
+            ("alarmEventActions" Data..=)
+              Prelude.<$> alarmEventActions,
+            ("alarmModelDescription" Data..=)
+              Prelude.<$> alarmModelDescription,
+            ("alarmNotification" Data..=)
+              Prelude.<$> alarmNotification,
+            ("severity" Data..=) Prelude.<$> severity,
+            Prelude.Just ("roleArn" Data..= roleArn),
+            Prelude.Just ("alarmRule" Data..= alarmRule)
+          ]
+      )
+
+instance Data.ToPath UpdateAlarmModel where
+  toPath UpdateAlarmModel' {..} =
+    Prelude.mconcat
+      ["/alarm-models/", Data.toBS alarmModelName]
+
+instance Data.ToQuery UpdateAlarmModel where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateAlarmModelResponse' smart constructor.
+data UpdateAlarmModelResponse = UpdateAlarmModelResponse'
+  { -- | The ARN of the alarm model. For more information, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /AWS General Reference/.
+    alarmModelArn :: Prelude.Maybe Prelude.Text,
+    -- | The version of the alarm model.
+    alarmModelVersion :: Prelude.Maybe Prelude.Text,
+    -- | The time the alarm model was created, in the Unix epoch format.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The time the alarm model was last updated, in the Unix epoch format.
+    lastUpdateTime :: Prelude.Maybe Data.POSIX,
+    -- | The status of the alarm model. The status can be one of the following
+    -- values:
+    --
+    -- -   @ACTIVE@ - The alarm model is active and it\'s ready to evaluate
+    --     data.
+    --
+    -- -   @ACTIVATING@ - AWS IoT Events is activating your alarm model.
+    --     Activating an alarm model can take up to a few minutes.
+    --
+    -- -   @INACTIVE@ - The alarm model is inactive, so it isn\'t ready to
+    --     evaluate data. Check your alarm model information and update the
+    --     alarm model.
+    --
+    -- -   @FAILED@ - You couldn\'t create or update the alarm model. Check
+    --     your alarm model information and try again.
+    status :: Prelude.Maybe AlarmModelVersionStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAlarmModelResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'alarmModelArn', 'updateAlarmModelResponse_alarmModelArn' - The ARN of the alarm model. For more information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+--
+-- 'alarmModelVersion', 'updateAlarmModelResponse_alarmModelVersion' - The version of the alarm model.
+--
+-- 'creationTime', 'updateAlarmModelResponse_creationTime' - The time the alarm model was created, in the Unix epoch format.
+--
+-- 'lastUpdateTime', 'updateAlarmModelResponse_lastUpdateTime' - The time the alarm model was last updated, in the Unix epoch format.
+--
+-- 'status', 'updateAlarmModelResponse_status' - The status of the alarm model. The status can be one of the following
+-- values:
+--
+-- -   @ACTIVE@ - The alarm model is active and it\'s ready to evaluate
+--     data.
+--
+-- -   @ACTIVATING@ - AWS IoT Events is activating your alarm model.
+--     Activating an alarm model can take up to a few minutes.
+--
+-- -   @INACTIVE@ - The alarm model is inactive, so it isn\'t ready to
+--     evaluate data. Check your alarm model information and update the
+--     alarm model.
+--
+-- -   @FAILED@ - You couldn\'t create or update the alarm model. Check
+--     your alarm model information and try again.
+--
+-- 'httpStatus', 'updateAlarmModelResponse_httpStatus' - The response's http status code.
+newUpdateAlarmModelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateAlarmModelResponse
+newUpdateAlarmModelResponse pHttpStatus_ =
+  UpdateAlarmModelResponse'
+    { alarmModelArn =
+        Prelude.Nothing,
+      alarmModelVersion = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      lastUpdateTime = Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the alarm model. For more information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /AWS General Reference/.
+updateAlarmModelResponse_alarmModelArn :: Lens.Lens' UpdateAlarmModelResponse (Prelude.Maybe Prelude.Text)
+updateAlarmModelResponse_alarmModelArn = Lens.lens (\UpdateAlarmModelResponse' {alarmModelArn} -> alarmModelArn) (\s@UpdateAlarmModelResponse' {} a -> s {alarmModelArn = a} :: UpdateAlarmModelResponse)
+
+-- | The version of the alarm model.
+updateAlarmModelResponse_alarmModelVersion :: Lens.Lens' UpdateAlarmModelResponse (Prelude.Maybe Prelude.Text)
+updateAlarmModelResponse_alarmModelVersion = Lens.lens (\UpdateAlarmModelResponse' {alarmModelVersion} -> alarmModelVersion) (\s@UpdateAlarmModelResponse' {} a -> s {alarmModelVersion = a} :: UpdateAlarmModelResponse)
+
+-- | The time the alarm model was created, in the Unix epoch format.
+updateAlarmModelResponse_creationTime :: Lens.Lens' UpdateAlarmModelResponse (Prelude.Maybe Prelude.UTCTime)
+updateAlarmModelResponse_creationTime = Lens.lens (\UpdateAlarmModelResponse' {creationTime} -> creationTime) (\s@UpdateAlarmModelResponse' {} a -> s {creationTime = a} :: UpdateAlarmModelResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The time the alarm model was last updated, in the Unix epoch format.
+updateAlarmModelResponse_lastUpdateTime :: Lens.Lens' UpdateAlarmModelResponse (Prelude.Maybe Prelude.UTCTime)
+updateAlarmModelResponse_lastUpdateTime = Lens.lens (\UpdateAlarmModelResponse' {lastUpdateTime} -> lastUpdateTime) (\s@UpdateAlarmModelResponse' {} a -> s {lastUpdateTime = a} :: UpdateAlarmModelResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The status of the alarm model. The status can be one of the following
+-- values:
+--
+-- -   @ACTIVE@ - The alarm model is active and it\'s ready to evaluate
+--     data.
+--
+-- -   @ACTIVATING@ - AWS IoT Events is activating your alarm model.
+--     Activating an alarm model can take up to a few minutes.
+--
+-- -   @INACTIVE@ - The alarm model is inactive, so it isn\'t ready to
+--     evaluate data. Check your alarm model information and update the
+--     alarm model.
+--
+-- -   @FAILED@ - You couldn\'t create or update the alarm model. Check
+--     your alarm model information and try again.
+updateAlarmModelResponse_status :: Lens.Lens' UpdateAlarmModelResponse (Prelude.Maybe AlarmModelVersionStatus)
+updateAlarmModelResponse_status = Lens.lens (\UpdateAlarmModelResponse' {status} -> status) (\s@UpdateAlarmModelResponse' {} a -> s {status = a} :: UpdateAlarmModelResponse)
+
+-- | The response's http status code.
+updateAlarmModelResponse_httpStatus :: Lens.Lens' UpdateAlarmModelResponse Prelude.Int
+updateAlarmModelResponse_httpStatus = Lens.lens (\UpdateAlarmModelResponse' {httpStatus} -> httpStatus) (\s@UpdateAlarmModelResponse' {} a -> s {httpStatus = a} :: UpdateAlarmModelResponse)
+
+instance Prelude.NFData UpdateAlarmModelResponse where
+  rnf UpdateAlarmModelResponse' {..} =
+    Prelude.rnf alarmModelArn
+      `Prelude.seq` Prelude.rnf alarmModelVersion
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf lastUpdateTime
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTEvents/UpdateDetectorModel.hs b/gen/Amazonka/IoTEvents/UpdateDetectorModel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/UpdateDetectorModel.hs
@@ -0,0 +1,234 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTEvents.UpdateDetectorModel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a detector model. Detectors (instances) spawned by the previous
+-- version are deleted and then re-created as new inputs arrive.
+module Amazonka.IoTEvents.UpdateDetectorModel
+  ( -- * Creating a Request
+    UpdateDetectorModel (..),
+    newUpdateDetectorModel,
+
+    -- * Request Lenses
+    updateDetectorModel_detectorModelDescription,
+    updateDetectorModel_evaluationMethod,
+    updateDetectorModel_detectorModelName,
+    updateDetectorModel_detectorModelDefinition,
+    updateDetectorModel_roleArn,
+
+    -- * Destructuring the Response
+    UpdateDetectorModelResponse (..),
+    newUpdateDetectorModelResponse,
+
+    -- * Response Lenses
+    updateDetectorModelResponse_detectorModelConfiguration,
+    updateDetectorModelResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateDetectorModel' smart constructor.
+data UpdateDetectorModel = UpdateDetectorModel'
+  { -- | A brief description of the detector model.
+    detectorModelDescription :: Prelude.Maybe Prelude.Text,
+    -- | Information about the order in which events are evaluated and how
+    -- actions are executed.
+    evaluationMethod :: Prelude.Maybe EvaluationMethod,
+    -- | The name of the detector model that is updated.
+    detectorModelName :: Prelude.Text,
+    -- | Information that defines how a detector operates.
+    detectorModelDefinition :: DetectorModelDefinition,
+    -- | The ARN of the role that grants permission to AWS IoT Events to perform
+    -- its operations.
+    roleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDetectorModel' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detectorModelDescription', 'updateDetectorModel_detectorModelDescription' - A brief description of the detector model.
+--
+-- 'evaluationMethod', 'updateDetectorModel_evaluationMethod' - Information about the order in which events are evaluated and how
+-- actions are executed.
+--
+-- 'detectorModelName', 'updateDetectorModel_detectorModelName' - The name of the detector model that is updated.
+--
+-- 'detectorModelDefinition', 'updateDetectorModel_detectorModelDefinition' - Information that defines how a detector operates.
+--
+-- 'roleArn', 'updateDetectorModel_roleArn' - The ARN of the role that grants permission to AWS IoT Events to perform
+-- its operations.
+newUpdateDetectorModel ::
+  -- | 'detectorModelName'
+  Prelude.Text ->
+  -- | 'detectorModelDefinition'
+  DetectorModelDefinition ->
+  -- | 'roleArn'
+  Prelude.Text ->
+  UpdateDetectorModel
+newUpdateDetectorModel
+  pDetectorModelName_
+  pDetectorModelDefinition_
+  pRoleArn_ =
+    UpdateDetectorModel'
+      { detectorModelDescription =
+          Prelude.Nothing,
+        evaluationMethod = Prelude.Nothing,
+        detectorModelName = pDetectorModelName_,
+        detectorModelDefinition = pDetectorModelDefinition_,
+        roleArn = pRoleArn_
+      }
+
+-- | A brief description of the detector model.
+updateDetectorModel_detectorModelDescription :: Lens.Lens' UpdateDetectorModel (Prelude.Maybe Prelude.Text)
+updateDetectorModel_detectorModelDescription = Lens.lens (\UpdateDetectorModel' {detectorModelDescription} -> detectorModelDescription) (\s@UpdateDetectorModel' {} a -> s {detectorModelDescription = a} :: UpdateDetectorModel)
+
+-- | Information about the order in which events are evaluated and how
+-- actions are executed.
+updateDetectorModel_evaluationMethod :: Lens.Lens' UpdateDetectorModel (Prelude.Maybe EvaluationMethod)
+updateDetectorModel_evaluationMethod = Lens.lens (\UpdateDetectorModel' {evaluationMethod} -> evaluationMethod) (\s@UpdateDetectorModel' {} a -> s {evaluationMethod = a} :: UpdateDetectorModel)
+
+-- | The name of the detector model that is updated.
+updateDetectorModel_detectorModelName :: Lens.Lens' UpdateDetectorModel Prelude.Text
+updateDetectorModel_detectorModelName = Lens.lens (\UpdateDetectorModel' {detectorModelName} -> detectorModelName) (\s@UpdateDetectorModel' {} a -> s {detectorModelName = a} :: UpdateDetectorModel)
+
+-- | Information that defines how a detector operates.
+updateDetectorModel_detectorModelDefinition :: Lens.Lens' UpdateDetectorModel DetectorModelDefinition
+updateDetectorModel_detectorModelDefinition = Lens.lens (\UpdateDetectorModel' {detectorModelDefinition} -> detectorModelDefinition) (\s@UpdateDetectorModel' {} a -> s {detectorModelDefinition = a} :: UpdateDetectorModel)
+
+-- | The ARN of the role that grants permission to AWS IoT Events to perform
+-- its operations.
+updateDetectorModel_roleArn :: Lens.Lens' UpdateDetectorModel Prelude.Text
+updateDetectorModel_roleArn = Lens.lens (\UpdateDetectorModel' {roleArn} -> roleArn) (\s@UpdateDetectorModel' {} a -> s {roleArn = a} :: UpdateDetectorModel)
+
+instance Core.AWSRequest UpdateDetectorModel where
+  type
+    AWSResponse UpdateDetectorModel =
+      UpdateDetectorModelResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateDetectorModelResponse'
+            Prelude.<$> (x Data..?> "detectorModelConfiguration")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateDetectorModel where
+  hashWithSalt _salt UpdateDetectorModel' {..} =
+    _salt
+      `Prelude.hashWithSalt` detectorModelDescription
+      `Prelude.hashWithSalt` evaluationMethod
+      `Prelude.hashWithSalt` detectorModelName
+      `Prelude.hashWithSalt` detectorModelDefinition
+      `Prelude.hashWithSalt` roleArn
+
+instance Prelude.NFData UpdateDetectorModel where
+  rnf UpdateDetectorModel' {..} =
+    Prelude.rnf detectorModelDescription
+      `Prelude.seq` Prelude.rnf evaluationMethod
+      `Prelude.seq` Prelude.rnf detectorModelName
+      `Prelude.seq` Prelude.rnf detectorModelDefinition
+      `Prelude.seq` Prelude.rnf roleArn
+
+instance Data.ToHeaders UpdateDetectorModel where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON UpdateDetectorModel where
+  toJSON UpdateDetectorModel' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("detectorModelDescription" Data..=)
+              Prelude.<$> detectorModelDescription,
+            ("evaluationMethod" Data..=)
+              Prelude.<$> evaluationMethod,
+            Prelude.Just
+              ( "detectorModelDefinition"
+                  Data..= detectorModelDefinition
+              ),
+            Prelude.Just ("roleArn" Data..= roleArn)
+          ]
+      )
+
+instance Data.ToPath UpdateDetectorModel where
+  toPath UpdateDetectorModel' {..} =
+    Prelude.mconcat
+      ["/detector-models/", Data.toBS detectorModelName]
+
+instance Data.ToQuery UpdateDetectorModel where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateDetectorModelResponse' smart constructor.
+data UpdateDetectorModelResponse = UpdateDetectorModelResponse'
+  { -- | Information about how the detector model is configured.
+    detectorModelConfiguration :: Prelude.Maybe DetectorModelConfiguration,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDetectorModelResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detectorModelConfiguration', 'updateDetectorModelResponse_detectorModelConfiguration' - Information about how the detector model is configured.
+--
+-- 'httpStatus', 'updateDetectorModelResponse_httpStatus' - The response's http status code.
+newUpdateDetectorModelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateDetectorModelResponse
+newUpdateDetectorModelResponse pHttpStatus_ =
+  UpdateDetectorModelResponse'
+    { detectorModelConfiguration =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about how the detector model is configured.
+updateDetectorModelResponse_detectorModelConfiguration :: Lens.Lens' UpdateDetectorModelResponse (Prelude.Maybe DetectorModelConfiguration)
+updateDetectorModelResponse_detectorModelConfiguration = Lens.lens (\UpdateDetectorModelResponse' {detectorModelConfiguration} -> detectorModelConfiguration) (\s@UpdateDetectorModelResponse' {} a -> s {detectorModelConfiguration = a} :: UpdateDetectorModelResponse)
+
+-- | The response's http status code.
+updateDetectorModelResponse_httpStatus :: Lens.Lens' UpdateDetectorModelResponse Prelude.Int
+updateDetectorModelResponse_httpStatus = Lens.lens (\UpdateDetectorModelResponse' {httpStatus} -> httpStatus) (\s@UpdateDetectorModelResponse' {} a -> s {httpStatus = a} :: UpdateDetectorModelResponse)
+
+instance Prelude.NFData UpdateDetectorModelResponse where
+  rnf UpdateDetectorModelResponse' {..} =
+    Prelude.rnf detectorModelConfiguration
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTEvents/UpdateInput.hs b/gen/Amazonka/IoTEvents/UpdateInput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/UpdateInput.hs
@@ -0,0 +1,189 @@
+{-# 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.IoTEvents.UpdateInput
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an input.
+module Amazonka.IoTEvents.UpdateInput
+  ( -- * Creating a Request
+    UpdateInput (..),
+    newUpdateInput,
+
+    -- * Request Lenses
+    updateInput_inputDescription,
+    updateInput_inputName,
+    updateInput_inputDefinition,
+
+    -- * Destructuring the Response
+    UpdateInputResponse (..),
+    newUpdateInputResponse,
+
+    -- * Response Lenses
+    updateInputResponse_inputConfiguration,
+    updateInputResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateInput' smart constructor.
+data UpdateInput = UpdateInput'
+  { -- | A brief description of the input.
+    inputDescription :: Prelude.Maybe Prelude.Text,
+    -- | The name of the input you want to update.
+    inputName :: Prelude.Text,
+    -- | The definition of the input.
+    inputDefinition :: InputDefinition
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateInput' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'inputDescription', 'updateInput_inputDescription' - A brief description of the input.
+--
+-- 'inputName', 'updateInput_inputName' - The name of the input you want to update.
+--
+-- 'inputDefinition', 'updateInput_inputDefinition' - The definition of the input.
+newUpdateInput ::
+  -- | 'inputName'
+  Prelude.Text ->
+  -- | 'inputDefinition'
+  InputDefinition ->
+  UpdateInput
+newUpdateInput pInputName_ pInputDefinition_ =
+  UpdateInput'
+    { inputDescription = Prelude.Nothing,
+      inputName = pInputName_,
+      inputDefinition = pInputDefinition_
+    }
+
+-- | A brief description of the input.
+updateInput_inputDescription :: Lens.Lens' UpdateInput (Prelude.Maybe Prelude.Text)
+updateInput_inputDescription = Lens.lens (\UpdateInput' {inputDescription} -> inputDescription) (\s@UpdateInput' {} a -> s {inputDescription = a} :: UpdateInput)
+
+-- | The name of the input you want to update.
+updateInput_inputName :: Lens.Lens' UpdateInput Prelude.Text
+updateInput_inputName = Lens.lens (\UpdateInput' {inputName} -> inputName) (\s@UpdateInput' {} a -> s {inputName = a} :: UpdateInput)
+
+-- | The definition of the input.
+updateInput_inputDefinition :: Lens.Lens' UpdateInput InputDefinition
+updateInput_inputDefinition = Lens.lens (\UpdateInput' {inputDefinition} -> inputDefinition) (\s@UpdateInput' {} a -> s {inputDefinition = a} :: UpdateInput)
+
+instance Core.AWSRequest UpdateInput where
+  type AWSResponse UpdateInput = UpdateInputResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateInputResponse'
+            Prelude.<$> (x Data..?> "inputConfiguration")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateInput where
+  hashWithSalt _salt UpdateInput' {..} =
+    _salt
+      `Prelude.hashWithSalt` inputDescription
+      `Prelude.hashWithSalt` inputName
+      `Prelude.hashWithSalt` inputDefinition
+
+instance Prelude.NFData UpdateInput where
+  rnf UpdateInput' {..} =
+    Prelude.rnf inputDescription
+      `Prelude.seq` Prelude.rnf inputName
+      `Prelude.seq` Prelude.rnf inputDefinition
+
+instance Data.ToHeaders UpdateInput where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON UpdateInput where
+  toJSON UpdateInput' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("inputDescription" Data..=)
+              Prelude.<$> inputDescription,
+            Prelude.Just
+              ("inputDefinition" Data..= inputDefinition)
+          ]
+      )
+
+instance Data.ToPath UpdateInput where
+  toPath UpdateInput' {..} =
+    Prelude.mconcat ["/inputs/", Data.toBS inputName]
+
+instance Data.ToQuery UpdateInput where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateInputResponse' smart constructor.
+data UpdateInputResponse = UpdateInputResponse'
+  { -- | Information about the configuration of the input.
+    inputConfiguration :: Prelude.Maybe InputConfiguration,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateInputResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'inputConfiguration', 'updateInputResponse_inputConfiguration' - Information about the configuration of the input.
+--
+-- 'httpStatus', 'updateInputResponse_httpStatus' - The response's http status code.
+newUpdateInputResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateInputResponse
+newUpdateInputResponse pHttpStatus_ =
+  UpdateInputResponse'
+    { inputConfiguration =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the configuration of the input.
+updateInputResponse_inputConfiguration :: Lens.Lens' UpdateInputResponse (Prelude.Maybe InputConfiguration)
+updateInputResponse_inputConfiguration = Lens.lens (\UpdateInputResponse' {inputConfiguration} -> inputConfiguration) (\s@UpdateInputResponse' {} a -> s {inputConfiguration = a} :: UpdateInputResponse)
+
+-- | The response's http status code.
+updateInputResponse_httpStatus :: Lens.Lens' UpdateInputResponse Prelude.Int
+updateInputResponse_httpStatus = Lens.lens (\UpdateInputResponse' {httpStatus} -> httpStatus) (\s@UpdateInputResponse' {} a -> s {httpStatus = a} :: UpdateInputResponse)
+
+instance Prelude.NFData UpdateInputResponse where
+  rnf UpdateInputResponse' {..} =
+    Prelude.rnf inputConfiguration
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTEvents/Waiters.hs b/gen/Amazonka/IoTEvents/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTEvents/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.IoTEvents.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.IoTEvents.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTEvents.Lens
+import Amazonka.IoTEvents.Types
+import qualified Amazonka.Prelude as Prelude
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,23 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Main (main) where
+
+import Test.Amazonka.IoTEvents
+import Test.Amazonka.IoTEvents.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "IoTEvents"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/IoTEvents.hs b/test/Test/Amazonka/Gen/IoTEvents.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/IoTEvents.hs
@@ -0,0 +1,558 @@
+{-# 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.IoTEvents
+-- Copyright   : (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.IoTEvents where
+
+import Amazonka.IoTEvents
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.IoTEvents.Internal
+import Test.Amazonka.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestCreateAlarmModel $
+--             newCreateAlarmModel
+--
+--         , requestCreateDetectorModel $
+--             newCreateDetectorModel
+--
+--         , requestCreateInput $
+--             newCreateInput
+--
+--         , requestDeleteAlarmModel $
+--             newDeleteAlarmModel
+--
+--         , requestDeleteDetectorModel $
+--             newDeleteDetectorModel
+--
+--         , requestDeleteInput $
+--             newDeleteInput
+--
+--         , requestDescribeAlarmModel $
+--             newDescribeAlarmModel
+--
+--         , requestDescribeDetectorModel $
+--             newDescribeDetectorModel
+--
+--         , requestDescribeDetectorModelAnalysis $
+--             newDescribeDetectorModelAnalysis
+--
+--         , requestDescribeInput $
+--             newDescribeInput
+--
+--         , requestDescribeLoggingOptions $
+--             newDescribeLoggingOptions
+--
+--         , requestGetDetectorModelAnalysisResults $
+--             newGetDetectorModelAnalysisResults
+--
+--         , requestListAlarmModelVersions $
+--             newListAlarmModelVersions
+--
+--         , requestListAlarmModels $
+--             newListAlarmModels
+--
+--         , requestListDetectorModelVersions $
+--             newListDetectorModelVersions
+--
+--         , requestListDetectorModels $
+--             newListDetectorModels
+--
+--         , requestListInputRoutings $
+--             newListInputRoutings
+--
+--         , requestListInputs $
+--             newListInputs
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestPutLoggingOptions $
+--             newPutLoggingOptions
+--
+--         , requestStartDetectorModelAnalysis $
+--             newStartDetectorModelAnalysis
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateAlarmModel $
+--             newUpdateAlarmModel
+--
+--         , requestUpdateDetectorModel $
+--             newUpdateDetectorModel
+--
+--         , requestUpdateInput $
+--             newUpdateInput
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseCreateAlarmModel $
+--             newCreateAlarmModelResponse
+--
+--         , responseCreateDetectorModel $
+--             newCreateDetectorModelResponse
+--
+--         , responseCreateInput $
+--             newCreateInputResponse
+--
+--         , responseDeleteAlarmModel $
+--             newDeleteAlarmModelResponse
+--
+--         , responseDeleteDetectorModel $
+--             newDeleteDetectorModelResponse
+--
+--         , responseDeleteInput $
+--             newDeleteInputResponse
+--
+--         , responseDescribeAlarmModel $
+--             newDescribeAlarmModelResponse
+--
+--         , responseDescribeDetectorModel $
+--             newDescribeDetectorModelResponse
+--
+--         , responseDescribeDetectorModelAnalysis $
+--             newDescribeDetectorModelAnalysisResponse
+--
+--         , responseDescribeInput $
+--             newDescribeInputResponse
+--
+--         , responseDescribeLoggingOptions $
+--             newDescribeLoggingOptionsResponse
+--
+--         , responseGetDetectorModelAnalysisResults $
+--             newGetDetectorModelAnalysisResultsResponse
+--
+--         , responseListAlarmModelVersions $
+--             newListAlarmModelVersionsResponse
+--
+--         , responseListAlarmModels $
+--             newListAlarmModelsResponse
+--
+--         , responseListDetectorModelVersions $
+--             newListDetectorModelVersionsResponse
+--
+--         , responseListDetectorModels $
+--             newListDetectorModelsResponse
+--
+--         , responseListInputRoutings $
+--             newListInputRoutingsResponse
+--
+--         , responseListInputs $
+--             newListInputsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responsePutLoggingOptions $
+--             newPutLoggingOptionsResponse
+--
+--         , responseStartDetectorModelAnalysis $
+--             newStartDetectorModelAnalysisResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateAlarmModel $
+--             newUpdateAlarmModelResponse
+--
+--         , responseUpdateDetectorModel $
+--             newUpdateDetectorModelResponse
+--
+--         , responseUpdateInput $
+--             newUpdateInputResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestCreateAlarmModel :: CreateAlarmModel -> TestTree
+requestCreateAlarmModel =
+  req
+    "CreateAlarmModel"
+    "fixture/CreateAlarmModel.yaml"
+
+requestCreateDetectorModel :: CreateDetectorModel -> TestTree
+requestCreateDetectorModel =
+  req
+    "CreateDetectorModel"
+    "fixture/CreateDetectorModel.yaml"
+
+requestCreateInput :: CreateInput -> TestTree
+requestCreateInput =
+  req
+    "CreateInput"
+    "fixture/CreateInput.yaml"
+
+requestDeleteAlarmModel :: DeleteAlarmModel -> TestTree
+requestDeleteAlarmModel =
+  req
+    "DeleteAlarmModel"
+    "fixture/DeleteAlarmModel.yaml"
+
+requestDeleteDetectorModel :: DeleteDetectorModel -> TestTree
+requestDeleteDetectorModel =
+  req
+    "DeleteDetectorModel"
+    "fixture/DeleteDetectorModel.yaml"
+
+requestDeleteInput :: DeleteInput -> TestTree
+requestDeleteInput =
+  req
+    "DeleteInput"
+    "fixture/DeleteInput.yaml"
+
+requestDescribeAlarmModel :: DescribeAlarmModel -> TestTree
+requestDescribeAlarmModel =
+  req
+    "DescribeAlarmModel"
+    "fixture/DescribeAlarmModel.yaml"
+
+requestDescribeDetectorModel :: DescribeDetectorModel -> TestTree
+requestDescribeDetectorModel =
+  req
+    "DescribeDetectorModel"
+    "fixture/DescribeDetectorModel.yaml"
+
+requestDescribeDetectorModelAnalysis :: DescribeDetectorModelAnalysis -> TestTree
+requestDescribeDetectorModelAnalysis =
+  req
+    "DescribeDetectorModelAnalysis"
+    "fixture/DescribeDetectorModelAnalysis.yaml"
+
+requestDescribeInput :: DescribeInput -> TestTree
+requestDescribeInput =
+  req
+    "DescribeInput"
+    "fixture/DescribeInput.yaml"
+
+requestDescribeLoggingOptions :: DescribeLoggingOptions -> TestTree
+requestDescribeLoggingOptions =
+  req
+    "DescribeLoggingOptions"
+    "fixture/DescribeLoggingOptions.yaml"
+
+requestGetDetectorModelAnalysisResults :: GetDetectorModelAnalysisResults -> TestTree
+requestGetDetectorModelAnalysisResults =
+  req
+    "GetDetectorModelAnalysisResults"
+    "fixture/GetDetectorModelAnalysisResults.yaml"
+
+requestListAlarmModelVersions :: ListAlarmModelVersions -> TestTree
+requestListAlarmModelVersions =
+  req
+    "ListAlarmModelVersions"
+    "fixture/ListAlarmModelVersions.yaml"
+
+requestListAlarmModels :: ListAlarmModels -> TestTree
+requestListAlarmModels =
+  req
+    "ListAlarmModels"
+    "fixture/ListAlarmModels.yaml"
+
+requestListDetectorModelVersions :: ListDetectorModelVersions -> TestTree
+requestListDetectorModelVersions =
+  req
+    "ListDetectorModelVersions"
+    "fixture/ListDetectorModelVersions.yaml"
+
+requestListDetectorModels :: ListDetectorModels -> TestTree
+requestListDetectorModels =
+  req
+    "ListDetectorModels"
+    "fixture/ListDetectorModels.yaml"
+
+requestListInputRoutings :: ListInputRoutings -> TestTree
+requestListInputRoutings =
+  req
+    "ListInputRoutings"
+    "fixture/ListInputRoutings.yaml"
+
+requestListInputs :: ListInputs -> TestTree
+requestListInputs =
+  req
+    "ListInputs"
+    "fixture/ListInputs.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestPutLoggingOptions :: PutLoggingOptions -> TestTree
+requestPutLoggingOptions =
+  req
+    "PutLoggingOptions"
+    "fixture/PutLoggingOptions.yaml"
+
+requestStartDetectorModelAnalysis :: StartDetectorModelAnalysis -> TestTree
+requestStartDetectorModelAnalysis =
+  req
+    "StartDetectorModelAnalysis"
+    "fixture/StartDetectorModelAnalysis.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateAlarmModel :: UpdateAlarmModel -> TestTree
+requestUpdateAlarmModel =
+  req
+    "UpdateAlarmModel"
+    "fixture/UpdateAlarmModel.yaml"
+
+requestUpdateDetectorModel :: UpdateDetectorModel -> TestTree
+requestUpdateDetectorModel =
+  req
+    "UpdateDetectorModel"
+    "fixture/UpdateDetectorModel.yaml"
+
+requestUpdateInput :: UpdateInput -> TestTree
+requestUpdateInput =
+  req
+    "UpdateInput"
+    "fixture/UpdateInput.yaml"
+
+-- Responses
+
+responseCreateAlarmModel :: CreateAlarmModelResponse -> TestTree
+responseCreateAlarmModel =
+  res
+    "CreateAlarmModelResponse"
+    "fixture/CreateAlarmModelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateAlarmModel)
+
+responseCreateDetectorModel :: CreateDetectorModelResponse -> TestTree
+responseCreateDetectorModel =
+  res
+    "CreateDetectorModelResponse"
+    "fixture/CreateDetectorModelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDetectorModel)
+
+responseCreateInput :: CreateInputResponse -> TestTree
+responseCreateInput =
+  res
+    "CreateInputResponse"
+    "fixture/CreateInputResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateInput)
+
+responseDeleteAlarmModel :: DeleteAlarmModelResponse -> TestTree
+responseDeleteAlarmModel =
+  res
+    "DeleteAlarmModelResponse"
+    "fixture/DeleteAlarmModelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAlarmModel)
+
+responseDeleteDetectorModel :: DeleteDetectorModelResponse -> TestTree
+responseDeleteDetectorModel =
+  res
+    "DeleteDetectorModelResponse"
+    "fixture/DeleteDetectorModelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDetectorModel)
+
+responseDeleteInput :: DeleteInputResponse -> TestTree
+responseDeleteInput =
+  res
+    "DeleteInputResponse"
+    "fixture/DeleteInputResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteInput)
+
+responseDescribeAlarmModel :: DescribeAlarmModelResponse -> TestTree
+responseDescribeAlarmModel =
+  res
+    "DescribeAlarmModelResponse"
+    "fixture/DescribeAlarmModelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAlarmModel)
+
+responseDescribeDetectorModel :: DescribeDetectorModelResponse -> TestTree
+responseDescribeDetectorModel =
+  res
+    "DescribeDetectorModelResponse"
+    "fixture/DescribeDetectorModelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeDetectorModel)
+
+responseDescribeDetectorModelAnalysis :: DescribeDetectorModelAnalysisResponse -> TestTree
+responseDescribeDetectorModelAnalysis =
+  res
+    "DescribeDetectorModelAnalysisResponse"
+    "fixture/DescribeDetectorModelAnalysisResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeDetectorModelAnalysis)
+
+responseDescribeInput :: DescribeInputResponse -> TestTree
+responseDescribeInput =
+  res
+    "DescribeInputResponse"
+    "fixture/DescribeInputResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeInput)
+
+responseDescribeLoggingOptions :: DescribeLoggingOptionsResponse -> TestTree
+responseDescribeLoggingOptions =
+  res
+    "DescribeLoggingOptionsResponse"
+    "fixture/DescribeLoggingOptionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeLoggingOptions)
+
+responseGetDetectorModelAnalysisResults :: GetDetectorModelAnalysisResultsResponse -> TestTree
+responseGetDetectorModelAnalysisResults =
+  res
+    "GetDetectorModelAnalysisResultsResponse"
+    "fixture/GetDetectorModelAnalysisResultsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDetectorModelAnalysisResults)
+
+responseListAlarmModelVersions :: ListAlarmModelVersionsResponse -> TestTree
+responseListAlarmModelVersions =
+  res
+    "ListAlarmModelVersionsResponse"
+    "fixture/ListAlarmModelVersionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAlarmModelVersions)
+
+responseListAlarmModels :: ListAlarmModelsResponse -> TestTree
+responseListAlarmModels =
+  res
+    "ListAlarmModelsResponse"
+    "fixture/ListAlarmModelsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAlarmModels)
+
+responseListDetectorModelVersions :: ListDetectorModelVersionsResponse -> TestTree
+responseListDetectorModelVersions =
+  res
+    "ListDetectorModelVersionsResponse"
+    "fixture/ListDetectorModelVersionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDetectorModelVersions)
+
+responseListDetectorModels :: ListDetectorModelsResponse -> TestTree
+responseListDetectorModels =
+  res
+    "ListDetectorModelsResponse"
+    "fixture/ListDetectorModelsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDetectorModels)
+
+responseListInputRoutings :: ListInputRoutingsResponse -> TestTree
+responseListInputRoutings =
+  res
+    "ListInputRoutingsResponse"
+    "fixture/ListInputRoutingsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListInputRoutings)
+
+responseListInputs :: ListInputsResponse -> TestTree
+responseListInputs =
+  res
+    "ListInputsResponse"
+    "fixture/ListInputsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListInputs)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responsePutLoggingOptions :: PutLoggingOptionsResponse -> TestTree
+responsePutLoggingOptions =
+  res
+    "PutLoggingOptionsResponse"
+    "fixture/PutLoggingOptionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutLoggingOptions)
+
+responseStartDetectorModelAnalysis :: StartDetectorModelAnalysisResponse -> TestTree
+responseStartDetectorModelAnalysis =
+  res
+    "StartDetectorModelAnalysisResponse"
+    "fixture/StartDetectorModelAnalysisResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartDetectorModelAnalysis)
+
+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)
+
+responseUpdateAlarmModel :: UpdateAlarmModelResponse -> TestTree
+responseUpdateAlarmModel =
+  res
+    "UpdateAlarmModelResponse"
+    "fixture/UpdateAlarmModelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateAlarmModel)
+
+responseUpdateDetectorModel :: UpdateDetectorModelResponse -> TestTree
+responseUpdateDetectorModel =
+  res
+    "UpdateDetectorModelResponse"
+    "fixture/UpdateDetectorModelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateDetectorModel)
+
+responseUpdateInput :: UpdateInputResponse -> TestTree
+responseUpdateInput =
+  res
+    "UpdateInputResponse"
+    "fixture/UpdateInputResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateInput)
diff --git a/test/Test/Amazonka/IoTEvents.hs b/test/Test/Amazonka/IoTEvents.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/IoTEvents.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.IoTEvents
+-- Copyright   : (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.IoTEvents
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/IoTEvents/Internal.hs b/test/Test/Amazonka/IoTEvents/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/IoTEvents/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.IoTEvents.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.IoTEvents.Internal where
