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 Lookout for Metrics SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2017-07-25@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-lookoutmetrics)
+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.LookoutMetrics](http://hackage.haskell.org/package/amazonka-lookoutmetrics/docs/Amazonka-LookoutMetrics.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-lookoutmetrics` 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-lookoutmetrics.cabal b/amazonka-lookoutmetrics.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-lookoutmetrics.cabal
@@ -0,0 +1,183 @@
+cabal-version:      2.2
+name:               amazonka-lookoutmetrics
+version:            2.0
+synopsis:           Amazon Lookout for Metrics 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 @2017-07-25@ 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.LookoutMetrics.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.LookoutMetrics" 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-lookoutmetrics
+
+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.LookoutMetrics
+    Amazonka.LookoutMetrics.ActivateAnomalyDetector
+    Amazonka.LookoutMetrics.BackTestAnomalyDetector
+    Amazonka.LookoutMetrics.CreateAlert
+    Amazonka.LookoutMetrics.CreateAnomalyDetector
+    Amazonka.LookoutMetrics.CreateMetricSet
+    Amazonka.LookoutMetrics.DeactivateAnomalyDetector
+    Amazonka.LookoutMetrics.DeleteAlert
+    Amazonka.LookoutMetrics.DeleteAnomalyDetector
+    Amazonka.LookoutMetrics.DescribeAlert
+    Amazonka.LookoutMetrics.DescribeAnomalyDetectionExecutions
+    Amazonka.LookoutMetrics.DescribeAnomalyDetector
+    Amazonka.LookoutMetrics.DescribeMetricSet
+    Amazonka.LookoutMetrics.DetectMetricSetConfig
+    Amazonka.LookoutMetrics.GetAnomalyGroup
+    Amazonka.LookoutMetrics.GetDataQualityMetrics
+    Amazonka.LookoutMetrics.GetFeedback
+    Amazonka.LookoutMetrics.GetSampleData
+    Amazonka.LookoutMetrics.Lens
+    Amazonka.LookoutMetrics.ListAlerts
+    Amazonka.LookoutMetrics.ListAnomalyDetectors
+    Amazonka.LookoutMetrics.ListAnomalyGroupRelatedMetrics
+    Amazonka.LookoutMetrics.ListAnomalyGroupSummaries
+    Amazonka.LookoutMetrics.ListAnomalyGroupTimeSeries
+    Amazonka.LookoutMetrics.ListMetricSets
+    Amazonka.LookoutMetrics.ListTagsForResource
+    Amazonka.LookoutMetrics.PutFeedback
+    Amazonka.LookoutMetrics.TagResource
+    Amazonka.LookoutMetrics.Types
+    Amazonka.LookoutMetrics.Types.Action
+    Amazonka.LookoutMetrics.Types.AggregationFunction
+    Amazonka.LookoutMetrics.Types.Alert
+    Amazonka.LookoutMetrics.Types.AlertFilters
+    Amazonka.LookoutMetrics.Types.AlertStatus
+    Amazonka.LookoutMetrics.Types.AlertSummary
+    Amazonka.LookoutMetrics.Types.AlertType
+    Amazonka.LookoutMetrics.Types.AnomalyDetectionTaskStatus
+    Amazonka.LookoutMetrics.Types.AnomalyDetectorConfig
+    Amazonka.LookoutMetrics.Types.AnomalyDetectorConfigSummary
+    Amazonka.LookoutMetrics.Types.AnomalyDetectorDataQualityMetric
+    Amazonka.LookoutMetrics.Types.AnomalyDetectorFailureType
+    Amazonka.LookoutMetrics.Types.AnomalyDetectorStatus
+    Amazonka.LookoutMetrics.Types.AnomalyDetectorSummary
+    Amazonka.LookoutMetrics.Types.AnomalyGroup
+    Amazonka.LookoutMetrics.Types.AnomalyGroupStatistics
+    Amazonka.LookoutMetrics.Types.AnomalyGroupSummary
+    Amazonka.LookoutMetrics.Types.AnomalyGroupTimeSeries
+    Amazonka.LookoutMetrics.Types.AnomalyGroupTimeSeriesFeedback
+    Amazonka.LookoutMetrics.Types.AppFlowConfig
+    Amazonka.LookoutMetrics.Types.AthenaSourceConfig
+    Amazonka.LookoutMetrics.Types.AttributeValue
+    Amazonka.LookoutMetrics.Types.AutoDetectionMetricSource
+    Amazonka.LookoutMetrics.Types.AutoDetectionS3SourceConfig
+    Amazonka.LookoutMetrics.Types.BackTestConfiguration
+    Amazonka.LookoutMetrics.Types.CloudWatchConfig
+    Amazonka.LookoutMetrics.Types.Confidence
+    Amazonka.LookoutMetrics.Types.ContributionMatrix
+    Amazonka.LookoutMetrics.Types.CSVFileCompression
+    Amazonka.LookoutMetrics.Types.CsvFormatDescriptor
+    Amazonka.LookoutMetrics.Types.DataQualityMetric
+    Amazonka.LookoutMetrics.Types.DataQualityMetricType
+    Amazonka.LookoutMetrics.Types.DetectedCsvFormatDescriptor
+    Amazonka.LookoutMetrics.Types.DetectedField
+    Amazonka.LookoutMetrics.Types.DetectedFileFormatDescriptor
+    Amazonka.LookoutMetrics.Types.DetectedJsonFormatDescriptor
+    Amazonka.LookoutMetrics.Types.DetectedMetricSetConfig
+    Amazonka.LookoutMetrics.Types.DetectedMetricSource
+    Amazonka.LookoutMetrics.Types.DetectedS3SourceConfig
+    Amazonka.LookoutMetrics.Types.DimensionContribution
+    Amazonka.LookoutMetrics.Types.DimensionFilter
+    Amazonka.LookoutMetrics.Types.DimensionNameValue
+    Amazonka.LookoutMetrics.Types.DimensionValueContribution
+    Amazonka.LookoutMetrics.Types.ExecutionStatus
+    Amazonka.LookoutMetrics.Types.FileFormatDescriptor
+    Amazonka.LookoutMetrics.Types.Filter
+    Amazonka.LookoutMetrics.Types.FilterOperation
+    Amazonka.LookoutMetrics.Types.Frequency
+    Amazonka.LookoutMetrics.Types.InterMetricImpactDetails
+    Amazonka.LookoutMetrics.Types.ItemizedMetricStats
+    Amazonka.LookoutMetrics.Types.JsonFileCompression
+    Amazonka.LookoutMetrics.Types.JsonFormatDescriptor
+    Amazonka.LookoutMetrics.Types.LambdaConfiguration
+    Amazonka.LookoutMetrics.Types.Metric
+    Amazonka.LookoutMetrics.Types.MetricLevelImpact
+    Amazonka.LookoutMetrics.Types.MetricSetDataQualityMetric
+    Amazonka.LookoutMetrics.Types.MetricSetDimensionFilter
+    Amazonka.LookoutMetrics.Types.MetricSetSummary
+    Amazonka.LookoutMetrics.Types.MetricSource
+    Amazonka.LookoutMetrics.Types.RDSSourceConfig
+    Amazonka.LookoutMetrics.Types.RedshiftSourceConfig
+    Amazonka.LookoutMetrics.Types.RelationshipType
+    Amazonka.LookoutMetrics.Types.S3SourceConfig
+    Amazonka.LookoutMetrics.Types.SampleDataS3SourceConfig
+    Amazonka.LookoutMetrics.Types.SNSConfiguration
+    Amazonka.LookoutMetrics.Types.SnsFormat
+    Amazonka.LookoutMetrics.Types.TimeSeries
+    Amazonka.LookoutMetrics.Types.TimeSeriesFeedback
+    Amazonka.LookoutMetrics.Types.TimestampColumn
+    Amazonka.LookoutMetrics.Types.VpcConfiguration
+    Amazonka.LookoutMetrics.UntagResource
+    Amazonka.LookoutMetrics.UpdateAlert
+    Amazonka.LookoutMetrics.UpdateAnomalyDetector
+    Amazonka.LookoutMetrics.UpdateMetricSet
+    Amazonka.LookoutMetrics.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-lookoutmetrics-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.LookoutMetrics
+    Test.Amazonka.LookoutMetrics
+    Test.Amazonka.LookoutMetrics.Internal
+
+  build-depends:
+    , amazonka-core            >=2.0 && <2.1
+    , amazonka-lookoutmetrics
+    , amazonka-test            >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/ActivateAnomalyDetector.yaml b/fixture/ActivateAnomalyDetector.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ActivateAnomalyDetector.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/ActivateAnomalyDetectorResponse.proto b/fixture/ActivateAnomalyDetectorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ActivateAnomalyDetectorResponse.proto
diff --git a/fixture/BackTestAnomalyDetector.yaml b/fixture/BackTestAnomalyDetector.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BackTestAnomalyDetector.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/BackTestAnomalyDetectorResponse.proto b/fixture/BackTestAnomalyDetectorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BackTestAnomalyDetectorResponse.proto
diff --git a/fixture/CreateAlert.yaml b/fixture/CreateAlert.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAlert.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/CreateAlertResponse.proto b/fixture/CreateAlertResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAlertResponse.proto
diff --git a/fixture/CreateAnomalyDetector.yaml b/fixture/CreateAnomalyDetector.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAnomalyDetector.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/CreateAnomalyDetectorResponse.proto b/fixture/CreateAnomalyDetectorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAnomalyDetectorResponse.proto
diff --git a/fixture/CreateMetricSet.yaml b/fixture/CreateMetricSet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateMetricSet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/CreateMetricSetResponse.proto b/fixture/CreateMetricSetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateMetricSetResponse.proto
diff --git a/fixture/DeactivateAnomalyDetector.yaml b/fixture/DeactivateAnomalyDetector.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeactivateAnomalyDetector.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/DeactivateAnomalyDetectorResponse.proto b/fixture/DeactivateAnomalyDetectorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeactivateAnomalyDetectorResponse.proto
diff --git a/fixture/DeleteAlert.yaml b/fixture/DeleteAlert.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAlert.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/DeleteAlertResponse.proto b/fixture/DeleteAlertResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAlertResponse.proto
diff --git a/fixture/DeleteAnomalyDetector.yaml b/fixture/DeleteAnomalyDetector.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAnomalyDetector.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/DeleteAnomalyDetectorResponse.proto b/fixture/DeleteAnomalyDetectorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAnomalyDetectorResponse.proto
diff --git a/fixture/DescribeAlert.yaml b/fixture/DescribeAlert.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAlert.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/DescribeAlertResponse.proto b/fixture/DescribeAlertResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAlertResponse.proto
diff --git a/fixture/DescribeAnomalyDetectionExecutions.yaml b/fixture/DescribeAnomalyDetectionExecutions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAnomalyDetectionExecutions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/DescribeAnomalyDetectionExecutionsResponse.proto b/fixture/DescribeAnomalyDetectionExecutionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAnomalyDetectionExecutionsResponse.proto
diff --git a/fixture/DescribeAnomalyDetector.yaml b/fixture/DescribeAnomalyDetector.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAnomalyDetector.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/DescribeAnomalyDetectorResponse.proto b/fixture/DescribeAnomalyDetectorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAnomalyDetectorResponse.proto
diff --git a/fixture/DescribeMetricSet.yaml b/fixture/DescribeMetricSet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeMetricSet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/DescribeMetricSetResponse.proto b/fixture/DescribeMetricSetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeMetricSetResponse.proto
diff --git a/fixture/DetectMetricSetConfig.yaml b/fixture/DetectMetricSetConfig.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DetectMetricSetConfig.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/DetectMetricSetConfigResponse.proto b/fixture/DetectMetricSetConfigResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DetectMetricSetConfigResponse.proto
diff --git a/fixture/GetAnomalyGroup.yaml b/fixture/GetAnomalyGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetAnomalyGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/GetAnomalyGroupResponse.proto b/fixture/GetAnomalyGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAnomalyGroupResponse.proto
diff --git a/fixture/GetDataQualityMetrics.yaml b/fixture/GetDataQualityMetrics.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDataQualityMetrics.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/GetDataQualityMetricsResponse.proto b/fixture/GetDataQualityMetricsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDataQualityMetricsResponse.proto
diff --git a/fixture/GetFeedback.yaml b/fixture/GetFeedback.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetFeedback.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/GetFeedbackResponse.proto b/fixture/GetFeedbackResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetFeedbackResponse.proto
diff --git a/fixture/GetSampleData.yaml b/fixture/GetSampleData.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetSampleData.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/GetSampleDataResponse.proto b/fixture/GetSampleDataResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetSampleDataResponse.proto
diff --git a/fixture/ListAlerts.yaml b/fixture/ListAlerts.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAlerts.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/ListAlertsResponse.proto b/fixture/ListAlertsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAlertsResponse.proto
diff --git a/fixture/ListAnomalyDetectors.yaml b/fixture/ListAnomalyDetectors.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAnomalyDetectors.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/ListAnomalyDetectorsResponse.proto b/fixture/ListAnomalyDetectorsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAnomalyDetectorsResponse.proto
diff --git a/fixture/ListAnomalyGroupRelatedMetrics.yaml b/fixture/ListAnomalyGroupRelatedMetrics.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAnomalyGroupRelatedMetrics.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/ListAnomalyGroupRelatedMetricsResponse.proto b/fixture/ListAnomalyGroupRelatedMetricsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAnomalyGroupRelatedMetricsResponse.proto
diff --git a/fixture/ListAnomalyGroupSummaries.yaml b/fixture/ListAnomalyGroupSummaries.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAnomalyGroupSummaries.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/ListAnomalyGroupSummariesResponse.proto b/fixture/ListAnomalyGroupSummariesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAnomalyGroupSummariesResponse.proto
diff --git a/fixture/ListAnomalyGroupTimeSeries.yaml b/fixture/ListAnomalyGroupTimeSeries.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAnomalyGroupTimeSeries.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/ListAnomalyGroupTimeSeriesResponse.proto b/fixture/ListAnomalyGroupTimeSeriesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAnomalyGroupTimeSeriesResponse.proto
diff --git a/fixture/ListMetricSets.yaml b/fixture/ListMetricSets.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListMetricSets.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/ListMetricSetsResponse.proto b/fixture/ListMetricSetsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListMetricSetsResponse.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/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/PutFeedback.yaml b/fixture/PutFeedback.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutFeedback.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutFeedbackResponse.proto b/fixture/PutFeedbackResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutFeedbackResponse.proto
diff --git a/fixture/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/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/UpdateAlert.yaml b/fixture/UpdateAlert.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAlert.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/UpdateAlertResponse.proto b/fixture/UpdateAlertResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAlertResponse.proto
diff --git a/fixture/UpdateAnomalyDetector.yaml b/fixture/UpdateAnomalyDetector.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAnomalyDetector.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/UpdateAnomalyDetectorResponse.proto b/fixture/UpdateAnomalyDetectorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAnomalyDetectorResponse.proto
diff --git a/fixture/UpdateMetricSet.yaml b/fixture/UpdateMetricSet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateMetricSet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/lookoutmetrics/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  lookoutmetrics.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/UpdateMetricSetResponse.proto b/fixture/UpdateMetricSetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateMetricSetResponse.proto
diff --git a/gen/Amazonka/LookoutMetrics.hs b/gen/Amazonka/LookoutMetrics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics.hs
@@ -0,0 +1,560 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.LookoutMetrics
+-- 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 @2017-07-25@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- This is the /Amazon Lookout for Metrics API Reference/. For an
+-- introduction to the service with tutorials for getting started, visit
+-- <https://docs.aws.amazon.com/lookoutmetrics/latest/dev Amazon Lookout for Metrics Developer Guide>.
+module Amazonka.LookoutMetrics
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceQuotaExceededException
+    _ServiceQuotaExceededException,
+
+    -- ** TooManyRequestsException
+    _TooManyRequestsException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** ActivateAnomalyDetector
+    ActivateAnomalyDetector (ActivateAnomalyDetector'),
+    newActivateAnomalyDetector,
+    ActivateAnomalyDetectorResponse (ActivateAnomalyDetectorResponse'),
+    newActivateAnomalyDetectorResponse,
+
+    -- ** BackTestAnomalyDetector
+    BackTestAnomalyDetector (BackTestAnomalyDetector'),
+    newBackTestAnomalyDetector,
+    BackTestAnomalyDetectorResponse (BackTestAnomalyDetectorResponse'),
+    newBackTestAnomalyDetectorResponse,
+
+    -- ** CreateAlert
+    CreateAlert (CreateAlert'),
+    newCreateAlert,
+    CreateAlertResponse (CreateAlertResponse'),
+    newCreateAlertResponse,
+
+    -- ** CreateAnomalyDetector
+    CreateAnomalyDetector (CreateAnomalyDetector'),
+    newCreateAnomalyDetector,
+    CreateAnomalyDetectorResponse (CreateAnomalyDetectorResponse'),
+    newCreateAnomalyDetectorResponse,
+
+    -- ** CreateMetricSet
+    CreateMetricSet (CreateMetricSet'),
+    newCreateMetricSet,
+    CreateMetricSetResponse (CreateMetricSetResponse'),
+    newCreateMetricSetResponse,
+
+    -- ** DeactivateAnomalyDetector
+    DeactivateAnomalyDetector (DeactivateAnomalyDetector'),
+    newDeactivateAnomalyDetector,
+    DeactivateAnomalyDetectorResponse (DeactivateAnomalyDetectorResponse'),
+    newDeactivateAnomalyDetectorResponse,
+
+    -- ** DeleteAlert
+    DeleteAlert (DeleteAlert'),
+    newDeleteAlert,
+    DeleteAlertResponse (DeleteAlertResponse'),
+    newDeleteAlertResponse,
+
+    -- ** DeleteAnomalyDetector
+    DeleteAnomalyDetector (DeleteAnomalyDetector'),
+    newDeleteAnomalyDetector,
+    DeleteAnomalyDetectorResponse (DeleteAnomalyDetectorResponse'),
+    newDeleteAnomalyDetectorResponse,
+
+    -- ** DescribeAlert
+    DescribeAlert (DescribeAlert'),
+    newDescribeAlert,
+    DescribeAlertResponse (DescribeAlertResponse'),
+    newDescribeAlertResponse,
+
+    -- ** DescribeAnomalyDetectionExecutions
+    DescribeAnomalyDetectionExecutions (DescribeAnomalyDetectionExecutions'),
+    newDescribeAnomalyDetectionExecutions,
+    DescribeAnomalyDetectionExecutionsResponse (DescribeAnomalyDetectionExecutionsResponse'),
+    newDescribeAnomalyDetectionExecutionsResponse,
+
+    -- ** DescribeAnomalyDetector
+    DescribeAnomalyDetector (DescribeAnomalyDetector'),
+    newDescribeAnomalyDetector,
+    DescribeAnomalyDetectorResponse (DescribeAnomalyDetectorResponse'),
+    newDescribeAnomalyDetectorResponse,
+
+    -- ** DescribeMetricSet
+    DescribeMetricSet (DescribeMetricSet'),
+    newDescribeMetricSet,
+    DescribeMetricSetResponse (DescribeMetricSetResponse'),
+    newDescribeMetricSetResponse,
+
+    -- ** DetectMetricSetConfig
+    DetectMetricSetConfig (DetectMetricSetConfig'),
+    newDetectMetricSetConfig,
+    DetectMetricSetConfigResponse (DetectMetricSetConfigResponse'),
+    newDetectMetricSetConfigResponse,
+
+    -- ** GetAnomalyGroup
+    GetAnomalyGroup (GetAnomalyGroup'),
+    newGetAnomalyGroup,
+    GetAnomalyGroupResponse (GetAnomalyGroupResponse'),
+    newGetAnomalyGroupResponse,
+
+    -- ** GetDataQualityMetrics
+    GetDataQualityMetrics (GetDataQualityMetrics'),
+    newGetDataQualityMetrics,
+    GetDataQualityMetricsResponse (GetDataQualityMetricsResponse'),
+    newGetDataQualityMetricsResponse,
+
+    -- ** GetFeedback
+    GetFeedback (GetFeedback'),
+    newGetFeedback,
+    GetFeedbackResponse (GetFeedbackResponse'),
+    newGetFeedbackResponse,
+
+    -- ** GetSampleData
+    GetSampleData (GetSampleData'),
+    newGetSampleData,
+    GetSampleDataResponse (GetSampleDataResponse'),
+    newGetSampleDataResponse,
+
+    -- ** ListAlerts
+    ListAlerts (ListAlerts'),
+    newListAlerts,
+    ListAlertsResponse (ListAlertsResponse'),
+    newListAlertsResponse,
+
+    -- ** ListAnomalyDetectors
+    ListAnomalyDetectors (ListAnomalyDetectors'),
+    newListAnomalyDetectors,
+    ListAnomalyDetectorsResponse (ListAnomalyDetectorsResponse'),
+    newListAnomalyDetectorsResponse,
+
+    -- ** ListAnomalyGroupRelatedMetrics
+    ListAnomalyGroupRelatedMetrics (ListAnomalyGroupRelatedMetrics'),
+    newListAnomalyGroupRelatedMetrics,
+    ListAnomalyGroupRelatedMetricsResponse (ListAnomalyGroupRelatedMetricsResponse'),
+    newListAnomalyGroupRelatedMetricsResponse,
+
+    -- ** ListAnomalyGroupSummaries
+    ListAnomalyGroupSummaries (ListAnomalyGroupSummaries'),
+    newListAnomalyGroupSummaries,
+    ListAnomalyGroupSummariesResponse (ListAnomalyGroupSummariesResponse'),
+    newListAnomalyGroupSummariesResponse,
+
+    -- ** ListAnomalyGroupTimeSeries
+    ListAnomalyGroupTimeSeries (ListAnomalyGroupTimeSeries'),
+    newListAnomalyGroupTimeSeries,
+    ListAnomalyGroupTimeSeriesResponse (ListAnomalyGroupTimeSeriesResponse'),
+    newListAnomalyGroupTimeSeriesResponse,
+
+    -- ** ListMetricSets
+    ListMetricSets (ListMetricSets'),
+    newListMetricSets,
+    ListMetricSetsResponse (ListMetricSetsResponse'),
+    newListMetricSetsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** PutFeedback
+    PutFeedback (PutFeedback'),
+    newPutFeedback,
+    PutFeedbackResponse (PutFeedbackResponse'),
+    newPutFeedbackResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateAlert
+    UpdateAlert (UpdateAlert'),
+    newUpdateAlert,
+    UpdateAlertResponse (UpdateAlertResponse'),
+    newUpdateAlertResponse,
+
+    -- ** UpdateAnomalyDetector
+    UpdateAnomalyDetector (UpdateAnomalyDetector'),
+    newUpdateAnomalyDetector,
+    UpdateAnomalyDetectorResponse (UpdateAnomalyDetectorResponse'),
+    newUpdateAnomalyDetectorResponse,
+
+    -- ** UpdateMetricSet
+    UpdateMetricSet (UpdateMetricSet'),
+    newUpdateMetricSet,
+    UpdateMetricSetResponse (UpdateMetricSetResponse'),
+    newUpdateMetricSetResponse,
+
+    -- * Types
+
+    -- ** AggregationFunction
+    AggregationFunction (..),
+
+    -- ** AlertStatus
+    AlertStatus (..),
+
+    -- ** AlertType
+    AlertType (..),
+
+    -- ** AnomalyDetectionTaskStatus
+    AnomalyDetectionTaskStatus (..),
+
+    -- ** AnomalyDetectorFailureType
+    AnomalyDetectorFailureType (..),
+
+    -- ** AnomalyDetectorStatus
+    AnomalyDetectorStatus (..),
+
+    -- ** CSVFileCompression
+    CSVFileCompression (..),
+
+    -- ** Confidence
+    Confidence (..),
+
+    -- ** DataQualityMetricType
+    DataQualityMetricType (..),
+
+    -- ** FilterOperation
+    FilterOperation (..),
+
+    -- ** Frequency
+    Frequency (..),
+
+    -- ** JsonFileCompression
+    JsonFileCompression (..),
+
+    -- ** RelationshipType
+    RelationshipType (..),
+
+    -- ** SnsFormat
+    SnsFormat (..),
+
+    -- ** Action
+    Action (Action'),
+    newAction,
+
+    -- ** Alert
+    Alert (Alert'),
+    newAlert,
+
+    -- ** AlertFilters
+    AlertFilters (AlertFilters'),
+    newAlertFilters,
+
+    -- ** AlertSummary
+    AlertSummary (AlertSummary'),
+    newAlertSummary,
+
+    -- ** AnomalyDetectorConfig
+    AnomalyDetectorConfig (AnomalyDetectorConfig'),
+    newAnomalyDetectorConfig,
+
+    -- ** AnomalyDetectorConfigSummary
+    AnomalyDetectorConfigSummary (AnomalyDetectorConfigSummary'),
+    newAnomalyDetectorConfigSummary,
+
+    -- ** AnomalyDetectorDataQualityMetric
+    AnomalyDetectorDataQualityMetric (AnomalyDetectorDataQualityMetric'),
+    newAnomalyDetectorDataQualityMetric,
+
+    -- ** AnomalyDetectorSummary
+    AnomalyDetectorSummary (AnomalyDetectorSummary'),
+    newAnomalyDetectorSummary,
+
+    -- ** AnomalyGroup
+    AnomalyGroup (AnomalyGroup'),
+    newAnomalyGroup,
+
+    -- ** AnomalyGroupStatistics
+    AnomalyGroupStatistics (AnomalyGroupStatistics'),
+    newAnomalyGroupStatistics,
+
+    -- ** AnomalyGroupSummary
+    AnomalyGroupSummary (AnomalyGroupSummary'),
+    newAnomalyGroupSummary,
+
+    -- ** AnomalyGroupTimeSeries
+    AnomalyGroupTimeSeries (AnomalyGroupTimeSeries'),
+    newAnomalyGroupTimeSeries,
+
+    -- ** AnomalyGroupTimeSeriesFeedback
+    AnomalyGroupTimeSeriesFeedback (AnomalyGroupTimeSeriesFeedback'),
+    newAnomalyGroupTimeSeriesFeedback,
+
+    -- ** AppFlowConfig
+    AppFlowConfig (AppFlowConfig'),
+    newAppFlowConfig,
+
+    -- ** AthenaSourceConfig
+    AthenaSourceConfig (AthenaSourceConfig'),
+    newAthenaSourceConfig,
+
+    -- ** AttributeValue
+    AttributeValue (AttributeValue'),
+    newAttributeValue,
+
+    -- ** AutoDetectionMetricSource
+    AutoDetectionMetricSource (AutoDetectionMetricSource'),
+    newAutoDetectionMetricSource,
+
+    -- ** AutoDetectionS3SourceConfig
+    AutoDetectionS3SourceConfig (AutoDetectionS3SourceConfig'),
+    newAutoDetectionS3SourceConfig,
+
+    -- ** BackTestConfiguration
+    BackTestConfiguration (BackTestConfiguration'),
+    newBackTestConfiguration,
+
+    -- ** CloudWatchConfig
+    CloudWatchConfig (CloudWatchConfig'),
+    newCloudWatchConfig,
+
+    -- ** ContributionMatrix
+    ContributionMatrix (ContributionMatrix'),
+    newContributionMatrix,
+
+    -- ** CsvFormatDescriptor
+    CsvFormatDescriptor (CsvFormatDescriptor'),
+    newCsvFormatDescriptor,
+
+    -- ** DataQualityMetric
+    DataQualityMetric (DataQualityMetric'),
+    newDataQualityMetric,
+
+    -- ** DetectedCsvFormatDescriptor
+    DetectedCsvFormatDescriptor (DetectedCsvFormatDescriptor'),
+    newDetectedCsvFormatDescriptor,
+
+    -- ** DetectedField
+    DetectedField (DetectedField'),
+    newDetectedField,
+
+    -- ** DetectedFileFormatDescriptor
+    DetectedFileFormatDescriptor (DetectedFileFormatDescriptor'),
+    newDetectedFileFormatDescriptor,
+
+    -- ** DetectedJsonFormatDescriptor
+    DetectedJsonFormatDescriptor (DetectedJsonFormatDescriptor'),
+    newDetectedJsonFormatDescriptor,
+
+    -- ** DetectedMetricSetConfig
+    DetectedMetricSetConfig (DetectedMetricSetConfig'),
+    newDetectedMetricSetConfig,
+
+    -- ** DetectedMetricSource
+    DetectedMetricSource (DetectedMetricSource'),
+    newDetectedMetricSource,
+
+    -- ** DetectedS3SourceConfig
+    DetectedS3SourceConfig (DetectedS3SourceConfig'),
+    newDetectedS3SourceConfig,
+
+    -- ** DimensionContribution
+    DimensionContribution (DimensionContribution'),
+    newDimensionContribution,
+
+    -- ** DimensionFilter
+    DimensionFilter (DimensionFilter'),
+    newDimensionFilter,
+
+    -- ** DimensionNameValue
+    DimensionNameValue (DimensionNameValue'),
+    newDimensionNameValue,
+
+    -- ** DimensionValueContribution
+    DimensionValueContribution (DimensionValueContribution'),
+    newDimensionValueContribution,
+
+    -- ** ExecutionStatus
+    ExecutionStatus (ExecutionStatus'),
+    newExecutionStatus,
+
+    -- ** FileFormatDescriptor
+    FileFormatDescriptor (FileFormatDescriptor'),
+    newFileFormatDescriptor,
+
+    -- ** Filter
+    Filter (Filter'),
+    newFilter,
+
+    -- ** InterMetricImpactDetails
+    InterMetricImpactDetails (InterMetricImpactDetails'),
+    newInterMetricImpactDetails,
+
+    -- ** ItemizedMetricStats
+    ItemizedMetricStats (ItemizedMetricStats'),
+    newItemizedMetricStats,
+
+    -- ** JsonFormatDescriptor
+    JsonFormatDescriptor (JsonFormatDescriptor'),
+    newJsonFormatDescriptor,
+
+    -- ** LambdaConfiguration
+    LambdaConfiguration (LambdaConfiguration'),
+    newLambdaConfiguration,
+
+    -- ** Metric
+    Metric (Metric'),
+    newMetric,
+
+    -- ** MetricLevelImpact
+    MetricLevelImpact (MetricLevelImpact'),
+    newMetricLevelImpact,
+
+    -- ** MetricSetDataQualityMetric
+    MetricSetDataQualityMetric (MetricSetDataQualityMetric'),
+    newMetricSetDataQualityMetric,
+
+    -- ** MetricSetDimensionFilter
+    MetricSetDimensionFilter (MetricSetDimensionFilter'),
+    newMetricSetDimensionFilter,
+
+    -- ** MetricSetSummary
+    MetricSetSummary (MetricSetSummary'),
+    newMetricSetSummary,
+
+    -- ** MetricSource
+    MetricSource (MetricSource'),
+    newMetricSource,
+
+    -- ** RDSSourceConfig
+    RDSSourceConfig (RDSSourceConfig'),
+    newRDSSourceConfig,
+
+    -- ** RedshiftSourceConfig
+    RedshiftSourceConfig (RedshiftSourceConfig'),
+    newRedshiftSourceConfig,
+
+    -- ** S3SourceConfig
+    S3SourceConfig (S3SourceConfig'),
+    newS3SourceConfig,
+
+    -- ** SNSConfiguration
+    SNSConfiguration (SNSConfiguration'),
+    newSNSConfiguration,
+
+    -- ** SampleDataS3SourceConfig
+    SampleDataS3SourceConfig (SampleDataS3SourceConfig'),
+    newSampleDataS3SourceConfig,
+
+    -- ** TimeSeries
+    TimeSeries (TimeSeries'),
+    newTimeSeries,
+
+    -- ** TimeSeriesFeedback
+    TimeSeriesFeedback (TimeSeriesFeedback'),
+    newTimeSeriesFeedback,
+
+    -- ** TimestampColumn
+    TimestampColumn (TimestampColumn'),
+    newTimestampColumn,
+
+    -- ** VpcConfiguration
+    VpcConfiguration (VpcConfiguration'),
+    newVpcConfiguration,
+  )
+where
+
+import Amazonka.LookoutMetrics.ActivateAnomalyDetector
+import Amazonka.LookoutMetrics.BackTestAnomalyDetector
+import Amazonka.LookoutMetrics.CreateAlert
+import Amazonka.LookoutMetrics.CreateAnomalyDetector
+import Amazonka.LookoutMetrics.CreateMetricSet
+import Amazonka.LookoutMetrics.DeactivateAnomalyDetector
+import Amazonka.LookoutMetrics.DeleteAlert
+import Amazonka.LookoutMetrics.DeleteAnomalyDetector
+import Amazonka.LookoutMetrics.DescribeAlert
+import Amazonka.LookoutMetrics.DescribeAnomalyDetectionExecutions
+import Amazonka.LookoutMetrics.DescribeAnomalyDetector
+import Amazonka.LookoutMetrics.DescribeMetricSet
+import Amazonka.LookoutMetrics.DetectMetricSetConfig
+import Amazonka.LookoutMetrics.GetAnomalyGroup
+import Amazonka.LookoutMetrics.GetDataQualityMetrics
+import Amazonka.LookoutMetrics.GetFeedback
+import Amazonka.LookoutMetrics.GetSampleData
+import Amazonka.LookoutMetrics.Lens
+import Amazonka.LookoutMetrics.ListAlerts
+import Amazonka.LookoutMetrics.ListAnomalyDetectors
+import Amazonka.LookoutMetrics.ListAnomalyGroupRelatedMetrics
+import Amazonka.LookoutMetrics.ListAnomalyGroupSummaries
+import Amazonka.LookoutMetrics.ListAnomalyGroupTimeSeries
+import Amazonka.LookoutMetrics.ListMetricSets
+import Amazonka.LookoutMetrics.ListTagsForResource
+import Amazonka.LookoutMetrics.PutFeedback
+import Amazonka.LookoutMetrics.TagResource
+import Amazonka.LookoutMetrics.Types
+import Amazonka.LookoutMetrics.UntagResource
+import Amazonka.LookoutMetrics.UpdateAlert
+import Amazonka.LookoutMetrics.UpdateAnomalyDetector
+import Amazonka.LookoutMetrics.UpdateMetricSet
+import Amazonka.LookoutMetrics.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 'LookoutMetrics'.
+
+-- $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/LookoutMetrics/ActivateAnomalyDetector.hs b/gen/Amazonka/LookoutMetrics/ActivateAnomalyDetector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/ActivateAnomalyDetector.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.ActivateAnomalyDetector
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Activates an anomaly detector.
+module Amazonka.LookoutMetrics.ActivateAnomalyDetector
+  ( -- * Creating a Request
+    ActivateAnomalyDetector (..),
+    newActivateAnomalyDetector,
+
+    -- * Request Lenses
+    activateAnomalyDetector_anomalyDetectorArn,
+
+    -- * Destructuring the Response
+    ActivateAnomalyDetectorResponse (..),
+    newActivateAnomalyDetectorResponse,
+
+    -- * Response Lenses
+    activateAnomalyDetectorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newActivateAnomalyDetector' smart constructor.
+data ActivateAnomalyDetector = ActivateAnomalyDetector'
+  { -- | The ARN of the anomaly detector.
+    anomalyDetectorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ActivateAnomalyDetector' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyDetectorArn', 'activateAnomalyDetector_anomalyDetectorArn' - The ARN of the anomaly detector.
+newActivateAnomalyDetector ::
+  -- | 'anomalyDetectorArn'
+  Prelude.Text ->
+  ActivateAnomalyDetector
+newActivateAnomalyDetector pAnomalyDetectorArn_ =
+  ActivateAnomalyDetector'
+    { anomalyDetectorArn =
+        pAnomalyDetectorArn_
+    }
+
+-- | The ARN of the anomaly detector.
+activateAnomalyDetector_anomalyDetectorArn :: Lens.Lens' ActivateAnomalyDetector Prelude.Text
+activateAnomalyDetector_anomalyDetectorArn = Lens.lens (\ActivateAnomalyDetector' {anomalyDetectorArn} -> anomalyDetectorArn) (\s@ActivateAnomalyDetector' {} a -> s {anomalyDetectorArn = a} :: ActivateAnomalyDetector)
+
+instance Core.AWSRequest ActivateAnomalyDetector where
+  type
+    AWSResponse ActivateAnomalyDetector =
+      ActivateAnomalyDetectorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          ActivateAnomalyDetectorResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ActivateAnomalyDetector where
+  hashWithSalt _salt ActivateAnomalyDetector' {..} =
+    _salt `Prelude.hashWithSalt` anomalyDetectorArn
+
+instance Prelude.NFData ActivateAnomalyDetector where
+  rnf ActivateAnomalyDetector' {..} =
+    Prelude.rnf anomalyDetectorArn
+
+instance Data.ToHeaders ActivateAnomalyDetector where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ActivateAnomalyDetector where
+  toJSON ActivateAnomalyDetector' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("AnomalyDetectorArn" Data..= anomalyDetectorArn)
+          ]
+      )
+
+instance Data.ToPath ActivateAnomalyDetector where
+  toPath = Prelude.const "/ActivateAnomalyDetector"
+
+instance Data.ToQuery ActivateAnomalyDetector where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newActivateAnomalyDetectorResponse' smart constructor.
+data ActivateAnomalyDetectorResponse = ActivateAnomalyDetectorResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ActivateAnomalyDetectorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'activateAnomalyDetectorResponse_httpStatus' - The response's http status code.
+newActivateAnomalyDetectorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ActivateAnomalyDetectorResponse
+newActivateAnomalyDetectorResponse pHttpStatus_ =
+  ActivateAnomalyDetectorResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+activateAnomalyDetectorResponse_httpStatus :: Lens.Lens' ActivateAnomalyDetectorResponse Prelude.Int
+activateAnomalyDetectorResponse_httpStatus = Lens.lens (\ActivateAnomalyDetectorResponse' {httpStatus} -> httpStatus) (\s@ActivateAnomalyDetectorResponse' {} a -> s {httpStatus = a} :: ActivateAnomalyDetectorResponse)
+
+instance
+  Prelude.NFData
+    ActivateAnomalyDetectorResponse
+  where
+  rnf ActivateAnomalyDetectorResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/BackTestAnomalyDetector.hs b/gen/Amazonka/LookoutMetrics/BackTestAnomalyDetector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/BackTestAnomalyDetector.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.BackTestAnomalyDetector
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Runs a backtest for anomaly detection for the specified resource.
+module Amazonka.LookoutMetrics.BackTestAnomalyDetector
+  ( -- * Creating a Request
+    BackTestAnomalyDetector (..),
+    newBackTestAnomalyDetector,
+
+    -- * Request Lenses
+    backTestAnomalyDetector_anomalyDetectorArn,
+
+    -- * Destructuring the Response
+    BackTestAnomalyDetectorResponse (..),
+    newBackTestAnomalyDetectorResponse,
+
+    -- * Response Lenses
+    backTestAnomalyDetectorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newBackTestAnomalyDetector' smart constructor.
+data BackTestAnomalyDetector = BackTestAnomalyDetector'
+  { -- | The Amazon Resource Name (ARN) of the anomaly detector.
+    anomalyDetectorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BackTestAnomalyDetector' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyDetectorArn', 'backTestAnomalyDetector_anomalyDetectorArn' - The Amazon Resource Name (ARN) of the anomaly detector.
+newBackTestAnomalyDetector ::
+  -- | 'anomalyDetectorArn'
+  Prelude.Text ->
+  BackTestAnomalyDetector
+newBackTestAnomalyDetector pAnomalyDetectorArn_ =
+  BackTestAnomalyDetector'
+    { anomalyDetectorArn =
+        pAnomalyDetectorArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the anomaly detector.
+backTestAnomalyDetector_anomalyDetectorArn :: Lens.Lens' BackTestAnomalyDetector Prelude.Text
+backTestAnomalyDetector_anomalyDetectorArn = Lens.lens (\BackTestAnomalyDetector' {anomalyDetectorArn} -> anomalyDetectorArn) (\s@BackTestAnomalyDetector' {} a -> s {anomalyDetectorArn = a} :: BackTestAnomalyDetector)
+
+instance Core.AWSRequest BackTestAnomalyDetector where
+  type
+    AWSResponse BackTestAnomalyDetector =
+      BackTestAnomalyDetectorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          BackTestAnomalyDetectorResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable BackTestAnomalyDetector where
+  hashWithSalt _salt BackTestAnomalyDetector' {..} =
+    _salt `Prelude.hashWithSalt` anomalyDetectorArn
+
+instance Prelude.NFData BackTestAnomalyDetector where
+  rnf BackTestAnomalyDetector' {..} =
+    Prelude.rnf anomalyDetectorArn
+
+instance Data.ToHeaders BackTestAnomalyDetector where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BackTestAnomalyDetector where
+  toJSON BackTestAnomalyDetector' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("AnomalyDetectorArn" Data..= anomalyDetectorArn)
+          ]
+      )
+
+instance Data.ToPath BackTestAnomalyDetector where
+  toPath = Prelude.const "/BackTestAnomalyDetector"
+
+instance Data.ToQuery BackTestAnomalyDetector where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newBackTestAnomalyDetectorResponse' smart constructor.
+data BackTestAnomalyDetectorResponse = BackTestAnomalyDetectorResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BackTestAnomalyDetectorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'backTestAnomalyDetectorResponse_httpStatus' - The response's http status code.
+newBackTestAnomalyDetectorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BackTestAnomalyDetectorResponse
+newBackTestAnomalyDetectorResponse pHttpStatus_ =
+  BackTestAnomalyDetectorResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+backTestAnomalyDetectorResponse_httpStatus :: Lens.Lens' BackTestAnomalyDetectorResponse Prelude.Int
+backTestAnomalyDetectorResponse_httpStatus = Lens.lens (\BackTestAnomalyDetectorResponse' {httpStatus} -> httpStatus) (\s@BackTestAnomalyDetectorResponse' {} a -> s {httpStatus = a} :: BackTestAnomalyDetectorResponse)
+
+instance
+  Prelude.NFData
+    BackTestAnomalyDetectorResponse
+  where
+  rnf BackTestAnomalyDetectorResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/CreateAlert.hs b/gen/Amazonka/LookoutMetrics/CreateAlert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/CreateAlert.hs
@@ -0,0 +1,263 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.CreateAlert
+-- 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 alert for an anomaly detector.
+module Amazonka.LookoutMetrics.CreateAlert
+  ( -- * Creating a Request
+    CreateAlert (..),
+    newCreateAlert,
+
+    -- * Request Lenses
+    createAlert_alertDescription,
+    createAlert_alertFilters,
+    createAlert_alertSensitivityThreshold,
+    createAlert_tags,
+    createAlert_alertName,
+    createAlert_anomalyDetectorArn,
+    createAlert_action,
+
+    -- * Destructuring the Response
+    CreateAlertResponse (..),
+    newCreateAlertResponse,
+
+    -- * Response Lenses
+    createAlertResponse_alertArn,
+    createAlertResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateAlert' smart constructor.
+data CreateAlert = CreateAlert'
+  { -- | A description of the alert.
+    alertDescription :: Prelude.Maybe Prelude.Text,
+    -- | The configuration of the alert filters, containing MetricList and
+    -- DimensionFilterList.
+    alertFilters :: Prelude.Maybe AlertFilters,
+    -- | An integer from 0 to 100 specifying the alert sensitivity threshold.
+    alertSensitivityThreshold :: Prelude.Maybe Prelude.Natural,
+    -- | A list of
+    -- <https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html tags>
+    -- to apply to the alert.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the alert.
+    alertName :: Prelude.Text,
+    -- | The ARN of the detector to which the alert is attached.
+    anomalyDetectorArn :: Prelude.Text,
+    -- | Action that will be triggered when there is an alert.
+    action :: Action
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAlert' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'alertDescription', 'createAlert_alertDescription' - A description of the alert.
+--
+-- 'alertFilters', 'createAlert_alertFilters' - The configuration of the alert filters, containing MetricList and
+-- DimensionFilterList.
+--
+-- 'alertSensitivityThreshold', 'createAlert_alertSensitivityThreshold' - An integer from 0 to 100 specifying the alert sensitivity threshold.
+--
+-- 'tags', 'createAlert_tags' - A list of
+-- <https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html tags>
+-- to apply to the alert.
+--
+-- 'alertName', 'createAlert_alertName' - The name of the alert.
+--
+-- 'anomalyDetectorArn', 'createAlert_anomalyDetectorArn' - The ARN of the detector to which the alert is attached.
+--
+-- 'action', 'createAlert_action' - Action that will be triggered when there is an alert.
+newCreateAlert ::
+  -- | 'alertName'
+  Prelude.Text ->
+  -- | 'anomalyDetectorArn'
+  Prelude.Text ->
+  -- | 'action'
+  Action ->
+  CreateAlert
+newCreateAlert
+  pAlertName_
+  pAnomalyDetectorArn_
+  pAction_ =
+    CreateAlert'
+      { alertDescription = Prelude.Nothing,
+        alertFilters = Prelude.Nothing,
+        alertSensitivityThreshold = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        alertName = pAlertName_,
+        anomalyDetectorArn = pAnomalyDetectorArn_,
+        action = pAction_
+      }
+
+-- | A description of the alert.
+createAlert_alertDescription :: Lens.Lens' CreateAlert (Prelude.Maybe Prelude.Text)
+createAlert_alertDescription = Lens.lens (\CreateAlert' {alertDescription} -> alertDescription) (\s@CreateAlert' {} a -> s {alertDescription = a} :: CreateAlert)
+
+-- | The configuration of the alert filters, containing MetricList and
+-- DimensionFilterList.
+createAlert_alertFilters :: Lens.Lens' CreateAlert (Prelude.Maybe AlertFilters)
+createAlert_alertFilters = Lens.lens (\CreateAlert' {alertFilters} -> alertFilters) (\s@CreateAlert' {} a -> s {alertFilters = a} :: CreateAlert)
+
+-- | An integer from 0 to 100 specifying the alert sensitivity threshold.
+createAlert_alertSensitivityThreshold :: Lens.Lens' CreateAlert (Prelude.Maybe Prelude.Natural)
+createAlert_alertSensitivityThreshold = Lens.lens (\CreateAlert' {alertSensitivityThreshold} -> alertSensitivityThreshold) (\s@CreateAlert' {} a -> s {alertSensitivityThreshold = a} :: CreateAlert)
+
+-- | A list of
+-- <https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html tags>
+-- to apply to the alert.
+createAlert_tags :: Lens.Lens' CreateAlert (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createAlert_tags = Lens.lens (\CreateAlert' {tags} -> tags) (\s@CreateAlert' {} a -> s {tags = a} :: CreateAlert) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the alert.
+createAlert_alertName :: Lens.Lens' CreateAlert Prelude.Text
+createAlert_alertName = Lens.lens (\CreateAlert' {alertName} -> alertName) (\s@CreateAlert' {} a -> s {alertName = a} :: CreateAlert)
+
+-- | The ARN of the detector to which the alert is attached.
+createAlert_anomalyDetectorArn :: Lens.Lens' CreateAlert Prelude.Text
+createAlert_anomalyDetectorArn = Lens.lens (\CreateAlert' {anomalyDetectorArn} -> anomalyDetectorArn) (\s@CreateAlert' {} a -> s {anomalyDetectorArn = a} :: CreateAlert)
+
+-- | Action that will be triggered when there is an alert.
+createAlert_action :: Lens.Lens' CreateAlert Action
+createAlert_action = Lens.lens (\CreateAlert' {action} -> action) (\s@CreateAlert' {} a -> s {action = a} :: CreateAlert)
+
+instance Core.AWSRequest CreateAlert where
+  type AWSResponse CreateAlert = CreateAlertResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateAlertResponse'
+            Prelude.<$> (x Data..?> "AlertArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateAlert where
+  hashWithSalt _salt CreateAlert' {..} =
+    _salt
+      `Prelude.hashWithSalt` alertDescription
+      `Prelude.hashWithSalt` alertFilters
+      `Prelude.hashWithSalt` alertSensitivityThreshold
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` alertName
+      `Prelude.hashWithSalt` anomalyDetectorArn
+      `Prelude.hashWithSalt` action
+
+instance Prelude.NFData CreateAlert where
+  rnf CreateAlert' {..} =
+    Prelude.rnf alertDescription
+      `Prelude.seq` Prelude.rnf alertFilters
+      `Prelude.seq` Prelude.rnf alertSensitivityThreshold
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf alertName
+      `Prelude.seq` Prelude.rnf anomalyDetectorArn
+      `Prelude.seq` Prelude.rnf action
+
+instance Data.ToHeaders CreateAlert where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateAlert where
+  toJSON CreateAlert' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AlertDescription" Data..=)
+              Prelude.<$> alertDescription,
+            ("AlertFilters" Data..=) Prelude.<$> alertFilters,
+            ("AlertSensitivityThreshold" Data..=)
+              Prelude.<$> alertSensitivityThreshold,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("AlertName" Data..= alertName),
+            Prelude.Just
+              ("AnomalyDetectorArn" Data..= anomalyDetectorArn),
+            Prelude.Just ("Action" Data..= action)
+          ]
+      )
+
+instance Data.ToPath CreateAlert where
+  toPath = Prelude.const "/CreateAlert"
+
+instance Data.ToQuery CreateAlert where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateAlertResponse' smart constructor.
+data CreateAlertResponse = CreateAlertResponse'
+  { -- | The ARN of the alert.
+    alertArn :: 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 'CreateAlertResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'alertArn', 'createAlertResponse_alertArn' - The ARN of the alert.
+--
+-- 'httpStatus', 'createAlertResponse_httpStatus' - The response's http status code.
+newCreateAlertResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateAlertResponse
+newCreateAlertResponse pHttpStatus_ =
+  CreateAlertResponse'
+    { alertArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the alert.
+createAlertResponse_alertArn :: Lens.Lens' CreateAlertResponse (Prelude.Maybe Prelude.Text)
+createAlertResponse_alertArn = Lens.lens (\CreateAlertResponse' {alertArn} -> alertArn) (\s@CreateAlertResponse' {} a -> s {alertArn = a} :: CreateAlertResponse)
+
+-- | The response's http status code.
+createAlertResponse_httpStatus :: Lens.Lens' CreateAlertResponse Prelude.Int
+createAlertResponse_httpStatus = Lens.lens (\CreateAlertResponse' {httpStatus} -> httpStatus) (\s@CreateAlertResponse' {} a -> s {httpStatus = a} :: CreateAlertResponse)
+
+instance Prelude.NFData CreateAlertResponse where
+  rnf CreateAlertResponse' {..} =
+    Prelude.rnf alertArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/CreateAnomalyDetector.hs b/gen/Amazonka/LookoutMetrics/CreateAnomalyDetector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/CreateAnomalyDetector.hs
@@ -0,0 +1,237 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.CreateAnomalyDetector
+-- 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 anomaly detector.
+module Amazonka.LookoutMetrics.CreateAnomalyDetector
+  ( -- * Creating a Request
+    CreateAnomalyDetector (..),
+    newCreateAnomalyDetector,
+
+    -- * Request Lenses
+    createAnomalyDetector_anomalyDetectorDescription,
+    createAnomalyDetector_kmsKeyArn,
+    createAnomalyDetector_tags,
+    createAnomalyDetector_anomalyDetectorName,
+    createAnomalyDetector_anomalyDetectorConfig,
+
+    -- * Destructuring the Response
+    CreateAnomalyDetectorResponse (..),
+    newCreateAnomalyDetectorResponse,
+
+    -- * Response Lenses
+    createAnomalyDetectorResponse_anomalyDetectorArn,
+    createAnomalyDetectorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateAnomalyDetector' smart constructor.
+data CreateAnomalyDetector = CreateAnomalyDetector'
+  { -- | A description of the detector.
+    anomalyDetectorDescription :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the KMS key to use to encrypt your data.
+    kmsKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | A list of
+    -- <https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html tags>
+    -- to apply to the anomaly detector.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the detector.
+    anomalyDetectorName :: Prelude.Text,
+    -- | Contains information about the configuration of the anomaly detector.
+    anomalyDetectorConfig :: AnomalyDetectorConfig
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAnomalyDetector' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyDetectorDescription', 'createAnomalyDetector_anomalyDetectorDescription' - A description of the detector.
+--
+-- 'kmsKeyArn', 'createAnomalyDetector_kmsKeyArn' - The ARN of the KMS key to use to encrypt your data.
+--
+-- 'tags', 'createAnomalyDetector_tags' - A list of
+-- <https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html tags>
+-- to apply to the anomaly detector.
+--
+-- 'anomalyDetectorName', 'createAnomalyDetector_anomalyDetectorName' - The name of the detector.
+--
+-- 'anomalyDetectorConfig', 'createAnomalyDetector_anomalyDetectorConfig' - Contains information about the configuration of the anomaly detector.
+newCreateAnomalyDetector ::
+  -- | 'anomalyDetectorName'
+  Prelude.Text ->
+  -- | 'anomalyDetectorConfig'
+  AnomalyDetectorConfig ->
+  CreateAnomalyDetector
+newCreateAnomalyDetector
+  pAnomalyDetectorName_
+  pAnomalyDetectorConfig_ =
+    CreateAnomalyDetector'
+      { anomalyDetectorDescription =
+          Prelude.Nothing,
+        kmsKeyArn = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        anomalyDetectorName = pAnomalyDetectorName_,
+        anomalyDetectorConfig = pAnomalyDetectorConfig_
+      }
+
+-- | A description of the detector.
+createAnomalyDetector_anomalyDetectorDescription :: Lens.Lens' CreateAnomalyDetector (Prelude.Maybe Prelude.Text)
+createAnomalyDetector_anomalyDetectorDescription = Lens.lens (\CreateAnomalyDetector' {anomalyDetectorDescription} -> anomalyDetectorDescription) (\s@CreateAnomalyDetector' {} a -> s {anomalyDetectorDescription = a} :: CreateAnomalyDetector)
+
+-- | The ARN of the KMS key to use to encrypt your data.
+createAnomalyDetector_kmsKeyArn :: Lens.Lens' CreateAnomalyDetector (Prelude.Maybe Prelude.Text)
+createAnomalyDetector_kmsKeyArn = Lens.lens (\CreateAnomalyDetector' {kmsKeyArn} -> kmsKeyArn) (\s@CreateAnomalyDetector' {} a -> s {kmsKeyArn = a} :: CreateAnomalyDetector)
+
+-- | A list of
+-- <https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html tags>
+-- to apply to the anomaly detector.
+createAnomalyDetector_tags :: Lens.Lens' CreateAnomalyDetector (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createAnomalyDetector_tags = Lens.lens (\CreateAnomalyDetector' {tags} -> tags) (\s@CreateAnomalyDetector' {} a -> s {tags = a} :: CreateAnomalyDetector) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the detector.
+createAnomalyDetector_anomalyDetectorName :: Lens.Lens' CreateAnomalyDetector Prelude.Text
+createAnomalyDetector_anomalyDetectorName = Lens.lens (\CreateAnomalyDetector' {anomalyDetectorName} -> anomalyDetectorName) (\s@CreateAnomalyDetector' {} a -> s {anomalyDetectorName = a} :: CreateAnomalyDetector)
+
+-- | Contains information about the configuration of the anomaly detector.
+createAnomalyDetector_anomalyDetectorConfig :: Lens.Lens' CreateAnomalyDetector AnomalyDetectorConfig
+createAnomalyDetector_anomalyDetectorConfig = Lens.lens (\CreateAnomalyDetector' {anomalyDetectorConfig} -> anomalyDetectorConfig) (\s@CreateAnomalyDetector' {} a -> s {anomalyDetectorConfig = a} :: CreateAnomalyDetector)
+
+instance Core.AWSRequest CreateAnomalyDetector where
+  type
+    AWSResponse CreateAnomalyDetector =
+      CreateAnomalyDetectorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateAnomalyDetectorResponse'
+            Prelude.<$> (x Data..?> "AnomalyDetectorArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateAnomalyDetector where
+  hashWithSalt _salt CreateAnomalyDetector' {..} =
+    _salt
+      `Prelude.hashWithSalt` anomalyDetectorDescription
+      `Prelude.hashWithSalt` kmsKeyArn
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` anomalyDetectorName
+      `Prelude.hashWithSalt` anomalyDetectorConfig
+
+instance Prelude.NFData CreateAnomalyDetector where
+  rnf CreateAnomalyDetector' {..} =
+    Prelude.rnf anomalyDetectorDescription
+      `Prelude.seq` Prelude.rnf kmsKeyArn
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf anomalyDetectorName
+      `Prelude.seq` Prelude.rnf anomalyDetectorConfig
+
+instance Data.ToHeaders CreateAnomalyDetector where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateAnomalyDetector where
+  toJSON CreateAnomalyDetector' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AnomalyDetectorDescription" Data..=)
+              Prelude.<$> anomalyDetectorDescription,
+            ("KmsKeyArn" Data..=) Prelude.<$> kmsKeyArn,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("AnomalyDetectorName" Data..= anomalyDetectorName),
+            Prelude.Just
+              ( "AnomalyDetectorConfig"
+                  Data..= anomalyDetectorConfig
+              )
+          ]
+      )
+
+instance Data.ToPath CreateAnomalyDetector where
+  toPath = Prelude.const "/CreateAnomalyDetector"
+
+instance Data.ToQuery CreateAnomalyDetector where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateAnomalyDetectorResponse' smart constructor.
+data CreateAnomalyDetectorResponse = CreateAnomalyDetectorResponse'
+  { -- | The ARN of the detector.
+    anomalyDetectorArn :: 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 'CreateAnomalyDetectorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyDetectorArn', 'createAnomalyDetectorResponse_anomalyDetectorArn' - The ARN of the detector.
+--
+-- 'httpStatus', 'createAnomalyDetectorResponse_httpStatus' - The response's http status code.
+newCreateAnomalyDetectorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateAnomalyDetectorResponse
+newCreateAnomalyDetectorResponse pHttpStatus_ =
+  CreateAnomalyDetectorResponse'
+    { anomalyDetectorArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the detector.
+createAnomalyDetectorResponse_anomalyDetectorArn :: Lens.Lens' CreateAnomalyDetectorResponse (Prelude.Maybe Prelude.Text)
+createAnomalyDetectorResponse_anomalyDetectorArn = Lens.lens (\CreateAnomalyDetectorResponse' {anomalyDetectorArn} -> anomalyDetectorArn) (\s@CreateAnomalyDetectorResponse' {} a -> s {anomalyDetectorArn = a} :: CreateAnomalyDetectorResponse)
+
+-- | The response's http status code.
+createAnomalyDetectorResponse_httpStatus :: Lens.Lens' CreateAnomalyDetectorResponse Prelude.Int
+createAnomalyDetectorResponse_httpStatus = Lens.lens (\CreateAnomalyDetectorResponse' {httpStatus} -> httpStatus) (\s@CreateAnomalyDetectorResponse' {} a -> s {httpStatus = a} :: CreateAnomalyDetectorResponse)
+
+instance Prelude.NFData CreateAnomalyDetectorResponse where
+  rnf CreateAnomalyDetectorResponse' {..} =
+    Prelude.rnf anomalyDetectorArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/CreateMetricSet.hs b/gen/Amazonka/LookoutMetrics/CreateMetricSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/CreateMetricSet.hs
@@ -0,0 +1,343 @@
+{-# 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.LookoutMetrics.CreateMetricSet
+-- 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 dataset.
+module Amazonka.LookoutMetrics.CreateMetricSet
+  ( -- * Creating a Request
+    CreateMetricSet (..),
+    newCreateMetricSet,
+
+    -- * Request Lenses
+    createMetricSet_dimensionFilterList,
+    createMetricSet_dimensionList,
+    createMetricSet_metricSetDescription,
+    createMetricSet_metricSetFrequency,
+    createMetricSet_offset,
+    createMetricSet_tags,
+    createMetricSet_timestampColumn,
+    createMetricSet_timezone,
+    createMetricSet_anomalyDetectorArn,
+    createMetricSet_metricSetName,
+    createMetricSet_metricList,
+    createMetricSet_metricSource,
+
+    -- * Destructuring the Response
+    CreateMetricSetResponse (..),
+    newCreateMetricSetResponse,
+
+    -- * Response Lenses
+    createMetricSetResponse_metricSetArn,
+    createMetricSetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateMetricSet' smart constructor.
+data CreateMetricSet = CreateMetricSet'
+  { -- | A list of filters that specify which data is kept for anomaly detection.
+    dimensionFilterList :: Prelude.Maybe [MetricSetDimensionFilter],
+    -- | A list of the fields you want to treat as dimensions.
+    dimensionList :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | A description of the dataset you are creating.
+    metricSetDescription :: Prelude.Maybe Prelude.Text,
+    -- | The frequency with which the source data will be analyzed for anomalies.
+    metricSetFrequency :: Prelude.Maybe Frequency,
+    -- | After an interval ends, the amount of seconds that the detector waits
+    -- before importing data. Offset is only supported for S3, Redshift, Athena
+    -- and datasources.
+    offset :: Prelude.Maybe Prelude.Natural,
+    -- | A list of
+    -- <https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html tags>
+    -- to apply to the dataset.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Contains information about the column used for tracking time in your
+    -- source data.
+    timestampColumn :: Prelude.Maybe TimestampColumn,
+    -- | The time zone in which your source data was recorded.
+    timezone :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the anomaly detector that will use the dataset.
+    anomalyDetectorArn :: Prelude.Text,
+    -- | The name of the dataset.
+    metricSetName :: Prelude.Text,
+    -- | A list of metrics that the dataset will contain.
+    metricList :: Prelude.NonEmpty Metric,
+    -- | Contains information about how the source data should be interpreted.
+    metricSource :: MetricSource
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateMetricSet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dimensionFilterList', 'createMetricSet_dimensionFilterList' - A list of filters that specify which data is kept for anomaly detection.
+--
+-- 'dimensionList', 'createMetricSet_dimensionList' - A list of the fields you want to treat as dimensions.
+--
+-- 'metricSetDescription', 'createMetricSet_metricSetDescription' - A description of the dataset you are creating.
+--
+-- 'metricSetFrequency', 'createMetricSet_metricSetFrequency' - The frequency with which the source data will be analyzed for anomalies.
+--
+-- 'offset', 'createMetricSet_offset' - After an interval ends, the amount of seconds that the detector waits
+-- before importing data. Offset is only supported for S3, Redshift, Athena
+-- and datasources.
+--
+-- 'tags', 'createMetricSet_tags' - A list of
+-- <https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html tags>
+-- to apply to the dataset.
+--
+-- 'timestampColumn', 'createMetricSet_timestampColumn' - Contains information about the column used for tracking time in your
+-- source data.
+--
+-- 'timezone', 'createMetricSet_timezone' - The time zone in which your source data was recorded.
+--
+-- 'anomalyDetectorArn', 'createMetricSet_anomalyDetectorArn' - The ARN of the anomaly detector that will use the dataset.
+--
+-- 'metricSetName', 'createMetricSet_metricSetName' - The name of the dataset.
+--
+-- 'metricList', 'createMetricSet_metricList' - A list of metrics that the dataset will contain.
+--
+-- 'metricSource', 'createMetricSet_metricSource' - Contains information about how the source data should be interpreted.
+newCreateMetricSet ::
+  -- | 'anomalyDetectorArn'
+  Prelude.Text ->
+  -- | 'metricSetName'
+  Prelude.Text ->
+  -- | 'metricList'
+  Prelude.NonEmpty Metric ->
+  -- | 'metricSource'
+  MetricSource ->
+  CreateMetricSet
+newCreateMetricSet
+  pAnomalyDetectorArn_
+  pMetricSetName_
+  pMetricList_
+  pMetricSource_ =
+    CreateMetricSet'
+      { dimensionFilterList =
+          Prelude.Nothing,
+        dimensionList = Prelude.Nothing,
+        metricSetDescription = Prelude.Nothing,
+        metricSetFrequency = Prelude.Nothing,
+        offset = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        timestampColumn = Prelude.Nothing,
+        timezone = Prelude.Nothing,
+        anomalyDetectorArn = pAnomalyDetectorArn_,
+        metricSetName = pMetricSetName_,
+        metricList = Lens.coerced Lens.# pMetricList_,
+        metricSource = pMetricSource_
+      }
+
+-- | A list of filters that specify which data is kept for anomaly detection.
+createMetricSet_dimensionFilterList :: Lens.Lens' CreateMetricSet (Prelude.Maybe [MetricSetDimensionFilter])
+createMetricSet_dimensionFilterList = Lens.lens (\CreateMetricSet' {dimensionFilterList} -> dimensionFilterList) (\s@CreateMetricSet' {} a -> s {dimensionFilterList = a} :: CreateMetricSet) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of the fields you want to treat as dimensions.
+createMetricSet_dimensionList :: Lens.Lens' CreateMetricSet (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+createMetricSet_dimensionList = Lens.lens (\CreateMetricSet' {dimensionList} -> dimensionList) (\s@CreateMetricSet' {} a -> s {dimensionList = a} :: CreateMetricSet) Prelude.. Lens.mapping Lens.coerced
+
+-- | A description of the dataset you are creating.
+createMetricSet_metricSetDescription :: Lens.Lens' CreateMetricSet (Prelude.Maybe Prelude.Text)
+createMetricSet_metricSetDescription = Lens.lens (\CreateMetricSet' {metricSetDescription} -> metricSetDescription) (\s@CreateMetricSet' {} a -> s {metricSetDescription = a} :: CreateMetricSet)
+
+-- | The frequency with which the source data will be analyzed for anomalies.
+createMetricSet_metricSetFrequency :: Lens.Lens' CreateMetricSet (Prelude.Maybe Frequency)
+createMetricSet_metricSetFrequency = Lens.lens (\CreateMetricSet' {metricSetFrequency} -> metricSetFrequency) (\s@CreateMetricSet' {} a -> s {metricSetFrequency = a} :: CreateMetricSet)
+
+-- | After an interval ends, the amount of seconds that the detector waits
+-- before importing data. Offset is only supported for S3, Redshift, Athena
+-- and datasources.
+createMetricSet_offset :: Lens.Lens' CreateMetricSet (Prelude.Maybe Prelude.Natural)
+createMetricSet_offset = Lens.lens (\CreateMetricSet' {offset} -> offset) (\s@CreateMetricSet' {} a -> s {offset = a} :: CreateMetricSet)
+
+-- | A list of
+-- <https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html tags>
+-- to apply to the dataset.
+createMetricSet_tags :: Lens.Lens' CreateMetricSet (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createMetricSet_tags = Lens.lens (\CreateMetricSet' {tags} -> tags) (\s@CreateMetricSet' {} a -> s {tags = a} :: CreateMetricSet) Prelude.. Lens.mapping Lens.coerced
+
+-- | Contains information about the column used for tracking time in your
+-- source data.
+createMetricSet_timestampColumn :: Lens.Lens' CreateMetricSet (Prelude.Maybe TimestampColumn)
+createMetricSet_timestampColumn = Lens.lens (\CreateMetricSet' {timestampColumn} -> timestampColumn) (\s@CreateMetricSet' {} a -> s {timestampColumn = a} :: CreateMetricSet)
+
+-- | The time zone in which your source data was recorded.
+createMetricSet_timezone :: Lens.Lens' CreateMetricSet (Prelude.Maybe Prelude.Text)
+createMetricSet_timezone = Lens.lens (\CreateMetricSet' {timezone} -> timezone) (\s@CreateMetricSet' {} a -> s {timezone = a} :: CreateMetricSet)
+
+-- | The ARN of the anomaly detector that will use the dataset.
+createMetricSet_anomalyDetectorArn :: Lens.Lens' CreateMetricSet Prelude.Text
+createMetricSet_anomalyDetectorArn = Lens.lens (\CreateMetricSet' {anomalyDetectorArn} -> anomalyDetectorArn) (\s@CreateMetricSet' {} a -> s {anomalyDetectorArn = a} :: CreateMetricSet)
+
+-- | The name of the dataset.
+createMetricSet_metricSetName :: Lens.Lens' CreateMetricSet Prelude.Text
+createMetricSet_metricSetName = Lens.lens (\CreateMetricSet' {metricSetName} -> metricSetName) (\s@CreateMetricSet' {} a -> s {metricSetName = a} :: CreateMetricSet)
+
+-- | A list of metrics that the dataset will contain.
+createMetricSet_metricList :: Lens.Lens' CreateMetricSet (Prelude.NonEmpty Metric)
+createMetricSet_metricList = Lens.lens (\CreateMetricSet' {metricList} -> metricList) (\s@CreateMetricSet' {} a -> s {metricList = a} :: CreateMetricSet) Prelude.. Lens.coerced
+
+-- | Contains information about how the source data should be interpreted.
+createMetricSet_metricSource :: Lens.Lens' CreateMetricSet MetricSource
+createMetricSet_metricSource = Lens.lens (\CreateMetricSet' {metricSource} -> metricSource) (\s@CreateMetricSet' {} a -> s {metricSource = a} :: CreateMetricSet)
+
+instance Core.AWSRequest CreateMetricSet where
+  type
+    AWSResponse CreateMetricSet =
+      CreateMetricSetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateMetricSetResponse'
+            Prelude.<$> (x Data..?> "MetricSetArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateMetricSet where
+  hashWithSalt _salt CreateMetricSet' {..} =
+    _salt
+      `Prelude.hashWithSalt` dimensionFilterList
+      `Prelude.hashWithSalt` dimensionList
+      `Prelude.hashWithSalt` metricSetDescription
+      `Prelude.hashWithSalt` metricSetFrequency
+      `Prelude.hashWithSalt` offset
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` timestampColumn
+      `Prelude.hashWithSalt` timezone
+      `Prelude.hashWithSalt` anomalyDetectorArn
+      `Prelude.hashWithSalt` metricSetName
+      `Prelude.hashWithSalt` metricList
+      `Prelude.hashWithSalt` metricSource
+
+instance Prelude.NFData CreateMetricSet where
+  rnf CreateMetricSet' {..} =
+    Prelude.rnf dimensionFilterList
+      `Prelude.seq` Prelude.rnf dimensionList
+      `Prelude.seq` Prelude.rnf metricSetDescription
+      `Prelude.seq` Prelude.rnf metricSetFrequency
+      `Prelude.seq` Prelude.rnf offset
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf timestampColumn
+      `Prelude.seq` Prelude.rnf timezone
+      `Prelude.seq` Prelude.rnf anomalyDetectorArn
+      `Prelude.seq` Prelude.rnf metricSetName
+      `Prelude.seq` Prelude.rnf metricList
+      `Prelude.seq` Prelude.rnf metricSource
+
+instance Data.ToHeaders CreateMetricSet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateMetricSet where
+  toJSON CreateMetricSet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DimensionFilterList" Data..=)
+              Prelude.<$> dimensionFilterList,
+            ("DimensionList" Data..=) Prelude.<$> dimensionList,
+            ("MetricSetDescription" Data..=)
+              Prelude.<$> metricSetDescription,
+            ("MetricSetFrequency" Data..=)
+              Prelude.<$> metricSetFrequency,
+            ("Offset" Data..=) Prelude.<$> offset,
+            ("Tags" Data..=) Prelude.<$> tags,
+            ("TimestampColumn" Data..=)
+              Prelude.<$> timestampColumn,
+            ("Timezone" Data..=) Prelude.<$> timezone,
+            Prelude.Just
+              ("AnomalyDetectorArn" Data..= anomalyDetectorArn),
+            Prelude.Just ("MetricSetName" Data..= metricSetName),
+            Prelude.Just ("MetricList" Data..= metricList),
+            Prelude.Just ("MetricSource" Data..= metricSource)
+          ]
+      )
+
+instance Data.ToPath CreateMetricSet where
+  toPath = Prelude.const "/CreateMetricSet"
+
+instance Data.ToQuery CreateMetricSet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateMetricSetResponse' smart constructor.
+data CreateMetricSetResponse = CreateMetricSetResponse'
+  { -- | The ARN of the dataset.
+    metricSetArn :: 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 'CreateMetricSetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'metricSetArn', 'createMetricSetResponse_metricSetArn' - The ARN of the dataset.
+--
+-- 'httpStatus', 'createMetricSetResponse_httpStatus' - The response's http status code.
+newCreateMetricSetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateMetricSetResponse
+newCreateMetricSetResponse pHttpStatus_ =
+  CreateMetricSetResponse'
+    { metricSetArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the dataset.
+createMetricSetResponse_metricSetArn :: Lens.Lens' CreateMetricSetResponse (Prelude.Maybe Prelude.Text)
+createMetricSetResponse_metricSetArn = Lens.lens (\CreateMetricSetResponse' {metricSetArn} -> metricSetArn) (\s@CreateMetricSetResponse' {} a -> s {metricSetArn = a} :: CreateMetricSetResponse)
+
+-- | The response's http status code.
+createMetricSetResponse_httpStatus :: Lens.Lens' CreateMetricSetResponse Prelude.Int
+createMetricSetResponse_httpStatus = Lens.lens (\CreateMetricSetResponse' {httpStatus} -> httpStatus) (\s@CreateMetricSetResponse' {} a -> s {httpStatus = a} :: CreateMetricSetResponse)
+
+instance Prelude.NFData CreateMetricSetResponse where
+  rnf CreateMetricSetResponse' {..} =
+    Prelude.rnf metricSetArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/DeactivateAnomalyDetector.hs b/gen/Amazonka/LookoutMetrics/DeactivateAnomalyDetector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/DeactivateAnomalyDetector.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.DeactivateAnomalyDetector
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deactivates an anomaly detector.
+module Amazonka.LookoutMetrics.DeactivateAnomalyDetector
+  ( -- * Creating a Request
+    DeactivateAnomalyDetector (..),
+    newDeactivateAnomalyDetector,
+
+    -- * Request Lenses
+    deactivateAnomalyDetector_anomalyDetectorArn,
+
+    -- * Destructuring the Response
+    DeactivateAnomalyDetectorResponse (..),
+    newDeactivateAnomalyDetectorResponse,
+
+    -- * Response Lenses
+    deactivateAnomalyDetectorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeactivateAnomalyDetector' smart constructor.
+data DeactivateAnomalyDetector = DeactivateAnomalyDetector'
+  { -- | The Amazon Resource Name (ARN) of the anomaly detector.
+    anomalyDetectorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeactivateAnomalyDetector' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyDetectorArn', 'deactivateAnomalyDetector_anomalyDetectorArn' - The Amazon Resource Name (ARN) of the anomaly detector.
+newDeactivateAnomalyDetector ::
+  -- | 'anomalyDetectorArn'
+  Prelude.Text ->
+  DeactivateAnomalyDetector
+newDeactivateAnomalyDetector pAnomalyDetectorArn_ =
+  DeactivateAnomalyDetector'
+    { anomalyDetectorArn =
+        pAnomalyDetectorArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the anomaly detector.
+deactivateAnomalyDetector_anomalyDetectorArn :: Lens.Lens' DeactivateAnomalyDetector Prelude.Text
+deactivateAnomalyDetector_anomalyDetectorArn = Lens.lens (\DeactivateAnomalyDetector' {anomalyDetectorArn} -> anomalyDetectorArn) (\s@DeactivateAnomalyDetector' {} a -> s {anomalyDetectorArn = a} :: DeactivateAnomalyDetector)
+
+instance Core.AWSRequest DeactivateAnomalyDetector where
+  type
+    AWSResponse DeactivateAnomalyDetector =
+      DeactivateAnomalyDetectorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeactivateAnomalyDetectorResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeactivateAnomalyDetector where
+  hashWithSalt _salt DeactivateAnomalyDetector' {..} =
+    _salt `Prelude.hashWithSalt` anomalyDetectorArn
+
+instance Prelude.NFData DeactivateAnomalyDetector where
+  rnf DeactivateAnomalyDetector' {..} =
+    Prelude.rnf anomalyDetectorArn
+
+instance Data.ToHeaders DeactivateAnomalyDetector where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeactivateAnomalyDetector where
+  toJSON DeactivateAnomalyDetector' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("AnomalyDetectorArn" Data..= anomalyDetectorArn)
+          ]
+      )
+
+instance Data.ToPath DeactivateAnomalyDetector where
+  toPath = Prelude.const "/DeactivateAnomalyDetector"
+
+instance Data.ToQuery DeactivateAnomalyDetector where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeactivateAnomalyDetectorResponse' smart constructor.
+data DeactivateAnomalyDetectorResponse = DeactivateAnomalyDetectorResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeactivateAnomalyDetectorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deactivateAnomalyDetectorResponse_httpStatus' - The response's http status code.
+newDeactivateAnomalyDetectorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeactivateAnomalyDetectorResponse
+newDeactivateAnomalyDetectorResponse pHttpStatus_ =
+  DeactivateAnomalyDetectorResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deactivateAnomalyDetectorResponse_httpStatus :: Lens.Lens' DeactivateAnomalyDetectorResponse Prelude.Int
+deactivateAnomalyDetectorResponse_httpStatus = Lens.lens (\DeactivateAnomalyDetectorResponse' {httpStatus} -> httpStatus) (\s@DeactivateAnomalyDetectorResponse' {} a -> s {httpStatus = a} :: DeactivateAnomalyDetectorResponse)
+
+instance
+  Prelude.NFData
+    DeactivateAnomalyDetectorResponse
+  where
+  rnf DeactivateAnomalyDetectorResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/DeleteAlert.hs b/gen/Amazonka/LookoutMetrics/DeleteAlert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/DeleteAlert.hs
@@ -0,0 +1,146 @@
+{-# 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.LookoutMetrics.DeleteAlert
+-- 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 alert.
+module Amazonka.LookoutMetrics.DeleteAlert
+  ( -- * Creating a Request
+    DeleteAlert (..),
+    newDeleteAlert,
+
+    -- * Request Lenses
+    deleteAlert_alertArn,
+
+    -- * Destructuring the Response
+    DeleteAlertResponse (..),
+    newDeleteAlertResponse,
+
+    -- * Response Lenses
+    deleteAlertResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteAlert' smart constructor.
+data DeleteAlert = DeleteAlert'
+  { -- | The ARN of the alert to delete.
+    alertArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAlert' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'alertArn', 'deleteAlert_alertArn' - The ARN of the alert to delete.
+newDeleteAlert ::
+  -- | 'alertArn'
+  Prelude.Text ->
+  DeleteAlert
+newDeleteAlert pAlertArn_ =
+  DeleteAlert' {alertArn = pAlertArn_}
+
+-- | The ARN of the alert to delete.
+deleteAlert_alertArn :: Lens.Lens' DeleteAlert Prelude.Text
+deleteAlert_alertArn = Lens.lens (\DeleteAlert' {alertArn} -> alertArn) (\s@DeleteAlert' {} a -> s {alertArn = a} :: DeleteAlert)
+
+instance Core.AWSRequest DeleteAlert where
+  type AWSResponse DeleteAlert = DeleteAlertResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteAlertResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteAlert where
+  hashWithSalt _salt DeleteAlert' {..} =
+    _salt `Prelude.hashWithSalt` alertArn
+
+instance Prelude.NFData DeleteAlert where
+  rnf DeleteAlert' {..} = Prelude.rnf alertArn
+
+instance Data.ToHeaders DeleteAlert where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteAlert where
+  toJSON DeleteAlert' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("AlertArn" Data..= alertArn)]
+      )
+
+instance Data.ToPath DeleteAlert where
+  toPath = Prelude.const "/DeleteAlert"
+
+instance Data.ToQuery DeleteAlert where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteAlertResponse' smart constructor.
+data DeleteAlertResponse = DeleteAlertResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAlertResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteAlertResponse_httpStatus' - The response's http status code.
+newDeleteAlertResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteAlertResponse
+newDeleteAlertResponse pHttpStatus_ =
+  DeleteAlertResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteAlertResponse_httpStatus :: Lens.Lens' DeleteAlertResponse Prelude.Int
+deleteAlertResponse_httpStatus = Lens.lens (\DeleteAlertResponse' {httpStatus} -> httpStatus) (\s@DeleteAlertResponse' {} a -> s {httpStatus = a} :: DeleteAlertResponse)
+
+instance Prelude.NFData DeleteAlertResponse where
+  rnf DeleteAlertResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/DeleteAnomalyDetector.hs b/gen/Amazonka/LookoutMetrics/DeleteAnomalyDetector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/DeleteAnomalyDetector.hs
@@ -0,0 +1,159 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.DeleteAnomalyDetector
+-- 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. Deleting an anomaly detector will delete all of its
+-- corresponding resources including any configured datasets and alerts.
+module Amazonka.LookoutMetrics.DeleteAnomalyDetector
+  ( -- * Creating a Request
+    DeleteAnomalyDetector (..),
+    newDeleteAnomalyDetector,
+
+    -- * Request Lenses
+    deleteAnomalyDetector_anomalyDetectorArn,
+
+    -- * Destructuring the Response
+    DeleteAnomalyDetectorResponse (..),
+    newDeleteAnomalyDetectorResponse,
+
+    -- * Response Lenses
+    deleteAnomalyDetectorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteAnomalyDetector' smart constructor.
+data DeleteAnomalyDetector = DeleteAnomalyDetector'
+  { -- | The ARN of the detector to delete.
+    anomalyDetectorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAnomalyDetector' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyDetectorArn', 'deleteAnomalyDetector_anomalyDetectorArn' - The ARN of the detector to delete.
+newDeleteAnomalyDetector ::
+  -- | 'anomalyDetectorArn'
+  Prelude.Text ->
+  DeleteAnomalyDetector
+newDeleteAnomalyDetector pAnomalyDetectorArn_ =
+  DeleteAnomalyDetector'
+    { anomalyDetectorArn =
+        pAnomalyDetectorArn_
+    }
+
+-- | The ARN of the detector to delete.
+deleteAnomalyDetector_anomalyDetectorArn :: Lens.Lens' DeleteAnomalyDetector Prelude.Text
+deleteAnomalyDetector_anomalyDetectorArn = Lens.lens (\DeleteAnomalyDetector' {anomalyDetectorArn} -> anomalyDetectorArn) (\s@DeleteAnomalyDetector' {} a -> s {anomalyDetectorArn = a} :: DeleteAnomalyDetector)
+
+instance Core.AWSRequest DeleteAnomalyDetector where
+  type
+    AWSResponse DeleteAnomalyDetector =
+      DeleteAnomalyDetectorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteAnomalyDetectorResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteAnomalyDetector where
+  hashWithSalt _salt DeleteAnomalyDetector' {..} =
+    _salt `Prelude.hashWithSalt` anomalyDetectorArn
+
+instance Prelude.NFData DeleteAnomalyDetector where
+  rnf DeleteAnomalyDetector' {..} =
+    Prelude.rnf anomalyDetectorArn
+
+instance Data.ToHeaders DeleteAnomalyDetector where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteAnomalyDetector where
+  toJSON DeleteAnomalyDetector' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("AnomalyDetectorArn" Data..= anomalyDetectorArn)
+          ]
+      )
+
+instance Data.ToPath DeleteAnomalyDetector where
+  toPath = Prelude.const "/DeleteAnomalyDetector"
+
+instance Data.ToQuery DeleteAnomalyDetector where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteAnomalyDetectorResponse' smart constructor.
+data DeleteAnomalyDetectorResponse = DeleteAnomalyDetectorResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAnomalyDetectorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteAnomalyDetectorResponse_httpStatus' - The response's http status code.
+newDeleteAnomalyDetectorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteAnomalyDetectorResponse
+newDeleteAnomalyDetectorResponse pHttpStatus_ =
+  DeleteAnomalyDetectorResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteAnomalyDetectorResponse_httpStatus :: Lens.Lens' DeleteAnomalyDetectorResponse Prelude.Int
+deleteAnomalyDetectorResponse_httpStatus = Lens.lens (\DeleteAnomalyDetectorResponse' {httpStatus} -> httpStatus) (\s@DeleteAnomalyDetectorResponse' {} a -> s {httpStatus = a} :: DeleteAnomalyDetectorResponse)
+
+instance Prelude.NFData DeleteAnomalyDetectorResponse where
+  rnf DeleteAnomalyDetectorResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/DescribeAlert.hs b/gen/Amazonka/LookoutMetrics/DescribeAlert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/DescribeAlert.hs
@@ -0,0 +1,168 @@
+{-# 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.LookoutMetrics.DescribeAlert
+-- 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 alert.
+--
+-- Amazon Lookout for Metrics API actions are eventually consistent. If you
+-- do a read operation on a resource immediately after creating or
+-- modifying it, use retries to allow time for the write operation to
+-- complete.
+module Amazonka.LookoutMetrics.DescribeAlert
+  ( -- * Creating a Request
+    DescribeAlert (..),
+    newDescribeAlert,
+
+    -- * Request Lenses
+    describeAlert_alertArn,
+
+    -- * Destructuring the Response
+    DescribeAlertResponse (..),
+    newDescribeAlertResponse,
+
+    -- * Response Lenses
+    describeAlertResponse_alert,
+    describeAlertResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeAlert' smart constructor.
+data DescribeAlert = DescribeAlert'
+  { -- | The ARN of the alert to describe.
+    alertArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAlert' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'alertArn', 'describeAlert_alertArn' - The ARN of the alert to describe.
+newDescribeAlert ::
+  -- | 'alertArn'
+  Prelude.Text ->
+  DescribeAlert
+newDescribeAlert pAlertArn_ =
+  DescribeAlert' {alertArn = pAlertArn_}
+
+-- | The ARN of the alert to describe.
+describeAlert_alertArn :: Lens.Lens' DescribeAlert Prelude.Text
+describeAlert_alertArn = Lens.lens (\DescribeAlert' {alertArn} -> alertArn) (\s@DescribeAlert' {} a -> s {alertArn = a} :: DescribeAlert)
+
+instance Core.AWSRequest DescribeAlert where
+  type
+    AWSResponse DescribeAlert =
+      DescribeAlertResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAlertResponse'
+            Prelude.<$> (x Data..?> "Alert")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeAlert where
+  hashWithSalt _salt DescribeAlert' {..} =
+    _salt `Prelude.hashWithSalt` alertArn
+
+instance Prelude.NFData DescribeAlert where
+  rnf DescribeAlert' {..} = Prelude.rnf alertArn
+
+instance Data.ToHeaders DescribeAlert where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeAlert where
+  toJSON DescribeAlert' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("AlertArn" Data..= alertArn)]
+      )
+
+instance Data.ToPath DescribeAlert where
+  toPath = Prelude.const "/DescribeAlert"
+
+instance Data.ToQuery DescribeAlert where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeAlertResponse' smart constructor.
+data DescribeAlertResponse = DescribeAlertResponse'
+  { -- | Contains information about an alert.
+    alert :: Prelude.Maybe Alert,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAlertResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'alert', 'describeAlertResponse_alert' - Contains information about an alert.
+--
+-- 'httpStatus', 'describeAlertResponse_httpStatus' - The response's http status code.
+newDescribeAlertResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAlertResponse
+newDescribeAlertResponse pHttpStatus_ =
+  DescribeAlertResponse'
+    { alert = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Contains information about an alert.
+describeAlertResponse_alert :: Lens.Lens' DescribeAlertResponse (Prelude.Maybe Alert)
+describeAlertResponse_alert = Lens.lens (\DescribeAlertResponse' {alert} -> alert) (\s@DescribeAlertResponse' {} a -> s {alert = a} :: DescribeAlertResponse)
+
+-- | The response's http status code.
+describeAlertResponse_httpStatus :: Lens.Lens' DescribeAlertResponse Prelude.Int
+describeAlertResponse_httpStatus = Lens.lens (\DescribeAlertResponse' {httpStatus} -> httpStatus) (\s@DescribeAlertResponse' {} a -> s {httpStatus = a} :: DescribeAlertResponse)
+
+instance Prelude.NFData DescribeAlertResponse where
+  rnf DescribeAlertResponse' {..} =
+    Prelude.rnf alert
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/DescribeAnomalyDetectionExecutions.hs b/gen/Amazonka/LookoutMetrics/DescribeAnomalyDetectionExecutions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/DescribeAnomalyDetectionExecutions.hs
@@ -0,0 +1,256 @@
+{-# 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.LookoutMetrics.DescribeAnomalyDetectionExecutions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns information about the status of the specified anomaly detection
+-- jobs.
+module Amazonka.LookoutMetrics.DescribeAnomalyDetectionExecutions
+  ( -- * Creating a Request
+    DescribeAnomalyDetectionExecutions (..),
+    newDescribeAnomalyDetectionExecutions,
+
+    -- * Request Lenses
+    describeAnomalyDetectionExecutions_maxResults,
+    describeAnomalyDetectionExecutions_nextToken,
+    describeAnomalyDetectionExecutions_timestamp,
+    describeAnomalyDetectionExecutions_anomalyDetectorArn,
+
+    -- * Destructuring the Response
+    DescribeAnomalyDetectionExecutionsResponse (..),
+    newDescribeAnomalyDetectionExecutionsResponse,
+
+    -- * Response Lenses
+    describeAnomalyDetectionExecutionsResponse_executionList,
+    describeAnomalyDetectionExecutionsResponse_nextToken,
+    describeAnomalyDetectionExecutionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeAnomalyDetectionExecutions' smart constructor.
+data DescribeAnomalyDetectionExecutions = DescribeAnomalyDetectionExecutions'
+  { -- | The number of items to return in the response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Specify the pagination token that\'s returned by a previous request to
+    -- retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp of the anomaly detection job.
+    timestamp :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the anomaly detector.
+    anomalyDetectorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAnomalyDetectionExecutions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeAnomalyDetectionExecutions_maxResults' - The number of items to return in the response.
+--
+-- 'nextToken', 'describeAnomalyDetectionExecutions_nextToken' - Specify the pagination token that\'s returned by a previous request to
+-- retrieve the next page of results.
+--
+-- 'timestamp', 'describeAnomalyDetectionExecutions_timestamp' - The timestamp of the anomaly detection job.
+--
+-- 'anomalyDetectorArn', 'describeAnomalyDetectionExecutions_anomalyDetectorArn' - The Amazon Resource Name (ARN) of the anomaly detector.
+newDescribeAnomalyDetectionExecutions ::
+  -- | 'anomalyDetectorArn'
+  Prelude.Text ->
+  DescribeAnomalyDetectionExecutions
+newDescribeAnomalyDetectionExecutions
+  pAnomalyDetectorArn_ =
+    DescribeAnomalyDetectionExecutions'
+      { maxResults =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        timestamp = Prelude.Nothing,
+        anomalyDetectorArn =
+          pAnomalyDetectorArn_
+      }
+
+-- | The number of items to return in the response.
+describeAnomalyDetectionExecutions_maxResults :: Lens.Lens' DescribeAnomalyDetectionExecutions (Prelude.Maybe Prelude.Natural)
+describeAnomalyDetectionExecutions_maxResults = Lens.lens (\DescribeAnomalyDetectionExecutions' {maxResults} -> maxResults) (\s@DescribeAnomalyDetectionExecutions' {} a -> s {maxResults = a} :: DescribeAnomalyDetectionExecutions)
+
+-- | Specify the pagination token that\'s returned by a previous request to
+-- retrieve the next page of results.
+describeAnomalyDetectionExecutions_nextToken :: Lens.Lens' DescribeAnomalyDetectionExecutions (Prelude.Maybe Prelude.Text)
+describeAnomalyDetectionExecutions_nextToken = Lens.lens (\DescribeAnomalyDetectionExecutions' {nextToken} -> nextToken) (\s@DescribeAnomalyDetectionExecutions' {} a -> s {nextToken = a} :: DescribeAnomalyDetectionExecutions)
+
+-- | The timestamp of the anomaly detection job.
+describeAnomalyDetectionExecutions_timestamp :: Lens.Lens' DescribeAnomalyDetectionExecutions (Prelude.Maybe Prelude.Text)
+describeAnomalyDetectionExecutions_timestamp = Lens.lens (\DescribeAnomalyDetectionExecutions' {timestamp} -> timestamp) (\s@DescribeAnomalyDetectionExecutions' {} a -> s {timestamp = a} :: DescribeAnomalyDetectionExecutions)
+
+-- | The Amazon Resource Name (ARN) of the anomaly detector.
+describeAnomalyDetectionExecutions_anomalyDetectorArn :: Lens.Lens' DescribeAnomalyDetectionExecutions Prelude.Text
+describeAnomalyDetectionExecutions_anomalyDetectorArn = Lens.lens (\DescribeAnomalyDetectionExecutions' {anomalyDetectorArn} -> anomalyDetectorArn) (\s@DescribeAnomalyDetectionExecutions' {} a -> s {anomalyDetectorArn = a} :: DescribeAnomalyDetectionExecutions)
+
+instance
+  Core.AWSRequest
+    DescribeAnomalyDetectionExecutions
+  where
+  type
+    AWSResponse DescribeAnomalyDetectionExecutions =
+      DescribeAnomalyDetectionExecutionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAnomalyDetectionExecutionsResponse'
+            Prelude.<$> (x Data..?> "ExecutionList" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeAnomalyDetectionExecutions
+  where
+  hashWithSalt
+    _salt
+    DescribeAnomalyDetectionExecutions' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` timestamp
+        `Prelude.hashWithSalt` anomalyDetectorArn
+
+instance
+  Prelude.NFData
+    DescribeAnomalyDetectionExecutions
+  where
+  rnf DescribeAnomalyDetectionExecutions' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf timestamp
+      `Prelude.seq` Prelude.rnf anomalyDetectorArn
+
+instance
+  Data.ToHeaders
+    DescribeAnomalyDetectionExecutions
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    DescribeAnomalyDetectionExecutions
+  where
+  toJSON DescribeAnomalyDetectionExecutions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("Timestamp" Data..=) Prelude.<$> timestamp,
+            Prelude.Just
+              ("AnomalyDetectorArn" Data..= anomalyDetectorArn)
+          ]
+      )
+
+instance
+  Data.ToPath
+    DescribeAnomalyDetectionExecutions
+  where
+  toPath =
+    Prelude.const "/DescribeAnomalyDetectionExecutions"
+
+instance
+  Data.ToQuery
+    DescribeAnomalyDetectionExecutions
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeAnomalyDetectionExecutionsResponse' smart constructor.
+data DescribeAnomalyDetectionExecutionsResponse = DescribeAnomalyDetectionExecutionsResponse'
+  { -- | A list of detection jobs.
+    executionList :: Prelude.Maybe [ExecutionStatus],
+    -- | The pagination token that\'s included if more results are available.
+    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 'DescribeAnomalyDetectionExecutionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'executionList', 'describeAnomalyDetectionExecutionsResponse_executionList' - A list of detection jobs.
+--
+-- 'nextToken', 'describeAnomalyDetectionExecutionsResponse_nextToken' - The pagination token that\'s included if more results are available.
+--
+-- 'httpStatus', 'describeAnomalyDetectionExecutionsResponse_httpStatus' - The response's http status code.
+newDescribeAnomalyDetectionExecutionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAnomalyDetectionExecutionsResponse
+newDescribeAnomalyDetectionExecutionsResponse
+  pHttpStatus_ =
+    DescribeAnomalyDetectionExecutionsResponse'
+      { executionList =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | A list of detection jobs.
+describeAnomalyDetectionExecutionsResponse_executionList :: Lens.Lens' DescribeAnomalyDetectionExecutionsResponse (Prelude.Maybe [ExecutionStatus])
+describeAnomalyDetectionExecutionsResponse_executionList = Lens.lens (\DescribeAnomalyDetectionExecutionsResponse' {executionList} -> executionList) (\s@DescribeAnomalyDetectionExecutionsResponse' {} a -> s {executionList = a} :: DescribeAnomalyDetectionExecutionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token that\'s included if more results are available.
+describeAnomalyDetectionExecutionsResponse_nextToken :: Lens.Lens' DescribeAnomalyDetectionExecutionsResponse (Prelude.Maybe Prelude.Text)
+describeAnomalyDetectionExecutionsResponse_nextToken = Lens.lens (\DescribeAnomalyDetectionExecutionsResponse' {nextToken} -> nextToken) (\s@DescribeAnomalyDetectionExecutionsResponse' {} a -> s {nextToken = a} :: DescribeAnomalyDetectionExecutionsResponse)
+
+-- | The response's http status code.
+describeAnomalyDetectionExecutionsResponse_httpStatus :: Lens.Lens' DescribeAnomalyDetectionExecutionsResponse Prelude.Int
+describeAnomalyDetectionExecutionsResponse_httpStatus = Lens.lens (\DescribeAnomalyDetectionExecutionsResponse' {httpStatus} -> httpStatus) (\s@DescribeAnomalyDetectionExecutionsResponse' {} a -> s {httpStatus = a} :: DescribeAnomalyDetectionExecutionsResponse)
+
+instance
+  Prelude.NFData
+    DescribeAnomalyDetectionExecutionsResponse
+  where
+  rnf DescribeAnomalyDetectionExecutionsResponse' {..} =
+    Prelude.rnf executionList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/DescribeAnomalyDetector.hs b/gen/Amazonka/LookoutMetrics/DescribeAnomalyDetector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/DescribeAnomalyDetector.hs
@@ -0,0 +1,287 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.DescribeAnomalyDetector
+-- 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.
+--
+-- Amazon Lookout for Metrics API actions are eventually consistent. If you
+-- do a read operation on a resource immediately after creating or
+-- modifying it, use retries to allow time for the write operation to
+-- complete.
+module Amazonka.LookoutMetrics.DescribeAnomalyDetector
+  ( -- * Creating a Request
+    DescribeAnomalyDetector (..),
+    newDescribeAnomalyDetector,
+
+    -- * Request Lenses
+    describeAnomalyDetector_anomalyDetectorArn,
+
+    -- * Destructuring the Response
+    DescribeAnomalyDetectorResponse (..),
+    newDescribeAnomalyDetectorResponse,
+
+    -- * Response Lenses
+    describeAnomalyDetectorResponse_anomalyDetectorArn,
+    describeAnomalyDetectorResponse_anomalyDetectorConfig,
+    describeAnomalyDetectorResponse_anomalyDetectorDescription,
+    describeAnomalyDetectorResponse_anomalyDetectorName,
+    describeAnomalyDetectorResponse_creationTime,
+    describeAnomalyDetectorResponse_failureReason,
+    describeAnomalyDetectorResponse_failureType,
+    describeAnomalyDetectorResponse_kmsKeyArn,
+    describeAnomalyDetectorResponse_lastModificationTime,
+    describeAnomalyDetectorResponse_status,
+    describeAnomalyDetectorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeAnomalyDetector' smart constructor.
+data DescribeAnomalyDetector = DescribeAnomalyDetector'
+  { -- | The ARN of the detector to describe.
+    anomalyDetectorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAnomalyDetector' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyDetectorArn', 'describeAnomalyDetector_anomalyDetectorArn' - The ARN of the detector to describe.
+newDescribeAnomalyDetector ::
+  -- | 'anomalyDetectorArn'
+  Prelude.Text ->
+  DescribeAnomalyDetector
+newDescribeAnomalyDetector pAnomalyDetectorArn_ =
+  DescribeAnomalyDetector'
+    { anomalyDetectorArn =
+        pAnomalyDetectorArn_
+    }
+
+-- | The ARN of the detector to describe.
+describeAnomalyDetector_anomalyDetectorArn :: Lens.Lens' DescribeAnomalyDetector Prelude.Text
+describeAnomalyDetector_anomalyDetectorArn = Lens.lens (\DescribeAnomalyDetector' {anomalyDetectorArn} -> anomalyDetectorArn) (\s@DescribeAnomalyDetector' {} a -> s {anomalyDetectorArn = a} :: DescribeAnomalyDetector)
+
+instance Core.AWSRequest DescribeAnomalyDetector where
+  type
+    AWSResponse DescribeAnomalyDetector =
+      DescribeAnomalyDetectorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAnomalyDetectorResponse'
+            Prelude.<$> (x Data..?> "AnomalyDetectorArn")
+            Prelude.<*> (x Data..?> "AnomalyDetectorConfig")
+            Prelude.<*> (x Data..?> "AnomalyDetectorDescription")
+            Prelude.<*> (x Data..?> "AnomalyDetectorName")
+            Prelude.<*> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "FailureReason")
+            Prelude.<*> (x Data..?> "FailureType")
+            Prelude.<*> (x Data..?> "KmsKeyArn")
+            Prelude.<*> (x Data..?> "LastModificationTime")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeAnomalyDetector where
+  hashWithSalt _salt DescribeAnomalyDetector' {..} =
+    _salt `Prelude.hashWithSalt` anomalyDetectorArn
+
+instance Prelude.NFData DescribeAnomalyDetector where
+  rnf DescribeAnomalyDetector' {..} =
+    Prelude.rnf anomalyDetectorArn
+
+instance Data.ToHeaders DescribeAnomalyDetector where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeAnomalyDetector where
+  toJSON DescribeAnomalyDetector' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("AnomalyDetectorArn" Data..= anomalyDetectorArn)
+          ]
+      )
+
+instance Data.ToPath DescribeAnomalyDetector where
+  toPath = Prelude.const "/DescribeAnomalyDetector"
+
+instance Data.ToQuery DescribeAnomalyDetector where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeAnomalyDetectorResponse' smart constructor.
+data DescribeAnomalyDetectorResponse = DescribeAnomalyDetectorResponse'
+  { -- | The ARN of the detector.
+    anomalyDetectorArn :: Prelude.Maybe Prelude.Text,
+    -- | Contains information about the detector\'s configuration.
+    anomalyDetectorConfig :: Prelude.Maybe AnomalyDetectorConfigSummary,
+    -- | A description of the detector.
+    anomalyDetectorDescription :: Prelude.Maybe Prelude.Text,
+    -- | The name of the detector.
+    anomalyDetectorName :: Prelude.Maybe Prelude.Text,
+    -- | The time at which the detector was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The reason that the detector failed.
+    failureReason :: Prelude.Maybe Prelude.Text,
+    -- | The process that caused the detector to fail.
+    failureType :: Prelude.Maybe AnomalyDetectorFailureType,
+    -- | The ARN of the KMS key to use to encrypt your data.
+    kmsKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | The time at which the detector was last modified.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | The status of the detector.
+    status :: Prelude.Maybe AnomalyDetectorStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAnomalyDetectorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyDetectorArn', 'describeAnomalyDetectorResponse_anomalyDetectorArn' - The ARN of the detector.
+--
+-- 'anomalyDetectorConfig', 'describeAnomalyDetectorResponse_anomalyDetectorConfig' - Contains information about the detector\'s configuration.
+--
+-- 'anomalyDetectorDescription', 'describeAnomalyDetectorResponse_anomalyDetectorDescription' - A description of the detector.
+--
+-- 'anomalyDetectorName', 'describeAnomalyDetectorResponse_anomalyDetectorName' - The name of the detector.
+--
+-- 'creationTime', 'describeAnomalyDetectorResponse_creationTime' - The time at which the detector was created.
+--
+-- 'failureReason', 'describeAnomalyDetectorResponse_failureReason' - The reason that the detector failed.
+--
+-- 'failureType', 'describeAnomalyDetectorResponse_failureType' - The process that caused the detector to fail.
+--
+-- 'kmsKeyArn', 'describeAnomalyDetectorResponse_kmsKeyArn' - The ARN of the KMS key to use to encrypt your data.
+--
+-- 'lastModificationTime', 'describeAnomalyDetectorResponse_lastModificationTime' - The time at which the detector was last modified.
+--
+-- 'status', 'describeAnomalyDetectorResponse_status' - The status of the detector.
+--
+-- 'httpStatus', 'describeAnomalyDetectorResponse_httpStatus' - The response's http status code.
+newDescribeAnomalyDetectorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAnomalyDetectorResponse
+newDescribeAnomalyDetectorResponse pHttpStatus_ =
+  DescribeAnomalyDetectorResponse'
+    { anomalyDetectorArn =
+        Prelude.Nothing,
+      anomalyDetectorConfig = Prelude.Nothing,
+      anomalyDetectorDescription =
+        Prelude.Nothing,
+      anomalyDetectorName = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      failureReason = Prelude.Nothing,
+      failureType = Prelude.Nothing,
+      kmsKeyArn = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the detector.
+describeAnomalyDetectorResponse_anomalyDetectorArn :: Lens.Lens' DescribeAnomalyDetectorResponse (Prelude.Maybe Prelude.Text)
+describeAnomalyDetectorResponse_anomalyDetectorArn = Lens.lens (\DescribeAnomalyDetectorResponse' {anomalyDetectorArn} -> anomalyDetectorArn) (\s@DescribeAnomalyDetectorResponse' {} a -> s {anomalyDetectorArn = a} :: DescribeAnomalyDetectorResponse)
+
+-- | Contains information about the detector\'s configuration.
+describeAnomalyDetectorResponse_anomalyDetectorConfig :: Lens.Lens' DescribeAnomalyDetectorResponse (Prelude.Maybe AnomalyDetectorConfigSummary)
+describeAnomalyDetectorResponse_anomalyDetectorConfig = Lens.lens (\DescribeAnomalyDetectorResponse' {anomalyDetectorConfig} -> anomalyDetectorConfig) (\s@DescribeAnomalyDetectorResponse' {} a -> s {anomalyDetectorConfig = a} :: DescribeAnomalyDetectorResponse)
+
+-- | A description of the detector.
+describeAnomalyDetectorResponse_anomalyDetectorDescription :: Lens.Lens' DescribeAnomalyDetectorResponse (Prelude.Maybe Prelude.Text)
+describeAnomalyDetectorResponse_anomalyDetectorDescription = Lens.lens (\DescribeAnomalyDetectorResponse' {anomalyDetectorDescription} -> anomalyDetectorDescription) (\s@DescribeAnomalyDetectorResponse' {} a -> s {anomalyDetectorDescription = a} :: DescribeAnomalyDetectorResponse)
+
+-- | The name of the detector.
+describeAnomalyDetectorResponse_anomalyDetectorName :: Lens.Lens' DescribeAnomalyDetectorResponse (Prelude.Maybe Prelude.Text)
+describeAnomalyDetectorResponse_anomalyDetectorName = Lens.lens (\DescribeAnomalyDetectorResponse' {anomalyDetectorName} -> anomalyDetectorName) (\s@DescribeAnomalyDetectorResponse' {} a -> s {anomalyDetectorName = a} :: DescribeAnomalyDetectorResponse)
+
+-- | The time at which the detector was created.
+describeAnomalyDetectorResponse_creationTime :: Lens.Lens' DescribeAnomalyDetectorResponse (Prelude.Maybe Prelude.UTCTime)
+describeAnomalyDetectorResponse_creationTime = Lens.lens (\DescribeAnomalyDetectorResponse' {creationTime} -> creationTime) (\s@DescribeAnomalyDetectorResponse' {} a -> s {creationTime = a} :: DescribeAnomalyDetectorResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The reason that the detector failed.
+describeAnomalyDetectorResponse_failureReason :: Lens.Lens' DescribeAnomalyDetectorResponse (Prelude.Maybe Prelude.Text)
+describeAnomalyDetectorResponse_failureReason = Lens.lens (\DescribeAnomalyDetectorResponse' {failureReason} -> failureReason) (\s@DescribeAnomalyDetectorResponse' {} a -> s {failureReason = a} :: DescribeAnomalyDetectorResponse)
+
+-- | The process that caused the detector to fail.
+describeAnomalyDetectorResponse_failureType :: Lens.Lens' DescribeAnomalyDetectorResponse (Prelude.Maybe AnomalyDetectorFailureType)
+describeAnomalyDetectorResponse_failureType = Lens.lens (\DescribeAnomalyDetectorResponse' {failureType} -> failureType) (\s@DescribeAnomalyDetectorResponse' {} a -> s {failureType = a} :: DescribeAnomalyDetectorResponse)
+
+-- | The ARN of the KMS key to use to encrypt your data.
+describeAnomalyDetectorResponse_kmsKeyArn :: Lens.Lens' DescribeAnomalyDetectorResponse (Prelude.Maybe Prelude.Text)
+describeAnomalyDetectorResponse_kmsKeyArn = Lens.lens (\DescribeAnomalyDetectorResponse' {kmsKeyArn} -> kmsKeyArn) (\s@DescribeAnomalyDetectorResponse' {} a -> s {kmsKeyArn = a} :: DescribeAnomalyDetectorResponse)
+
+-- | The time at which the detector was last modified.
+describeAnomalyDetectorResponse_lastModificationTime :: Lens.Lens' DescribeAnomalyDetectorResponse (Prelude.Maybe Prelude.UTCTime)
+describeAnomalyDetectorResponse_lastModificationTime = Lens.lens (\DescribeAnomalyDetectorResponse' {lastModificationTime} -> lastModificationTime) (\s@DescribeAnomalyDetectorResponse' {} a -> s {lastModificationTime = a} :: DescribeAnomalyDetectorResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The status of the detector.
+describeAnomalyDetectorResponse_status :: Lens.Lens' DescribeAnomalyDetectorResponse (Prelude.Maybe AnomalyDetectorStatus)
+describeAnomalyDetectorResponse_status = Lens.lens (\DescribeAnomalyDetectorResponse' {status} -> status) (\s@DescribeAnomalyDetectorResponse' {} a -> s {status = a} :: DescribeAnomalyDetectorResponse)
+
+-- | The response's http status code.
+describeAnomalyDetectorResponse_httpStatus :: Lens.Lens' DescribeAnomalyDetectorResponse Prelude.Int
+describeAnomalyDetectorResponse_httpStatus = Lens.lens (\DescribeAnomalyDetectorResponse' {httpStatus} -> httpStatus) (\s@DescribeAnomalyDetectorResponse' {} a -> s {httpStatus = a} :: DescribeAnomalyDetectorResponse)
+
+instance
+  Prelude.NFData
+    DescribeAnomalyDetectorResponse
+  where
+  rnf DescribeAnomalyDetectorResponse' {..} =
+    Prelude.rnf anomalyDetectorArn
+      `Prelude.seq` Prelude.rnf anomalyDetectorConfig
+      `Prelude.seq` Prelude.rnf anomalyDetectorDescription
+      `Prelude.seq` Prelude.rnf anomalyDetectorName
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf failureReason
+      `Prelude.seq` Prelude.rnf failureType
+      `Prelude.seq` Prelude.rnf kmsKeyArn
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/DescribeMetricSet.hs b/gen/Amazonka/LookoutMetrics/DescribeMetricSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/DescribeMetricSet.hs
@@ -0,0 +1,337 @@
+{-# 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.LookoutMetrics.DescribeMetricSet
+-- 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 dataset.
+--
+-- Amazon Lookout for Metrics API actions are eventually consistent. If you
+-- do a read operation on a resource immediately after creating or
+-- modifying it, use retries to allow time for the write operation to
+-- complete.
+module Amazonka.LookoutMetrics.DescribeMetricSet
+  ( -- * Creating a Request
+    DescribeMetricSet (..),
+    newDescribeMetricSet,
+
+    -- * Request Lenses
+    describeMetricSet_metricSetArn,
+
+    -- * Destructuring the Response
+    DescribeMetricSetResponse (..),
+    newDescribeMetricSetResponse,
+
+    -- * Response Lenses
+    describeMetricSetResponse_anomalyDetectorArn,
+    describeMetricSetResponse_creationTime,
+    describeMetricSetResponse_dimensionFilterList,
+    describeMetricSetResponse_dimensionList,
+    describeMetricSetResponse_lastModificationTime,
+    describeMetricSetResponse_metricList,
+    describeMetricSetResponse_metricSetArn,
+    describeMetricSetResponse_metricSetDescription,
+    describeMetricSetResponse_metricSetFrequency,
+    describeMetricSetResponse_metricSetName,
+    describeMetricSetResponse_metricSource,
+    describeMetricSetResponse_offset,
+    describeMetricSetResponse_timestampColumn,
+    describeMetricSetResponse_timezone,
+    describeMetricSetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeMetricSet' smart constructor.
+data DescribeMetricSet = DescribeMetricSet'
+  { -- | The ARN of the dataset.
+    metricSetArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeMetricSet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'metricSetArn', 'describeMetricSet_metricSetArn' - The ARN of the dataset.
+newDescribeMetricSet ::
+  -- | 'metricSetArn'
+  Prelude.Text ->
+  DescribeMetricSet
+newDescribeMetricSet pMetricSetArn_ =
+  DescribeMetricSet' {metricSetArn = pMetricSetArn_}
+
+-- | The ARN of the dataset.
+describeMetricSet_metricSetArn :: Lens.Lens' DescribeMetricSet Prelude.Text
+describeMetricSet_metricSetArn = Lens.lens (\DescribeMetricSet' {metricSetArn} -> metricSetArn) (\s@DescribeMetricSet' {} a -> s {metricSetArn = a} :: DescribeMetricSet)
+
+instance Core.AWSRequest DescribeMetricSet where
+  type
+    AWSResponse DescribeMetricSet =
+      DescribeMetricSetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeMetricSetResponse'
+            Prelude.<$> (x Data..?> "AnomalyDetectorArn")
+            Prelude.<*> (x Data..?> "CreationTime")
+            Prelude.<*> ( x
+                            Data..?> "DimensionFilterList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "DimensionList")
+            Prelude.<*> (x Data..?> "LastModificationTime")
+            Prelude.<*> (x Data..?> "MetricList")
+            Prelude.<*> (x Data..?> "MetricSetArn")
+            Prelude.<*> (x Data..?> "MetricSetDescription")
+            Prelude.<*> (x Data..?> "MetricSetFrequency")
+            Prelude.<*> (x Data..?> "MetricSetName")
+            Prelude.<*> (x Data..?> "MetricSource")
+            Prelude.<*> (x Data..?> "Offset")
+            Prelude.<*> (x Data..?> "TimestampColumn")
+            Prelude.<*> (x Data..?> "Timezone")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeMetricSet where
+  hashWithSalt _salt DescribeMetricSet' {..} =
+    _salt `Prelude.hashWithSalt` metricSetArn
+
+instance Prelude.NFData DescribeMetricSet where
+  rnf DescribeMetricSet' {..} = Prelude.rnf metricSetArn
+
+instance Data.ToHeaders DescribeMetricSet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeMetricSet where
+  toJSON DescribeMetricSet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("MetricSetArn" Data..= metricSetArn)]
+      )
+
+instance Data.ToPath DescribeMetricSet where
+  toPath = Prelude.const "/DescribeMetricSet"
+
+instance Data.ToQuery DescribeMetricSet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeMetricSetResponse' smart constructor.
+data DescribeMetricSetResponse = DescribeMetricSetResponse'
+  { -- | The ARN of the detector that contains the dataset.
+    anomalyDetectorArn :: Prelude.Maybe Prelude.Text,
+    -- | The time at which the dataset was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The dimensions and their values that were used to filter the dataset.
+    dimensionFilterList :: Prelude.Maybe [MetricSetDimensionFilter],
+    -- | A list of the dimensions chosen for analysis.
+    dimensionList :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The time at which the dataset was last modified.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | A list of the metrics defined by the dataset.
+    metricList :: Prelude.Maybe (Prelude.NonEmpty Metric),
+    -- | The ARN of the dataset.
+    metricSetArn :: Prelude.Maybe Prelude.Text,
+    -- | The dataset\'s description.
+    metricSetDescription :: Prelude.Maybe Prelude.Text,
+    -- | The interval at which the data will be analyzed for anomalies.
+    metricSetFrequency :: Prelude.Maybe Frequency,
+    -- | The name of the dataset.
+    metricSetName :: Prelude.Maybe Prelude.Text,
+    -- | Contains information about the dataset\'s source data.
+    metricSource :: Prelude.Maybe MetricSource,
+    -- | After an interval ends, the amount of seconds that the detector waits
+    -- before importing data. Offset is only supported for S3, Redshift, Athena
+    -- and datasources.
+    offset :: Prelude.Maybe Prelude.Natural,
+    -- | Contains information about the column used for tracking time in your
+    -- source data.
+    timestampColumn :: Prelude.Maybe TimestampColumn,
+    -- | The time zone in which the dataset\'s data was recorded.
+    timezone :: 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 'DescribeMetricSetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyDetectorArn', 'describeMetricSetResponse_anomalyDetectorArn' - The ARN of the detector that contains the dataset.
+--
+-- 'creationTime', 'describeMetricSetResponse_creationTime' - The time at which the dataset was created.
+--
+-- 'dimensionFilterList', 'describeMetricSetResponse_dimensionFilterList' - The dimensions and their values that were used to filter the dataset.
+--
+-- 'dimensionList', 'describeMetricSetResponse_dimensionList' - A list of the dimensions chosen for analysis.
+--
+-- 'lastModificationTime', 'describeMetricSetResponse_lastModificationTime' - The time at which the dataset was last modified.
+--
+-- 'metricList', 'describeMetricSetResponse_metricList' - A list of the metrics defined by the dataset.
+--
+-- 'metricSetArn', 'describeMetricSetResponse_metricSetArn' - The ARN of the dataset.
+--
+-- 'metricSetDescription', 'describeMetricSetResponse_metricSetDescription' - The dataset\'s description.
+--
+-- 'metricSetFrequency', 'describeMetricSetResponse_metricSetFrequency' - The interval at which the data will be analyzed for anomalies.
+--
+-- 'metricSetName', 'describeMetricSetResponse_metricSetName' - The name of the dataset.
+--
+-- 'metricSource', 'describeMetricSetResponse_metricSource' - Contains information about the dataset\'s source data.
+--
+-- 'offset', 'describeMetricSetResponse_offset' - After an interval ends, the amount of seconds that the detector waits
+-- before importing data. Offset is only supported for S3, Redshift, Athena
+-- and datasources.
+--
+-- 'timestampColumn', 'describeMetricSetResponse_timestampColumn' - Contains information about the column used for tracking time in your
+-- source data.
+--
+-- 'timezone', 'describeMetricSetResponse_timezone' - The time zone in which the dataset\'s data was recorded.
+--
+-- 'httpStatus', 'describeMetricSetResponse_httpStatus' - The response's http status code.
+newDescribeMetricSetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeMetricSetResponse
+newDescribeMetricSetResponse pHttpStatus_ =
+  DescribeMetricSetResponse'
+    { anomalyDetectorArn =
+        Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      dimensionFilterList = Prelude.Nothing,
+      dimensionList = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      metricList = Prelude.Nothing,
+      metricSetArn = Prelude.Nothing,
+      metricSetDescription = Prelude.Nothing,
+      metricSetFrequency = Prelude.Nothing,
+      metricSetName = Prelude.Nothing,
+      metricSource = Prelude.Nothing,
+      offset = Prelude.Nothing,
+      timestampColumn = Prelude.Nothing,
+      timezone = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the detector that contains the dataset.
+describeMetricSetResponse_anomalyDetectorArn :: Lens.Lens' DescribeMetricSetResponse (Prelude.Maybe Prelude.Text)
+describeMetricSetResponse_anomalyDetectorArn = Lens.lens (\DescribeMetricSetResponse' {anomalyDetectorArn} -> anomalyDetectorArn) (\s@DescribeMetricSetResponse' {} a -> s {anomalyDetectorArn = a} :: DescribeMetricSetResponse)
+
+-- | The time at which the dataset was created.
+describeMetricSetResponse_creationTime :: Lens.Lens' DescribeMetricSetResponse (Prelude.Maybe Prelude.UTCTime)
+describeMetricSetResponse_creationTime = Lens.lens (\DescribeMetricSetResponse' {creationTime} -> creationTime) (\s@DescribeMetricSetResponse' {} a -> s {creationTime = a} :: DescribeMetricSetResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The dimensions and their values that were used to filter the dataset.
+describeMetricSetResponse_dimensionFilterList :: Lens.Lens' DescribeMetricSetResponse (Prelude.Maybe [MetricSetDimensionFilter])
+describeMetricSetResponse_dimensionFilterList = Lens.lens (\DescribeMetricSetResponse' {dimensionFilterList} -> dimensionFilterList) (\s@DescribeMetricSetResponse' {} a -> s {dimensionFilterList = a} :: DescribeMetricSetResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of the dimensions chosen for analysis.
+describeMetricSetResponse_dimensionList :: Lens.Lens' DescribeMetricSetResponse (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+describeMetricSetResponse_dimensionList = Lens.lens (\DescribeMetricSetResponse' {dimensionList} -> dimensionList) (\s@DescribeMetricSetResponse' {} a -> s {dimensionList = a} :: DescribeMetricSetResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The time at which the dataset was last modified.
+describeMetricSetResponse_lastModificationTime :: Lens.Lens' DescribeMetricSetResponse (Prelude.Maybe Prelude.UTCTime)
+describeMetricSetResponse_lastModificationTime = Lens.lens (\DescribeMetricSetResponse' {lastModificationTime} -> lastModificationTime) (\s@DescribeMetricSetResponse' {} a -> s {lastModificationTime = a} :: DescribeMetricSetResponse) Prelude.. Lens.mapping Data._Time
+
+-- | A list of the metrics defined by the dataset.
+describeMetricSetResponse_metricList :: Lens.Lens' DescribeMetricSetResponse (Prelude.Maybe (Prelude.NonEmpty Metric))
+describeMetricSetResponse_metricList = Lens.lens (\DescribeMetricSetResponse' {metricList} -> metricList) (\s@DescribeMetricSetResponse' {} a -> s {metricList = a} :: DescribeMetricSetResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARN of the dataset.
+describeMetricSetResponse_metricSetArn :: Lens.Lens' DescribeMetricSetResponse (Prelude.Maybe Prelude.Text)
+describeMetricSetResponse_metricSetArn = Lens.lens (\DescribeMetricSetResponse' {metricSetArn} -> metricSetArn) (\s@DescribeMetricSetResponse' {} a -> s {metricSetArn = a} :: DescribeMetricSetResponse)
+
+-- | The dataset\'s description.
+describeMetricSetResponse_metricSetDescription :: Lens.Lens' DescribeMetricSetResponse (Prelude.Maybe Prelude.Text)
+describeMetricSetResponse_metricSetDescription = Lens.lens (\DescribeMetricSetResponse' {metricSetDescription} -> metricSetDescription) (\s@DescribeMetricSetResponse' {} a -> s {metricSetDescription = a} :: DescribeMetricSetResponse)
+
+-- | The interval at which the data will be analyzed for anomalies.
+describeMetricSetResponse_metricSetFrequency :: Lens.Lens' DescribeMetricSetResponse (Prelude.Maybe Frequency)
+describeMetricSetResponse_metricSetFrequency = Lens.lens (\DescribeMetricSetResponse' {metricSetFrequency} -> metricSetFrequency) (\s@DescribeMetricSetResponse' {} a -> s {metricSetFrequency = a} :: DescribeMetricSetResponse)
+
+-- | The name of the dataset.
+describeMetricSetResponse_metricSetName :: Lens.Lens' DescribeMetricSetResponse (Prelude.Maybe Prelude.Text)
+describeMetricSetResponse_metricSetName = Lens.lens (\DescribeMetricSetResponse' {metricSetName} -> metricSetName) (\s@DescribeMetricSetResponse' {} a -> s {metricSetName = a} :: DescribeMetricSetResponse)
+
+-- | Contains information about the dataset\'s source data.
+describeMetricSetResponse_metricSource :: Lens.Lens' DescribeMetricSetResponse (Prelude.Maybe MetricSource)
+describeMetricSetResponse_metricSource = Lens.lens (\DescribeMetricSetResponse' {metricSource} -> metricSource) (\s@DescribeMetricSetResponse' {} a -> s {metricSource = a} :: DescribeMetricSetResponse)
+
+-- | After an interval ends, the amount of seconds that the detector waits
+-- before importing data. Offset is only supported for S3, Redshift, Athena
+-- and datasources.
+describeMetricSetResponse_offset :: Lens.Lens' DescribeMetricSetResponse (Prelude.Maybe Prelude.Natural)
+describeMetricSetResponse_offset = Lens.lens (\DescribeMetricSetResponse' {offset} -> offset) (\s@DescribeMetricSetResponse' {} a -> s {offset = a} :: DescribeMetricSetResponse)
+
+-- | Contains information about the column used for tracking time in your
+-- source data.
+describeMetricSetResponse_timestampColumn :: Lens.Lens' DescribeMetricSetResponse (Prelude.Maybe TimestampColumn)
+describeMetricSetResponse_timestampColumn = Lens.lens (\DescribeMetricSetResponse' {timestampColumn} -> timestampColumn) (\s@DescribeMetricSetResponse' {} a -> s {timestampColumn = a} :: DescribeMetricSetResponse)
+
+-- | The time zone in which the dataset\'s data was recorded.
+describeMetricSetResponse_timezone :: Lens.Lens' DescribeMetricSetResponse (Prelude.Maybe Prelude.Text)
+describeMetricSetResponse_timezone = Lens.lens (\DescribeMetricSetResponse' {timezone} -> timezone) (\s@DescribeMetricSetResponse' {} a -> s {timezone = a} :: DescribeMetricSetResponse)
+
+-- | The response's http status code.
+describeMetricSetResponse_httpStatus :: Lens.Lens' DescribeMetricSetResponse Prelude.Int
+describeMetricSetResponse_httpStatus = Lens.lens (\DescribeMetricSetResponse' {httpStatus} -> httpStatus) (\s@DescribeMetricSetResponse' {} a -> s {httpStatus = a} :: DescribeMetricSetResponse)
+
+instance Prelude.NFData DescribeMetricSetResponse where
+  rnf DescribeMetricSetResponse' {..} =
+    Prelude.rnf anomalyDetectorArn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf dimensionFilterList
+      `Prelude.seq` Prelude.rnf dimensionList
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf metricList
+      `Prelude.seq` Prelude.rnf metricSetArn
+      `Prelude.seq` Prelude.rnf metricSetDescription
+      `Prelude.seq` Prelude.rnf metricSetFrequency
+      `Prelude.seq` Prelude.rnf metricSetName
+      `Prelude.seq` Prelude.rnf metricSource
+      `Prelude.seq` Prelude.rnf offset
+      `Prelude.seq` Prelude.rnf timestampColumn
+      `Prelude.seq` Prelude.rnf timezone
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/DetectMetricSetConfig.hs b/gen/Amazonka/LookoutMetrics/DetectMetricSetConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/DetectMetricSetConfig.hs
@@ -0,0 +1,192 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.DetectMetricSetConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Detects an Amazon S3 dataset\'s file format, interval, and offset.
+module Amazonka.LookoutMetrics.DetectMetricSetConfig
+  ( -- * Creating a Request
+    DetectMetricSetConfig (..),
+    newDetectMetricSetConfig,
+
+    -- * Request Lenses
+    detectMetricSetConfig_anomalyDetectorArn,
+    detectMetricSetConfig_autoDetectionMetricSource,
+
+    -- * Destructuring the Response
+    DetectMetricSetConfigResponse (..),
+    newDetectMetricSetConfigResponse,
+
+    -- * Response Lenses
+    detectMetricSetConfigResponse_detectedMetricSetConfig,
+    detectMetricSetConfigResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDetectMetricSetConfig' smart constructor.
+data DetectMetricSetConfig = DetectMetricSetConfig'
+  { -- | An anomaly detector ARN.
+    anomalyDetectorArn :: Prelude.Text,
+    -- | A data source.
+    autoDetectionMetricSource :: AutoDetectionMetricSource
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetectMetricSetConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyDetectorArn', 'detectMetricSetConfig_anomalyDetectorArn' - An anomaly detector ARN.
+--
+-- 'autoDetectionMetricSource', 'detectMetricSetConfig_autoDetectionMetricSource' - A data source.
+newDetectMetricSetConfig ::
+  -- | 'anomalyDetectorArn'
+  Prelude.Text ->
+  -- | 'autoDetectionMetricSource'
+  AutoDetectionMetricSource ->
+  DetectMetricSetConfig
+newDetectMetricSetConfig
+  pAnomalyDetectorArn_
+  pAutoDetectionMetricSource_ =
+    DetectMetricSetConfig'
+      { anomalyDetectorArn =
+          pAnomalyDetectorArn_,
+        autoDetectionMetricSource =
+          pAutoDetectionMetricSource_
+      }
+
+-- | An anomaly detector ARN.
+detectMetricSetConfig_anomalyDetectorArn :: Lens.Lens' DetectMetricSetConfig Prelude.Text
+detectMetricSetConfig_anomalyDetectorArn = Lens.lens (\DetectMetricSetConfig' {anomalyDetectorArn} -> anomalyDetectorArn) (\s@DetectMetricSetConfig' {} a -> s {anomalyDetectorArn = a} :: DetectMetricSetConfig)
+
+-- | A data source.
+detectMetricSetConfig_autoDetectionMetricSource :: Lens.Lens' DetectMetricSetConfig AutoDetectionMetricSource
+detectMetricSetConfig_autoDetectionMetricSource = Lens.lens (\DetectMetricSetConfig' {autoDetectionMetricSource} -> autoDetectionMetricSource) (\s@DetectMetricSetConfig' {} a -> s {autoDetectionMetricSource = a} :: DetectMetricSetConfig)
+
+instance Core.AWSRequest DetectMetricSetConfig where
+  type
+    AWSResponse DetectMetricSetConfig =
+      DetectMetricSetConfigResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DetectMetricSetConfigResponse'
+            Prelude.<$> (x Data..?> "DetectedMetricSetConfig")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DetectMetricSetConfig where
+  hashWithSalt _salt DetectMetricSetConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` anomalyDetectorArn
+      `Prelude.hashWithSalt` autoDetectionMetricSource
+
+instance Prelude.NFData DetectMetricSetConfig where
+  rnf DetectMetricSetConfig' {..} =
+    Prelude.rnf anomalyDetectorArn
+      `Prelude.seq` Prelude.rnf autoDetectionMetricSource
+
+instance Data.ToHeaders DetectMetricSetConfig where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DetectMetricSetConfig where
+  toJSON DetectMetricSetConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("AnomalyDetectorArn" Data..= anomalyDetectorArn),
+            Prelude.Just
+              ( "AutoDetectionMetricSource"
+                  Data..= autoDetectionMetricSource
+              )
+          ]
+      )
+
+instance Data.ToPath DetectMetricSetConfig where
+  toPath = Prelude.const "/DetectMetricSetConfig"
+
+instance Data.ToQuery DetectMetricSetConfig where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDetectMetricSetConfigResponse' smart constructor.
+data DetectMetricSetConfigResponse = DetectMetricSetConfigResponse'
+  { -- | The inferred dataset configuration for the datasource.
+    detectedMetricSetConfig :: Prelude.Maybe DetectedMetricSetConfig,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetectMetricSetConfigResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detectedMetricSetConfig', 'detectMetricSetConfigResponse_detectedMetricSetConfig' - The inferred dataset configuration for the datasource.
+--
+-- 'httpStatus', 'detectMetricSetConfigResponse_httpStatus' - The response's http status code.
+newDetectMetricSetConfigResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DetectMetricSetConfigResponse
+newDetectMetricSetConfigResponse pHttpStatus_ =
+  DetectMetricSetConfigResponse'
+    { detectedMetricSetConfig =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The inferred dataset configuration for the datasource.
+detectMetricSetConfigResponse_detectedMetricSetConfig :: Lens.Lens' DetectMetricSetConfigResponse (Prelude.Maybe DetectedMetricSetConfig)
+detectMetricSetConfigResponse_detectedMetricSetConfig = Lens.lens (\DetectMetricSetConfigResponse' {detectedMetricSetConfig} -> detectedMetricSetConfig) (\s@DetectMetricSetConfigResponse' {} a -> s {detectedMetricSetConfig = a} :: DetectMetricSetConfigResponse)
+
+-- | The response's http status code.
+detectMetricSetConfigResponse_httpStatus :: Lens.Lens' DetectMetricSetConfigResponse Prelude.Int
+detectMetricSetConfigResponse_httpStatus = Lens.lens (\DetectMetricSetConfigResponse' {httpStatus} -> httpStatus) (\s@DetectMetricSetConfigResponse' {} a -> s {httpStatus = a} :: DetectMetricSetConfigResponse)
+
+instance Prelude.NFData DetectMetricSetConfigResponse where
+  rnf DetectMetricSetConfigResponse' {..} =
+    Prelude.rnf detectedMetricSetConfig
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/GetAnomalyGroup.hs b/gen/Amazonka/LookoutMetrics/GetAnomalyGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/GetAnomalyGroup.hs
@@ -0,0 +1,188 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.GetAnomalyGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns details about a group of anomalous metrics.
+module Amazonka.LookoutMetrics.GetAnomalyGroup
+  ( -- * Creating a Request
+    GetAnomalyGroup (..),
+    newGetAnomalyGroup,
+
+    -- * Request Lenses
+    getAnomalyGroup_anomalyGroupId,
+    getAnomalyGroup_anomalyDetectorArn,
+
+    -- * Destructuring the Response
+    GetAnomalyGroupResponse (..),
+    newGetAnomalyGroupResponse,
+
+    -- * Response Lenses
+    getAnomalyGroupResponse_anomalyGroup,
+    getAnomalyGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetAnomalyGroup' smart constructor.
+data GetAnomalyGroup = GetAnomalyGroup'
+  { -- | The ID of the anomaly group.
+    anomalyGroupId :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the anomaly detector.
+    anomalyDetectorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAnomalyGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyGroupId', 'getAnomalyGroup_anomalyGroupId' - The ID of the anomaly group.
+--
+-- 'anomalyDetectorArn', 'getAnomalyGroup_anomalyDetectorArn' - The Amazon Resource Name (ARN) of the anomaly detector.
+newGetAnomalyGroup ::
+  -- | 'anomalyGroupId'
+  Prelude.Text ->
+  -- | 'anomalyDetectorArn'
+  Prelude.Text ->
+  GetAnomalyGroup
+newGetAnomalyGroup
+  pAnomalyGroupId_
+  pAnomalyDetectorArn_ =
+    GetAnomalyGroup'
+      { anomalyGroupId = pAnomalyGroupId_,
+        anomalyDetectorArn = pAnomalyDetectorArn_
+      }
+
+-- | The ID of the anomaly group.
+getAnomalyGroup_anomalyGroupId :: Lens.Lens' GetAnomalyGroup Prelude.Text
+getAnomalyGroup_anomalyGroupId = Lens.lens (\GetAnomalyGroup' {anomalyGroupId} -> anomalyGroupId) (\s@GetAnomalyGroup' {} a -> s {anomalyGroupId = a} :: GetAnomalyGroup)
+
+-- | The Amazon Resource Name (ARN) of the anomaly detector.
+getAnomalyGroup_anomalyDetectorArn :: Lens.Lens' GetAnomalyGroup Prelude.Text
+getAnomalyGroup_anomalyDetectorArn = Lens.lens (\GetAnomalyGroup' {anomalyDetectorArn} -> anomalyDetectorArn) (\s@GetAnomalyGroup' {} a -> s {anomalyDetectorArn = a} :: GetAnomalyGroup)
+
+instance Core.AWSRequest GetAnomalyGroup where
+  type
+    AWSResponse GetAnomalyGroup =
+      GetAnomalyGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetAnomalyGroupResponse'
+            Prelude.<$> (x Data..?> "AnomalyGroup")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetAnomalyGroup where
+  hashWithSalt _salt GetAnomalyGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` anomalyGroupId
+      `Prelude.hashWithSalt` anomalyDetectorArn
+
+instance Prelude.NFData GetAnomalyGroup where
+  rnf GetAnomalyGroup' {..} =
+    Prelude.rnf anomalyGroupId
+      `Prelude.seq` Prelude.rnf anomalyDetectorArn
+
+instance Data.ToHeaders GetAnomalyGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetAnomalyGroup where
+  toJSON GetAnomalyGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("AnomalyGroupId" Data..= anomalyGroupId),
+            Prelude.Just
+              ("AnomalyDetectorArn" Data..= anomalyDetectorArn)
+          ]
+      )
+
+instance Data.ToPath GetAnomalyGroup where
+  toPath = Prelude.const "/GetAnomalyGroup"
+
+instance Data.ToQuery GetAnomalyGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetAnomalyGroupResponse' smart constructor.
+data GetAnomalyGroupResponse = GetAnomalyGroupResponse'
+  { -- | Details about the anomaly group.
+    anomalyGroup :: Prelude.Maybe AnomalyGroup,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAnomalyGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyGroup', 'getAnomalyGroupResponse_anomalyGroup' - Details about the anomaly group.
+--
+-- 'httpStatus', 'getAnomalyGroupResponse_httpStatus' - The response's http status code.
+newGetAnomalyGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAnomalyGroupResponse
+newGetAnomalyGroupResponse pHttpStatus_ =
+  GetAnomalyGroupResponse'
+    { anomalyGroup =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details about the anomaly group.
+getAnomalyGroupResponse_anomalyGroup :: Lens.Lens' GetAnomalyGroupResponse (Prelude.Maybe AnomalyGroup)
+getAnomalyGroupResponse_anomalyGroup = Lens.lens (\GetAnomalyGroupResponse' {anomalyGroup} -> anomalyGroup) (\s@GetAnomalyGroupResponse' {} a -> s {anomalyGroup = a} :: GetAnomalyGroupResponse)
+
+-- | The response's http status code.
+getAnomalyGroupResponse_httpStatus :: Lens.Lens' GetAnomalyGroupResponse Prelude.Int
+getAnomalyGroupResponse_httpStatus = Lens.lens (\GetAnomalyGroupResponse' {httpStatus} -> httpStatus) (\s@GetAnomalyGroupResponse' {} a -> s {httpStatus = a} :: GetAnomalyGroupResponse)
+
+instance Prelude.NFData GetAnomalyGroupResponse where
+  rnf GetAnomalyGroupResponse' {..} =
+    Prelude.rnf anomalyGroup
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/GetDataQualityMetrics.hs b/gen/Amazonka/LookoutMetrics/GetDataQualityMetrics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/GetDataQualityMetrics.hs
@@ -0,0 +1,193 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.GetDataQualityMetrics
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns details about the requested data quality metrics.
+module Amazonka.LookoutMetrics.GetDataQualityMetrics
+  ( -- * Creating a Request
+    GetDataQualityMetrics (..),
+    newGetDataQualityMetrics,
+
+    -- * Request Lenses
+    getDataQualityMetrics_metricSetArn,
+    getDataQualityMetrics_anomalyDetectorArn,
+
+    -- * Destructuring the Response
+    GetDataQualityMetricsResponse (..),
+    newGetDataQualityMetricsResponse,
+
+    -- * Response Lenses
+    getDataQualityMetricsResponse_anomalyDetectorDataQualityMetricList,
+    getDataQualityMetricsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDataQualityMetrics' smart constructor.
+data GetDataQualityMetrics = GetDataQualityMetrics'
+  { -- | The Amazon Resource Name (ARN) of a specific data quality metric set.
+    metricSetArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the anomaly detector that you want to
+    -- investigate.
+    anomalyDetectorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDataQualityMetrics' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'metricSetArn', 'getDataQualityMetrics_metricSetArn' - The Amazon Resource Name (ARN) of a specific data quality metric set.
+--
+-- 'anomalyDetectorArn', 'getDataQualityMetrics_anomalyDetectorArn' - The Amazon Resource Name (ARN) of the anomaly detector that you want to
+-- investigate.
+newGetDataQualityMetrics ::
+  -- | 'anomalyDetectorArn'
+  Prelude.Text ->
+  GetDataQualityMetrics
+newGetDataQualityMetrics pAnomalyDetectorArn_ =
+  GetDataQualityMetrics'
+    { metricSetArn =
+        Prelude.Nothing,
+      anomalyDetectorArn = pAnomalyDetectorArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of a specific data quality metric set.
+getDataQualityMetrics_metricSetArn :: Lens.Lens' GetDataQualityMetrics (Prelude.Maybe Prelude.Text)
+getDataQualityMetrics_metricSetArn = Lens.lens (\GetDataQualityMetrics' {metricSetArn} -> metricSetArn) (\s@GetDataQualityMetrics' {} a -> s {metricSetArn = a} :: GetDataQualityMetrics)
+
+-- | The Amazon Resource Name (ARN) of the anomaly detector that you want to
+-- investigate.
+getDataQualityMetrics_anomalyDetectorArn :: Lens.Lens' GetDataQualityMetrics Prelude.Text
+getDataQualityMetrics_anomalyDetectorArn = Lens.lens (\GetDataQualityMetrics' {anomalyDetectorArn} -> anomalyDetectorArn) (\s@GetDataQualityMetrics' {} a -> s {anomalyDetectorArn = a} :: GetDataQualityMetrics)
+
+instance Core.AWSRequest GetDataQualityMetrics where
+  type
+    AWSResponse GetDataQualityMetrics =
+      GetDataQualityMetricsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDataQualityMetricsResponse'
+            Prelude.<$> ( x
+                            Data..?> "AnomalyDetectorDataQualityMetricList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetDataQualityMetrics where
+  hashWithSalt _salt GetDataQualityMetrics' {..} =
+    _salt
+      `Prelude.hashWithSalt` metricSetArn
+      `Prelude.hashWithSalt` anomalyDetectorArn
+
+instance Prelude.NFData GetDataQualityMetrics where
+  rnf GetDataQualityMetrics' {..} =
+    Prelude.rnf metricSetArn
+      `Prelude.seq` Prelude.rnf anomalyDetectorArn
+
+instance Data.ToHeaders GetDataQualityMetrics where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetDataQualityMetrics where
+  toJSON GetDataQualityMetrics' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MetricSetArn" Data..=) Prelude.<$> metricSetArn,
+            Prelude.Just
+              ("AnomalyDetectorArn" Data..= anomalyDetectorArn)
+          ]
+      )
+
+instance Data.ToPath GetDataQualityMetrics where
+  toPath = Prelude.const "/GetDataQualityMetrics"
+
+instance Data.ToQuery GetDataQualityMetrics where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetDataQualityMetricsResponse' smart constructor.
+data GetDataQualityMetricsResponse = GetDataQualityMetricsResponse'
+  { -- | A list of the data quality metrics for the @AnomalyDetectorArn@ that you
+    -- requested.
+    anomalyDetectorDataQualityMetricList :: Prelude.Maybe [AnomalyDetectorDataQualityMetric],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDataQualityMetricsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyDetectorDataQualityMetricList', 'getDataQualityMetricsResponse_anomalyDetectorDataQualityMetricList' - A list of the data quality metrics for the @AnomalyDetectorArn@ that you
+-- requested.
+--
+-- 'httpStatus', 'getDataQualityMetricsResponse_httpStatus' - The response's http status code.
+newGetDataQualityMetricsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetDataQualityMetricsResponse
+newGetDataQualityMetricsResponse pHttpStatus_ =
+  GetDataQualityMetricsResponse'
+    { anomalyDetectorDataQualityMetricList =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of the data quality metrics for the @AnomalyDetectorArn@ that you
+-- requested.
+getDataQualityMetricsResponse_anomalyDetectorDataQualityMetricList :: Lens.Lens' GetDataQualityMetricsResponse (Prelude.Maybe [AnomalyDetectorDataQualityMetric])
+getDataQualityMetricsResponse_anomalyDetectorDataQualityMetricList = Lens.lens (\GetDataQualityMetricsResponse' {anomalyDetectorDataQualityMetricList} -> anomalyDetectorDataQualityMetricList) (\s@GetDataQualityMetricsResponse' {} a -> s {anomalyDetectorDataQualityMetricList = a} :: GetDataQualityMetricsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getDataQualityMetricsResponse_httpStatus :: Lens.Lens' GetDataQualityMetricsResponse Prelude.Int
+getDataQualityMetricsResponse_httpStatus = Lens.lens (\GetDataQualityMetricsResponse' {httpStatus} -> httpStatus) (\s@GetDataQualityMetricsResponse' {} a -> s {httpStatus = a} :: GetDataQualityMetricsResponse)
+
+instance Prelude.NFData GetDataQualityMetricsResponse where
+  rnf GetDataQualityMetricsResponse' {..} =
+    Prelude.rnf anomalyDetectorDataQualityMetricList
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/GetFeedback.hs b/gen/Amazonka/LookoutMetrics/GetFeedback.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/GetFeedback.hs
@@ -0,0 +1,233 @@
+{-# 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.LookoutMetrics.GetFeedback
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get feedback for an anomaly group.
+module Amazonka.LookoutMetrics.GetFeedback
+  ( -- * Creating a Request
+    GetFeedback (..),
+    newGetFeedback,
+
+    -- * Request Lenses
+    getFeedback_maxResults,
+    getFeedback_nextToken,
+    getFeedback_anomalyDetectorArn,
+    getFeedback_anomalyGroupTimeSeriesFeedback,
+
+    -- * Destructuring the Response
+    GetFeedbackResponse (..),
+    newGetFeedbackResponse,
+
+    -- * Response Lenses
+    getFeedbackResponse_anomalyGroupTimeSeriesFeedback,
+    getFeedbackResponse_nextToken,
+    getFeedbackResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetFeedback' smart constructor.
+data GetFeedback = GetFeedback'
+  { -- | The maximum number of results to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Specify the pagination token that\'s returned by a previous request to
+    -- retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the anomaly detector.
+    anomalyDetectorArn :: Prelude.Text,
+    -- | The anomalous metric and group ID.
+    anomalyGroupTimeSeriesFeedback :: AnomalyGroupTimeSeries
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetFeedback' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getFeedback_maxResults' - The maximum number of results to return.
+--
+-- 'nextToken', 'getFeedback_nextToken' - Specify the pagination token that\'s returned by a previous request to
+-- retrieve the next page of results.
+--
+-- 'anomalyDetectorArn', 'getFeedback_anomalyDetectorArn' - The Amazon Resource Name (ARN) of the anomaly detector.
+--
+-- 'anomalyGroupTimeSeriesFeedback', 'getFeedback_anomalyGroupTimeSeriesFeedback' - The anomalous metric and group ID.
+newGetFeedback ::
+  -- | 'anomalyDetectorArn'
+  Prelude.Text ->
+  -- | 'anomalyGroupTimeSeriesFeedback'
+  AnomalyGroupTimeSeries ->
+  GetFeedback
+newGetFeedback
+  pAnomalyDetectorArn_
+  pAnomalyGroupTimeSeriesFeedback_ =
+    GetFeedback'
+      { maxResults = Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        anomalyDetectorArn = pAnomalyDetectorArn_,
+        anomalyGroupTimeSeriesFeedback =
+          pAnomalyGroupTimeSeriesFeedback_
+      }
+
+-- | The maximum number of results to return.
+getFeedback_maxResults :: Lens.Lens' GetFeedback (Prelude.Maybe Prelude.Natural)
+getFeedback_maxResults = Lens.lens (\GetFeedback' {maxResults} -> maxResults) (\s@GetFeedback' {} a -> s {maxResults = a} :: GetFeedback)
+
+-- | Specify the pagination token that\'s returned by a previous request to
+-- retrieve the next page of results.
+getFeedback_nextToken :: Lens.Lens' GetFeedback (Prelude.Maybe Prelude.Text)
+getFeedback_nextToken = Lens.lens (\GetFeedback' {nextToken} -> nextToken) (\s@GetFeedback' {} a -> s {nextToken = a} :: GetFeedback)
+
+-- | The Amazon Resource Name (ARN) of the anomaly detector.
+getFeedback_anomalyDetectorArn :: Lens.Lens' GetFeedback Prelude.Text
+getFeedback_anomalyDetectorArn = Lens.lens (\GetFeedback' {anomalyDetectorArn} -> anomalyDetectorArn) (\s@GetFeedback' {} a -> s {anomalyDetectorArn = a} :: GetFeedback)
+
+-- | The anomalous metric and group ID.
+getFeedback_anomalyGroupTimeSeriesFeedback :: Lens.Lens' GetFeedback AnomalyGroupTimeSeries
+getFeedback_anomalyGroupTimeSeriesFeedback = Lens.lens (\GetFeedback' {anomalyGroupTimeSeriesFeedback} -> anomalyGroupTimeSeriesFeedback) (\s@GetFeedback' {} a -> s {anomalyGroupTimeSeriesFeedback = a} :: GetFeedback)
+
+instance Core.AWSRequest GetFeedback where
+  type AWSResponse GetFeedback = GetFeedbackResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetFeedbackResponse'
+            Prelude.<$> ( x
+                            Data..?> "AnomalyGroupTimeSeriesFeedback"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetFeedback where
+  hashWithSalt _salt GetFeedback' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` anomalyDetectorArn
+      `Prelude.hashWithSalt` anomalyGroupTimeSeriesFeedback
+
+instance Prelude.NFData GetFeedback where
+  rnf GetFeedback' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf anomalyDetectorArn
+      `Prelude.seq` Prelude.rnf anomalyGroupTimeSeriesFeedback
+
+instance Data.ToHeaders GetFeedback where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetFeedback where
+  toJSON GetFeedback' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just
+              ("AnomalyDetectorArn" Data..= anomalyDetectorArn),
+            Prelude.Just
+              ( "AnomalyGroupTimeSeriesFeedback"
+                  Data..= anomalyGroupTimeSeriesFeedback
+              )
+          ]
+      )
+
+instance Data.ToPath GetFeedback where
+  toPath = Prelude.const "/GetFeedback"
+
+instance Data.ToQuery GetFeedback where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetFeedbackResponse' smart constructor.
+data GetFeedbackResponse = GetFeedbackResponse'
+  { -- | Feedback for an anomalous metric.
+    anomalyGroupTimeSeriesFeedback :: Prelude.Maybe [TimeSeriesFeedback],
+    -- | The pagination token that\'s included if more results are available.
+    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 'GetFeedbackResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyGroupTimeSeriesFeedback', 'getFeedbackResponse_anomalyGroupTimeSeriesFeedback' - Feedback for an anomalous metric.
+--
+-- 'nextToken', 'getFeedbackResponse_nextToken' - The pagination token that\'s included if more results are available.
+--
+-- 'httpStatus', 'getFeedbackResponse_httpStatus' - The response's http status code.
+newGetFeedbackResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetFeedbackResponse
+newGetFeedbackResponse pHttpStatus_ =
+  GetFeedbackResponse'
+    { anomalyGroupTimeSeriesFeedback =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Feedback for an anomalous metric.
+getFeedbackResponse_anomalyGroupTimeSeriesFeedback :: Lens.Lens' GetFeedbackResponse (Prelude.Maybe [TimeSeriesFeedback])
+getFeedbackResponse_anomalyGroupTimeSeriesFeedback = Lens.lens (\GetFeedbackResponse' {anomalyGroupTimeSeriesFeedback} -> anomalyGroupTimeSeriesFeedback) (\s@GetFeedbackResponse' {} a -> s {anomalyGroupTimeSeriesFeedback = a} :: GetFeedbackResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token that\'s included if more results are available.
+getFeedbackResponse_nextToken :: Lens.Lens' GetFeedbackResponse (Prelude.Maybe Prelude.Text)
+getFeedbackResponse_nextToken = Lens.lens (\GetFeedbackResponse' {nextToken} -> nextToken) (\s@GetFeedbackResponse' {} a -> s {nextToken = a} :: GetFeedbackResponse)
+
+-- | The response's http status code.
+getFeedbackResponse_httpStatus :: Lens.Lens' GetFeedbackResponse Prelude.Int
+getFeedbackResponse_httpStatus = Lens.lens (\GetFeedbackResponse' {httpStatus} -> httpStatus) (\s@GetFeedbackResponse' {} a -> s {httpStatus = a} :: GetFeedbackResponse)
+
+instance Prelude.NFData GetFeedbackResponse where
+  rnf GetFeedbackResponse' {..} =
+    Prelude.rnf anomalyGroupTimeSeriesFeedback
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/GetSampleData.hs b/gen/Amazonka/LookoutMetrics/GetSampleData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/GetSampleData.hs
@@ -0,0 +1,176 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.GetSampleData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a selection of sample records from an Amazon S3 datasource.
+module Amazonka.LookoutMetrics.GetSampleData
+  ( -- * Creating a Request
+    GetSampleData (..),
+    newGetSampleData,
+
+    -- * Request Lenses
+    getSampleData_s3SourceConfig,
+
+    -- * Destructuring the Response
+    GetSampleDataResponse (..),
+    newGetSampleDataResponse,
+
+    -- * Response Lenses
+    getSampleDataResponse_headerValues,
+    getSampleDataResponse_sampleRows,
+    getSampleDataResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetSampleData' smart constructor.
+data GetSampleData = GetSampleData'
+  { -- | A datasource bucket in Amazon S3.
+    s3SourceConfig :: Prelude.Maybe SampleDataS3SourceConfig
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSampleData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3SourceConfig', 'getSampleData_s3SourceConfig' - A datasource bucket in Amazon S3.
+newGetSampleData ::
+  GetSampleData
+newGetSampleData =
+  GetSampleData' {s3SourceConfig = Prelude.Nothing}
+
+-- | A datasource bucket in Amazon S3.
+getSampleData_s3SourceConfig :: Lens.Lens' GetSampleData (Prelude.Maybe SampleDataS3SourceConfig)
+getSampleData_s3SourceConfig = Lens.lens (\GetSampleData' {s3SourceConfig} -> s3SourceConfig) (\s@GetSampleData' {} a -> s {s3SourceConfig = a} :: GetSampleData)
+
+instance Core.AWSRequest GetSampleData where
+  type
+    AWSResponse GetSampleData =
+      GetSampleDataResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetSampleDataResponse'
+            Prelude.<$> (x Data..?> "HeaderValues" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "SampleRows" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetSampleData where
+  hashWithSalt _salt GetSampleData' {..} =
+    _salt `Prelude.hashWithSalt` s3SourceConfig
+
+instance Prelude.NFData GetSampleData where
+  rnf GetSampleData' {..} = Prelude.rnf s3SourceConfig
+
+instance Data.ToHeaders GetSampleData where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetSampleData where
+  toJSON GetSampleData' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("S3SourceConfig" Data..=)
+              Prelude.<$> s3SourceConfig
+          ]
+      )
+
+instance Data.ToPath GetSampleData where
+  toPath = Prelude.const "/GetSampleData"
+
+instance Data.ToQuery GetSampleData where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetSampleDataResponse' smart constructor.
+data GetSampleDataResponse = GetSampleDataResponse'
+  { -- | A list of header labels for the records.
+    headerValues :: Prelude.Maybe [Prelude.Text],
+    -- | A list of records.
+    sampleRows :: 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 'GetSampleDataResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'headerValues', 'getSampleDataResponse_headerValues' - A list of header labels for the records.
+--
+-- 'sampleRows', 'getSampleDataResponse_sampleRows' - A list of records.
+--
+-- 'httpStatus', 'getSampleDataResponse_httpStatus' - The response's http status code.
+newGetSampleDataResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetSampleDataResponse
+newGetSampleDataResponse pHttpStatus_ =
+  GetSampleDataResponse'
+    { headerValues =
+        Prelude.Nothing,
+      sampleRows = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of header labels for the records.
+getSampleDataResponse_headerValues :: Lens.Lens' GetSampleDataResponse (Prelude.Maybe [Prelude.Text])
+getSampleDataResponse_headerValues = Lens.lens (\GetSampleDataResponse' {headerValues} -> headerValues) (\s@GetSampleDataResponse' {} a -> s {headerValues = a} :: GetSampleDataResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of records.
+getSampleDataResponse_sampleRows :: Lens.Lens' GetSampleDataResponse (Prelude.Maybe [[Prelude.Text]])
+getSampleDataResponse_sampleRows = Lens.lens (\GetSampleDataResponse' {sampleRows} -> sampleRows) (\s@GetSampleDataResponse' {} a -> s {sampleRows = a} :: GetSampleDataResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getSampleDataResponse_httpStatus :: Lens.Lens' GetSampleDataResponse Prelude.Int
+getSampleDataResponse_httpStatus = Lens.lens (\GetSampleDataResponse' {httpStatus} -> httpStatus) (\s@GetSampleDataResponse' {} a -> s {httpStatus = a} :: GetSampleDataResponse)
+
+instance Prelude.NFData GetSampleDataResponse where
+  rnf GetSampleDataResponse' {..} =
+    Prelude.rnf headerValues
+      `Prelude.seq` Prelude.rnf sampleRows
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/Lens.hs b/gen/Amazonka/LookoutMetrics/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Lens.hs
@@ -0,0 +1,647 @@
+{-# 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.LookoutMetrics.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.LookoutMetrics.Lens
+  ( -- * Operations
+
+    -- ** ActivateAnomalyDetector
+    activateAnomalyDetector_anomalyDetectorArn,
+    activateAnomalyDetectorResponse_httpStatus,
+
+    -- ** BackTestAnomalyDetector
+    backTestAnomalyDetector_anomalyDetectorArn,
+    backTestAnomalyDetectorResponse_httpStatus,
+
+    -- ** CreateAlert
+    createAlert_alertDescription,
+    createAlert_alertFilters,
+    createAlert_alertSensitivityThreshold,
+    createAlert_tags,
+    createAlert_alertName,
+    createAlert_anomalyDetectorArn,
+    createAlert_action,
+    createAlertResponse_alertArn,
+    createAlertResponse_httpStatus,
+
+    -- ** CreateAnomalyDetector
+    createAnomalyDetector_anomalyDetectorDescription,
+    createAnomalyDetector_kmsKeyArn,
+    createAnomalyDetector_tags,
+    createAnomalyDetector_anomalyDetectorName,
+    createAnomalyDetector_anomalyDetectorConfig,
+    createAnomalyDetectorResponse_anomalyDetectorArn,
+    createAnomalyDetectorResponse_httpStatus,
+
+    -- ** CreateMetricSet
+    createMetricSet_dimensionFilterList,
+    createMetricSet_dimensionList,
+    createMetricSet_metricSetDescription,
+    createMetricSet_metricSetFrequency,
+    createMetricSet_offset,
+    createMetricSet_tags,
+    createMetricSet_timestampColumn,
+    createMetricSet_timezone,
+    createMetricSet_anomalyDetectorArn,
+    createMetricSet_metricSetName,
+    createMetricSet_metricList,
+    createMetricSet_metricSource,
+    createMetricSetResponse_metricSetArn,
+    createMetricSetResponse_httpStatus,
+
+    -- ** DeactivateAnomalyDetector
+    deactivateAnomalyDetector_anomalyDetectorArn,
+    deactivateAnomalyDetectorResponse_httpStatus,
+
+    -- ** DeleteAlert
+    deleteAlert_alertArn,
+    deleteAlertResponse_httpStatus,
+
+    -- ** DeleteAnomalyDetector
+    deleteAnomalyDetector_anomalyDetectorArn,
+    deleteAnomalyDetectorResponse_httpStatus,
+
+    -- ** DescribeAlert
+    describeAlert_alertArn,
+    describeAlertResponse_alert,
+    describeAlertResponse_httpStatus,
+
+    -- ** DescribeAnomalyDetectionExecutions
+    describeAnomalyDetectionExecutions_maxResults,
+    describeAnomalyDetectionExecutions_nextToken,
+    describeAnomalyDetectionExecutions_timestamp,
+    describeAnomalyDetectionExecutions_anomalyDetectorArn,
+    describeAnomalyDetectionExecutionsResponse_executionList,
+    describeAnomalyDetectionExecutionsResponse_nextToken,
+    describeAnomalyDetectionExecutionsResponse_httpStatus,
+
+    -- ** DescribeAnomalyDetector
+    describeAnomalyDetector_anomalyDetectorArn,
+    describeAnomalyDetectorResponse_anomalyDetectorArn,
+    describeAnomalyDetectorResponse_anomalyDetectorConfig,
+    describeAnomalyDetectorResponse_anomalyDetectorDescription,
+    describeAnomalyDetectorResponse_anomalyDetectorName,
+    describeAnomalyDetectorResponse_creationTime,
+    describeAnomalyDetectorResponse_failureReason,
+    describeAnomalyDetectorResponse_failureType,
+    describeAnomalyDetectorResponse_kmsKeyArn,
+    describeAnomalyDetectorResponse_lastModificationTime,
+    describeAnomalyDetectorResponse_status,
+    describeAnomalyDetectorResponse_httpStatus,
+
+    -- ** DescribeMetricSet
+    describeMetricSet_metricSetArn,
+    describeMetricSetResponse_anomalyDetectorArn,
+    describeMetricSetResponse_creationTime,
+    describeMetricSetResponse_dimensionFilterList,
+    describeMetricSetResponse_dimensionList,
+    describeMetricSetResponse_lastModificationTime,
+    describeMetricSetResponse_metricList,
+    describeMetricSetResponse_metricSetArn,
+    describeMetricSetResponse_metricSetDescription,
+    describeMetricSetResponse_metricSetFrequency,
+    describeMetricSetResponse_metricSetName,
+    describeMetricSetResponse_metricSource,
+    describeMetricSetResponse_offset,
+    describeMetricSetResponse_timestampColumn,
+    describeMetricSetResponse_timezone,
+    describeMetricSetResponse_httpStatus,
+
+    -- ** DetectMetricSetConfig
+    detectMetricSetConfig_anomalyDetectorArn,
+    detectMetricSetConfig_autoDetectionMetricSource,
+    detectMetricSetConfigResponse_detectedMetricSetConfig,
+    detectMetricSetConfigResponse_httpStatus,
+
+    -- ** GetAnomalyGroup
+    getAnomalyGroup_anomalyGroupId,
+    getAnomalyGroup_anomalyDetectorArn,
+    getAnomalyGroupResponse_anomalyGroup,
+    getAnomalyGroupResponse_httpStatus,
+
+    -- ** GetDataQualityMetrics
+    getDataQualityMetrics_metricSetArn,
+    getDataQualityMetrics_anomalyDetectorArn,
+    getDataQualityMetricsResponse_anomalyDetectorDataQualityMetricList,
+    getDataQualityMetricsResponse_httpStatus,
+
+    -- ** GetFeedback
+    getFeedback_maxResults,
+    getFeedback_nextToken,
+    getFeedback_anomalyDetectorArn,
+    getFeedback_anomalyGroupTimeSeriesFeedback,
+    getFeedbackResponse_anomalyGroupTimeSeriesFeedback,
+    getFeedbackResponse_nextToken,
+    getFeedbackResponse_httpStatus,
+
+    -- ** GetSampleData
+    getSampleData_s3SourceConfig,
+    getSampleDataResponse_headerValues,
+    getSampleDataResponse_sampleRows,
+    getSampleDataResponse_httpStatus,
+
+    -- ** ListAlerts
+    listAlerts_anomalyDetectorArn,
+    listAlerts_maxResults,
+    listAlerts_nextToken,
+    listAlertsResponse_alertSummaryList,
+    listAlertsResponse_nextToken,
+    listAlertsResponse_httpStatus,
+
+    -- ** ListAnomalyDetectors
+    listAnomalyDetectors_maxResults,
+    listAnomalyDetectors_nextToken,
+    listAnomalyDetectorsResponse_anomalyDetectorSummaryList,
+    listAnomalyDetectorsResponse_nextToken,
+    listAnomalyDetectorsResponse_httpStatus,
+
+    -- ** ListAnomalyGroupRelatedMetrics
+    listAnomalyGroupRelatedMetrics_maxResults,
+    listAnomalyGroupRelatedMetrics_nextToken,
+    listAnomalyGroupRelatedMetrics_relationshipTypeFilter,
+    listAnomalyGroupRelatedMetrics_anomalyDetectorArn,
+    listAnomalyGroupRelatedMetrics_anomalyGroupId,
+    listAnomalyGroupRelatedMetricsResponse_interMetricImpactList,
+    listAnomalyGroupRelatedMetricsResponse_nextToken,
+    listAnomalyGroupRelatedMetricsResponse_httpStatus,
+
+    -- ** ListAnomalyGroupSummaries
+    listAnomalyGroupSummaries_maxResults,
+    listAnomalyGroupSummaries_nextToken,
+    listAnomalyGroupSummaries_anomalyDetectorArn,
+    listAnomalyGroupSummaries_sensitivityThreshold,
+    listAnomalyGroupSummariesResponse_anomalyGroupStatistics,
+    listAnomalyGroupSummariesResponse_anomalyGroupSummaryList,
+    listAnomalyGroupSummariesResponse_nextToken,
+    listAnomalyGroupSummariesResponse_httpStatus,
+
+    -- ** ListAnomalyGroupTimeSeries
+    listAnomalyGroupTimeSeries_maxResults,
+    listAnomalyGroupTimeSeries_nextToken,
+    listAnomalyGroupTimeSeries_anomalyDetectorArn,
+    listAnomalyGroupTimeSeries_anomalyGroupId,
+    listAnomalyGroupTimeSeries_metricName,
+    listAnomalyGroupTimeSeriesResponse_anomalyGroupId,
+    listAnomalyGroupTimeSeriesResponse_metricName,
+    listAnomalyGroupTimeSeriesResponse_nextToken,
+    listAnomalyGroupTimeSeriesResponse_timeSeriesList,
+    listAnomalyGroupTimeSeriesResponse_timestampList,
+    listAnomalyGroupTimeSeriesResponse_httpStatus,
+
+    -- ** ListMetricSets
+    listMetricSets_anomalyDetectorArn,
+    listMetricSets_maxResults,
+    listMetricSets_nextToken,
+    listMetricSetsResponse_metricSetSummaryList,
+    listMetricSetsResponse_nextToken,
+    listMetricSetsResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** PutFeedback
+    putFeedback_anomalyDetectorArn,
+    putFeedback_anomalyGroupTimeSeriesFeedback,
+    putFeedbackResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateAlert
+    updateAlert_action,
+    updateAlert_alertDescription,
+    updateAlert_alertFilters,
+    updateAlert_alertSensitivityThreshold,
+    updateAlert_alertArn,
+    updateAlertResponse_alertArn,
+    updateAlertResponse_httpStatus,
+
+    -- ** UpdateAnomalyDetector
+    updateAnomalyDetector_anomalyDetectorConfig,
+    updateAnomalyDetector_anomalyDetectorDescription,
+    updateAnomalyDetector_kmsKeyArn,
+    updateAnomalyDetector_anomalyDetectorArn,
+    updateAnomalyDetectorResponse_anomalyDetectorArn,
+    updateAnomalyDetectorResponse_httpStatus,
+
+    -- ** UpdateMetricSet
+    updateMetricSet_dimensionFilterList,
+    updateMetricSet_dimensionList,
+    updateMetricSet_metricList,
+    updateMetricSet_metricSetDescription,
+    updateMetricSet_metricSetFrequency,
+    updateMetricSet_metricSource,
+    updateMetricSet_offset,
+    updateMetricSet_timestampColumn,
+    updateMetricSet_metricSetArn,
+    updateMetricSetResponse_metricSetArn,
+    updateMetricSetResponse_httpStatus,
+
+    -- * Types
+
+    -- ** Action
+    action_lambdaConfiguration,
+    action_sNSConfiguration,
+
+    -- ** Alert
+    alert_action,
+    alert_alertArn,
+    alert_alertDescription,
+    alert_alertFilters,
+    alert_alertName,
+    alert_alertSensitivityThreshold,
+    alert_alertStatus,
+    alert_alertType,
+    alert_anomalyDetectorArn,
+    alert_creationTime,
+    alert_lastModificationTime,
+
+    -- ** AlertFilters
+    alertFilters_dimensionFilterList,
+    alertFilters_metricList,
+
+    -- ** AlertSummary
+    alertSummary_alertArn,
+    alertSummary_alertName,
+    alertSummary_alertSensitivityThreshold,
+    alertSummary_alertStatus,
+    alertSummary_alertType,
+    alertSummary_anomalyDetectorArn,
+    alertSummary_creationTime,
+    alertSummary_lastModificationTime,
+    alertSummary_tags,
+
+    -- ** AnomalyDetectorConfig
+    anomalyDetectorConfig_anomalyDetectorFrequency,
+
+    -- ** AnomalyDetectorConfigSummary
+    anomalyDetectorConfigSummary_anomalyDetectorFrequency,
+
+    -- ** AnomalyDetectorDataQualityMetric
+    anomalyDetectorDataQualityMetric_metricSetDataQualityMetricList,
+    anomalyDetectorDataQualityMetric_startTimestamp,
+
+    -- ** AnomalyDetectorSummary
+    anomalyDetectorSummary_anomalyDetectorArn,
+    anomalyDetectorSummary_anomalyDetectorDescription,
+    anomalyDetectorSummary_anomalyDetectorName,
+    anomalyDetectorSummary_creationTime,
+    anomalyDetectorSummary_lastModificationTime,
+    anomalyDetectorSummary_status,
+    anomalyDetectorSummary_tags,
+
+    -- ** AnomalyGroup
+    anomalyGroup_anomalyGroupId,
+    anomalyGroup_anomalyGroupScore,
+    anomalyGroup_endTime,
+    anomalyGroup_metricLevelImpactList,
+    anomalyGroup_primaryMetricName,
+    anomalyGroup_startTime,
+
+    -- ** AnomalyGroupStatistics
+    anomalyGroupStatistics_evaluationStartDate,
+    anomalyGroupStatistics_itemizedMetricStatsList,
+    anomalyGroupStatistics_totalCount,
+
+    -- ** AnomalyGroupSummary
+    anomalyGroupSummary_anomalyGroupId,
+    anomalyGroupSummary_anomalyGroupScore,
+    anomalyGroupSummary_endTime,
+    anomalyGroupSummary_primaryMetricName,
+    anomalyGroupSummary_startTime,
+
+    -- ** AnomalyGroupTimeSeries
+    anomalyGroupTimeSeries_timeSeriesId,
+    anomalyGroupTimeSeries_anomalyGroupId,
+
+    -- ** AnomalyGroupTimeSeriesFeedback
+    anomalyGroupTimeSeriesFeedback_anomalyGroupId,
+    anomalyGroupTimeSeriesFeedback_timeSeriesId,
+    anomalyGroupTimeSeriesFeedback_isAnomaly,
+
+    -- ** AppFlowConfig
+    appFlowConfig_flowName,
+    appFlowConfig_roleArn,
+
+    -- ** AthenaSourceConfig
+    athenaSourceConfig_backTestConfiguration,
+    athenaSourceConfig_dataCatalog,
+    athenaSourceConfig_databaseName,
+    athenaSourceConfig_roleArn,
+    athenaSourceConfig_s3ResultsPath,
+    athenaSourceConfig_tableName,
+    athenaSourceConfig_workGroupName,
+
+    -- ** AttributeValue
+    attributeValue_b,
+    attributeValue_bs,
+    attributeValue_n,
+    attributeValue_ns,
+    attributeValue_s,
+    attributeValue_ss,
+
+    -- ** AutoDetectionMetricSource
+    autoDetectionMetricSource_s3SourceConfig,
+
+    -- ** AutoDetectionS3SourceConfig
+    autoDetectionS3SourceConfig_historicalDataPathList,
+    autoDetectionS3SourceConfig_templatedPathList,
+
+    -- ** BackTestConfiguration
+    backTestConfiguration_runBackTestMode,
+
+    -- ** CloudWatchConfig
+    cloudWatchConfig_backTestConfiguration,
+    cloudWatchConfig_roleArn,
+
+    -- ** ContributionMatrix
+    contributionMatrix_dimensionContributionList,
+
+    -- ** CsvFormatDescriptor
+    csvFormatDescriptor_charset,
+    csvFormatDescriptor_containsHeader,
+    csvFormatDescriptor_delimiter,
+    csvFormatDescriptor_fileCompression,
+    csvFormatDescriptor_headerList,
+    csvFormatDescriptor_quoteSymbol,
+
+    -- ** DataQualityMetric
+    dataQualityMetric_metricDescription,
+    dataQualityMetric_metricType,
+    dataQualityMetric_metricValue,
+    dataQualityMetric_relatedColumnName,
+
+    -- ** DetectedCsvFormatDescriptor
+    detectedCsvFormatDescriptor_charset,
+    detectedCsvFormatDescriptor_containsHeader,
+    detectedCsvFormatDescriptor_delimiter,
+    detectedCsvFormatDescriptor_fileCompression,
+    detectedCsvFormatDescriptor_headerList,
+    detectedCsvFormatDescriptor_quoteSymbol,
+
+    -- ** DetectedField
+    detectedField_confidence,
+    detectedField_message,
+    detectedField_value,
+
+    -- ** DetectedFileFormatDescriptor
+    detectedFileFormatDescriptor_csvFormatDescriptor,
+    detectedFileFormatDescriptor_jsonFormatDescriptor,
+
+    -- ** DetectedJsonFormatDescriptor
+    detectedJsonFormatDescriptor_charset,
+    detectedJsonFormatDescriptor_fileCompression,
+
+    -- ** DetectedMetricSetConfig
+    detectedMetricSetConfig_metricSetFrequency,
+    detectedMetricSetConfig_metricSource,
+    detectedMetricSetConfig_offset,
+
+    -- ** DetectedMetricSource
+    detectedMetricSource_s3SourceConfig,
+
+    -- ** DetectedS3SourceConfig
+    detectedS3SourceConfig_fileFormatDescriptor,
+
+    -- ** DimensionContribution
+    dimensionContribution_dimensionName,
+    dimensionContribution_dimensionValueContributionList,
+
+    -- ** DimensionFilter
+    dimensionFilter_dimensionName,
+    dimensionFilter_dimensionValueList,
+
+    -- ** DimensionNameValue
+    dimensionNameValue_dimensionName,
+    dimensionNameValue_dimensionValue,
+
+    -- ** DimensionValueContribution
+    dimensionValueContribution_contributionScore,
+    dimensionValueContribution_dimensionValue,
+
+    -- ** ExecutionStatus
+    executionStatus_failureReason,
+    executionStatus_status,
+    executionStatus_timestamp,
+
+    -- ** FileFormatDescriptor
+    fileFormatDescriptor_csvFormatDescriptor,
+    fileFormatDescriptor_jsonFormatDescriptor,
+
+    -- ** Filter
+    filter_dimensionValue,
+    filter_filterOperation,
+
+    -- ** InterMetricImpactDetails
+    interMetricImpactDetails_anomalyGroupId,
+    interMetricImpactDetails_contributionPercentage,
+    interMetricImpactDetails_metricName,
+    interMetricImpactDetails_relationshipType,
+
+    -- ** ItemizedMetricStats
+    itemizedMetricStats_metricName,
+    itemizedMetricStats_occurrenceCount,
+
+    -- ** JsonFormatDescriptor
+    jsonFormatDescriptor_charset,
+    jsonFormatDescriptor_fileCompression,
+
+    -- ** LambdaConfiguration
+    lambdaConfiguration_roleArn,
+    lambdaConfiguration_lambdaArn,
+
+    -- ** Metric
+    metric_namespace,
+    metric_metricName,
+    metric_aggregationFunction,
+
+    -- ** MetricLevelImpact
+    metricLevelImpact_contributionMatrix,
+    metricLevelImpact_metricName,
+    metricLevelImpact_numTimeSeries,
+
+    -- ** MetricSetDataQualityMetric
+    metricSetDataQualityMetric_dataQualityMetricList,
+    metricSetDataQualityMetric_metricSetArn,
+
+    -- ** MetricSetDimensionFilter
+    metricSetDimensionFilter_filterList,
+    metricSetDimensionFilter_name,
+
+    -- ** MetricSetSummary
+    metricSetSummary_anomalyDetectorArn,
+    metricSetSummary_creationTime,
+    metricSetSummary_lastModificationTime,
+    metricSetSummary_metricSetArn,
+    metricSetSummary_metricSetDescription,
+    metricSetSummary_metricSetName,
+    metricSetSummary_tags,
+
+    -- ** MetricSource
+    metricSource_appFlowConfig,
+    metricSource_athenaSourceConfig,
+    metricSource_cloudWatchConfig,
+    metricSource_rDSSourceConfig,
+    metricSource_redshiftSourceConfig,
+    metricSource_s3SourceConfig,
+
+    -- ** RDSSourceConfig
+    rDSSourceConfig_dbInstanceIdentifier,
+    rDSSourceConfig_databaseHost,
+    rDSSourceConfig_databaseName,
+    rDSSourceConfig_databasePort,
+    rDSSourceConfig_roleArn,
+    rDSSourceConfig_secretManagerArn,
+    rDSSourceConfig_tableName,
+    rDSSourceConfig_vpcConfiguration,
+
+    -- ** RedshiftSourceConfig
+    redshiftSourceConfig_clusterIdentifier,
+    redshiftSourceConfig_databaseHost,
+    redshiftSourceConfig_databaseName,
+    redshiftSourceConfig_databasePort,
+    redshiftSourceConfig_roleArn,
+    redshiftSourceConfig_secretManagerArn,
+    redshiftSourceConfig_tableName,
+    redshiftSourceConfig_vpcConfiguration,
+
+    -- ** S3SourceConfig
+    s3SourceConfig_fileFormatDescriptor,
+    s3SourceConfig_historicalDataPathList,
+    s3SourceConfig_roleArn,
+    s3SourceConfig_templatedPathList,
+
+    -- ** SNSConfiguration
+    sNSConfiguration_snsFormat,
+    sNSConfiguration_roleArn,
+    sNSConfiguration_snsTopicArn,
+
+    -- ** SampleDataS3SourceConfig
+    sampleDataS3SourceConfig_historicalDataPathList,
+    sampleDataS3SourceConfig_templatedPathList,
+    sampleDataS3SourceConfig_roleArn,
+    sampleDataS3SourceConfig_fileFormatDescriptor,
+
+    -- ** TimeSeries
+    timeSeries_timeSeriesId,
+    timeSeries_dimensionList,
+    timeSeries_metricValueList,
+
+    -- ** TimeSeriesFeedback
+    timeSeriesFeedback_isAnomaly,
+    timeSeriesFeedback_timeSeriesId,
+
+    -- ** TimestampColumn
+    timestampColumn_columnFormat,
+    timestampColumn_columnName,
+
+    -- ** VpcConfiguration
+    vpcConfiguration_subnetIdList,
+    vpcConfiguration_securityGroupIdList,
+  )
+where
+
+import Amazonka.LookoutMetrics.ActivateAnomalyDetector
+import Amazonka.LookoutMetrics.BackTestAnomalyDetector
+import Amazonka.LookoutMetrics.CreateAlert
+import Amazonka.LookoutMetrics.CreateAnomalyDetector
+import Amazonka.LookoutMetrics.CreateMetricSet
+import Amazonka.LookoutMetrics.DeactivateAnomalyDetector
+import Amazonka.LookoutMetrics.DeleteAlert
+import Amazonka.LookoutMetrics.DeleteAnomalyDetector
+import Amazonka.LookoutMetrics.DescribeAlert
+import Amazonka.LookoutMetrics.DescribeAnomalyDetectionExecutions
+import Amazonka.LookoutMetrics.DescribeAnomalyDetector
+import Amazonka.LookoutMetrics.DescribeMetricSet
+import Amazonka.LookoutMetrics.DetectMetricSetConfig
+import Amazonka.LookoutMetrics.GetAnomalyGroup
+import Amazonka.LookoutMetrics.GetDataQualityMetrics
+import Amazonka.LookoutMetrics.GetFeedback
+import Amazonka.LookoutMetrics.GetSampleData
+import Amazonka.LookoutMetrics.ListAlerts
+import Amazonka.LookoutMetrics.ListAnomalyDetectors
+import Amazonka.LookoutMetrics.ListAnomalyGroupRelatedMetrics
+import Amazonka.LookoutMetrics.ListAnomalyGroupSummaries
+import Amazonka.LookoutMetrics.ListAnomalyGroupTimeSeries
+import Amazonka.LookoutMetrics.ListMetricSets
+import Amazonka.LookoutMetrics.ListTagsForResource
+import Amazonka.LookoutMetrics.PutFeedback
+import Amazonka.LookoutMetrics.TagResource
+import Amazonka.LookoutMetrics.Types.Action
+import Amazonka.LookoutMetrics.Types.Alert
+import Amazonka.LookoutMetrics.Types.AlertFilters
+import Amazonka.LookoutMetrics.Types.AlertSummary
+import Amazonka.LookoutMetrics.Types.AnomalyDetectorConfig
+import Amazonka.LookoutMetrics.Types.AnomalyDetectorConfigSummary
+import Amazonka.LookoutMetrics.Types.AnomalyDetectorDataQualityMetric
+import Amazonka.LookoutMetrics.Types.AnomalyDetectorSummary
+import Amazonka.LookoutMetrics.Types.AnomalyGroup
+import Amazonka.LookoutMetrics.Types.AnomalyGroupStatistics
+import Amazonka.LookoutMetrics.Types.AnomalyGroupSummary
+import Amazonka.LookoutMetrics.Types.AnomalyGroupTimeSeries
+import Amazonka.LookoutMetrics.Types.AnomalyGroupTimeSeriesFeedback
+import Amazonka.LookoutMetrics.Types.AppFlowConfig
+import Amazonka.LookoutMetrics.Types.AthenaSourceConfig
+import Amazonka.LookoutMetrics.Types.AttributeValue
+import Amazonka.LookoutMetrics.Types.AutoDetectionMetricSource
+import Amazonka.LookoutMetrics.Types.AutoDetectionS3SourceConfig
+import Amazonka.LookoutMetrics.Types.BackTestConfiguration
+import Amazonka.LookoutMetrics.Types.CloudWatchConfig
+import Amazonka.LookoutMetrics.Types.ContributionMatrix
+import Amazonka.LookoutMetrics.Types.CsvFormatDescriptor
+import Amazonka.LookoutMetrics.Types.DataQualityMetric
+import Amazonka.LookoutMetrics.Types.DetectedCsvFormatDescriptor
+import Amazonka.LookoutMetrics.Types.DetectedField
+import Amazonka.LookoutMetrics.Types.DetectedFileFormatDescriptor
+import Amazonka.LookoutMetrics.Types.DetectedJsonFormatDescriptor
+import Amazonka.LookoutMetrics.Types.DetectedMetricSetConfig
+import Amazonka.LookoutMetrics.Types.DetectedMetricSource
+import Amazonka.LookoutMetrics.Types.DetectedS3SourceConfig
+import Amazonka.LookoutMetrics.Types.DimensionContribution
+import Amazonka.LookoutMetrics.Types.DimensionFilter
+import Amazonka.LookoutMetrics.Types.DimensionNameValue
+import Amazonka.LookoutMetrics.Types.DimensionValueContribution
+import Amazonka.LookoutMetrics.Types.ExecutionStatus
+import Amazonka.LookoutMetrics.Types.FileFormatDescriptor
+import Amazonka.LookoutMetrics.Types.Filter
+import Amazonka.LookoutMetrics.Types.InterMetricImpactDetails
+import Amazonka.LookoutMetrics.Types.ItemizedMetricStats
+import Amazonka.LookoutMetrics.Types.JsonFormatDescriptor
+import Amazonka.LookoutMetrics.Types.LambdaConfiguration
+import Amazonka.LookoutMetrics.Types.Metric
+import Amazonka.LookoutMetrics.Types.MetricLevelImpact
+import Amazonka.LookoutMetrics.Types.MetricSetDataQualityMetric
+import Amazonka.LookoutMetrics.Types.MetricSetDimensionFilter
+import Amazonka.LookoutMetrics.Types.MetricSetSummary
+import Amazonka.LookoutMetrics.Types.MetricSource
+import Amazonka.LookoutMetrics.Types.RDSSourceConfig
+import Amazonka.LookoutMetrics.Types.RedshiftSourceConfig
+import Amazonka.LookoutMetrics.Types.S3SourceConfig
+import Amazonka.LookoutMetrics.Types.SNSConfiguration
+import Amazonka.LookoutMetrics.Types.SampleDataS3SourceConfig
+import Amazonka.LookoutMetrics.Types.TimeSeries
+import Amazonka.LookoutMetrics.Types.TimeSeriesFeedback
+import Amazonka.LookoutMetrics.Types.TimestampColumn
+import Amazonka.LookoutMetrics.Types.VpcConfiguration
+import Amazonka.LookoutMetrics.UntagResource
+import Amazonka.LookoutMetrics.UpdateAlert
+import Amazonka.LookoutMetrics.UpdateAnomalyDetector
+import Amazonka.LookoutMetrics.UpdateMetricSet
diff --git a/gen/Amazonka/LookoutMetrics/ListAlerts.hs b/gen/Amazonka/LookoutMetrics/ListAlerts.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/ListAlerts.hs
@@ -0,0 +1,221 @@
+{-# 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.LookoutMetrics.ListAlerts
+-- 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 alerts attached to a detector.
+--
+-- Amazon Lookout for Metrics API actions are eventually consistent. If you
+-- do a read operation on a resource immediately after creating or
+-- modifying it, use retries to allow time for the write operation to
+-- complete.
+module Amazonka.LookoutMetrics.ListAlerts
+  ( -- * Creating a Request
+    ListAlerts (..),
+    newListAlerts,
+
+    -- * Request Lenses
+    listAlerts_anomalyDetectorArn,
+    listAlerts_maxResults,
+    listAlerts_nextToken,
+
+    -- * Destructuring the Response
+    ListAlertsResponse (..),
+    newListAlertsResponse,
+
+    -- * Response Lenses
+    listAlertsResponse_alertSummaryList,
+    listAlertsResponse_nextToken,
+    listAlertsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListAlerts' smart constructor.
+data ListAlerts = ListAlerts'
+  { -- | The ARN of the alert\'s detector.
+    anomalyDetectorArn :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of results that will be displayed by the request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the result of the previous request is truncated, the response
+    -- includes a @NextToken@. To retrieve the next set of results, use the
+    -- token in the next request. Tokens expire after 24 hours.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAlerts' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyDetectorArn', 'listAlerts_anomalyDetectorArn' - The ARN of the alert\'s detector.
+--
+-- 'maxResults', 'listAlerts_maxResults' - The maximum number of results that will be displayed by the request.
+--
+-- 'nextToken', 'listAlerts_nextToken' - If the result of the previous request is truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next request. Tokens expire after 24 hours.
+newListAlerts ::
+  ListAlerts
+newListAlerts =
+  ListAlerts'
+    { anomalyDetectorArn = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The ARN of the alert\'s detector.
+listAlerts_anomalyDetectorArn :: Lens.Lens' ListAlerts (Prelude.Maybe Prelude.Text)
+listAlerts_anomalyDetectorArn = Lens.lens (\ListAlerts' {anomalyDetectorArn} -> anomalyDetectorArn) (\s@ListAlerts' {} a -> s {anomalyDetectorArn = a} :: ListAlerts)
+
+-- | The maximum number of results that will be displayed by the request.
+listAlerts_maxResults :: Lens.Lens' ListAlerts (Prelude.Maybe Prelude.Natural)
+listAlerts_maxResults = Lens.lens (\ListAlerts' {maxResults} -> maxResults) (\s@ListAlerts' {} a -> s {maxResults = a} :: ListAlerts)
+
+-- | If the result of the previous request is truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next request. Tokens expire after 24 hours.
+listAlerts_nextToken :: Lens.Lens' ListAlerts (Prelude.Maybe Prelude.Text)
+listAlerts_nextToken = Lens.lens (\ListAlerts' {nextToken} -> nextToken) (\s@ListAlerts' {} a -> s {nextToken = a} :: ListAlerts)
+
+instance Core.AWSRequest ListAlerts where
+  type AWSResponse ListAlerts = ListAlertsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAlertsResponse'
+            Prelude.<$> ( x
+                            Data..?> "AlertSummaryList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListAlerts where
+  hashWithSalt _salt ListAlerts' {..} =
+    _salt
+      `Prelude.hashWithSalt` anomalyDetectorArn
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListAlerts where
+  rnf ListAlerts' {..} =
+    Prelude.rnf anomalyDetectorArn
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListAlerts where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListAlerts where
+  toJSON ListAlerts' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AnomalyDetectorArn" Data..=)
+              Prelude.<$> anomalyDetectorArn,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListAlerts where
+  toPath = Prelude.const "/ListAlerts"
+
+instance Data.ToQuery ListAlerts where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListAlertsResponse' smart constructor.
+data ListAlertsResponse = ListAlertsResponse'
+  { -- | Contains information about an alert.
+    alertSummaryList :: Prelude.Maybe [AlertSummary],
+    -- | If the response is truncated, the service returns this token. To
+    -- retrieve the next set of results, use this token in the next request.
+    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 'ListAlertsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'alertSummaryList', 'listAlertsResponse_alertSummaryList' - Contains information about an alert.
+--
+-- 'nextToken', 'listAlertsResponse_nextToken' - If the response is truncated, the service returns this token. To
+-- retrieve the next set of results, use this token in the next request.
+--
+-- 'httpStatus', 'listAlertsResponse_httpStatus' - The response's http status code.
+newListAlertsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAlertsResponse
+newListAlertsResponse pHttpStatus_ =
+  ListAlertsResponse'
+    { alertSummaryList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Contains information about an alert.
+listAlertsResponse_alertSummaryList :: Lens.Lens' ListAlertsResponse (Prelude.Maybe [AlertSummary])
+listAlertsResponse_alertSummaryList = Lens.lens (\ListAlertsResponse' {alertSummaryList} -> alertSummaryList) (\s@ListAlertsResponse' {} a -> s {alertSummaryList = a} :: ListAlertsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If the response is truncated, the service returns this token. To
+-- retrieve the next set of results, use this token in the next request.
+listAlertsResponse_nextToken :: Lens.Lens' ListAlertsResponse (Prelude.Maybe Prelude.Text)
+listAlertsResponse_nextToken = Lens.lens (\ListAlertsResponse' {nextToken} -> nextToken) (\s@ListAlertsResponse' {} a -> s {nextToken = a} :: ListAlertsResponse)
+
+-- | The response's http status code.
+listAlertsResponse_httpStatus :: Lens.Lens' ListAlertsResponse Prelude.Int
+listAlertsResponse_httpStatus = Lens.lens (\ListAlertsResponse' {httpStatus} -> httpStatus) (\s@ListAlertsResponse' {} a -> s {httpStatus = a} :: ListAlertsResponse)
+
+instance Prelude.NFData ListAlertsResponse where
+  rnf ListAlertsResponse' {..} =
+    Prelude.rnf alertSummaryList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/ListAnomalyDetectors.hs b/gen/Amazonka/LookoutMetrics/ListAnomalyDetectors.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/ListAnomalyDetectors.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.LookoutMetrics.ListAnomalyDetectors
+-- 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 detectors in the current AWS Region.
+--
+-- Amazon Lookout for Metrics API actions are eventually consistent. If you
+-- do a read operation on a resource immediately after creating or
+-- modifying it, use retries to allow time for the write operation to
+-- complete.
+module Amazonka.LookoutMetrics.ListAnomalyDetectors
+  ( -- * Creating a Request
+    ListAnomalyDetectors (..),
+    newListAnomalyDetectors,
+
+    -- * Request Lenses
+    listAnomalyDetectors_maxResults,
+    listAnomalyDetectors_nextToken,
+
+    -- * Destructuring the Response
+    ListAnomalyDetectorsResponse (..),
+    newListAnomalyDetectorsResponse,
+
+    -- * Response Lenses
+    listAnomalyDetectorsResponse_anomalyDetectorSummaryList,
+    listAnomalyDetectorsResponse_nextToken,
+    listAnomalyDetectorsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListAnomalyDetectors' smart constructor.
+data ListAnomalyDetectors = ListAnomalyDetectors'
+  { -- | The maximum number of results to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the result of the previous request was truncated, the response
+    -- includes a @NextToken@. To retrieve the next set of results, use the
+    -- token in the next request. Tokens expire after 24 hours.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAnomalyDetectors' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listAnomalyDetectors_maxResults' - The maximum number of results to return.
+--
+-- 'nextToken', 'listAnomalyDetectors_nextToken' - If the result of the previous request was truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next request. Tokens expire after 24 hours.
+newListAnomalyDetectors ::
+  ListAnomalyDetectors
+newListAnomalyDetectors =
+  ListAnomalyDetectors'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return.
+listAnomalyDetectors_maxResults :: Lens.Lens' ListAnomalyDetectors (Prelude.Maybe Prelude.Natural)
+listAnomalyDetectors_maxResults = Lens.lens (\ListAnomalyDetectors' {maxResults} -> maxResults) (\s@ListAnomalyDetectors' {} a -> s {maxResults = a} :: ListAnomalyDetectors)
+
+-- | If the result of the previous request was truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next request. Tokens expire after 24 hours.
+listAnomalyDetectors_nextToken :: Lens.Lens' ListAnomalyDetectors (Prelude.Maybe Prelude.Text)
+listAnomalyDetectors_nextToken = Lens.lens (\ListAnomalyDetectors' {nextToken} -> nextToken) (\s@ListAnomalyDetectors' {} a -> s {nextToken = a} :: ListAnomalyDetectors)
+
+instance Core.AWSRequest ListAnomalyDetectors where
+  type
+    AWSResponse ListAnomalyDetectors =
+      ListAnomalyDetectorsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAnomalyDetectorsResponse'
+            Prelude.<$> ( x
+                            Data..?> "AnomalyDetectorSummaryList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListAnomalyDetectors where
+  hashWithSalt _salt ListAnomalyDetectors' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListAnomalyDetectors where
+  rnf ListAnomalyDetectors' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListAnomalyDetectors where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListAnomalyDetectors where
+  toJSON ListAnomalyDetectors' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListAnomalyDetectors where
+  toPath = Prelude.const "/ListAnomalyDetectors"
+
+instance Data.ToQuery ListAnomalyDetectors where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListAnomalyDetectorsResponse' smart constructor.
+data ListAnomalyDetectorsResponse = ListAnomalyDetectorsResponse'
+  { -- | A list of anomaly detectors in the account in the current region.
+    anomalyDetectorSummaryList :: Prelude.Maybe [AnomalyDetectorSummary],
+    -- | If the response is truncated, the service returns this token. To
+    -- retrieve the next set of results, use the token in the next request.
+    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 'ListAnomalyDetectorsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyDetectorSummaryList', 'listAnomalyDetectorsResponse_anomalyDetectorSummaryList' - A list of anomaly detectors in the account in the current region.
+--
+-- 'nextToken', 'listAnomalyDetectorsResponse_nextToken' - If the response is truncated, the service returns this token. To
+-- retrieve the next set of results, use the token in the next request.
+--
+-- 'httpStatus', 'listAnomalyDetectorsResponse_httpStatus' - The response's http status code.
+newListAnomalyDetectorsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAnomalyDetectorsResponse
+newListAnomalyDetectorsResponse pHttpStatus_ =
+  ListAnomalyDetectorsResponse'
+    { anomalyDetectorSummaryList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of anomaly detectors in the account in the current region.
+listAnomalyDetectorsResponse_anomalyDetectorSummaryList :: Lens.Lens' ListAnomalyDetectorsResponse (Prelude.Maybe [AnomalyDetectorSummary])
+listAnomalyDetectorsResponse_anomalyDetectorSummaryList = Lens.lens (\ListAnomalyDetectorsResponse' {anomalyDetectorSummaryList} -> anomalyDetectorSummaryList) (\s@ListAnomalyDetectorsResponse' {} a -> s {anomalyDetectorSummaryList = a} :: ListAnomalyDetectorsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If the response is truncated, the service returns this token. To
+-- retrieve the next set of results, use the token in the next request.
+listAnomalyDetectorsResponse_nextToken :: Lens.Lens' ListAnomalyDetectorsResponse (Prelude.Maybe Prelude.Text)
+listAnomalyDetectorsResponse_nextToken = Lens.lens (\ListAnomalyDetectorsResponse' {nextToken} -> nextToken) (\s@ListAnomalyDetectorsResponse' {} a -> s {nextToken = a} :: ListAnomalyDetectorsResponse)
+
+-- | The response's http status code.
+listAnomalyDetectorsResponse_httpStatus :: Lens.Lens' ListAnomalyDetectorsResponse Prelude.Int
+listAnomalyDetectorsResponse_httpStatus = Lens.lens (\ListAnomalyDetectorsResponse' {httpStatus} -> httpStatus) (\s@ListAnomalyDetectorsResponse' {} a -> s {httpStatus = a} :: ListAnomalyDetectorsResponse)
+
+instance Prelude.NFData ListAnomalyDetectorsResponse where
+  rnf ListAnomalyDetectorsResponse' {..} =
+    Prelude.rnf anomalyDetectorSummaryList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/ListAnomalyGroupRelatedMetrics.hs b/gen/Amazonka/LookoutMetrics/ListAnomalyGroupRelatedMetrics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/ListAnomalyGroupRelatedMetrics.hs
@@ -0,0 +1,276 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.ListAnomalyGroupRelatedMetrics
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of measures that are potential causes or effects of an
+-- anomaly group.
+module Amazonka.LookoutMetrics.ListAnomalyGroupRelatedMetrics
+  ( -- * Creating a Request
+    ListAnomalyGroupRelatedMetrics (..),
+    newListAnomalyGroupRelatedMetrics,
+
+    -- * Request Lenses
+    listAnomalyGroupRelatedMetrics_maxResults,
+    listAnomalyGroupRelatedMetrics_nextToken,
+    listAnomalyGroupRelatedMetrics_relationshipTypeFilter,
+    listAnomalyGroupRelatedMetrics_anomalyDetectorArn,
+    listAnomalyGroupRelatedMetrics_anomalyGroupId,
+
+    -- * Destructuring the Response
+    ListAnomalyGroupRelatedMetricsResponse (..),
+    newListAnomalyGroupRelatedMetricsResponse,
+
+    -- * Response Lenses
+    listAnomalyGroupRelatedMetricsResponse_interMetricImpactList,
+    listAnomalyGroupRelatedMetricsResponse_nextToken,
+    listAnomalyGroupRelatedMetricsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListAnomalyGroupRelatedMetrics' smart constructor.
+data ListAnomalyGroupRelatedMetrics = ListAnomalyGroupRelatedMetrics'
+  { -- | The maximum number of results to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Specify the pagination token that\'s returned by a previous request to
+    -- retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Filter for potential causes (@CAUSE_OF_INPUT_ANOMALY_GROUP@) or
+    -- downstream effects (@EFFECT_OF_INPUT_ANOMALY_GROUP@) of the anomaly
+    -- group.
+    relationshipTypeFilter :: Prelude.Maybe RelationshipType,
+    -- | The Amazon Resource Name (ARN) of the anomaly detector.
+    anomalyDetectorArn :: Prelude.Text,
+    -- | The ID of the anomaly group.
+    anomalyGroupId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAnomalyGroupRelatedMetrics' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listAnomalyGroupRelatedMetrics_maxResults' - The maximum number of results to return.
+--
+-- 'nextToken', 'listAnomalyGroupRelatedMetrics_nextToken' - Specify the pagination token that\'s returned by a previous request to
+-- retrieve the next page of results.
+--
+-- 'relationshipTypeFilter', 'listAnomalyGroupRelatedMetrics_relationshipTypeFilter' - Filter for potential causes (@CAUSE_OF_INPUT_ANOMALY_GROUP@) or
+-- downstream effects (@EFFECT_OF_INPUT_ANOMALY_GROUP@) of the anomaly
+-- group.
+--
+-- 'anomalyDetectorArn', 'listAnomalyGroupRelatedMetrics_anomalyDetectorArn' - The Amazon Resource Name (ARN) of the anomaly detector.
+--
+-- 'anomalyGroupId', 'listAnomalyGroupRelatedMetrics_anomalyGroupId' - The ID of the anomaly group.
+newListAnomalyGroupRelatedMetrics ::
+  -- | 'anomalyDetectorArn'
+  Prelude.Text ->
+  -- | 'anomalyGroupId'
+  Prelude.Text ->
+  ListAnomalyGroupRelatedMetrics
+newListAnomalyGroupRelatedMetrics
+  pAnomalyDetectorArn_
+  pAnomalyGroupId_ =
+    ListAnomalyGroupRelatedMetrics'
+      { maxResults =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        relationshipTypeFilter = Prelude.Nothing,
+        anomalyDetectorArn = pAnomalyDetectorArn_,
+        anomalyGroupId = pAnomalyGroupId_
+      }
+
+-- | The maximum number of results to return.
+listAnomalyGroupRelatedMetrics_maxResults :: Lens.Lens' ListAnomalyGroupRelatedMetrics (Prelude.Maybe Prelude.Natural)
+listAnomalyGroupRelatedMetrics_maxResults = Lens.lens (\ListAnomalyGroupRelatedMetrics' {maxResults} -> maxResults) (\s@ListAnomalyGroupRelatedMetrics' {} a -> s {maxResults = a} :: ListAnomalyGroupRelatedMetrics)
+
+-- | Specify the pagination token that\'s returned by a previous request to
+-- retrieve the next page of results.
+listAnomalyGroupRelatedMetrics_nextToken :: Lens.Lens' ListAnomalyGroupRelatedMetrics (Prelude.Maybe Prelude.Text)
+listAnomalyGroupRelatedMetrics_nextToken = Lens.lens (\ListAnomalyGroupRelatedMetrics' {nextToken} -> nextToken) (\s@ListAnomalyGroupRelatedMetrics' {} a -> s {nextToken = a} :: ListAnomalyGroupRelatedMetrics)
+
+-- | Filter for potential causes (@CAUSE_OF_INPUT_ANOMALY_GROUP@) or
+-- downstream effects (@EFFECT_OF_INPUT_ANOMALY_GROUP@) of the anomaly
+-- group.
+listAnomalyGroupRelatedMetrics_relationshipTypeFilter :: Lens.Lens' ListAnomalyGroupRelatedMetrics (Prelude.Maybe RelationshipType)
+listAnomalyGroupRelatedMetrics_relationshipTypeFilter = Lens.lens (\ListAnomalyGroupRelatedMetrics' {relationshipTypeFilter} -> relationshipTypeFilter) (\s@ListAnomalyGroupRelatedMetrics' {} a -> s {relationshipTypeFilter = a} :: ListAnomalyGroupRelatedMetrics)
+
+-- | The Amazon Resource Name (ARN) of the anomaly detector.
+listAnomalyGroupRelatedMetrics_anomalyDetectorArn :: Lens.Lens' ListAnomalyGroupRelatedMetrics Prelude.Text
+listAnomalyGroupRelatedMetrics_anomalyDetectorArn = Lens.lens (\ListAnomalyGroupRelatedMetrics' {anomalyDetectorArn} -> anomalyDetectorArn) (\s@ListAnomalyGroupRelatedMetrics' {} a -> s {anomalyDetectorArn = a} :: ListAnomalyGroupRelatedMetrics)
+
+-- | The ID of the anomaly group.
+listAnomalyGroupRelatedMetrics_anomalyGroupId :: Lens.Lens' ListAnomalyGroupRelatedMetrics Prelude.Text
+listAnomalyGroupRelatedMetrics_anomalyGroupId = Lens.lens (\ListAnomalyGroupRelatedMetrics' {anomalyGroupId} -> anomalyGroupId) (\s@ListAnomalyGroupRelatedMetrics' {} a -> s {anomalyGroupId = a} :: ListAnomalyGroupRelatedMetrics)
+
+instance
+  Core.AWSRequest
+    ListAnomalyGroupRelatedMetrics
+  where
+  type
+    AWSResponse ListAnomalyGroupRelatedMetrics =
+      ListAnomalyGroupRelatedMetricsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAnomalyGroupRelatedMetricsResponse'
+            Prelude.<$> ( x
+                            Data..?> "InterMetricImpactList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListAnomalyGroupRelatedMetrics
+  where
+  hashWithSalt
+    _salt
+    ListAnomalyGroupRelatedMetrics' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` relationshipTypeFilter
+        `Prelude.hashWithSalt` anomalyDetectorArn
+        `Prelude.hashWithSalt` anomalyGroupId
+
+instance
+  Prelude.NFData
+    ListAnomalyGroupRelatedMetrics
+  where
+  rnf ListAnomalyGroupRelatedMetrics' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf relationshipTypeFilter
+      `Prelude.seq` Prelude.rnf anomalyDetectorArn
+      `Prelude.seq` Prelude.rnf anomalyGroupId
+
+instance
+  Data.ToHeaders
+    ListAnomalyGroupRelatedMetrics
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListAnomalyGroupRelatedMetrics where
+  toJSON ListAnomalyGroupRelatedMetrics' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("RelationshipTypeFilter" Data..=)
+              Prelude.<$> relationshipTypeFilter,
+            Prelude.Just
+              ("AnomalyDetectorArn" Data..= anomalyDetectorArn),
+            Prelude.Just
+              ("AnomalyGroupId" Data..= anomalyGroupId)
+          ]
+      )
+
+instance Data.ToPath ListAnomalyGroupRelatedMetrics where
+  toPath =
+    Prelude.const "/ListAnomalyGroupRelatedMetrics"
+
+instance Data.ToQuery ListAnomalyGroupRelatedMetrics where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListAnomalyGroupRelatedMetricsResponse' smart constructor.
+data ListAnomalyGroupRelatedMetricsResponse = ListAnomalyGroupRelatedMetricsResponse'
+  { -- | Aggregated details about the measures contributing to the anomaly group,
+    -- and the measures potentially impacted by the anomaly group.
+    interMetricImpactList :: Prelude.Maybe [InterMetricImpactDetails],
+    -- | The pagination token that\'s included if more results are available.
+    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 'ListAnomalyGroupRelatedMetricsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'interMetricImpactList', 'listAnomalyGroupRelatedMetricsResponse_interMetricImpactList' - Aggregated details about the measures contributing to the anomaly group,
+-- and the measures potentially impacted by the anomaly group.
+--
+-- 'nextToken', 'listAnomalyGroupRelatedMetricsResponse_nextToken' - The pagination token that\'s included if more results are available.
+--
+-- 'httpStatus', 'listAnomalyGroupRelatedMetricsResponse_httpStatus' - The response's http status code.
+newListAnomalyGroupRelatedMetricsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAnomalyGroupRelatedMetricsResponse
+newListAnomalyGroupRelatedMetricsResponse
+  pHttpStatus_ =
+    ListAnomalyGroupRelatedMetricsResponse'
+      { interMetricImpactList =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Aggregated details about the measures contributing to the anomaly group,
+-- and the measures potentially impacted by the anomaly group.
+listAnomalyGroupRelatedMetricsResponse_interMetricImpactList :: Lens.Lens' ListAnomalyGroupRelatedMetricsResponse (Prelude.Maybe [InterMetricImpactDetails])
+listAnomalyGroupRelatedMetricsResponse_interMetricImpactList = Lens.lens (\ListAnomalyGroupRelatedMetricsResponse' {interMetricImpactList} -> interMetricImpactList) (\s@ListAnomalyGroupRelatedMetricsResponse' {} a -> s {interMetricImpactList = a} :: ListAnomalyGroupRelatedMetricsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token that\'s included if more results are available.
+listAnomalyGroupRelatedMetricsResponse_nextToken :: Lens.Lens' ListAnomalyGroupRelatedMetricsResponse (Prelude.Maybe Prelude.Text)
+listAnomalyGroupRelatedMetricsResponse_nextToken = Lens.lens (\ListAnomalyGroupRelatedMetricsResponse' {nextToken} -> nextToken) (\s@ListAnomalyGroupRelatedMetricsResponse' {} a -> s {nextToken = a} :: ListAnomalyGroupRelatedMetricsResponse)
+
+-- | The response's http status code.
+listAnomalyGroupRelatedMetricsResponse_httpStatus :: Lens.Lens' ListAnomalyGroupRelatedMetricsResponse Prelude.Int
+listAnomalyGroupRelatedMetricsResponse_httpStatus = Lens.lens (\ListAnomalyGroupRelatedMetricsResponse' {httpStatus} -> httpStatus) (\s@ListAnomalyGroupRelatedMetricsResponse' {} a -> s {httpStatus = a} :: ListAnomalyGroupRelatedMetricsResponse)
+
+instance
+  Prelude.NFData
+    ListAnomalyGroupRelatedMetricsResponse
+  where
+  rnf ListAnomalyGroupRelatedMetricsResponse' {..} =
+    Prelude.rnf interMetricImpactList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/ListAnomalyGroupSummaries.hs b/gen/Amazonka/LookoutMetrics/ListAnomalyGroupSummaries.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/ListAnomalyGroupSummaries.hs
@@ -0,0 +1,251 @@
+{-# 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.LookoutMetrics.ListAnomalyGroupSummaries
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of anomaly groups.
+module Amazonka.LookoutMetrics.ListAnomalyGroupSummaries
+  ( -- * Creating a Request
+    ListAnomalyGroupSummaries (..),
+    newListAnomalyGroupSummaries,
+
+    -- * Request Lenses
+    listAnomalyGroupSummaries_maxResults,
+    listAnomalyGroupSummaries_nextToken,
+    listAnomalyGroupSummaries_anomalyDetectorArn,
+    listAnomalyGroupSummaries_sensitivityThreshold,
+
+    -- * Destructuring the Response
+    ListAnomalyGroupSummariesResponse (..),
+    newListAnomalyGroupSummariesResponse,
+
+    -- * Response Lenses
+    listAnomalyGroupSummariesResponse_anomalyGroupStatistics,
+    listAnomalyGroupSummariesResponse_anomalyGroupSummaryList,
+    listAnomalyGroupSummariesResponse_nextToken,
+    listAnomalyGroupSummariesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListAnomalyGroupSummaries' smart constructor.
+data ListAnomalyGroupSummaries = ListAnomalyGroupSummaries'
+  { -- | The maximum number of results to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Specify the pagination token that\'s returned by a previous request to
+    -- retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the anomaly detector.
+    anomalyDetectorArn :: Prelude.Text,
+    -- | The minimum severity score for inclusion in the output.
+    sensitivityThreshold :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAnomalyGroupSummaries' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listAnomalyGroupSummaries_maxResults' - The maximum number of results to return.
+--
+-- 'nextToken', 'listAnomalyGroupSummaries_nextToken' - Specify the pagination token that\'s returned by a previous request to
+-- retrieve the next page of results.
+--
+-- 'anomalyDetectorArn', 'listAnomalyGroupSummaries_anomalyDetectorArn' - The Amazon Resource Name (ARN) of the anomaly detector.
+--
+-- 'sensitivityThreshold', 'listAnomalyGroupSummaries_sensitivityThreshold' - The minimum severity score for inclusion in the output.
+newListAnomalyGroupSummaries ::
+  -- | 'anomalyDetectorArn'
+  Prelude.Text ->
+  -- | 'sensitivityThreshold'
+  Prelude.Natural ->
+  ListAnomalyGroupSummaries
+newListAnomalyGroupSummaries
+  pAnomalyDetectorArn_
+  pSensitivityThreshold_ =
+    ListAnomalyGroupSummaries'
+      { maxResults =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        anomalyDetectorArn = pAnomalyDetectorArn_,
+        sensitivityThreshold = pSensitivityThreshold_
+      }
+
+-- | The maximum number of results to return.
+listAnomalyGroupSummaries_maxResults :: Lens.Lens' ListAnomalyGroupSummaries (Prelude.Maybe Prelude.Natural)
+listAnomalyGroupSummaries_maxResults = Lens.lens (\ListAnomalyGroupSummaries' {maxResults} -> maxResults) (\s@ListAnomalyGroupSummaries' {} a -> s {maxResults = a} :: ListAnomalyGroupSummaries)
+
+-- | Specify the pagination token that\'s returned by a previous request to
+-- retrieve the next page of results.
+listAnomalyGroupSummaries_nextToken :: Lens.Lens' ListAnomalyGroupSummaries (Prelude.Maybe Prelude.Text)
+listAnomalyGroupSummaries_nextToken = Lens.lens (\ListAnomalyGroupSummaries' {nextToken} -> nextToken) (\s@ListAnomalyGroupSummaries' {} a -> s {nextToken = a} :: ListAnomalyGroupSummaries)
+
+-- | The Amazon Resource Name (ARN) of the anomaly detector.
+listAnomalyGroupSummaries_anomalyDetectorArn :: Lens.Lens' ListAnomalyGroupSummaries Prelude.Text
+listAnomalyGroupSummaries_anomalyDetectorArn = Lens.lens (\ListAnomalyGroupSummaries' {anomalyDetectorArn} -> anomalyDetectorArn) (\s@ListAnomalyGroupSummaries' {} a -> s {anomalyDetectorArn = a} :: ListAnomalyGroupSummaries)
+
+-- | The minimum severity score for inclusion in the output.
+listAnomalyGroupSummaries_sensitivityThreshold :: Lens.Lens' ListAnomalyGroupSummaries Prelude.Natural
+listAnomalyGroupSummaries_sensitivityThreshold = Lens.lens (\ListAnomalyGroupSummaries' {sensitivityThreshold} -> sensitivityThreshold) (\s@ListAnomalyGroupSummaries' {} a -> s {sensitivityThreshold = a} :: ListAnomalyGroupSummaries)
+
+instance Core.AWSRequest ListAnomalyGroupSummaries where
+  type
+    AWSResponse ListAnomalyGroupSummaries =
+      ListAnomalyGroupSummariesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAnomalyGroupSummariesResponse'
+            Prelude.<$> (x Data..?> "AnomalyGroupStatistics")
+            Prelude.<*> ( x
+                            Data..?> "AnomalyGroupSummaryList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListAnomalyGroupSummaries where
+  hashWithSalt _salt ListAnomalyGroupSummaries' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` anomalyDetectorArn
+      `Prelude.hashWithSalt` sensitivityThreshold
+
+instance Prelude.NFData ListAnomalyGroupSummaries where
+  rnf ListAnomalyGroupSummaries' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf anomalyDetectorArn
+      `Prelude.seq` Prelude.rnf sensitivityThreshold
+
+instance Data.ToHeaders ListAnomalyGroupSummaries where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListAnomalyGroupSummaries where
+  toJSON ListAnomalyGroupSummaries' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just
+              ("AnomalyDetectorArn" Data..= anomalyDetectorArn),
+            Prelude.Just
+              ( "SensitivityThreshold"
+                  Data..= sensitivityThreshold
+              )
+          ]
+      )
+
+instance Data.ToPath ListAnomalyGroupSummaries where
+  toPath = Prelude.const "/ListAnomalyGroupSummaries"
+
+instance Data.ToQuery ListAnomalyGroupSummaries where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListAnomalyGroupSummariesResponse' smart constructor.
+data ListAnomalyGroupSummariesResponse = ListAnomalyGroupSummariesResponse'
+  { -- | Aggregated details about the anomaly groups.
+    anomalyGroupStatistics :: Prelude.Maybe AnomalyGroupStatistics,
+    -- | A list of anomaly group summaries.
+    anomalyGroupSummaryList :: Prelude.Maybe [AnomalyGroupSummary],
+    -- | The pagination token that\'s included if more results are available.
+    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 'ListAnomalyGroupSummariesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyGroupStatistics', 'listAnomalyGroupSummariesResponse_anomalyGroupStatistics' - Aggregated details about the anomaly groups.
+--
+-- 'anomalyGroupSummaryList', 'listAnomalyGroupSummariesResponse_anomalyGroupSummaryList' - A list of anomaly group summaries.
+--
+-- 'nextToken', 'listAnomalyGroupSummariesResponse_nextToken' - The pagination token that\'s included if more results are available.
+--
+-- 'httpStatus', 'listAnomalyGroupSummariesResponse_httpStatus' - The response's http status code.
+newListAnomalyGroupSummariesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAnomalyGroupSummariesResponse
+newListAnomalyGroupSummariesResponse pHttpStatus_ =
+  ListAnomalyGroupSummariesResponse'
+    { anomalyGroupStatistics =
+        Prelude.Nothing,
+      anomalyGroupSummaryList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Aggregated details about the anomaly groups.
+listAnomalyGroupSummariesResponse_anomalyGroupStatistics :: Lens.Lens' ListAnomalyGroupSummariesResponse (Prelude.Maybe AnomalyGroupStatistics)
+listAnomalyGroupSummariesResponse_anomalyGroupStatistics = Lens.lens (\ListAnomalyGroupSummariesResponse' {anomalyGroupStatistics} -> anomalyGroupStatistics) (\s@ListAnomalyGroupSummariesResponse' {} a -> s {anomalyGroupStatistics = a} :: ListAnomalyGroupSummariesResponse)
+
+-- | A list of anomaly group summaries.
+listAnomalyGroupSummariesResponse_anomalyGroupSummaryList :: Lens.Lens' ListAnomalyGroupSummariesResponse (Prelude.Maybe [AnomalyGroupSummary])
+listAnomalyGroupSummariesResponse_anomalyGroupSummaryList = Lens.lens (\ListAnomalyGroupSummariesResponse' {anomalyGroupSummaryList} -> anomalyGroupSummaryList) (\s@ListAnomalyGroupSummariesResponse' {} a -> s {anomalyGroupSummaryList = a} :: ListAnomalyGroupSummariesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token that\'s included if more results are available.
+listAnomalyGroupSummariesResponse_nextToken :: Lens.Lens' ListAnomalyGroupSummariesResponse (Prelude.Maybe Prelude.Text)
+listAnomalyGroupSummariesResponse_nextToken = Lens.lens (\ListAnomalyGroupSummariesResponse' {nextToken} -> nextToken) (\s@ListAnomalyGroupSummariesResponse' {} a -> s {nextToken = a} :: ListAnomalyGroupSummariesResponse)
+
+-- | The response's http status code.
+listAnomalyGroupSummariesResponse_httpStatus :: Lens.Lens' ListAnomalyGroupSummariesResponse Prelude.Int
+listAnomalyGroupSummariesResponse_httpStatus = Lens.lens (\ListAnomalyGroupSummariesResponse' {httpStatus} -> httpStatus) (\s@ListAnomalyGroupSummariesResponse' {} a -> s {httpStatus = a} :: ListAnomalyGroupSummariesResponse)
+
+instance
+  Prelude.NFData
+    ListAnomalyGroupSummariesResponse
+  where
+  rnf ListAnomalyGroupSummariesResponse' {..} =
+    Prelude.rnf anomalyGroupStatistics
+      `Prelude.seq` Prelude.rnf anomalyGroupSummaryList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/ListAnomalyGroupTimeSeries.hs b/gen/Amazonka/LookoutMetrics/ListAnomalyGroupTimeSeries.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/ListAnomalyGroupTimeSeries.hs
@@ -0,0 +1,285 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.ListAnomalyGroupTimeSeries
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a list of anomalous metrics for a measure in an anomaly group.
+module Amazonka.LookoutMetrics.ListAnomalyGroupTimeSeries
+  ( -- * Creating a Request
+    ListAnomalyGroupTimeSeries (..),
+    newListAnomalyGroupTimeSeries,
+
+    -- * Request Lenses
+    listAnomalyGroupTimeSeries_maxResults,
+    listAnomalyGroupTimeSeries_nextToken,
+    listAnomalyGroupTimeSeries_anomalyDetectorArn,
+    listAnomalyGroupTimeSeries_anomalyGroupId,
+    listAnomalyGroupTimeSeries_metricName,
+
+    -- * Destructuring the Response
+    ListAnomalyGroupTimeSeriesResponse (..),
+    newListAnomalyGroupTimeSeriesResponse,
+
+    -- * Response Lenses
+    listAnomalyGroupTimeSeriesResponse_anomalyGroupId,
+    listAnomalyGroupTimeSeriesResponse_metricName,
+    listAnomalyGroupTimeSeriesResponse_nextToken,
+    listAnomalyGroupTimeSeriesResponse_timeSeriesList,
+    listAnomalyGroupTimeSeriesResponse_timestampList,
+    listAnomalyGroupTimeSeriesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListAnomalyGroupTimeSeries' smart constructor.
+data ListAnomalyGroupTimeSeries = ListAnomalyGroupTimeSeries'
+  { -- | The maximum number of results to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Specify the pagination token that\'s returned by a previous request to
+    -- retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the anomaly detector.
+    anomalyDetectorArn :: Prelude.Text,
+    -- | The ID of the anomaly group.
+    anomalyGroupId :: Prelude.Text,
+    -- | The name of the measure field.
+    metricName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAnomalyGroupTimeSeries' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listAnomalyGroupTimeSeries_maxResults' - The maximum number of results to return.
+--
+-- 'nextToken', 'listAnomalyGroupTimeSeries_nextToken' - Specify the pagination token that\'s returned by a previous request to
+-- retrieve the next page of results.
+--
+-- 'anomalyDetectorArn', 'listAnomalyGroupTimeSeries_anomalyDetectorArn' - The Amazon Resource Name (ARN) of the anomaly detector.
+--
+-- 'anomalyGroupId', 'listAnomalyGroupTimeSeries_anomalyGroupId' - The ID of the anomaly group.
+--
+-- 'metricName', 'listAnomalyGroupTimeSeries_metricName' - The name of the measure field.
+newListAnomalyGroupTimeSeries ::
+  -- | 'anomalyDetectorArn'
+  Prelude.Text ->
+  -- | 'anomalyGroupId'
+  Prelude.Text ->
+  -- | 'metricName'
+  Prelude.Text ->
+  ListAnomalyGroupTimeSeries
+newListAnomalyGroupTimeSeries
+  pAnomalyDetectorArn_
+  pAnomalyGroupId_
+  pMetricName_ =
+    ListAnomalyGroupTimeSeries'
+      { maxResults =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        anomalyDetectorArn = pAnomalyDetectorArn_,
+        anomalyGroupId = pAnomalyGroupId_,
+        metricName = pMetricName_
+      }
+
+-- | The maximum number of results to return.
+listAnomalyGroupTimeSeries_maxResults :: Lens.Lens' ListAnomalyGroupTimeSeries (Prelude.Maybe Prelude.Natural)
+listAnomalyGroupTimeSeries_maxResults = Lens.lens (\ListAnomalyGroupTimeSeries' {maxResults} -> maxResults) (\s@ListAnomalyGroupTimeSeries' {} a -> s {maxResults = a} :: ListAnomalyGroupTimeSeries)
+
+-- | Specify the pagination token that\'s returned by a previous request to
+-- retrieve the next page of results.
+listAnomalyGroupTimeSeries_nextToken :: Lens.Lens' ListAnomalyGroupTimeSeries (Prelude.Maybe Prelude.Text)
+listAnomalyGroupTimeSeries_nextToken = Lens.lens (\ListAnomalyGroupTimeSeries' {nextToken} -> nextToken) (\s@ListAnomalyGroupTimeSeries' {} a -> s {nextToken = a} :: ListAnomalyGroupTimeSeries)
+
+-- | The Amazon Resource Name (ARN) of the anomaly detector.
+listAnomalyGroupTimeSeries_anomalyDetectorArn :: Lens.Lens' ListAnomalyGroupTimeSeries Prelude.Text
+listAnomalyGroupTimeSeries_anomalyDetectorArn = Lens.lens (\ListAnomalyGroupTimeSeries' {anomalyDetectorArn} -> anomalyDetectorArn) (\s@ListAnomalyGroupTimeSeries' {} a -> s {anomalyDetectorArn = a} :: ListAnomalyGroupTimeSeries)
+
+-- | The ID of the anomaly group.
+listAnomalyGroupTimeSeries_anomalyGroupId :: Lens.Lens' ListAnomalyGroupTimeSeries Prelude.Text
+listAnomalyGroupTimeSeries_anomalyGroupId = Lens.lens (\ListAnomalyGroupTimeSeries' {anomalyGroupId} -> anomalyGroupId) (\s@ListAnomalyGroupTimeSeries' {} a -> s {anomalyGroupId = a} :: ListAnomalyGroupTimeSeries)
+
+-- | The name of the measure field.
+listAnomalyGroupTimeSeries_metricName :: Lens.Lens' ListAnomalyGroupTimeSeries Prelude.Text
+listAnomalyGroupTimeSeries_metricName = Lens.lens (\ListAnomalyGroupTimeSeries' {metricName} -> metricName) (\s@ListAnomalyGroupTimeSeries' {} a -> s {metricName = a} :: ListAnomalyGroupTimeSeries)
+
+instance Core.AWSRequest ListAnomalyGroupTimeSeries where
+  type
+    AWSResponse ListAnomalyGroupTimeSeries =
+      ListAnomalyGroupTimeSeriesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAnomalyGroupTimeSeriesResponse'
+            Prelude.<$> (x Data..?> "AnomalyGroupId")
+            Prelude.<*> (x Data..?> "MetricName")
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "TimeSeriesList" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "TimestampList" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListAnomalyGroupTimeSeries where
+  hashWithSalt _salt ListAnomalyGroupTimeSeries' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` anomalyDetectorArn
+      `Prelude.hashWithSalt` anomalyGroupId
+      `Prelude.hashWithSalt` metricName
+
+instance Prelude.NFData ListAnomalyGroupTimeSeries where
+  rnf ListAnomalyGroupTimeSeries' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf anomalyDetectorArn
+      `Prelude.seq` Prelude.rnf anomalyGroupId
+      `Prelude.seq` Prelude.rnf metricName
+
+instance Data.ToHeaders ListAnomalyGroupTimeSeries where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListAnomalyGroupTimeSeries where
+  toJSON ListAnomalyGroupTimeSeries' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just
+              ("AnomalyDetectorArn" Data..= anomalyDetectorArn),
+            Prelude.Just
+              ("AnomalyGroupId" Data..= anomalyGroupId),
+            Prelude.Just ("MetricName" Data..= metricName)
+          ]
+      )
+
+instance Data.ToPath ListAnomalyGroupTimeSeries where
+  toPath = Prelude.const "/ListAnomalyGroupTimeSeries"
+
+instance Data.ToQuery ListAnomalyGroupTimeSeries where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListAnomalyGroupTimeSeriesResponse' smart constructor.
+data ListAnomalyGroupTimeSeriesResponse = ListAnomalyGroupTimeSeriesResponse'
+  { -- | The ID of the anomaly group.
+    anomalyGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the measure field.
+    metricName :: Prelude.Maybe Prelude.Text,
+    -- | The pagination token that\'s included if more results are available.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of anomalous metrics.
+    timeSeriesList :: Prelude.Maybe [TimeSeries],
+    -- | Timestamps for the anomalous metrics.
+    timestampList :: 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 'ListAnomalyGroupTimeSeriesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyGroupId', 'listAnomalyGroupTimeSeriesResponse_anomalyGroupId' - The ID of the anomaly group.
+--
+-- 'metricName', 'listAnomalyGroupTimeSeriesResponse_metricName' - The name of the measure field.
+--
+-- 'nextToken', 'listAnomalyGroupTimeSeriesResponse_nextToken' - The pagination token that\'s included if more results are available.
+--
+-- 'timeSeriesList', 'listAnomalyGroupTimeSeriesResponse_timeSeriesList' - A list of anomalous metrics.
+--
+-- 'timestampList', 'listAnomalyGroupTimeSeriesResponse_timestampList' - Timestamps for the anomalous metrics.
+--
+-- 'httpStatus', 'listAnomalyGroupTimeSeriesResponse_httpStatus' - The response's http status code.
+newListAnomalyGroupTimeSeriesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAnomalyGroupTimeSeriesResponse
+newListAnomalyGroupTimeSeriesResponse pHttpStatus_ =
+  ListAnomalyGroupTimeSeriesResponse'
+    { anomalyGroupId =
+        Prelude.Nothing,
+      metricName = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      timeSeriesList = Prelude.Nothing,
+      timestampList = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the anomaly group.
+listAnomalyGroupTimeSeriesResponse_anomalyGroupId :: Lens.Lens' ListAnomalyGroupTimeSeriesResponse (Prelude.Maybe Prelude.Text)
+listAnomalyGroupTimeSeriesResponse_anomalyGroupId = Lens.lens (\ListAnomalyGroupTimeSeriesResponse' {anomalyGroupId} -> anomalyGroupId) (\s@ListAnomalyGroupTimeSeriesResponse' {} a -> s {anomalyGroupId = a} :: ListAnomalyGroupTimeSeriesResponse)
+
+-- | The name of the measure field.
+listAnomalyGroupTimeSeriesResponse_metricName :: Lens.Lens' ListAnomalyGroupTimeSeriesResponse (Prelude.Maybe Prelude.Text)
+listAnomalyGroupTimeSeriesResponse_metricName = Lens.lens (\ListAnomalyGroupTimeSeriesResponse' {metricName} -> metricName) (\s@ListAnomalyGroupTimeSeriesResponse' {} a -> s {metricName = a} :: ListAnomalyGroupTimeSeriesResponse)
+
+-- | The pagination token that\'s included if more results are available.
+listAnomalyGroupTimeSeriesResponse_nextToken :: Lens.Lens' ListAnomalyGroupTimeSeriesResponse (Prelude.Maybe Prelude.Text)
+listAnomalyGroupTimeSeriesResponse_nextToken = Lens.lens (\ListAnomalyGroupTimeSeriesResponse' {nextToken} -> nextToken) (\s@ListAnomalyGroupTimeSeriesResponse' {} a -> s {nextToken = a} :: ListAnomalyGroupTimeSeriesResponse)
+
+-- | A list of anomalous metrics.
+listAnomalyGroupTimeSeriesResponse_timeSeriesList :: Lens.Lens' ListAnomalyGroupTimeSeriesResponse (Prelude.Maybe [TimeSeries])
+listAnomalyGroupTimeSeriesResponse_timeSeriesList = Lens.lens (\ListAnomalyGroupTimeSeriesResponse' {timeSeriesList} -> timeSeriesList) (\s@ListAnomalyGroupTimeSeriesResponse' {} a -> s {timeSeriesList = a} :: ListAnomalyGroupTimeSeriesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Timestamps for the anomalous metrics.
+listAnomalyGroupTimeSeriesResponse_timestampList :: Lens.Lens' ListAnomalyGroupTimeSeriesResponse (Prelude.Maybe [Prelude.Text])
+listAnomalyGroupTimeSeriesResponse_timestampList = Lens.lens (\ListAnomalyGroupTimeSeriesResponse' {timestampList} -> timestampList) (\s@ListAnomalyGroupTimeSeriesResponse' {} a -> s {timestampList = a} :: ListAnomalyGroupTimeSeriesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listAnomalyGroupTimeSeriesResponse_httpStatus :: Lens.Lens' ListAnomalyGroupTimeSeriesResponse Prelude.Int
+listAnomalyGroupTimeSeriesResponse_httpStatus = Lens.lens (\ListAnomalyGroupTimeSeriesResponse' {httpStatus} -> httpStatus) (\s@ListAnomalyGroupTimeSeriesResponse' {} a -> s {httpStatus = a} :: ListAnomalyGroupTimeSeriesResponse)
+
+instance
+  Prelude.NFData
+    ListAnomalyGroupTimeSeriesResponse
+  where
+  rnf ListAnomalyGroupTimeSeriesResponse' {..} =
+    Prelude.rnf anomalyGroupId
+      `Prelude.seq` Prelude.rnf metricName
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf timeSeriesList
+      `Prelude.seq` Prelude.rnf timestampList
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/ListMetricSets.hs b/gen/Amazonka/LookoutMetrics/ListMetricSets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/ListMetricSets.hs
@@ -0,0 +1,230 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.ListMetricSets
+-- 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 datasets in the current AWS Region.
+--
+-- Amazon Lookout for Metrics API actions are eventually consistent. If you
+-- do a read operation on a resource immediately after creating or
+-- modifying it, use retries to allow time for the write operation to
+-- complete.
+module Amazonka.LookoutMetrics.ListMetricSets
+  ( -- * Creating a Request
+    ListMetricSets (..),
+    newListMetricSets,
+
+    -- * Request Lenses
+    listMetricSets_anomalyDetectorArn,
+    listMetricSets_maxResults,
+    listMetricSets_nextToken,
+
+    -- * Destructuring the Response
+    ListMetricSetsResponse (..),
+    newListMetricSetsResponse,
+
+    -- * Response Lenses
+    listMetricSetsResponse_metricSetSummaryList,
+    listMetricSetsResponse_nextToken,
+    listMetricSetsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListMetricSets' smart constructor.
+data ListMetricSets = ListMetricSets'
+  { -- | The ARN of the anomaly detector containing the metrics sets to list.
+    anomalyDetectorArn :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of results to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the result of the previous request was truncated, the response
+    -- includes a @NextToken@. To retrieve the next set of results, use the
+    -- token in the next request. Tokens expire after 24 hours.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListMetricSets' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyDetectorArn', 'listMetricSets_anomalyDetectorArn' - The ARN of the anomaly detector containing the metrics sets to list.
+--
+-- 'maxResults', 'listMetricSets_maxResults' - The maximum number of results to return.
+--
+-- 'nextToken', 'listMetricSets_nextToken' - If the result of the previous request was truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next request. Tokens expire after 24 hours.
+newListMetricSets ::
+  ListMetricSets
+newListMetricSets =
+  ListMetricSets'
+    { anomalyDetectorArn =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The ARN of the anomaly detector containing the metrics sets to list.
+listMetricSets_anomalyDetectorArn :: Lens.Lens' ListMetricSets (Prelude.Maybe Prelude.Text)
+listMetricSets_anomalyDetectorArn = Lens.lens (\ListMetricSets' {anomalyDetectorArn} -> anomalyDetectorArn) (\s@ListMetricSets' {} a -> s {anomalyDetectorArn = a} :: ListMetricSets)
+
+-- | The maximum number of results to return.
+listMetricSets_maxResults :: Lens.Lens' ListMetricSets (Prelude.Maybe Prelude.Natural)
+listMetricSets_maxResults = Lens.lens (\ListMetricSets' {maxResults} -> maxResults) (\s@ListMetricSets' {} a -> s {maxResults = a} :: ListMetricSets)
+
+-- | If the result of the previous request was truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next request. Tokens expire after 24 hours.
+listMetricSets_nextToken :: Lens.Lens' ListMetricSets (Prelude.Maybe Prelude.Text)
+listMetricSets_nextToken = Lens.lens (\ListMetricSets' {nextToken} -> nextToken) (\s@ListMetricSets' {} a -> s {nextToken = a} :: ListMetricSets)
+
+instance Core.AWSRequest ListMetricSets where
+  type
+    AWSResponse ListMetricSets =
+      ListMetricSetsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListMetricSetsResponse'
+            Prelude.<$> ( x
+                            Data..?> "MetricSetSummaryList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListMetricSets where
+  hashWithSalt _salt ListMetricSets' {..} =
+    _salt
+      `Prelude.hashWithSalt` anomalyDetectorArn
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListMetricSets where
+  rnf ListMetricSets' {..} =
+    Prelude.rnf anomalyDetectorArn
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListMetricSets where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListMetricSets where
+  toJSON ListMetricSets' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AnomalyDetectorArn" Data..=)
+              Prelude.<$> anomalyDetectorArn,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListMetricSets where
+  toPath = Prelude.const "/ListMetricSets"
+
+instance Data.ToQuery ListMetricSets where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListMetricSetsResponse' smart constructor.
+data ListMetricSetsResponse = ListMetricSetsResponse'
+  { -- | A list of the datasets in the AWS Region, with configuration details for
+    -- each.
+    metricSetSummaryList :: Prelude.Maybe [MetricSetSummary],
+    -- | If the response is truncated, the list call returns this token. To
+    -- retrieve the next set of results, use the token in the next list
+    -- request.
+    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 'ListMetricSetsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'metricSetSummaryList', 'listMetricSetsResponse_metricSetSummaryList' - A list of the datasets in the AWS Region, with configuration details for
+-- each.
+--
+-- 'nextToken', 'listMetricSetsResponse_nextToken' - If the response is truncated, the list call returns this token. To
+-- retrieve the next set of results, use the token in the next list
+-- request.
+--
+-- 'httpStatus', 'listMetricSetsResponse_httpStatus' - The response's http status code.
+newListMetricSetsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListMetricSetsResponse
+newListMetricSetsResponse pHttpStatus_ =
+  ListMetricSetsResponse'
+    { metricSetSummaryList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of the datasets in the AWS Region, with configuration details for
+-- each.
+listMetricSetsResponse_metricSetSummaryList :: Lens.Lens' ListMetricSetsResponse (Prelude.Maybe [MetricSetSummary])
+listMetricSetsResponse_metricSetSummaryList = Lens.lens (\ListMetricSetsResponse' {metricSetSummaryList} -> metricSetSummaryList) (\s@ListMetricSetsResponse' {} a -> s {metricSetSummaryList = a} :: ListMetricSetsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If the response is truncated, the list call returns this token. To
+-- retrieve the next set of results, use the token in the next list
+-- request.
+listMetricSetsResponse_nextToken :: Lens.Lens' ListMetricSetsResponse (Prelude.Maybe Prelude.Text)
+listMetricSetsResponse_nextToken = Lens.lens (\ListMetricSetsResponse' {nextToken} -> nextToken) (\s@ListMetricSetsResponse' {} a -> s {nextToken = a} :: ListMetricSetsResponse)
+
+-- | The response's http status code.
+listMetricSetsResponse_httpStatus :: Lens.Lens' ListMetricSetsResponse Prelude.Int
+listMetricSetsResponse_httpStatus = Lens.lens (\ListMetricSetsResponse' {httpStatus} -> httpStatus) (\s@ListMetricSetsResponse' {} a -> s {httpStatus = a} :: ListMetricSetsResponse)
+
+instance Prelude.NFData ListMetricSetsResponse where
+  rnf ListMetricSetsResponse' {..} =
+    Prelude.rnf metricSetSummaryList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/ListTagsForResource.hs b/gen/Amazonka/LookoutMetrics/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/ListTagsForResource.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.ListTagsForResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a list of
+-- <https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html tags>
+-- for a detector, dataset, or alert.
+module Amazonka.LookoutMetrics.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.LookoutMetrics.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 resource\'s Amazon Resource Name (ARN).
+    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 resource\'s Amazon Resource Name (ARN).
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The resource\'s Amazon Resource Name (ARN).
+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath ListTagsForResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | The resource\'s tags.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - The resource\'s tags.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The resource\'s tags.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/PutFeedback.hs b/gen/Amazonka/LookoutMetrics/PutFeedback.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/PutFeedback.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.PutFeedback
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Add feedback for an anomalous metric.
+module Amazonka.LookoutMetrics.PutFeedback
+  ( -- * Creating a Request
+    PutFeedback (..),
+    newPutFeedback,
+
+    -- * Request Lenses
+    putFeedback_anomalyDetectorArn,
+    putFeedback_anomalyGroupTimeSeriesFeedback,
+
+    -- * Destructuring the Response
+    PutFeedbackResponse (..),
+    newPutFeedbackResponse,
+
+    -- * Response Lenses
+    putFeedbackResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutFeedback' smart constructor.
+data PutFeedback = PutFeedback'
+  { -- | The Amazon Resource Name (ARN) of the anomaly detector.
+    anomalyDetectorArn :: Prelude.Text,
+    -- | Feedback for an anomalous metric.
+    anomalyGroupTimeSeriesFeedback :: AnomalyGroupTimeSeriesFeedback
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutFeedback' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyDetectorArn', 'putFeedback_anomalyDetectorArn' - The Amazon Resource Name (ARN) of the anomaly detector.
+--
+-- 'anomalyGroupTimeSeriesFeedback', 'putFeedback_anomalyGroupTimeSeriesFeedback' - Feedback for an anomalous metric.
+newPutFeedback ::
+  -- | 'anomalyDetectorArn'
+  Prelude.Text ->
+  -- | 'anomalyGroupTimeSeriesFeedback'
+  AnomalyGroupTimeSeriesFeedback ->
+  PutFeedback
+newPutFeedback
+  pAnomalyDetectorArn_
+  pAnomalyGroupTimeSeriesFeedback_ =
+    PutFeedback'
+      { anomalyDetectorArn =
+          pAnomalyDetectorArn_,
+        anomalyGroupTimeSeriesFeedback =
+          pAnomalyGroupTimeSeriesFeedback_
+      }
+
+-- | The Amazon Resource Name (ARN) of the anomaly detector.
+putFeedback_anomalyDetectorArn :: Lens.Lens' PutFeedback Prelude.Text
+putFeedback_anomalyDetectorArn = Lens.lens (\PutFeedback' {anomalyDetectorArn} -> anomalyDetectorArn) (\s@PutFeedback' {} a -> s {anomalyDetectorArn = a} :: PutFeedback)
+
+-- | Feedback for an anomalous metric.
+putFeedback_anomalyGroupTimeSeriesFeedback :: Lens.Lens' PutFeedback AnomalyGroupTimeSeriesFeedback
+putFeedback_anomalyGroupTimeSeriesFeedback = Lens.lens (\PutFeedback' {anomalyGroupTimeSeriesFeedback} -> anomalyGroupTimeSeriesFeedback) (\s@PutFeedback' {} a -> s {anomalyGroupTimeSeriesFeedback = a} :: PutFeedback)
+
+instance Core.AWSRequest PutFeedback where
+  type AWSResponse PutFeedback = PutFeedbackResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutFeedbackResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutFeedback where
+  hashWithSalt _salt PutFeedback' {..} =
+    _salt
+      `Prelude.hashWithSalt` anomalyDetectorArn
+      `Prelude.hashWithSalt` anomalyGroupTimeSeriesFeedback
+
+instance Prelude.NFData PutFeedback where
+  rnf PutFeedback' {..} =
+    Prelude.rnf anomalyDetectorArn
+      `Prelude.seq` Prelude.rnf anomalyGroupTimeSeriesFeedback
+
+instance Data.ToHeaders PutFeedback where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutFeedback where
+  toJSON PutFeedback' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("AnomalyDetectorArn" Data..= anomalyDetectorArn),
+            Prelude.Just
+              ( "AnomalyGroupTimeSeriesFeedback"
+                  Data..= anomalyGroupTimeSeriesFeedback
+              )
+          ]
+      )
+
+instance Data.ToPath PutFeedback where
+  toPath = Prelude.const "/PutFeedback"
+
+instance Data.ToQuery PutFeedback where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutFeedbackResponse' smart constructor.
+data PutFeedbackResponse = PutFeedbackResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutFeedbackResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putFeedbackResponse_httpStatus' - The response's http status code.
+newPutFeedbackResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutFeedbackResponse
+newPutFeedbackResponse pHttpStatus_ =
+  PutFeedbackResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+putFeedbackResponse_httpStatus :: Lens.Lens' PutFeedbackResponse Prelude.Int
+putFeedbackResponse_httpStatus = Lens.lens (\PutFeedbackResponse' {httpStatus} -> httpStatus) (\s@PutFeedbackResponse' {} a -> s {httpStatus = a} :: PutFeedbackResponse)
+
+instance Prelude.NFData PutFeedbackResponse where
+  rnf PutFeedbackResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/TagResource.hs b/gen/Amazonka/LookoutMetrics/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/TagResource.hs
@@ -0,0 +1,168 @@
+{-# 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.LookoutMetrics.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
+-- <https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html tags>
+-- to a detector, dataset, or alert.
+module Amazonka.LookoutMetrics.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.LookoutMetrics.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 resource\'s Amazon Resource Name (ARN).
+    resourceArn :: Prelude.Text,
+    -- | Tags to apply to the resource. Tag keys and values can contain letters,
+    -- numbers, spaces, and the following symbols: @_.:\/=+\@-@
+    tags :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The resource\'s Amazon Resource Name (ARN).
+--
+-- 'tags', 'tagResource_tags' - Tags to apply to the resource. Tag keys and values can contain letters,
+-- numbers, spaces, and the following symbols: @_.:\/=+\@-@
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The resource\'s Amazon Resource Name (ARN).
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | Tags to apply to the resource. Tag keys and values can contain letters,
+-- numbers, spaces, and the following symbols: @_.:\/=+\@-@
+tagResource_tags :: Lens.Lens' TagResource (Prelude.HashMap Prelude.Text Prelude.Text)
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("tags" Data..= tags)]
+      )
+
+instance Data.ToPath TagResource where
+  toPath TagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'tagResourceResponse_httpStatus' - The response's http status code.
+newTagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TagResourceResponse
+newTagResourceResponse pHttpStatus_ =
+  TagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+tagResourceResponse_httpStatus :: Lens.Lens' TagResourceResponse Prelude.Int
+tagResourceResponse_httpStatus = Lens.lens (\TagResourceResponse' {httpStatus} -> httpStatus) (\s@TagResourceResponse' {} a -> s {httpStatus = a} :: TagResourceResponse)
+
+instance Prelude.NFData TagResourceResponse where
+  rnf TagResourceResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/Types.hs b/gen/Amazonka/LookoutMetrics/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types.hs
@@ -0,0 +1,689 @@
+{-# 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.LookoutMetrics.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.LookoutMetrics.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _ConflictException,
+    _InternalServerException,
+    _ResourceNotFoundException,
+    _ServiceQuotaExceededException,
+    _TooManyRequestsException,
+    _ValidationException,
+
+    -- * AggregationFunction
+    AggregationFunction (..),
+
+    -- * AlertStatus
+    AlertStatus (..),
+
+    -- * AlertType
+    AlertType (..),
+
+    -- * AnomalyDetectionTaskStatus
+    AnomalyDetectionTaskStatus (..),
+
+    -- * AnomalyDetectorFailureType
+    AnomalyDetectorFailureType (..),
+
+    -- * AnomalyDetectorStatus
+    AnomalyDetectorStatus (..),
+
+    -- * CSVFileCompression
+    CSVFileCompression (..),
+
+    -- * Confidence
+    Confidence (..),
+
+    -- * DataQualityMetricType
+    DataQualityMetricType (..),
+
+    -- * FilterOperation
+    FilterOperation (..),
+
+    -- * Frequency
+    Frequency (..),
+
+    -- * JsonFileCompression
+    JsonFileCompression (..),
+
+    -- * RelationshipType
+    RelationshipType (..),
+
+    -- * SnsFormat
+    SnsFormat (..),
+
+    -- * Action
+    Action (..),
+    newAction,
+    action_lambdaConfiguration,
+    action_sNSConfiguration,
+
+    -- * Alert
+    Alert (..),
+    newAlert,
+    alert_action,
+    alert_alertArn,
+    alert_alertDescription,
+    alert_alertFilters,
+    alert_alertName,
+    alert_alertSensitivityThreshold,
+    alert_alertStatus,
+    alert_alertType,
+    alert_anomalyDetectorArn,
+    alert_creationTime,
+    alert_lastModificationTime,
+
+    -- * AlertFilters
+    AlertFilters (..),
+    newAlertFilters,
+    alertFilters_dimensionFilterList,
+    alertFilters_metricList,
+
+    -- * AlertSummary
+    AlertSummary (..),
+    newAlertSummary,
+    alertSummary_alertArn,
+    alertSummary_alertName,
+    alertSummary_alertSensitivityThreshold,
+    alertSummary_alertStatus,
+    alertSummary_alertType,
+    alertSummary_anomalyDetectorArn,
+    alertSummary_creationTime,
+    alertSummary_lastModificationTime,
+    alertSummary_tags,
+
+    -- * AnomalyDetectorConfig
+    AnomalyDetectorConfig (..),
+    newAnomalyDetectorConfig,
+    anomalyDetectorConfig_anomalyDetectorFrequency,
+
+    -- * AnomalyDetectorConfigSummary
+    AnomalyDetectorConfigSummary (..),
+    newAnomalyDetectorConfigSummary,
+    anomalyDetectorConfigSummary_anomalyDetectorFrequency,
+
+    -- * AnomalyDetectorDataQualityMetric
+    AnomalyDetectorDataQualityMetric (..),
+    newAnomalyDetectorDataQualityMetric,
+    anomalyDetectorDataQualityMetric_metricSetDataQualityMetricList,
+    anomalyDetectorDataQualityMetric_startTimestamp,
+
+    -- * AnomalyDetectorSummary
+    AnomalyDetectorSummary (..),
+    newAnomalyDetectorSummary,
+    anomalyDetectorSummary_anomalyDetectorArn,
+    anomalyDetectorSummary_anomalyDetectorDescription,
+    anomalyDetectorSummary_anomalyDetectorName,
+    anomalyDetectorSummary_creationTime,
+    anomalyDetectorSummary_lastModificationTime,
+    anomalyDetectorSummary_status,
+    anomalyDetectorSummary_tags,
+
+    -- * AnomalyGroup
+    AnomalyGroup (..),
+    newAnomalyGroup,
+    anomalyGroup_anomalyGroupId,
+    anomalyGroup_anomalyGroupScore,
+    anomalyGroup_endTime,
+    anomalyGroup_metricLevelImpactList,
+    anomalyGroup_primaryMetricName,
+    anomalyGroup_startTime,
+
+    -- * AnomalyGroupStatistics
+    AnomalyGroupStatistics (..),
+    newAnomalyGroupStatistics,
+    anomalyGroupStatistics_evaluationStartDate,
+    anomalyGroupStatistics_itemizedMetricStatsList,
+    anomalyGroupStatistics_totalCount,
+
+    -- * AnomalyGroupSummary
+    AnomalyGroupSummary (..),
+    newAnomalyGroupSummary,
+    anomalyGroupSummary_anomalyGroupId,
+    anomalyGroupSummary_anomalyGroupScore,
+    anomalyGroupSummary_endTime,
+    anomalyGroupSummary_primaryMetricName,
+    anomalyGroupSummary_startTime,
+
+    -- * AnomalyGroupTimeSeries
+    AnomalyGroupTimeSeries (..),
+    newAnomalyGroupTimeSeries,
+    anomalyGroupTimeSeries_timeSeriesId,
+    anomalyGroupTimeSeries_anomalyGroupId,
+
+    -- * AnomalyGroupTimeSeriesFeedback
+    AnomalyGroupTimeSeriesFeedback (..),
+    newAnomalyGroupTimeSeriesFeedback,
+    anomalyGroupTimeSeriesFeedback_anomalyGroupId,
+    anomalyGroupTimeSeriesFeedback_timeSeriesId,
+    anomalyGroupTimeSeriesFeedback_isAnomaly,
+
+    -- * AppFlowConfig
+    AppFlowConfig (..),
+    newAppFlowConfig,
+    appFlowConfig_flowName,
+    appFlowConfig_roleArn,
+
+    -- * AthenaSourceConfig
+    AthenaSourceConfig (..),
+    newAthenaSourceConfig,
+    athenaSourceConfig_backTestConfiguration,
+    athenaSourceConfig_dataCatalog,
+    athenaSourceConfig_databaseName,
+    athenaSourceConfig_roleArn,
+    athenaSourceConfig_s3ResultsPath,
+    athenaSourceConfig_tableName,
+    athenaSourceConfig_workGroupName,
+
+    -- * AttributeValue
+    AttributeValue (..),
+    newAttributeValue,
+    attributeValue_b,
+    attributeValue_bs,
+    attributeValue_n,
+    attributeValue_ns,
+    attributeValue_s,
+    attributeValue_ss,
+
+    -- * AutoDetectionMetricSource
+    AutoDetectionMetricSource (..),
+    newAutoDetectionMetricSource,
+    autoDetectionMetricSource_s3SourceConfig,
+
+    -- * AutoDetectionS3SourceConfig
+    AutoDetectionS3SourceConfig (..),
+    newAutoDetectionS3SourceConfig,
+    autoDetectionS3SourceConfig_historicalDataPathList,
+    autoDetectionS3SourceConfig_templatedPathList,
+
+    -- * BackTestConfiguration
+    BackTestConfiguration (..),
+    newBackTestConfiguration,
+    backTestConfiguration_runBackTestMode,
+
+    -- * CloudWatchConfig
+    CloudWatchConfig (..),
+    newCloudWatchConfig,
+    cloudWatchConfig_backTestConfiguration,
+    cloudWatchConfig_roleArn,
+
+    -- * ContributionMatrix
+    ContributionMatrix (..),
+    newContributionMatrix,
+    contributionMatrix_dimensionContributionList,
+
+    -- * CsvFormatDescriptor
+    CsvFormatDescriptor (..),
+    newCsvFormatDescriptor,
+    csvFormatDescriptor_charset,
+    csvFormatDescriptor_containsHeader,
+    csvFormatDescriptor_delimiter,
+    csvFormatDescriptor_fileCompression,
+    csvFormatDescriptor_headerList,
+    csvFormatDescriptor_quoteSymbol,
+
+    -- * DataQualityMetric
+    DataQualityMetric (..),
+    newDataQualityMetric,
+    dataQualityMetric_metricDescription,
+    dataQualityMetric_metricType,
+    dataQualityMetric_metricValue,
+    dataQualityMetric_relatedColumnName,
+
+    -- * DetectedCsvFormatDescriptor
+    DetectedCsvFormatDescriptor (..),
+    newDetectedCsvFormatDescriptor,
+    detectedCsvFormatDescriptor_charset,
+    detectedCsvFormatDescriptor_containsHeader,
+    detectedCsvFormatDescriptor_delimiter,
+    detectedCsvFormatDescriptor_fileCompression,
+    detectedCsvFormatDescriptor_headerList,
+    detectedCsvFormatDescriptor_quoteSymbol,
+
+    -- * DetectedField
+    DetectedField (..),
+    newDetectedField,
+    detectedField_confidence,
+    detectedField_message,
+    detectedField_value,
+
+    -- * DetectedFileFormatDescriptor
+    DetectedFileFormatDescriptor (..),
+    newDetectedFileFormatDescriptor,
+    detectedFileFormatDescriptor_csvFormatDescriptor,
+    detectedFileFormatDescriptor_jsonFormatDescriptor,
+
+    -- * DetectedJsonFormatDescriptor
+    DetectedJsonFormatDescriptor (..),
+    newDetectedJsonFormatDescriptor,
+    detectedJsonFormatDescriptor_charset,
+    detectedJsonFormatDescriptor_fileCompression,
+
+    -- * DetectedMetricSetConfig
+    DetectedMetricSetConfig (..),
+    newDetectedMetricSetConfig,
+    detectedMetricSetConfig_metricSetFrequency,
+    detectedMetricSetConfig_metricSource,
+    detectedMetricSetConfig_offset,
+
+    -- * DetectedMetricSource
+    DetectedMetricSource (..),
+    newDetectedMetricSource,
+    detectedMetricSource_s3SourceConfig,
+
+    -- * DetectedS3SourceConfig
+    DetectedS3SourceConfig (..),
+    newDetectedS3SourceConfig,
+    detectedS3SourceConfig_fileFormatDescriptor,
+
+    -- * DimensionContribution
+    DimensionContribution (..),
+    newDimensionContribution,
+    dimensionContribution_dimensionName,
+    dimensionContribution_dimensionValueContributionList,
+
+    -- * DimensionFilter
+    DimensionFilter (..),
+    newDimensionFilter,
+    dimensionFilter_dimensionName,
+    dimensionFilter_dimensionValueList,
+
+    -- * DimensionNameValue
+    DimensionNameValue (..),
+    newDimensionNameValue,
+    dimensionNameValue_dimensionName,
+    dimensionNameValue_dimensionValue,
+
+    -- * DimensionValueContribution
+    DimensionValueContribution (..),
+    newDimensionValueContribution,
+    dimensionValueContribution_contributionScore,
+    dimensionValueContribution_dimensionValue,
+
+    -- * ExecutionStatus
+    ExecutionStatus (..),
+    newExecutionStatus,
+    executionStatus_failureReason,
+    executionStatus_status,
+    executionStatus_timestamp,
+
+    -- * FileFormatDescriptor
+    FileFormatDescriptor (..),
+    newFileFormatDescriptor,
+    fileFormatDescriptor_csvFormatDescriptor,
+    fileFormatDescriptor_jsonFormatDescriptor,
+
+    -- * Filter
+    Filter (..),
+    newFilter,
+    filter_dimensionValue,
+    filter_filterOperation,
+
+    -- * InterMetricImpactDetails
+    InterMetricImpactDetails (..),
+    newInterMetricImpactDetails,
+    interMetricImpactDetails_anomalyGroupId,
+    interMetricImpactDetails_contributionPercentage,
+    interMetricImpactDetails_metricName,
+    interMetricImpactDetails_relationshipType,
+
+    -- * ItemizedMetricStats
+    ItemizedMetricStats (..),
+    newItemizedMetricStats,
+    itemizedMetricStats_metricName,
+    itemizedMetricStats_occurrenceCount,
+
+    -- * JsonFormatDescriptor
+    JsonFormatDescriptor (..),
+    newJsonFormatDescriptor,
+    jsonFormatDescriptor_charset,
+    jsonFormatDescriptor_fileCompression,
+
+    -- * LambdaConfiguration
+    LambdaConfiguration (..),
+    newLambdaConfiguration,
+    lambdaConfiguration_roleArn,
+    lambdaConfiguration_lambdaArn,
+
+    -- * Metric
+    Metric (..),
+    newMetric,
+    metric_namespace,
+    metric_metricName,
+    metric_aggregationFunction,
+
+    -- * MetricLevelImpact
+    MetricLevelImpact (..),
+    newMetricLevelImpact,
+    metricLevelImpact_contributionMatrix,
+    metricLevelImpact_metricName,
+    metricLevelImpact_numTimeSeries,
+
+    -- * MetricSetDataQualityMetric
+    MetricSetDataQualityMetric (..),
+    newMetricSetDataQualityMetric,
+    metricSetDataQualityMetric_dataQualityMetricList,
+    metricSetDataQualityMetric_metricSetArn,
+
+    -- * MetricSetDimensionFilter
+    MetricSetDimensionFilter (..),
+    newMetricSetDimensionFilter,
+    metricSetDimensionFilter_filterList,
+    metricSetDimensionFilter_name,
+
+    -- * MetricSetSummary
+    MetricSetSummary (..),
+    newMetricSetSummary,
+    metricSetSummary_anomalyDetectorArn,
+    metricSetSummary_creationTime,
+    metricSetSummary_lastModificationTime,
+    metricSetSummary_metricSetArn,
+    metricSetSummary_metricSetDescription,
+    metricSetSummary_metricSetName,
+    metricSetSummary_tags,
+
+    -- * MetricSource
+    MetricSource (..),
+    newMetricSource,
+    metricSource_appFlowConfig,
+    metricSource_athenaSourceConfig,
+    metricSource_cloudWatchConfig,
+    metricSource_rDSSourceConfig,
+    metricSource_redshiftSourceConfig,
+    metricSource_s3SourceConfig,
+
+    -- * RDSSourceConfig
+    RDSSourceConfig (..),
+    newRDSSourceConfig,
+    rDSSourceConfig_dbInstanceIdentifier,
+    rDSSourceConfig_databaseHost,
+    rDSSourceConfig_databaseName,
+    rDSSourceConfig_databasePort,
+    rDSSourceConfig_roleArn,
+    rDSSourceConfig_secretManagerArn,
+    rDSSourceConfig_tableName,
+    rDSSourceConfig_vpcConfiguration,
+
+    -- * RedshiftSourceConfig
+    RedshiftSourceConfig (..),
+    newRedshiftSourceConfig,
+    redshiftSourceConfig_clusterIdentifier,
+    redshiftSourceConfig_databaseHost,
+    redshiftSourceConfig_databaseName,
+    redshiftSourceConfig_databasePort,
+    redshiftSourceConfig_roleArn,
+    redshiftSourceConfig_secretManagerArn,
+    redshiftSourceConfig_tableName,
+    redshiftSourceConfig_vpcConfiguration,
+
+    -- * S3SourceConfig
+    S3SourceConfig (..),
+    newS3SourceConfig,
+    s3SourceConfig_fileFormatDescriptor,
+    s3SourceConfig_historicalDataPathList,
+    s3SourceConfig_roleArn,
+    s3SourceConfig_templatedPathList,
+
+    -- * SNSConfiguration
+    SNSConfiguration (..),
+    newSNSConfiguration,
+    sNSConfiguration_snsFormat,
+    sNSConfiguration_roleArn,
+    sNSConfiguration_snsTopicArn,
+
+    -- * SampleDataS3SourceConfig
+    SampleDataS3SourceConfig (..),
+    newSampleDataS3SourceConfig,
+    sampleDataS3SourceConfig_historicalDataPathList,
+    sampleDataS3SourceConfig_templatedPathList,
+    sampleDataS3SourceConfig_roleArn,
+    sampleDataS3SourceConfig_fileFormatDescriptor,
+
+    -- * TimeSeries
+    TimeSeries (..),
+    newTimeSeries,
+    timeSeries_timeSeriesId,
+    timeSeries_dimensionList,
+    timeSeries_metricValueList,
+
+    -- * TimeSeriesFeedback
+    TimeSeriesFeedback (..),
+    newTimeSeriesFeedback,
+    timeSeriesFeedback_isAnomaly,
+    timeSeriesFeedback_timeSeriesId,
+
+    -- * TimestampColumn
+    TimestampColumn (..),
+    newTimestampColumn,
+    timestampColumn_columnFormat,
+    timestampColumn_columnName,
+
+    -- * VpcConfiguration
+    VpcConfiguration (..),
+    newVpcConfiguration,
+    vpcConfiguration_subnetIdList,
+    vpcConfiguration_securityGroupIdList,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.LookoutMetrics.Types.Action
+import Amazonka.LookoutMetrics.Types.AggregationFunction
+import Amazonka.LookoutMetrics.Types.Alert
+import Amazonka.LookoutMetrics.Types.AlertFilters
+import Amazonka.LookoutMetrics.Types.AlertStatus
+import Amazonka.LookoutMetrics.Types.AlertSummary
+import Amazonka.LookoutMetrics.Types.AlertType
+import Amazonka.LookoutMetrics.Types.AnomalyDetectionTaskStatus
+import Amazonka.LookoutMetrics.Types.AnomalyDetectorConfig
+import Amazonka.LookoutMetrics.Types.AnomalyDetectorConfigSummary
+import Amazonka.LookoutMetrics.Types.AnomalyDetectorDataQualityMetric
+import Amazonka.LookoutMetrics.Types.AnomalyDetectorFailureType
+import Amazonka.LookoutMetrics.Types.AnomalyDetectorStatus
+import Amazonka.LookoutMetrics.Types.AnomalyDetectorSummary
+import Amazonka.LookoutMetrics.Types.AnomalyGroup
+import Amazonka.LookoutMetrics.Types.AnomalyGroupStatistics
+import Amazonka.LookoutMetrics.Types.AnomalyGroupSummary
+import Amazonka.LookoutMetrics.Types.AnomalyGroupTimeSeries
+import Amazonka.LookoutMetrics.Types.AnomalyGroupTimeSeriesFeedback
+import Amazonka.LookoutMetrics.Types.AppFlowConfig
+import Amazonka.LookoutMetrics.Types.AthenaSourceConfig
+import Amazonka.LookoutMetrics.Types.AttributeValue
+import Amazonka.LookoutMetrics.Types.AutoDetectionMetricSource
+import Amazonka.LookoutMetrics.Types.AutoDetectionS3SourceConfig
+import Amazonka.LookoutMetrics.Types.BackTestConfiguration
+import Amazonka.LookoutMetrics.Types.CSVFileCompression
+import Amazonka.LookoutMetrics.Types.CloudWatchConfig
+import Amazonka.LookoutMetrics.Types.Confidence
+import Amazonka.LookoutMetrics.Types.ContributionMatrix
+import Amazonka.LookoutMetrics.Types.CsvFormatDescriptor
+import Amazonka.LookoutMetrics.Types.DataQualityMetric
+import Amazonka.LookoutMetrics.Types.DataQualityMetricType
+import Amazonka.LookoutMetrics.Types.DetectedCsvFormatDescriptor
+import Amazonka.LookoutMetrics.Types.DetectedField
+import Amazonka.LookoutMetrics.Types.DetectedFileFormatDescriptor
+import Amazonka.LookoutMetrics.Types.DetectedJsonFormatDescriptor
+import Amazonka.LookoutMetrics.Types.DetectedMetricSetConfig
+import Amazonka.LookoutMetrics.Types.DetectedMetricSource
+import Amazonka.LookoutMetrics.Types.DetectedS3SourceConfig
+import Amazonka.LookoutMetrics.Types.DimensionContribution
+import Amazonka.LookoutMetrics.Types.DimensionFilter
+import Amazonka.LookoutMetrics.Types.DimensionNameValue
+import Amazonka.LookoutMetrics.Types.DimensionValueContribution
+import Amazonka.LookoutMetrics.Types.ExecutionStatus
+import Amazonka.LookoutMetrics.Types.FileFormatDescriptor
+import Amazonka.LookoutMetrics.Types.Filter
+import Amazonka.LookoutMetrics.Types.FilterOperation
+import Amazonka.LookoutMetrics.Types.Frequency
+import Amazonka.LookoutMetrics.Types.InterMetricImpactDetails
+import Amazonka.LookoutMetrics.Types.ItemizedMetricStats
+import Amazonka.LookoutMetrics.Types.JsonFileCompression
+import Amazonka.LookoutMetrics.Types.JsonFormatDescriptor
+import Amazonka.LookoutMetrics.Types.LambdaConfiguration
+import Amazonka.LookoutMetrics.Types.Metric
+import Amazonka.LookoutMetrics.Types.MetricLevelImpact
+import Amazonka.LookoutMetrics.Types.MetricSetDataQualityMetric
+import Amazonka.LookoutMetrics.Types.MetricSetDimensionFilter
+import Amazonka.LookoutMetrics.Types.MetricSetSummary
+import Amazonka.LookoutMetrics.Types.MetricSource
+import Amazonka.LookoutMetrics.Types.RDSSourceConfig
+import Amazonka.LookoutMetrics.Types.RedshiftSourceConfig
+import Amazonka.LookoutMetrics.Types.RelationshipType
+import Amazonka.LookoutMetrics.Types.S3SourceConfig
+import Amazonka.LookoutMetrics.Types.SNSConfiguration
+import Amazonka.LookoutMetrics.Types.SampleDataS3SourceConfig
+import Amazonka.LookoutMetrics.Types.SnsFormat
+import Amazonka.LookoutMetrics.Types.TimeSeries
+import Amazonka.LookoutMetrics.Types.TimeSeriesFeedback
+import Amazonka.LookoutMetrics.Types.TimestampColumn
+import Amazonka.LookoutMetrics.Types.VpcConfiguration
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2017-07-25@ of the Amazon Lookout for Metrics SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "LookoutMetrics",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "lookoutmetrics",
+      Core.signingName = "lookoutmetrics",
+      Core.version = "2017-07-25",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "LookoutMetrics",
+      Core.retry = retry
+    }
+  where
+    retry =
+      Core.Exponential
+        { Core.base = 5.0e-2,
+          Core.growth = 2,
+          Core.attempts = 5,
+          Core.check = check
+        }
+    check e
+      | Lens.has (Core.hasStatus 502) e =
+          Prelude.Just "bad_gateway"
+      | Lens.has (Core.hasStatus 504) e =
+          Prelude.Just "gateway_timeout"
+      | Lens.has (Core.hasStatus 500) e =
+          Prelude.Just "general_server_error"
+      | Lens.has (Core.hasStatus 509) e =
+          Prelude.Just "limit_exceeded"
+      | Lens.has
+          ( Core.hasCode "RequestThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "request_throttled_exception"
+      | Lens.has (Core.hasStatus 503) e =
+          Prelude.Just "service_unavailable"
+      | Lens.has
+          ( Core.hasCode "ThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttled_exception"
+      | Lens.has
+          ( Core.hasCode "Throttling"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling"
+      | Lens.has
+          ( Core.hasCode "ThrottlingException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling_exception"
+      | Lens.has
+          ( Core.hasCode
+              "ProvisionedThroughputExceededException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throughput_exceeded"
+      | Lens.has (Core.hasStatus 429) e =
+          Prelude.Just "too_many_requests"
+      | Prelude.otherwise = Prelude.Nothing
+
+-- | You do not have sufficient permissions to perform this action.
+_AccessDeniedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccessDeniedException =
+  Core._MatchServiceError
+    defaultService
+    "AccessDeniedException"
+    Prelude.. Core.hasStatus 403
+
+-- | There was a conflict processing the request. Try your request again.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+    Prelude.. Core.hasStatus 409
+
+-- | The request processing has failed because of an unknown error,
+-- exception, or failure.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+    Prelude.. Core.hasStatus 500
+
+-- | The specified resource cannot be found. Check the ARN of the resource
+-- and try again.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 400
+
+-- | The request exceeded the service\'s quotas. Check the service quotas and
+-- try again.
+_ServiceQuotaExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceQuotaExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceQuotaExceededException"
+    Prelude.. Core.hasStatus 402
+
+-- | The request was denied due to too many requests being submitted at the
+-- same time.
+_TooManyRequestsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_TooManyRequestsException =
+  Core._MatchServiceError
+    defaultService
+    "TooManyRequestsException"
+    Prelude.. Core.hasStatus 429
+
+-- | The input fails to satisfy the constraints specified by the AWS service.
+-- Check your input values and try again.
+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ValidationException =
+  Core._MatchServiceError
+    defaultService
+    "ValidationException"
+    Prelude.. Core.hasStatus 400
diff --git a/gen/Amazonka/LookoutMetrics/Types/Action.hs b/gen/Amazonka/LookoutMetrics/Types/Action.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/Action.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.LookoutMetrics.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.LookoutMetrics.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.LookoutMetrics.Types.LambdaConfiguration
+import Amazonka.LookoutMetrics.Types.SNSConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | A configuration that specifies the action to perform when anomalies are
+-- detected.
+--
+-- /See:/ 'newAction' smart constructor.
+data Action = Action'
+  { -- | A configuration for an AWS Lambda channel.
+    lambdaConfiguration :: Prelude.Maybe LambdaConfiguration,
+    -- | A configuration for an Amazon SNS channel.
+    sNSConfiguration :: Prelude.Maybe SNSConfiguration
+  }
+  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:
+--
+-- 'lambdaConfiguration', 'action_lambdaConfiguration' - A configuration for an AWS Lambda channel.
+--
+-- 'sNSConfiguration', 'action_sNSConfiguration' - A configuration for an Amazon SNS channel.
+newAction ::
+  Action
+newAction =
+  Action'
+    { lambdaConfiguration = Prelude.Nothing,
+      sNSConfiguration = Prelude.Nothing
+    }
+
+-- | A configuration for an AWS Lambda channel.
+action_lambdaConfiguration :: Lens.Lens' Action (Prelude.Maybe LambdaConfiguration)
+action_lambdaConfiguration = Lens.lens (\Action' {lambdaConfiguration} -> lambdaConfiguration) (\s@Action' {} a -> s {lambdaConfiguration = a} :: Action)
+
+-- | A configuration for an Amazon SNS channel.
+action_sNSConfiguration :: Lens.Lens' Action (Prelude.Maybe SNSConfiguration)
+action_sNSConfiguration = Lens.lens (\Action' {sNSConfiguration} -> sNSConfiguration) (\s@Action' {} a -> s {sNSConfiguration = a} :: Action)
+
+instance Data.FromJSON Action where
+  parseJSON =
+    Data.withObject
+      "Action"
+      ( \x ->
+          Action'
+            Prelude.<$> (x Data..:? "LambdaConfiguration")
+            Prelude.<*> (x Data..:? "SNSConfiguration")
+      )
+
+instance Prelude.Hashable Action where
+  hashWithSalt _salt Action' {..} =
+    _salt
+      `Prelude.hashWithSalt` lambdaConfiguration
+      `Prelude.hashWithSalt` sNSConfiguration
+
+instance Prelude.NFData Action where
+  rnf Action' {..} =
+    Prelude.rnf lambdaConfiguration
+      `Prelude.seq` Prelude.rnf sNSConfiguration
+
+instance Data.ToJSON Action where
+  toJSON Action' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("LambdaConfiguration" Data..=)
+              Prelude.<$> lambdaConfiguration,
+            ("SNSConfiguration" Data..=)
+              Prelude.<$> sNSConfiguration
+          ]
+      )
diff --git a/gen/Amazonka/LookoutMetrics/Types/AggregationFunction.hs b/gen/Amazonka/LookoutMetrics/Types/AggregationFunction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/AggregationFunction.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.LookoutMetrics.Types.AggregationFunction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.AggregationFunction
+  ( AggregationFunction
+      ( ..,
+        AggregationFunction_AVG,
+        AggregationFunction_SUM
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AggregationFunction = AggregationFunction'
+  { fromAggregationFunction ::
+      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 AggregationFunction_AVG :: AggregationFunction
+pattern AggregationFunction_AVG = AggregationFunction' "AVG"
+
+pattern AggregationFunction_SUM :: AggregationFunction
+pattern AggregationFunction_SUM = AggregationFunction' "SUM"
+
+{-# COMPLETE
+  AggregationFunction_AVG,
+  AggregationFunction_SUM,
+  AggregationFunction'
+  #-}
diff --git a/gen/Amazonka/LookoutMetrics/Types/Alert.hs b/gen/Amazonka/LookoutMetrics/Types/Alert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/Alert.hs
@@ -0,0 +1,199 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.Types.Alert
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.Alert where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.Action
+import Amazonka.LookoutMetrics.Types.AlertFilters
+import Amazonka.LookoutMetrics.Types.AlertStatus
+import Amazonka.LookoutMetrics.Types.AlertType
+import qualified Amazonka.Prelude as Prelude
+
+-- | A configuration for Amazon SNS-integrated notifications.
+--
+-- /See:/ 'newAlert' smart constructor.
+data Alert = Alert'
+  { -- | Action that will be triggered when there is an alert.
+    action :: Prelude.Maybe Action,
+    -- | The ARN of the alert.
+    alertArn :: Prelude.Maybe Prelude.Text,
+    -- | A description of the alert.
+    alertDescription :: Prelude.Maybe Prelude.Text,
+    -- | The configuration of the alert filters, containing MetricList and
+    -- DimensionFilter.
+    alertFilters :: Prelude.Maybe AlertFilters,
+    -- | The name of the alert.
+    alertName :: Prelude.Maybe Prelude.Text,
+    -- | The minimum severity for an anomaly to trigger the alert.
+    alertSensitivityThreshold :: Prelude.Maybe Prelude.Natural,
+    -- | The status of the alert.
+    alertStatus :: Prelude.Maybe AlertStatus,
+    -- | The type of the alert.
+    alertType :: Prelude.Maybe AlertType,
+    -- | The ARN of the detector to which the alert is attached.
+    anomalyDetectorArn :: Prelude.Maybe Prelude.Text,
+    -- | The time at which the alert was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The time at which the alert was last modified.
+    lastModificationTime :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Alert' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'action', 'alert_action' - Action that will be triggered when there is an alert.
+--
+-- 'alertArn', 'alert_alertArn' - The ARN of the alert.
+--
+-- 'alertDescription', 'alert_alertDescription' - A description of the alert.
+--
+-- 'alertFilters', 'alert_alertFilters' - The configuration of the alert filters, containing MetricList and
+-- DimensionFilter.
+--
+-- 'alertName', 'alert_alertName' - The name of the alert.
+--
+-- 'alertSensitivityThreshold', 'alert_alertSensitivityThreshold' - The minimum severity for an anomaly to trigger the alert.
+--
+-- 'alertStatus', 'alert_alertStatus' - The status of the alert.
+--
+-- 'alertType', 'alert_alertType' - The type of the alert.
+--
+-- 'anomalyDetectorArn', 'alert_anomalyDetectorArn' - The ARN of the detector to which the alert is attached.
+--
+-- 'creationTime', 'alert_creationTime' - The time at which the alert was created.
+--
+-- 'lastModificationTime', 'alert_lastModificationTime' - The time at which the alert was last modified.
+newAlert ::
+  Alert
+newAlert =
+  Alert'
+    { action = Prelude.Nothing,
+      alertArn = Prelude.Nothing,
+      alertDescription = Prelude.Nothing,
+      alertFilters = Prelude.Nothing,
+      alertName = Prelude.Nothing,
+      alertSensitivityThreshold = Prelude.Nothing,
+      alertStatus = Prelude.Nothing,
+      alertType = Prelude.Nothing,
+      anomalyDetectorArn = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing
+    }
+
+-- | Action that will be triggered when there is an alert.
+alert_action :: Lens.Lens' Alert (Prelude.Maybe Action)
+alert_action = Lens.lens (\Alert' {action} -> action) (\s@Alert' {} a -> s {action = a} :: Alert)
+
+-- | The ARN of the alert.
+alert_alertArn :: Lens.Lens' Alert (Prelude.Maybe Prelude.Text)
+alert_alertArn = Lens.lens (\Alert' {alertArn} -> alertArn) (\s@Alert' {} a -> s {alertArn = a} :: Alert)
+
+-- | A description of the alert.
+alert_alertDescription :: Lens.Lens' Alert (Prelude.Maybe Prelude.Text)
+alert_alertDescription = Lens.lens (\Alert' {alertDescription} -> alertDescription) (\s@Alert' {} a -> s {alertDescription = a} :: Alert)
+
+-- | The configuration of the alert filters, containing MetricList and
+-- DimensionFilter.
+alert_alertFilters :: Lens.Lens' Alert (Prelude.Maybe AlertFilters)
+alert_alertFilters = Lens.lens (\Alert' {alertFilters} -> alertFilters) (\s@Alert' {} a -> s {alertFilters = a} :: Alert)
+
+-- | The name of the alert.
+alert_alertName :: Lens.Lens' Alert (Prelude.Maybe Prelude.Text)
+alert_alertName = Lens.lens (\Alert' {alertName} -> alertName) (\s@Alert' {} a -> s {alertName = a} :: Alert)
+
+-- | The minimum severity for an anomaly to trigger the alert.
+alert_alertSensitivityThreshold :: Lens.Lens' Alert (Prelude.Maybe Prelude.Natural)
+alert_alertSensitivityThreshold = Lens.lens (\Alert' {alertSensitivityThreshold} -> alertSensitivityThreshold) (\s@Alert' {} a -> s {alertSensitivityThreshold = a} :: Alert)
+
+-- | The status of the alert.
+alert_alertStatus :: Lens.Lens' Alert (Prelude.Maybe AlertStatus)
+alert_alertStatus = Lens.lens (\Alert' {alertStatus} -> alertStatus) (\s@Alert' {} a -> s {alertStatus = a} :: Alert)
+
+-- | The type of the alert.
+alert_alertType :: Lens.Lens' Alert (Prelude.Maybe AlertType)
+alert_alertType = Lens.lens (\Alert' {alertType} -> alertType) (\s@Alert' {} a -> s {alertType = a} :: Alert)
+
+-- | The ARN of the detector to which the alert is attached.
+alert_anomalyDetectorArn :: Lens.Lens' Alert (Prelude.Maybe Prelude.Text)
+alert_anomalyDetectorArn = Lens.lens (\Alert' {anomalyDetectorArn} -> anomalyDetectorArn) (\s@Alert' {} a -> s {anomalyDetectorArn = a} :: Alert)
+
+-- | The time at which the alert was created.
+alert_creationTime :: Lens.Lens' Alert (Prelude.Maybe Prelude.UTCTime)
+alert_creationTime = Lens.lens (\Alert' {creationTime} -> creationTime) (\s@Alert' {} a -> s {creationTime = a} :: Alert) Prelude.. Lens.mapping Data._Time
+
+-- | The time at which the alert was last modified.
+alert_lastModificationTime :: Lens.Lens' Alert (Prelude.Maybe Prelude.UTCTime)
+alert_lastModificationTime = Lens.lens (\Alert' {lastModificationTime} -> lastModificationTime) (\s@Alert' {} a -> s {lastModificationTime = a} :: Alert) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON Alert where
+  parseJSON =
+    Data.withObject
+      "Alert"
+      ( \x ->
+          Alert'
+            Prelude.<$> (x Data..:? "Action")
+            Prelude.<*> (x Data..:? "AlertArn")
+            Prelude.<*> (x Data..:? "AlertDescription")
+            Prelude.<*> (x Data..:? "AlertFilters")
+            Prelude.<*> (x Data..:? "AlertName")
+            Prelude.<*> (x Data..:? "AlertSensitivityThreshold")
+            Prelude.<*> (x Data..:? "AlertStatus")
+            Prelude.<*> (x Data..:? "AlertType")
+            Prelude.<*> (x Data..:? "AnomalyDetectorArn")
+            Prelude.<*> (x Data..:? "CreationTime")
+            Prelude.<*> (x Data..:? "LastModificationTime")
+      )
+
+instance Prelude.Hashable Alert where
+  hashWithSalt _salt Alert' {..} =
+    _salt
+      `Prelude.hashWithSalt` action
+      `Prelude.hashWithSalt` alertArn
+      `Prelude.hashWithSalt` alertDescription
+      `Prelude.hashWithSalt` alertFilters
+      `Prelude.hashWithSalt` alertName
+      `Prelude.hashWithSalt` alertSensitivityThreshold
+      `Prelude.hashWithSalt` alertStatus
+      `Prelude.hashWithSalt` alertType
+      `Prelude.hashWithSalt` anomalyDetectorArn
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` lastModificationTime
+
+instance Prelude.NFData Alert where
+  rnf Alert' {..} =
+    Prelude.rnf action
+      `Prelude.seq` Prelude.rnf alertArn
+      `Prelude.seq` Prelude.rnf alertDescription
+      `Prelude.seq` Prelude.rnf alertFilters
+      `Prelude.seq` Prelude.rnf alertName
+      `Prelude.seq` Prelude.rnf alertSensitivityThreshold
+      `Prelude.seq` Prelude.rnf alertStatus
+      `Prelude.seq` Prelude.rnf alertType
+      `Prelude.seq` Prelude.rnf anomalyDetectorArn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf lastModificationTime
diff --git a/gen/Amazonka/LookoutMetrics/Types/AlertFilters.hs b/gen/Amazonka/LookoutMetrics/Types/AlertFilters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/AlertFilters.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.LookoutMetrics.Types.AlertFilters
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.AlertFilters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.DimensionFilter
+import qualified Amazonka.Prelude as Prelude
+
+-- | The configuration of the alert filters.
+--
+-- /See:/ 'newAlertFilters' smart constructor.
+data AlertFilters = AlertFilters'
+  { -- | The list of DimensionFilter objects that are used for dimension-based
+    -- filtering.
+    dimensionFilterList :: Prelude.Maybe (Prelude.NonEmpty DimensionFilter),
+    -- | The list of measures that you want to get alerts for.
+    metricList :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AlertFilters' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dimensionFilterList', 'alertFilters_dimensionFilterList' - The list of DimensionFilter objects that are used for dimension-based
+-- filtering.
+--
+-- 'metricList', 'alertFilters_metricList' - The list of measures that you want to get alerts for.
+newAlertFilters ::
+  AlertFilters
+newAlertFilters =
+  AlertFilters'
+    { dimensionFilterList =
+        Prelude.Nothing,
+      metricList = Prelude.Nothing
+    }
+
+-- | The list of DimensionFilter objects that are used for dimension-based
+-- filtering.
+alertFilters_dimensionFilterList :: Lens.Lens' AlertFilters (Prelude.Maybe (Prelude.NonEmpty DimensionFilter))
+alertFilters_dimensionFilterList = Lens.lens (\AlertFilters' {dimensionFilterList} -> dimensionFilterList) (\s@AlertFilters' {} a -> s {dimensionFilterList = a} :: AlertFilters) Prelude.. Lens.mapping Lens.coerced
+
+-- | The list of measures that you want to get alerts for.
+alertFilters_metricList :: Lens.Lens' AlertFilters (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+alertFilters_metricList = Lens.lens (\AlertFilters' {metricList} -> metricList) (\s@AlertFilters' {} a -> s {metricList = a} :: AlertFilters) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON AlertFilters where
+  parseJSON =
+    Data.withObject
+      "AlertFilters"
+      ( \x ->
+          AlertFilters'
+            Prelude.<$> (x Data..:? "DimensionFilterList")
+            Prelude.<*> (x Data..:? "MetricList")
+      )
+
+instance Prelude.Hashable AlertFilters where
+  hashWithSalt _salt AlertFilters' {..} =
+    _salt
+      `Prelude.hashWithSalt` dimensionFilterList
+      `Prelude.hashWithSalt` metricList
+
+instance Prelude.NFData AlertFilters where
+  rnf AlertFilters' {..} =
+    Prelude.rnf dimensionFilterList
+      `Prelude.seq` Prelude.rnf metricList
+
+instance Data.ToJSON AlertFilters where
+  toJSON AlertFilters' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DimensionFilterList" Data..=)
+              Prelude.<$> dimensionFilterList,
+            ("MetricList" Data..=) Prelude.<$> metricList
+          ]
+      )
diff --git a/gen/Amazonka/LookoutMetrics/Types/AlertStatus.hs b/gen/Amazonka/LookoutMetrics/Types/AlertStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/AlertStatus.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.LookoutMetrics.Types.AlertStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.AlertStatus
+  ( AlertStatus
+      ( ..,
+        AlertStatus_ACTIVE,
+        AlertStatus_INACTIVE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AlertStatus = AlertStatus'
+  { fromAlertStatus ::
+      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 AlertStatus_ACTIVE :: AlertStatus
+pattern AlertStatus_ACTIVE = AlertStatus' "ACTIVE"
+
+pattern AlertStatus_INACTIVE :: AlertStatus
+pattern AlertStatus_INACTIVE = AlertStatus' "INACTIVE"
+
+{-# COMPLETE
+  AlertStatus_ACTIVE,
+  AlertStatus_INACTIVE,
+  AlertStatus'
+  #-}
diff --git a/gen/Amazonka/LookoutMetrics/Types/AlertSummary.hs b/gen/Amazonka/LookoutMetrics/Types/AlertSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/AlertSummary.hs
@@ -0,0 +1,173 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.Types.AlertSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.AlertSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.AlertStatus
+import Amazonka.LookoutMetrics.Types.AlertType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides a summary of an alert\'s configuration.
+--
+-- /See:/ 'newAlertSummary' smart constructor.
+data AlertSummary = AlertSummary'
+  { -- | The ARN of the alert.
+    alertArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the alert.
+    alertName :: Prelude.Maybe Prelude.Text,
+    -- | The minimum severity for an anomaly to trigger the alert.
+    alertSensitivityThreshold :: Prelude.Maybe Prelude.Natural,
+    -- | The status of the alert.
+    alertStatus :: Prelude.Maybe AlertStatus,
+    -- | The type of the alert.
+    alertType :: Prelude.Maybe AlertType,
+    -- | The ARN of the detector to which the alert is attached.
+    anomalyDetectorArn :: Prelude.Maybe Prelude.Text,
+    -- | The time at which the alert was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The time at which the alert was last modified.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | The alert\'s
+    -- <https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html tags>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AlertSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'alertArn', 'alertSummary_alertArn' - The ARN of the alert.
+--
+-- 'alertName', 'alertSummary_alertName' - The name of the alert.
+--
+-- 'alertSensitivityThreshold', 'alertSummary_alertSensitivityThreshold' - The minimum severity for an anomaly to trigger the alert.
+--
+-- 'alertStatus', 'alertSummary_alertStatus' - The status of the alert.
+--
+-- 'alertType', 'alertSummary_alertType' - The type of the alert.
+--
+-- 'anomalyDetectorArn', 'alertSummary_anomalyDetectorArn' - The ARN of the detector to which the alert is attached.
+--
+-- 'creationTime', 'alertSummary_creationTime' - The time at which the alert was created.
+--
+-- 'lastModificationTime', 'alertSummary_lastModificationTime' - The time at which the alert was last modified.
+--
+-- 'tags', 'alertSummary_tags' - The alert\'s
+-- <https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html tags>.
+newAlertSummary ::
+  AlertSummary
+newAlertSummary =
+  AlertSummary'
+    { alertArn = Prelude.Nothing,
+      alertName = Prelude.Nothing,
+      alertSensitivityThreshold = Prelude.Nothing,
+      alertStatus = Prelude.Nothing,
+      alertType = Prelude.Nothing,
+      anomalyDetectorArn = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The ARN of the alert.
+alertSummary_alertArn :: Lens.Lens' AlertSummary (Prelude.Maybe Prelude.Text)
+alertSummary_alertArn = Lens.lens (\AlertSummary' {alertArn} -> alertArn) (\s@AlertSummary' {} a -> s {alertArn = a} :: AlertSummary)
+
+-- | The name of the alert.
+alertSummary_alertName :: Lens.Lens' AlertSummary (Prelude.Maybe Prelude.Text)
+alertSummary_alertName = Lens.lens (\AlertSummary' {alertName} -> alertName) (\s@AlertSummary' {} a -> s {alertName = a} :: AlertSummary)
+
+-- | The minimum severity for an anomaly to trigger the alert.
+alertSummary_alertSensitivityThreshold :: Lens.Lens' AlertSummary (Prelude.Maybe Prelude.Natural)
+alertSummary_alertSensitivityThreshold = Lens.lens (\AlertSummary' {alertSensitivityThreshold} -> alertSensitivityThreshold) (\s@AlertSummary' {} a -> s {alertSensitivityThreshold = a} :: AlertSummary)
+
+-- | The status of the alert.
+alertSummary_alertStatus :: Lens.Lens' AlertSummary (Prelude.Maybe AlertStatus)
+alertSummary_alertStatus = Lens.lens (\AlertSummary' {alertStatus} -> alertStatus) (\s@AlertSummary' {} a -> s {alertStatus = a} :: AlertSummary)
+
+-- | The type of the alert.
+alertSummary_alertType :: Lens.Lens' AlertSummary (Prelude.Maybe AlertType)
+alertSummary_alertType = Lens.lens (\AlertSummary' {alertType} -> alertType) (\s@AlertSummary' {} a -> s {alertType = a} :: AlertSummary)
+
+-- | The ARN of the detector to which the alert is attached.
+alertSummary_anomalyDetectorArn :: Lens.Lens' AlertSummary (Prelude.Maybe Prelude.Text)
+alertSummary_anomalyDetectorArn = Lens.lens (\AlertSummary' {anomalyDetectorArn} -> anomalyDetectorArn) (\s@AlertSummary' {} a -> s {anomalyDetectorArn = a} :: AlertSummary)
+
+-- | The time at which the alert was created.
+alertSummary_creationTime :: Lens.Lens' AlertSummary (Prelude.Maybe Prelude.UTCTime)
+alertSummary_creationTime = Lens.lens (\AlertSummary' {creationTime} -> creationTime) (\s@AlertSummary' {} a -> s {creationTime = a} :: AlertSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The time at which the alert was last modified.
+alertSummary_lastModificationTime :: Lens.Lens' AlertSummary (Prelude.Maybe Prelude.UTCTime)
+alertSummary_lastModificationTime = Lens.lens (\AlertSummary' {lastModificationTime} -> lastModificationTime) (\s@AlertSummary' {} a -> s {lastModificationTime = a} :: AlertSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The alert\'s
+-- <https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html tags>.
+alertSummary_tags :: Lens.Lens' AlertSummary (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+alertSummary_tags = Lens.lens (\AlertSummary' {tags} -> tags) (\s@AlertSummary' {} a -> s {tags = a} :: AlertSummary) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON AlertSummary where
+  parseJSON =
+    Data.withObject
+      "AlertSummary"
+      ( \x ->
+          AlertSummary'
+            Prelude.<$> (x Data..:? "AlertArn")
+            Prelude.<*> (x Data..:? "AlertName")
+            Prelude.<*> (x Data..:? "AlertSensitivityThreshold")
+            Prelude.<*> (x Data..:? "AlertStatus")
+            Prelude.<*> (x Data..:? "AlertType")
+            Prelude.<*> (x Data..:? "AnomalyDetectorArn")
+            Prelude.<*> (x Data..:? "CreationTime")
+            Prelude.<*> (x Data..:? "LastModificationTime")
+            Prelude.<*> (x Data..:? "Tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable AlertSummary where
+  hashWithSalt _salt AlertSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` alertArn
+      `Prelude.hashWithSalt` alertName
+      `Prelude.hashWithSalt` alertSensitivityThreshold
+      `Prelude.hashWithSalt` alertStatus
+      `Prelude.hashWithSalt` alertType
+      `Prelude.hashWithSalt` anomalyDetectorArn
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` lastModificationTime
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData AlertSummary where
+  rnf AlertSummary' {..} =
+    Prelude.rnf alertArn
+      `Prelude.seq` Prelude.rnf alertName
+      `Prelude.seq` Prelude.rnf alertSensitivityThreshold
+      `Prelude.seq` Prelude.rnf alertStatus
+      `Prelude.seq` Prelude.rnf alertType
+      `Prelude.seq` Prelude.rnf anomalyDetectorArn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/LookoutMetrics/Types/AlertType.hs b/gen/Amazonka/LookoutMetrics/Types/AlertType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/AlertType.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.LookoutMetrics.Types.AlertType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.AlertType
+  ( AlertType
+      ( ..,
+        AlertType_LAMBDA,
+        AlertType_SNS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AlertType = AlertType'
+  { fromAlertType ::
+      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 AlertType_LAMBDA :: AlertType
+pattern AlertType_LAMBDA = AlertType' "LAMBDA"
+
+pattern AlertType_SNS :: AlertType
+pattern AlertType_SNS = AlertType' "SNS"
+
+{-# COMPLETE
+  AlertType_LAMBDA,
+  AlertType_SNS,
+  AlertType'
+  #-}
diff --git a/gen/Amazonka/LookoutMetrics/Types/AnomalyDetectionTaskStatus.hs b/gen/Amazonka/LookoutMetrics/Types/AnomalyDetectionTaskStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/AnomalyDetectionTaskStatus.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.Types.AnomalyDetectionTaskStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.AnomalyDetectionTaskStatus
+  ( AnomalyDetectionTaskStatus
+      ( ..,
+        AnomalyDetectionTaskStatus_COMPLETED,
+        AnomalyDetectionTaskStatus_FAILED,
+        AnomalyDetectionTaskStatus_FAILED_TO_SCHEDULE,
+        AnomalyDetectionTaskStatus_IN_PROGRESS,
+        AnomalyDetectionTaskStatus_PENDING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AnomalyDetectionTaskStatus = AnomalyDetectionTaskStatus'
+  { fromAnomalyDetectionTaskStatus ::
+      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 AnomalyDetectionTaskStatus_COMPLETED :: AnomalyDetectionTaskStatus
+pattern AnomalyDetectionTaskStatus_COMPLETED = AnomalyDetectionTaskStatus' "COMPLETED"
+
+pattern AnomalyDetectionTaskStatus_FAILED :: AnomalyDetectionTaskStatus
+pattern AnomalyDetectionTaskStatus_FAILED = AnomalyDetectionTaskStatus' "FAILED"
+
+pattern AnomalyDetectionTaskStatus_FAILED_TO_SCHEDULE :: AnomalyDetectionTaskStatus
+pattern AnomalyDetectionTaskStatus_FAILED_TO_SCHEDULE = AnomalyDetectionTaskStatus' "FAILED_TO_SCHEDULE"
+
+pattern AnomalyDetectionTaskStatus_IN_PROGRESS :: AnomalyDetectionTaskStatus
+pattern AnomalyDetectionTaskStatus_IN_PROGRESS = AnomalyDetectionTaskStatus' "IN_PROGRESS"
+
+pattern AnomalyDetectionTaskStatus_PENDING :: AnomalyDetectionTaskStatus
+pattern AnomalyDetectionTaskStatus_PENDING = AnomalyDetectionTaskStatus' "PENDING"
+
+{-# COMPLETE
+  AnomalyDetectionTaskStatus_COMPLETED,
+  AnomalyDetectionTaskStatus_FAILED,
+  AnomalyDetectionTaskStatus_FAILED_TO_SCHEDULE,
+  AnomalyDetectionTaskStatus_IN_PROGRESS,
+  AnomalyDetectionTaskStatus_PENDING,
+  AnomalyDetectionTaskStatus'
+  #-}
diff --git a/gen/Amazonka/LookoutMetrics/Types/AnomalyDetectorConfig.hs b/gen/Amazonka/LookoutMetrics/Types/AnomalyDetectorConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/AnomalyDetectorConfig.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.LookoutMetrics.Types.AnomalyDetectorConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.AnomalyDetectorConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.Frequency
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains information about a detector\'s configuration.
+--
+-- /See:/ 'newAnomalyDetectorConfig' smart constructor.
+data AnomalyDetectorConfig = AnomalyDetectorConfig'
+  { -- | The frequency at which the detector analyzes its source data.
+    anomalyDetectorFrequency :: Prelude.Maybe Frequency
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AnomalyDetectorConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyDetectorFrequency', 'anomalyDetectorConfig_anomalyDetectorFrequency' - The frequency at which the detector analyzes its source data.
+newAnomalyDetectorConfig ::
+  AnomalyDetectorConfig
+newAnomalyDetectorConfig =
+  AnomalyDetectorConfig'
+    { anomalyDetectorFrequency =
+        Prelude.Nothing
+    }
+
+-- | The frequency at which the detector analyzes its source data.
+anomalyDetectorConfig_anomalyDetectorFrequency :: Lens.Lens' AnomalyDetectorConfig (Prelude.Maybe Frequency)
+anomalyDetectorConfig_anomalyDetectorFrequency = Lens.lens (\AnomalyDetectorConfig' {anomalyDetectorFrequency} -> anomalyDetectorFrequency) (\s@AnomalyDetectorConfig' {} a -> s {anomalyDetectorFrequency = a} :: AnomalyDetectorConfig)
+
+instance Prelude.Hashable AnomalyDetectorConfig where
+  hashWithSalt _salt AnomalyDetectorConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` anomalyDetectorFrequency
+
+instance Prelude.NFData AnomalyDetectorConfig where
+  rnf AnomalyDetectorConfig' {..} =
+    Prelude.rnf anomalyDetectorFrequency
+
+instance Data.ToJSON AnomalyDetectorConfig where
+  toJSON AnomalyDetectorConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AnomalyDetectorFrequency" Data..=)
+              Prelude.<$> anomalyDetectorFrequency
+          ]
+      )
diff --git a/gen/Amazonka/LookoutMetrics/Types/AnomalyDetectorConfigSummary.hs b/gen/Amazonka/LookoutMetrics/Types/AnomalyDetectorConfigSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/AnomalyDetectorConfigSummary.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.LookoutMetrics.Types.AnomalyDetectorConfigSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.AnomalyDetectorConfigSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.Frequency
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains information about a detector\'s configuration.
+--
+-- /See:/ 'newAnomalyDetectorConfigSummary' smart constructor.
+data AnomalyDetectorConfigSummary = AnomalyDetectorConfigSummary'
+  { -- | The interval at which the detector analyzes its source data.
+    anomalyDetectorFrequency :: Prelude.Maybe Frequency
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AnomalyDetectorConfigSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyDetectorFrequency', 'anomalyDetectorConfigSummary_anomalyDetectorFrequency' - The interval at which the detector analyzes its source data.
+newAnomalyDetectorConfigSummary ::
+  AnomalyDetectorConfigSummary
+newAnomalyDetectorConfigSummary =
+  AnomalyDetectorConfigSummary'
+    { anomalyDetectorFrequency =
+        Prelude.Nothing
+    }
+
+-- | The interval at which the detector analyzes its source data.
+anomalyDetectorConfigSummary_anomalyDetectorFrequency :: Lens.Lens' AnomalyDetectorConfigSummary (Prelude.Maybe Frequency)
+anomalyDetectorConfigSummary_anomalyDetectorFrequency = Lens.lens (\AnomalyDetectorConfigSummary' {anomalyDetectorFrequency} -> anomalyDetectorFrequency) (\s@AnomalyDetectorConfigSummary' {} a -> s {anomalyDetectorFrequency = a} :: AnomalyDetectorConfigSummary)
+
+instance Data.FromJSON AnomalyDetectorConfigSummary where
+  parseJSON =
+    Data.withObject
+      "AnomalyDetectorConfigSummary"
+      ( \x ->
+          AnomalyDetectorConfigSummary'
+            Prelude.<$> (x Data..:? "AnomalyDetectorFrequency")
+      )
+
+instance
+  Prelude.Hashable
+    AnomalyDetectorConfigSummary
+  where
+  hashWithSalt _salt AnomalyDetectorConfigSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` anomalyDetectorFrequency
+
+instance Prelude.NFData AnomalyDetectorConfigSummary where
+  rnf AnomalyDetectorConfigSummary' {..} =
+    Prelude.rnf anomalyDetectorFrequency
diff --git a/gen/Amazonka/LookoutMetrics/Types/AnomalyDetectorDataQualityMetric.hs b/gen/Amazonka/LookoutMetrics/Types/AnomalyDetectorDataQualityMetric.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/AnomalyDetectorDataQualityMetric.hs
@@ -0,0 +1,104 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.Types.AnomalyDetectorDataQualityMetric
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.AnomalyDetectorDataQualityMetric where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.MetricSetDataQualityMetric
+import qualified Amazonka.Prelude as Prelude
+
+-- | Aggregated details about the data quality metrics collected for the
+-- @AnomalyDetectorArn@ provided in the GetDataQualityMetrics object.
+--
+-- /See:/ 'newAnomalyDetectorDataQualityMetric' smart constructor.
+data AnomalyDetectorDataQualityMetric = AnomalyDetectorDataQualityMetric'
+  { -- | An array of @DataQualityMetricList@ objects. Each object in the array
+    -- contains information about a data quality metric.
+    metricSetDataQualityMetricList :: Prelude.Maybe [MetricSetDataQualityMetric],
+    -- | The start time for the data quality metrics collection.
+    startTimestamp :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AnomalyDetectorDataQualityMetric' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'metricSetDataQualityMetricList', 'anomalyDetectorDataQualityMetric_metricSetDataQualityMetricList' - An array of @DataQualityMetricList@ objects. Each object in the array
+-- contains information about a data quality metric.
+--
+-- 'startTimestamp', 'anomalyDetectorDataQualityMetric_startTimestamp' - The start time for the data quality metrics collection.
+newAnomalyDetectorDataQualityMetric ::
+  AnomalyDetectorDataQualityMetric
+newAnomalyDetectorDataQualityMetric =
+  AnomalyDetectorDataQualityMetric'
+    { metricSetDataQualityMetricList =
+        Prelude.Nothing,
+      startTimestamp = Prelude.Nothing
+    }
+
+-- | An array of @DataQualityMetricList@ objects. Each object in the array
+-- contains information about a data quality metric.
+anomalyDetectorDataQualityMetric_metricSetDataQualityMetricList :: Lens.Lens' AnomalyDetectorDataQualityMetric (Prelude.Maybe [MetricSetDataQualityMetric])
+anomalyDetectorDataQualityMetric_metricSetDataQualityMetricList = Lens.lens (\AnomalyDetectorDataQualityMetric' {metricSetDataQualityMetricList} -> metricSetDataQualityMetricList) (\s@AnomalyDetectorDataQualityMetric' {} a -> s {metricSetDataQualityMetricList = a} :: AnomalyDetectorDataQualityMetric) Prelude.. Lens.mapping Lens.coerced
+
+-- | The start time for the data quality metrics collection.
+anomalyDetectorDataQualityMetric_startTimestamp :: Lens.Lens' AnomalyDetectorDataQualityMetric (Prelude.Maybe Prelude.UTCTime)
+anomalyDetectorDataQualityMetric_startTimestamp = Lens.lens (\AnomalyDetectorDataQualityMetric' {startTimestamp} -> startTimestamp) (\s@AnomalyDetectorDataQualityMetric' {} a -> s {startTimestamp = a} :: AnomalyDetectorDataQualityMetric) Prelude.. Lens.mapping Data._Time
+
+instance
+  Data.FromJSON
+    AnomalyDetectorDataQualityMetric
+  where
+  parseJSON =
+    Data.withObject
+      "AnomalyDetectorDataQualityMetric"
+      ( \x ->
+          AnomalyDetectorDataQualityMetric'
+            Prelude.<$> ( x
+                            Data..:? "MetricSetDataQualityMetricList"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "StartTimestamp")
+      )
+
+instance
+  Prelude.Hashable
+    AnomalyDetectorDataQualityMetric
+  where
+  hashWithSalt
+    _salt
+    AnomalyDetectorDataQualityMetric' {..} =
+      _salt
+        `Prelude.hashWithSalt` metricSetDataQualityMetricList
+        `Prelude.hashWithSalt` startTimestamp
+
+instance
+  Prelude.NFData
+    AnomalyDetectorDataQualityMetric
+  where
+  rnf AnomalyDetectorDataQualityMetric' {..} =
+    Prelude.rnf metricSetDataQualityMetricList
+      `Prelude.seq` Prelude.rnf startTimestamp
diff --git a/gen/Amazonka/LookoutMetrics/Types/AnomalyDetectorFailureType.hs b/gen/Amazonka/LookoutMetrics/Types/AnomalyDetectorFailureType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/AnomalyDetectorFailureType.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.LookoutMetrics.Types.AnomalyDetectorFailureType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.AnomalyDetectorFailureType
+  ( AnomalyDetectorFailureType
+      ( ..,
+        AnomalyDetectorFailureType_ACTIVATION_FAILURE,
+        AnomalyDetectorFailureType_BACK_TEST_ACTIVATION_FAILURE,
+        AnomalyDetectorFailureType_DEACTIVATION_FAILURE,
+        AnomalyDetectorFailureType_DELETION_FAILURE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AnomalyDetectorFailureType = AnomalyDetectorFailureType'
+  { fromAnomalyDetectorFailureType ::
+      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 AnomalyDetectorFailureType_ACTIVATION_FAILURE :: AnomalyDetectorFailureType
+pattern AnomalyDetectorFailureType_ACTIVATION_FAILURE = AnomalyDetectorFailureType' "ACTIVATION_FAILURE"
+
+pattern AnomalyDetectorFailureType_BACK_TEST_ACTIVATION_FAILURE :: AnomalyDetectorFailureType
+pattern AnomalyDetectorFailureType_BACK_TEST_ACTIVATION_FAILURE = AnomalyDetectorFailureType' "BACK_TEST_ACTIVATION_FAILURE"
+
+pattern AnomalyDetectorFailureType_DEACTIVATION_FAILURE :: AnomalyDetectorFailureType
+pattern AnomalyDetectorFailureType_DEACTIVATION_FAILURE = AnomalyDetectorFailureType' "DEACTIVATION_FAILURE"
+
+pattern AnomalyDetectorFailureType_DELETION_FAILURE :: AnomalyDetectorFailureType
+pattern AnomalyDetectorFailureType_DELETION_FAILURE = AnomalyDetectorFailureType' "DELETION_FAILURE"
+
+{-# COMPLETE
+  AnomalyDetectorFailureType_ACTIVATION_FAILURE,
+  AnomalyDetectorFailureType_BACK_TEST_ACTIVATION_FAILURE,
+  AnomalyDetectorFailureType_DEACTIVATION_FAILURE,
+  AnomalyDetectorFailureType_DELETION_FAILURE,
+  AnomalyDetectorFailureType'
+  #-}
diff --git a/gen/Amazonka/LookoutMetrics/Types/AnomalyDetectorStatus.hs b/gen/Amazonka/LookoutMetrics/Types/AnomalyDetectorStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/AnomalyDetectorStatus.hs
@@ -0,0 +1,116 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.Types.AnomalyDetectorStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.AnomalyDetectorStatus
+  ( AnomalyDetectorStatus
+      ( ..,
+        AnomalyDetectorStatus_ACTIVATING,
+        AnomalyDetectorStatus_ACTIVE,
+        AnomalyDetectorStatus_BACK_TEST_ACTIVATING,
+        AnomalyDetectorStatus_BACK_TEST_ACTIVE,
+        AnomalyDetectorStatus_BACK_TEST_COMPLETE,
+        AnomalyDetectorStatus_DEACTIVATED,
+        AnomalyDetectorStatus_DEACTIVATING,
+        AnomalyDetectorStatus_DELETING,
+        AnomalyDetectorStatus_FAILED,
+        AnomalyDetectorStatus_INACTIVE,
+        AnomalyDetectorStatus_LEARNING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AnomalyDetectorStatus = AnomalyDetectorStatus'
+  { fromAnomalyDetectorStatus ::
+      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 AnomalyDetectorStatus_ACTIVATING :: AnomalyDetectorStatus
+pattern AnomalyDetectorStatus_ACTIVATING = AnomalyDetectorStatus' "ACTIVATING"
+
+pattern AnomalyDetectorStatus_ACTIVE :: AnomalyDetectorStatus
+pattern AnomalyDetectorStatus_ACTIVE = AnomalyDetectorStatus' "ACTIVE"
+
+pattern AnomalyDetectorStatus_BACK_TEST_ACTIVATING :: AnomalyDetectorStatus
+pattern AnomalyDetectorStatus_BACK_TEST_ACTIVATING = AnomalyDetectorStatus' "BACK_TEST_ACTIVATING"
+
+pattern AnomalyDetectorStatus_BACK_TEST_ACTIVE :: AnomalyDetectorStatus
+pattern AnomalyDetectorStatus_BACK_TEST_ACTIVE = AnomalyDetectorStatus' "BACK_TEST_ACTIVE"
+
+pattern AnomalyDetectorStatus_BACK_TEST_COMPLETE :: AnomalyDetectorStatus
+pattern AnomalyDetectorStatus_BACK_TEST_COMPLETE = AnomalyDetectorStatus' "BACK_TEST_COMPLETE"
+
+pattern AnomalyDetectorStatus_DEACTIVATED :: AnomalyDetectorStatus
+pattern AnomalyDetectorStatus_DEACTIVATED = AnomalyDetectorStatus' "DEACTIVATED"
+
+pattern AnomalyDetectorStatus_DEACTIVATING :: AnomalyDetectorStatus
+pattern AnomalyDetectorStatus_DEACTIVATING = AnomalyDetectorStatus' "DEACTIVATING"
+
+pattern AnomalyDetectorStatus_DELETING :: AnomalyDetectorStatus
+pattern AnomalyDetectorStatus_DELETING = AnomalyDetectorStatus' "DELETING"
+
+pattern AnomalyDetectorStatus_FAILED :: AnomalyDetectorStatus
+pattern AnomalyDetectorStatus_FAILED = AnomalyDetectorStatus' "FAILED"
+
+pattern AnomalyDetectorStatus_INACTIVE :: AnomalyDetectorStatus
+pattern AnomalyDetectorStatus_INACTIVE = AnomalyDetectorStatus' "INACTIVE"
+
+pattern AnomalyDetectorStatus_LEARNING :: AnomalyDetectorStatus
+pattern AnomalyDetectorStatus_LEARNING = AnomalyDetectorStatus' "LEARNING"
+
+{-# COMPLETE
+  AnomalyDetectorStatus_ACTIVATING,
+  AnomalyDetectorStatus_ACTIVE,
+  AnomalyDetectorStatus_BACK_TEST_ACTIVATING,
+  AnomalyDetectorStatus_BACK_TEST_ACTIVE,
+  AnomalyDetectorStatus_BACK_TEST_COMPLETE,
+  AnomalyDetectorStatus_DEACTIVATED,
+  AnomalyDetectorStatus_DEACTIVATING,
+  AnomalyDetectorStatus_DELETING,
+  AnomalyDetectorStatus_FAILED,
+  AnomalyDetectorStatus_INACTIVE,
+  AnomalyDetectorStatus_LEARNING,
+  AnomalyDetectorStatus'
+  #-}
diff --git a/gen/Amazonka/LookoutMetrics/Types/AnomalyDetectorSummary.hs b/gen/Amazonka/LookoutMetrics/Types/AnomalyDetectorSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/AnomalyDetectorSummary.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.LookoutMetrics.Types.AnomalyDetectorSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.AnomalyDetectorSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.AnomalyDetectorStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains information about an an anomaly detector.
+--
+-- /See:/ 'newAnomalyDetectorSummary' smart constructor.
+data AnomalyDetectorSummary = AnomalyDetectorSummary'
+  { -- | The ARN of the detector.
+    anomalyDetectorArn :: Prelude.Maybe Prelude.Text,
+    -- | A description of the detector.
+    anomalyDetectorDescription :: Prelude.Maybe Prelude.Text,
+    -- | The name of the detector.
+    anomalyDetectorName :: Prelude.Maybe Prelude.Text,
+    -- | The time at which the detector was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The time at which the detector was last modified.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | The status of detector.
+    status :: Prelude.Maybe AnomalyDetectorStatus,
+    -- | The detector\'s
+    -- <https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html tags>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AnomalyDetectorSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyDetectorArn', 'anomalyDetectorSummary_anomalyDetectorArn' - The ARN of the detector.
+--
+-- 'anomalyDetectorDescription', 'anomalyDetectorSummary_anomalyDetectorDescription' - A description of the detector.
+--
+-- 'anomalyDetectorName', 'anomalyDetectorSummary_anomalyDetectorName' - The name of the detector.
+--
+-- 'creationTime', 'anomalyDetectorSummary_creationTime' - The time at which the detector was created.
+--
+-- 'lastModificationTime', 'anomalyDetectorSummary_lastModificationTime' - The time at which the detector was last modified.
+--
+-- 'status', 'anomalyDetectorSummary_status' - The status of detector.
+--
+-- 'tags', 'anomalyDetectorSummary_tags' - The detector\'s
+-- <https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html tags>.
+newAnomalyDetectorSummary ::
+  AnomalyDetectorSummary
+newAnomalyDetectorSummary =
+  AnomalyDetectorSummary'
+    { anomalyDetectorArn =
+        Prelude.Nothing,
+      anomalyDetectorDescription = Prelude.Nothing,
+      anomalyDetectorName = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The ARN of the detector.
+anomalyDetectorSummary_anomalyDetectorArn :: Lens.Lens' AnomalyDetectorSummary (Prelude.Maybe Prelude.Text)
+anomalyDetectorSummary_anomalyDetectorArn = Lens.lens (\AnomalyDetectorSummary' {anomalyDetectorArn} -> anomalyDetectorArn) (\s@AnomalyDetectorSummary' {} a -> s {anomalyDetectorArn = a} :: AnomalyDetectorSummary)
+
+-- | A description of the detector.
+anomalyDetectorSummary_anomalyDetectorDescription :: Lens.Lens' AnomalyDetectorSummary (Prelude.Maybe Prelude.Text)
+anomalyDetectorSummary_anomalyDetectorDescription = Lens.lens (\AnomalyDetectorSummary' {anomalyDetectorDescription} -> anomalyDetectorDescription) (\s@AnomalyDetectorSummary' {} a -> s {anomalyDetectorDescription = a} :: AnomalyDetectorSummary)
+
+-- | The name of the detector.
+anomalyDetectorSummary_anomalyDetectorName :: Lens.Lens' AnomalyDetectorSummary (Prelude.Maybe Prelude.Text)
+anomalyDetectorSummary_anomalyDetectorName = Lens.lens (\AnomalyDetectorSummary' {anomalyDetectorName} -> anomalyDetectorName) (\s@AnomalyDetectorSummary' {} a -> s {anomalyDetectorName = a} :: AnomalyDetectorSummary)
+
+-- | The time at which the detector was created.
+anomalyDetectorSummary_creationTime :: Lens.Lens' AnomalyDetectorSummary (Prelude.Maybe Prelude.UTCTime)
+anomalyDetectorSummary_creationTime = Lens.lens (\AnomalyDetectorSummary' {creationTime} -> creationTime) (\s@AnomalyDetectorSummary' {} a -> s {creationTime = a} :: AnomalyDetectorSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The time at which the detector was last modified.
+anomalyDetectorSummary_lastModificationTime :: Lens.Lens' AnomalyDetectorSummary (Prelude.Maybe Prelude.UTCTime)
+anomalyDetectorSummary_lastModificationTime = Lens.lens (\AnomalyDetectorSummary' {lastModificationTime} -> lastModificationTime) (\s@AnomalyDetectorSummary' {} a -> s {lastModificationTime = a} :: AnomalyDetectorSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The status of detector.
+anomalyDetectorSummary_status :: Lens.Lens' AnomalyDetectorSummary (Prelude.Maybe AnomalyDetectorStatus)
+anomalyDetectorSummary_status = Lens.lens (\AnomalyDetectorSummary' {status} -> status) (\s@AnomalyDetectorSummary' {} a -> s {status = a} :: AnomalyDetectorSummary)
+
+-- | The detector\'s
+-- <https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html tags>.
+anomalyDetectorSummary_tags :: Lens.Lens' AnomalyDetectorSummary (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+anomalyDetectorSummary_tags = Lens.lens (\AnomalyDetectorSummary' {tags} -> tags) (\s@AnomalyDetectorSummary' {} a -> s {tags = a} :: AnomalyDetectorSummary) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON AnomalyDetectorSummary where
+  parseJSON =
+    Data.withObject
+      "AnomalyDetectorSummary"
+      ( \x ->
+          AnomalyDetectorSummary'
+            Prelude.<$> (x Data..:? "AnomalyDetectorArn")
+            Prelude.<*> (x Data..:? "AnomalyDetectorDescription")
+            Prelude.<*> (x Data..:? "AnomalyDetectorName")
+            Prelude.<*> (x Data..:? "CreationTime")
+            Prelude.<*> (x Data..:? "LastModificationTime")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "Tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable AnomalyDetectorSummary where
+  hashWithSalt _salt AnomalyDetectorSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` anomalyDetectorArn
+      `Prelude.hashWithSalt` anomalyDetectorDescription
+      `Prelude.hashWithSalt` anomalyDetectorName
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` lastModificationTime
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData AnomalyDetectorSummary where
+  rnf AnomalyDetectorSummary' {..} =
+    Prelude.rnf anomalyDetectorArn
+      `Prelude.seq` Prelude.rnf anomalyDetectorDescription
+      `Prelude.seq` Prelude.rnf anomalyDetectorName
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/LookoutMetrics/Types/AnomalyGroup.hs b/gen/Amazonka/LookoutMetrics/Types/AnomalyGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/AnomalyGroup.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.LookoutMetrics.Types.AnomalyGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.AnomalyGroup where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.MetricLevelImpact
+import qualified Amazonka.Prelude as Prelude
+
+-- | A group of anomalous metrics
+--
+-- /See:/ 'newAnomalyGroup' smart constructor.
+data AnomalyGroup = AnomalyGroup'
+  { -- | The ID of the anomaly group.
+    anomalyGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The severity score of the group.
+    anomalyGroupScore :: Prelude.Maybe Prelude.Double,
+    -- | The end time for the group.
+    endTime :: Prelude.Maybe Prelude.Text,
+    -- | A list of measures affected by the anomaly.
+    metricLevelImpactList :: Prelude.Maybe [MetricLevelImpact],
+    -- | The name of the primary affected measure for the group.
+    primaryMetricName :: Prelude.Maybe Prelude.Text,
+    -- | The start time for the group.
+    startTime :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AnomalyGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyGroupId', 'anomalyGroup_anomalyGroupId' - The ID of the anomaly group.
+--
+-- 'anomalyGroupScore', 'anomalyGroup_anomalyGroupScore' - The severity score of the group.
+--
+-- 'endTime', 'anomalyGroup_endTime' - The end time for the group.
+--
+-- 'metricLevelImpactList', 'anomalyGroup_metricLevelImpactList' - A list of measures affected by the anomaly.
+--
+-- 'primaryMetricName', 'anomalyGroup_primaryMetricName' - The name of the primary affected measure for the group.
+--
+-- 'startTime', 'anomalyGroup_startTime' - The start time for the group.
+newAnomalyGroup ::
+  AnomalyGroup
+newAnomalyGroup =
+  AnomalyGroup'
+    { anomalyGroupId = Prelude.Nothing,
+      anomalyGroupScore = Prelude.Nothing,
+      endTime = Prelude.Nothing,
+      metricLevelImpactList = Prelude.Nothing,
+      primaryMetricName = Prelude.Nothing,
+      startTime = Prelude.Nothing
+    }
+
+-- | The ID of the anomaly group.
+anomalyGroup_anomalyGroupId :: Lens.Lens' AnomalyGroup (Prelude.Maybe Prelude.Text)
+anomalyGroup_anomalyGroupId = Lens.lens (\AnomalyGroup' {anomalyGroupId} -> anomalyGroupId) (\s@AnomalyGroup' {} a -> s {anomalyGroupId = a} :: AnomalyGroup)
+
+-- | The severity score of the group.
+anomalyGroup_anomalyGroupScore :: Lens.Lens' AnomalyGroup (Prelude.Maybe Prelude.Double)
+anomalyGroup_anomalyGroupScore = Lens.lens (\AnomalyGroup' {anomalyGroupScore} -> anomalyGroupScore) (\s@AnomalyGroup' {} a -> s {anomalyGroupScore = a} :: AnomalyGroup)
+
+-- | The end time for the group.
+anomalyGroup_endTime :: Lens.Lens' AnomalyGroup (Prelude.Maybe Prelude.Text)
+anomalyGroup_endTime = Lens.lens (\AnomalyGroup' {endTime} -> endTime) (\s@AnomalyGroup' {} a -> s {endTime = a} :: AnomalyGroup)
+
+-- | A list of measures affected by the anomaly.
+anomalyGroup_metricLevelImpactList :: Lens.Lens' AnomalyGroup (Prelude.Maybe [MetricLevelImpact])
+anomalyGroup_metricLevelImpactList = Lens.lens (\AnomalyGroup' {metricLevelImpactList} -> metricLevelImpactList) (\s@AnomalyGroup' {} a -> s {metricLevelImpactList = a} :: AnomalyGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the primary affected measure for the group.
+anomalyGroup_primaryMetricName :: Lens.Lens' AnomalyGroup (Prelude.Maybe Prelude.Text)
+anomalyGroup_primaryMetricName = Lens.lens (\AnomalyGroup' {primaryMetricName} -> primaryMetricName) (\s@AnomalyGroup' {} a -> s {primaryMetricName = a} :: AnomalyGroup)
+
+-- | The start time for the group.
+anomalyGroup_startTime :: Lens.Lens' AnomalyGroup (Prelude.Maybe Prelude.Text)
+anomalyGroup_startTime = Lens.lens (\AnomalyGroup' {startTime} -> startTime) (\s@AnomalyGroup' {} a -> s {startTime = a} :: AnomalyGroup)
+
+instance Data.FromJSON AnomalyGroup where
+  parseJSON =
+    Data.withObject
+      "AnomalyGroup"
+      ( \x ->
+          AnomalyGroup'
+            Prelude.<$> (x Data..:? "AnomalyGroupId")
+            Prelude.<*> (x Data..:? "AnomalyGroupScore")
+            Prelude.<*> (x Data..:? "EndTime")
+            Prelude.<*> ( x
+                            Data..:? "MetricLevelImpactList"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "PrimaryMetricName")
+            Prelude.<*> (x Data..:? "StartTime")
+      )
+
+instance Prelude.Hashable AnomalyGroup where
+  hashWithSalt _salt AnomalyGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` anomalyGroupId
+      `Prelude.hashWithSalt` anomalyGroupScore
+      `Prelude.hashWithSalt` endTime
+      `Prelude.hashWithSalt` metricLevelImpactList
+      `Prelude.hashWithSalt` primaryMetricName
+      `Prelude.hashWithSalt` startTime
+
+instance Prelude.NFData AnomalyGroup where
+  rnf AnomalyGroup' {..} =
+    Prelude.rnf anomalyGroupId
+      `Prelude.seq` Prelude.rnf anomalyGroupScore
+      `Prelude.seq` Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf metricLevelImpactList
+      `Prelude.seq` Prelude.rnf primaryMetricName
+      `Prelude.seq` Prelude.rnf startTime
diff --git a/gen/Amazonka/LookoutMetrics/Types/AnomalyGroupStatistics.hs b/gen/Amazonka/LookoutMetrics/Types/AnomalyGroupStatistics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/AnomalyGroupStatistics.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.LookoutMetrics.Types.AnomalyGroupStatistics
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.AnomalyGroupStatistics where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.ItemizedMetricStats
+import qualified Amazonka.Prelude as Prelude
+
+-- | Aggregated statistics for a group of anomalous metrics.
+--
+-- /See:/ 'newAnomalyGroupStatistics' smart constructor.
+data AnomalyGroupStatistics = AnomalyGroupStatistics'
+  { -- | The start of the time range that was searched.
+    evaluationStartDate :: Prelude.Maybe Prelude.Text,
+    -- | Statistics for individual metrics within the group.
+    itemizedMetricStatsList :: Prelude.Maybe [ItemizedMetricStats],
+    -- | The number of groups found.
+    totalCount :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AnomalyGroupStatistics' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'evaluationStartDate', 'anomalyGroupStatistics_evaluationStartDate' - The start of the time range that was searched.
+--
+-- 'itemizedMetricStatsList', 'anomalyGroupStatistics_itemizedMetricStatsList' - Statistics for individual metrics within the group.
+--
+-- 'totalCount', 'anomalyGroupStatistics_totalCount' - The number of groups found.
+newAnomalyGroupStatistics ::
+  AnomalyGroupStatistics
+newAnomalyGroupStatistics =
+  AnomalyGroupStatistics'
+    { evaluationStartDate =
+        Prelude.Nothing,
+      itemizedMetricStatsList = Prelude.Nothing,
+      totalCount = Prelude.Nothing
+    }
+
+-- | The start of the time range that was searched.
+anomalyGroupStatistics_evaluationStartDate :: Lens.Lens' AnomalyGroupStatistics (Prelude.Maybe Prelude.Text)
+anomalyGroupStatistics_evaluationStartDate = Lens.lens (\AnomalyGroupStatistics' {evaluationStartDate} -> evaluationStartDate) (\s@AnomalyGroupStatistics' {} a -> s {evaluationStartDate = a} :: AnomalyGroupStatistics)
+
+-- | Statistics for individual metrics within the group.
+anomalyGroupStatistics_itemizedMetricStatsList :: Lens.Lens' AnomalyGroupStatistics (Prelude.Maybe [ItemizedMetricStats])
+anomalyGroupStatistics_itemizedMetricStatsList = Lens.lens (\AnomalyGroupStatistics' {itemizedMetricStatsList} -> itemizedMetricStatsList) (\s@AnomalyGroupStatistics' {} a -> s {itemizedMetricStatsList = a} :: AnomalyGroupStatistics) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of groups found.
+anomalyGroupStatistics_totalCount :: Lens.Lens' AnomalyGroupStatistics (Prelude.Maybe Prelude.Int)
+anomalyGroupStatistics_totalCount = Lens.lens (\AnomalyGroupStatistics' {totalCount} -> totalCount) (\s@AnomalyGroupStatistics' {} a -> s {totalCount = a} :: AnomalyGroupStatistics)
+
+instance Data.FromJSON AnomalyGroupStatistics where
+  parseJSON =
+    Data.withObject
+      "AnomalyGroupStatistics"
+      ( \x ->
+          AnomalyGroupStatistics'
+            Prelude.<$> (x Data..:? "EvaluationStartDate")
+            Prelude.<*> ( x
+                            Data..:? "ItemizedMetricStatsList"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "TotalCount")
+      )
+
+instance Prelude.Hashable AnomalyGroupStatistics where
+  hashWithSalt _salt AnomalyGroupStatistics' {..} =
+    _salt
+      `Prelude.hashWithSalt` evaluationStartDate
+      `Prelude.hashWithSalt` itemizedMetricStatsList
+      `Prelude.hashWithSalt` totalCount
+
+instance Prelude.NFData AnomalyGroupStatistics where
+  rnf AnomalyGroupStatistics' {..} =
+    Prelude.rnf evaluationStartDate
+      `Prelude.seq` Prelude.rnf itemizedMetricStatsList
+      `Prelude.seq` Prelude.rnf totalCount
diff --git a/gen/Amazonka/LookoutMetrics/Types/AnomalyGroupSummary.hs b/gen/Amazonka/LookoutMetrics/Types/AnomalyGroupSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/AnomalyGroupSummary.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.LookoutMetrics.Types.AnomalyGroupSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.AnomalyGroupSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about a group of anomalous metrics.
+--
+-- /See:/ 'newAnomalyGroupSummary' smart constructor.
+data AnomalyGroupSummary = AnomalyGroupSummary'
+  { -- | The ID of the anomaly group.
+    anomalyGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The severity score of the group.
+    anomalyGroupScore :: Prelude.Maybe Prelude.Double,
+    -- | The end time for the group.
+    endTime :: Prelude.Maybe Prelude.Text,
+    -- | The name of the primary affected measure for the group.
+    primaryMetricName :: Prelude.Maybe Prelude.Text,
+    -- | The start time for the group.
+    startTime :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AnomalyGroupSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyGroupId', 'anomalyGroupSummary_anomalyGroupId' - The ID of the anomaly group.
+--
+-- 'anomalyGroupScore', 'anomalyGroupSummary_anomalyGroupScore' - The severity score of the group.
+--
+-- 'endTime', 'anomalyGroupSummary_endTime' - The end time for the group.
+--
+-- 'primaryMetricName', 'anomalyGroupSummary_primaryMetricName' - The name of the primary affected measure for the group.
+--
+-- 'startTime', 'anomalyGroupSummary_startTime' - The start time for the group.
+newAnomalyGroupSummary ::
+  AnomalyGroupSummary
+newAnomalyGroupSummary =
+  AnomalyGroupSummary'
+    { anomalyGroupId =
+        Prelude.Nothing,
+      anomalyGroupScore = Prelude.Nothing,
+      endTime = Prelude.Nothing,
+      primaryMetricName = Prelude.Nothing,
+      startTime = Prelude.Nothing
+    }
+
+-- | The ID of the anomaly group.
+anomalyGroupSummary_anomalyGroupId :: Lens.Lens' AnomalyGroupSummary (Prelude.Maybe Prelude.Text)
+anomalyGroupSummary_anomalyGroupId = Lens.lens (\AnomalyGroupSummary' {anomalyGroupId} -> anomalyGroupId) (\s@AnomalyGroupSummary' {} a -> s {anomalyGroupId = a} :: AnomalyGroupSummary)
+
+-- | The severity score of the group.
+anomalyGroupSummary_anomalyGroupScore :: Lens.Lens' AnomalyGroupSummary (Prelude.Maybe Prelude.Double)
+anomalyGroupSummary_anomalyGroupScore = Lens.lens (\AnomalyGroupSummary' {anomalyGroupScore} -> anomalyGroupScore) (\s@AnomalyGroupSummary' {} a -> s {anomalyGroupScore = a} :: AnomalyGroupSummary)
+
+-- | The end time for the group.
+anomalyGroupSummary_endTime :: Lens.Lens' AnomalyGroupSummary (Prelude.Maybe Prelude.Text)
+anomalyGroupSummary_endTime = Lens.lens (\AnomalyGroupSummary' {endTime} -> endTime) (\s@AnomalyGroupSummary' {} a -> s {endTime = a} :: AnomalyGroupSummary)
+
+-- | The name of the primary affected measure for the group.
+anomalyGroupSummary_primaryMetricName :: Lens.Lens' AnomalyGroupSummary (Prelude.Maybe Prelude.Text)
+anomalyGroupSummary_primaryMetricName = Lens.lens (\AnomalyGroupSummary' {primaryMetricName} -> primaryMetricName) (\s@AnomalyGroupSummary' {} a -> s {primaryMetricName = a} :: AnomalyGroupSummary)
+
+-- | The start time for the group.
+anomalyGroupSummary_startTime :: Lens.Lens' AnomalyGroupSummary (Prelude.Maybe Prelude.Text)
+anomalyGroupSummary_startTime = Lens.lens (\AnomalyGroupSummary' {startTime} -> startTime) (\s@AnomalyGroupSummary' {} a -> s {startTime = a} :: AnomalyGroupSummary)
+
+instance Data.FromJSON AnomalyGroupSummary where
+  parseJSON =
+    Data.withObject
+      "AnomalyGroupSummary"
+      ( \x ->
+          AnomalyGroupSummary'
+            Prelude.<$> (x Data..:? "AnomalyGroupId")
+            Prelude.<*> (x Data..:? "AnomalyGroupScore")
+            Prelude.<*> (x Data..:? "EndTime")
+            Prelude.<*> (x Data..:? "PrimaryMetricName")
+            Prelude.<*> (x Data..:? "StartTime")
+      )
+
+instance Prelude.Hashable AnomalyGroupSummary where
+  hashWithSalt _salt AnomalyGroupSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` anomalyGroupId
+      `Prelude.hashWithSalt` anomalyGroupScore
+      `Prelude.hashWithSalt` endTime
+      `Prelude.hashWithSalt` primaryMetricName
+      `Prelude.hashWithSalt` startTime
+
+instance Prelude.NFData AnomalyGroupSummary where
+  rnf AnomalyGroupSummary' {..} =
+    Prelude.rnf anomalyGroupId
+      `Prelude.seq` Prelude.rnf anomalyGroupScore
+      `Prelude.seq` Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf primaryMetricName
+      `Prelude.seq` Prelude.rnf startTime
diff --git a/gen/Amazonka/LookoutMetrics/Types/AnomalyGroupTimeSeries.hs b/gen/Amazonka/LookoutMetrics/Types/AnomalyGroupTimeSeries.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/AnomalyGroupTimeSeries.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.LookoutMetrics.Types.AnomalyGroupTimeSeries
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.AnomalyGroupTimeSeries where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An anomalous metric in an anomaly group.
+--
+-- /See:/ 'newAnomalyGroupTimeSeries' smart constructor.
+data AnomalyGroupTimeSeries = AnomalyGroupTimeSeries'
+  { -- | The ID of the metric.
+    timeSeriesId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the anomaly group.
+    anomalyGroupId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AnomalyGroupTimeSeries' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'timeSeriesId', 'anomalyGroupTimeSeries_timeSeriesId' - The ID of the metric.
+--
+-- 'anomalyGroupId', 'anomalyGroupTimeSeries_anomalyGroupId' - The ID of the anomaly group.
+newAnomalyGroupTimeSeries ::
+  -- | 'anomalyGroupId'
+  Prelude.Text ->
+  AnomalyGroupTimeSeries
+newAnomalyGroupTimeSeries pAnomalyGroupId_ =
+  AnomalyGroupTimeSeries'
+    { timeSeriesId =
+        Prelude.Nothing,
+      anomalyGroupId = pAnomalyGroupId_
+    }
+
+-- | The ID of the metric.
+anomalyGroupTimeSeries_timeSeriesId :: Lens.Lens' AnomalyGroupTimeSeries (Prelude.Maybe Prelude.Text)
+anomalyGroupTimeSeries_timeSeriesId = Lens.lens (\AnomalyGroupTimeSeries' {timeSeriesId} -> timeSeriesId) (\s@AnomalyGroupTimeSeries' {} a -> s {timeSeriesId = a} :: AnomalyGroupTimeSeries)
+
+-- | The ID of the anomaly group.
+anomalyGroupTimeSeries_anomalyGroupId :: Lens.Lens' AnomalyGroupTimeSeries Prelude.Text
+anomalyGroupTimeSeries_anomalyGroupId = Lens.lens (\AnomalyGroupTimeSeries' {anomalyGroupId} -> anomalyGroupId) (\s@AnomalyGroupTimeSeries' {} a -> s {anomalyGroupId = a} :: AnomalyGroupTimeSeries)
+
+instance Prelude.Hashable AnomalyGroupTimeSeries where
+  hashWithSalt _salt AnomalyGroupTimeSeries' {..} =
+    _salt
+      `Prelude.hashWithSalt` timeSeriesId
+      `Prelude.hashWithSalt` anomalyGroupId
+
+instance Prelude.NFData AnomalyGroupTimeSeries where
+  rnf AnomalyGroupTimeSeries' {..} =
+    Prelude.rnf timeSeriesId
+      `Prelude.seq` Prelude.rnf anomalyGroupId
+
+instance Data.ToJSON AnomalyGroupTimeSeries where
+  toJSON AnomalyGroupTimeSeries' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("TimeSeriesId" Data..=) Prelude.<$> timeSeriesId,
+            Prelude.Just
+              ("AnomalyGroupId" Data..= anomalyGroupId)
+          ]
+      )
diff --git a/gen/Amazonka/LookoutMetrics/Types/AnomalyGroupTimeSeriesFeedback.hs b/gen/Amazonka/LookoutMetrics/Types/AnomalyGroupTimeSeriesFeedback.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/AnomalyGroupTimeSeriesFeedback.hs
@@ -0,0 +1,114 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.Types.AnomalyGroupTimeSeriesFeedback
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.AnomalyGroupTimeSeriesFeedback 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
+
+-- | Feedback for an anomalous metric.
+--
+-- /See:/ 'newAnomalyGroupTimeSeriesFeedback' smart constructor.
+data AnomalyGroupTimeSeriesFeedback = AnomalyGroupTimeSeriesFeedback'
+  { -- | The ID of the anomaly group.
+    anomalyGroupId :: Prelude.Text,
+    -- | The ID of the metric.
+    timeSeriesId :: Prelude.Text,
+    -- | Feedback on whether the metric is a legitimate anomaly.
+    isAnomaly :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AnomalyGroupTimeSeriesFeedback' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyGroupId', 'anomalyGroupTimeSeriesFeedback_anomalyGroupId' - The ID of the anomaly group.
+--
+-- 'timeSeriesId', 'anomalyGroupTimeSeriesFeedback_timeSeriesId' - The ID of the metric.
+--
+-- 'isAnomaly', 'anomalyGroupTimeSeriesFeedback_isAnomaly' - Feedback on whether the metric is a legitimate anomaly.
+newAnomalyGroupTimeSeriesFeedback ::
+  -- | 'anomalyGroupId'
+  Prelude.Text ->
+  -- | 'timeSeriesId'
+  Prelude.Text ->
+  -- | 'isAnomaly'
+  Prelude.Bool ->
+  AnomalyGroupTimeSeriesFeedback
+newAnomalyGroupTimeSeriesFeedback
+  pAnomalyGroupId_
+  pTimeSeriesId_
+  pIsAnomaly_ =
+    AnomalyGroupTimeSeriesFeedback'
+      { anomalyGroupId =
+          pAnomalyGroupId_,
+        timeSeriesId = pTimeSeriesId_,
+        isAnomaly = pIsAnomaly_
+      }
+
+-- | The ID of the anomaly group.
+anomalyGroupTimeSeriesFeedback_anomalyGroupId :: Lens.Lens' AnomalyGroupTimeSeriesFeedback Prelude.Text
+anomalyGroupTimeSeriesFeedback_anomalyGroupId = Lens.lens (\AnomalyGroupTimeSeriesFeedback' {anomalyGroupId} -> anomalyGroupId) (\s@AnomalyGroupTimeSeriesFeedback' {} a -> s {anomalyGroupId = a} :: AnomalyGroupTimeSeriesFeedback)
+
+-- | The ID of the metric.
+anomalyGroupTimeSeriesFeedback_timeSeriesId :: Lens.Lens' AnomalyGroupTimeSeriesFeedback Prelude.Text
+anomalyGroupTimeSeriesFeedback_timeSeriesId = Lens.lens (\AnomalyGroupTimeSeriesFeedback' {timeSeriesId} -> timeSeriesId) (\s@AnomalyGroupTimeSeriesFeedback' {} a -> s {timeSeriesId = a} :: AnomalyGroupTimeSeriesFeedback)
+
+-- | Feedback on whether the metric is a legitimate anomaly.
+anomalyGroupTimeSeriesFeedback_isAnomaly :: Lens.Lens' AnomalyGroupTimeSeriesFeedback Prelude.Bool
+anomalyGroupTimeSeriesFeedback_isAnomaly = Lens.lens (\AnomalyGroupTimeSeriesFeedback' {isAnomaly} -> isAnomaly) (\s@AnomalyGroupTimeSeriesFeedback' {} a -> s {isAnomaly = a} :: AnomalyGroupTimeSeriesFeedback)
+
+instance
+  Prelude.Hashable
+    AnomalyGroupTimeSeriesFeedback
+  where
+  hashWithSalt
+    _salt
+    AnomalyGroupTimeSeriesFeedback' {..} =
+      _salt
+        `Prelude.hashWithSalt` anomalyGroupId
+        `Prelude.hashWithSalt` timeSeriesId
+        `Prelude.hashWithSalt` isAnomaly
+
+instance
+  Prelude.NFData
+    AnomalyGroupTimeSeriesFeedback
+  where
+  rnf AnomalyGroupTimeSeriesFeedback' {..} =
+    Prelude.rnf anomalyGroupId
+      `Prelude.seq` Prelude.rnf timeSeriesId
+      `Prelude.seq` Prelude.rnf isAnomaly
+
+instance Data.ToJSON AnomalyGroupTimeSeriesFeedback where
+  toJSON AnomalyGroupTimeSeriesFeedback' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("AnomalyGroupId" Data..= anomalyGroupId),
+            Prelude.Just ("TimeSeriesId" Data..= timeSeriesId),
+            Prelude.Just ("IsAnomaly" Data..= isAnomaly)
+          ]
+      )
diff --git a/gen/Amazonka/LookoutMetrics/Types/AppFlowConfig.hs b/gen/Amazonka/LookoutMetrics/Types/AppFlowConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/AppFlowConfig.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.LookoutMetrics.Types.AppFlowConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.AppFlowConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about an Amazon AppFlow flow datasource.
+--
+-- /See:/ 'newAppFlowConfig' smart constructor.
+data AppFlowConfig = AppFlowConfig'
+  { -- | name of the flow.
+    flowName :: Prelude.Maybe Prelude.Text,
+    -- | An IAM role that gives Amazon Lookout for Metrics permission to access
+    -- the flow.
+    roleArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AppFlowConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'flowName', 'appFlowConfig_flowName' - name of the flow.
+--
+-- 'roleArn', 'appFlowConfig_roleArn' - An IAM role that gives Amazon Lookout for Metrics permission to access
+-- the flow.
+newAppFlowConfig ::
+  AppFlowConfig
+newAppFlowConfig =
+  AppFlowConfig'
+    { flowName = Prelude.Nothing,
+      roleArn = Prelude.Nothing
+    }
+
+-- | name of the flow.
+appFlowConfig_flowName :: Lens.Lens' AppFlowConfig (Prelude.Maybe Prelude.Text)
+appFlowConfig_flowName = Lens.lens (\AppFlowConfig' {flowName} -> flowName) (\s@AppFlowConfig' {} a -> s {flowName = a} :: AppFlowConfig)
+
+-- | An IAM role that gives Amazon Lookout for Metrics permission to access
+-- the flow.
+appFlowConfig_roleArn :: Lens.Lens' AppFlowConfig (Prelude.Maybe Prelude.Text)
+appFlowConfig_roleArn = Lens.lens (\AppFlowConfig' {roleArn} -> roleArn) (\s@AppFlowConfig' {} a -> s {roleArn = a} :: AppFlowConfig)
+
+instance Data.FromJSON AppFlowConfig where
+  parseJSON =
+    Data.withObject
+      "AppFlowConfig"
+      ( \x ->
+          AppFlowConfig'
+            Prelude.<$> (x Data..:? "FlowName")
+            Prelude.<*> (x Data..:? "RoleArn")
+      )
+
+instance Prelude.Hashable AppFlowConfig where
+  hashWithSalt _salt AppFlowConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` flowName
+      `Prelude.hashWithSalt` roleArn
+
+instance Prelude.NFData AppFlowConfig where
+  rnf AppFlowConfig' {..} =
+    Prelude.rnf flowName
+      `Prelude.seq` Prelude.rnf roleArn
+
+instance Data.ToJSON AppFlowConfig where
+  toJSON AppFlowConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("FlowName" Data..=) Prelude.<$> flowName,
+            ("RoleArn" Data..=) Prelude.<$> roleArn
+          ]
+      )
diff --git a/gen/Amazonka/LookoutMetrics/Types/AthenaSourceConfig.hs b/gen/Amazonka/LookoutMetrics/Types/AthenaSourceConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/AthenaSourceConfig.hs
@@ -0,0 +1,164 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.Types.AthenaSourceConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.AthenaSourceConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.BackTestConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about an Amazon Athena datasource.
+--
+-- /See:/ 'newAthenaSourceConfig' smart constructor.
+data AthenaSourceConfig = AthenaSourceConfig'
+  { -- | Settings for backtest mode.
+    backTestConfiguration :: Prelude.Maybe BackTestConfiguration,
+    -- | The database\'s data catalog.
+    dataCatalog :: Prelude.Maybe Prelude.Text,
+    -- | The database\'s name.
+    databaseName :: Prelude.Maybe Prelude.Text,
+    -- | An IAM role that gives Amazon Lookout for Metrics permission to access
+    -- the data.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | The database\'s results path.
+    s3ResultsPath :: Prelude.Maybe Prelude.Text,
+    -- | The database\'s table name.
+    tableName :: Prelude.Maybe Prelude.Text,
+    -- | The database\'s work group name.
+    workGroupName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AthenaSourceConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'backTestConfiguration', 'athenaSourceConfig_backTestConfiguration' - Settings for backtest mode.
+--
+-- 'dataCatalog', 'athenaSourceConfig_dataCatalog' - The database\'s data catalog.
+--
+-- 'databaseName', 'athenaSourceConfig_databaseName' - The database\'s name.
+--
+-- 'roleArn', 'athenaSourceConfig_roleArn' - An IAM role that gives Amazon Lookout for Metrics permission to access
+-- the data.
+--
+-- 's3ResultsPath', 'athenaSourceConfig_s3ResultsPath' - The database\'s results path.
+--
+-- 'tableName', 'athenaSourceConfig_tableName' - The database\'s table name.
+--
+-- 'workGroupName', 'athenaSourceConfig_workGroupName' - The database\'s work group name.
+newAthenaSourceConfig ::
+  AthenaSourceConfig
+newAthenaSourceConfig =
+  AthenaSourceConfig'
+    { backTestConfiguration =
+        Prelude.Nothing,
+      dataCatalog = Prelude.Nothing,
+      databaseName = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      s3ResultsPath = Prelude.Nothing,
+      tableName = Prelude.Nothing,
+      workGroupName = Prelude.Nothing
+    }
+
+-- | Settings for backtest mode.
+athenaSourceConfig_backTestConfiguration :: Lens.Lens' AthenaSourceConfig (Prelude.Maybe BackTestConfiguration)
+athenaSourceConfig_backTestConfiguration = Lens.lens (\AthenaSourceConfig' {backTestConfiguration} -> backTestConfiguration) (\s@AthenaSourceConfig' {} a -> s {backTestConfiguration = a} :: AthenaSourceConfig)
+
+-- | The database\'s data catalog.
+athenaSourceConfig_dataCatalog :: Lens.Lens' AthenaSourceConfig (Prelude.Maybe Prelude.Text)
+athenaSourceConfig_dataCatalog = Lens.lens (\AthenaSourceConfig' {dataCatalog} -> dataCatalog) (\s@AthenaSourceConfig' {} a -> s {dataCatalog = a} :: AthenaSourceConfig)
+
+-- | The database\'s name.
+athenaSourceConfig_databaseName :: Lens.Lens' AthenaSourceConfig (Prelude.Maybe Prelude.Text)
+athenaSourceConfig_databaseName = Lens.lens (\AthenaSourceConfig' {databaseName} -> databaseName) (\s@AthenaSourceConfig' {} a -> s {databaseName = a} :: AthenaSourceConfig)
+
+-- | An IAM role that gives Amazon Lookout for Metrics permission to access
+-- the data.
+athenaSourceConfig_roleArn :: Lens.Lens' AthenaSourceConfig (Prelude.Maybe Prelude.Text)
+athenaSourceConfig_roleArn = Lens.lens (\AthenaSourceConfig' {roleArn} -> roleArn) (\s@AthenaSourceConfig' {} a -> s {roleArn = a} :: AthenaSourceConfig)
+
+-- | The database\'s results path.
+athenaSourceConfig_s3ResultsPath :: Lens.Lens' AthenaSourceConfig (Prelude.Maybe Prelude.Text)
+athenaSourceConfig_s3ResultsPath = Lens.lens (\AthenaSourceConfig' {s3ResultsPath} -> s3ResultsPath) (\s@AthenaSourceConfig' {} a -> s {s3ResultsPath = a} :: AthenaSourceConfig)
+
+-- | The database\'s table name.
+athenaSourceConfig_tableName :: Lens.Lens' AthenaSourceConfig (Prelude.Maybe Prelude.Text)
+athenaSourceConfig_tableName = Lens.lens (\AthenaSourceConfig' {tableName} -> tableName) (\s@AthenaSourceConfig' {} a -> s {tableName = a} :: AthenaSourceConfig)
+
+-- | The database\'s work group name.
+athenaSourceConfig_workGroupName :: Lens.Lens' AthenaSourceConfig (Prelude.Maybe Prelude.Text)
+athenaSourceConfig_workGroupName = Lens.lens (\AthenaSourceConfig' {workGroupName} -> workGroupName) (\s@AthenaSourceConfig' {} a -> s {workGroupName = a} :: AthenaSourceConfig)
+
+instance Data.FromJSON AthenaSourceConfig where
+  parseJSON =
+    Data.withObject
+      "AthenaSourceConfig"
+      ( \x ->
+          AthenaSourceConfig'
+            Prelude.<$> (x Data..:? "BackTestConfiguration")
+            Prelude.<*> (x Data..:? "DataCatalog")
+            Prelude.<*> (x Data..:? "DatabaseName")
+            Prelude.<*> (x Data..:? "RoleArn")
+            Prelude.<*> (x Data..:? "S3ResultsPath")
+            Prelude.<*> (x Data..:? "TableName")
+            Prelude.<*> (x Data..:? "WorkGroupName")
+      )
+
+instance Prelude.Hashable AthenaSourceConfig where
+  hashWithSalt _salt AthenaSourceConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` backTestConfiguration
+      `Prelude.hashWithSalt` dataCatalog
+      `Prelude.hashWithSalt` databaseName
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` s3ResultsPath
+      `Prelude.hashWithSalt` tableName
+      `Prelude.hashWithSalt` workGroupName
+
+instance Prelude.NFData AthenaSourceConfig where
+  rnf AthenaSourceConfig' {..} =
+    Prelude.rnf backTestConfiguration
+      `Prelude.seq` Prelude.rnf dataCatalog
+      `Prelude.seq` Prelude.rnf databaseName
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf s3ResultsPath
+      `Prelude.seq` Prelude.rnf tableName
+      `Prelude.seq` Prelude.rnf workGroupName
+
+instance Data.ToJSON AthenaSourceConfig where
+  toJSON AthenaSourceConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("BackTestConfiguration" Data..=)
+              Prelude.<$> backTestConfiguration,
+            ("DataCatalog" Data..=) Prelude.<$> dataCatalog,
+            ("DatabaseName" Data..=) Prelude.<$> databaseName,
+            ("RoleArn" Data..=) Prelude.<$> roleArn,
+            ("S3ResultsPath" Data..=) Prelude.<$> s3ResultsPath,
+            ("TableName" Data..=) Prelude.<$> tableName,
+            ("WorkGroupName" Data..=) Prelude.<$> workGroupName
+          ]
+      )
diff --git a/gen/Amazonka/LookoutMetrics/Types/AttributeValue.hs b/gen/Amazonka/LookoutMetrics/Types/AttributeValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/AttributeValue.hs
@@ -0,0 +1,132 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.Types.AttributeValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.AttributeValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An attribute value.
+--
+-- /See:/ 'newAttributeValue' smart constructor.
+data AttributeValue = AttributeValue'
+  { -- | A binary value.
+    b :: Prelude.Maybe Prelude.Text,
+    -- | A list of binary values.
+    bs :: Prelude.Maybe [Prelude.Text],
+    -- | A number.
+    n :: Prelude.Maybe Prelude.Text,
+    -- | A list of numbers.
+    ns :: Prelude.Maybe [Prelude.Text],
+    -- | A string.
+    s :: Prelude.Maybe Prelude.Text,
+    -- | A list of strings.
+    ss :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AttributeValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'b', 'attributeValue_b' - A binary value.
+--
+-- 'bs', 'attributeValue_bs' - A list of binary values.
+--
+-- 'n', 'attributeValue_n' - A number.
+--
+-- 'ns', 'attributeValue_ns' - A list of numbers.
+--
+-- 's', 'attributeValue_s' - A string.
+--
+-- 'ss', 'attributeValue_ss' - A list of strings.
+newAttributeValue ::
+  AttributeValue
+newAttributeValue =
+  AttributeValue'
+    { b = Prelude.Nothing,
+      bs = Prelude.Nothing,
+      n = Prelude.Nothing,
+      ns = Prelude.Nothing,
+      s = Prelude.Nothing,
+      ss = Prelude.Nothing
+    }
+
+-- | A binary value.
+attributeValue_b :: Lens.Lens' AttributeValue (Prelude.Maybe Prelude.Text)
+attributeValue_b = Lens.lens (\AttributeValue' {b} -> b) (\s@AttributeValue' {} a -> s {b = a} :: AttributeValue)
+
+-- | A list of binary values.
+attributeValue_bs :: Lens.Lens' AttributeValue (Prelude.Maybe [Prelude.Text])
+attributeValue_bs = Lens.lens (\AttributeValue' {bs} -> bs) (\s@AttributeValue' {} a -> s {bs = a} :: AttributeValue) Prelude.. Lens.mapping Lens.coerced
+
+-- | A number.
+attributeValue_n :: Lens.Lens' AttributeValue (Prelude.Maybe Prelude.Text)
+attributeValue_n = Lens.lens (\AttributeValue' {n} -> n) (\s@AttributeValue' {} a -> s {n = a} :: AttributeValue)
+
+-- | A list of numbers.
+attributeValue_ns :: Lens.Lens' AttributeValue (Prelude.Maybe [Prelude.Text])
+attributeValue_ns = Lens.lens (\AttributeValue' {ns} -> ns) (\s@AttributeValue' {} a -> s {ns = a} :: AttributeValue) Prelude.. Lens.mapping Lens.coerced
+
+-- | A string.
+attributeValue_s :: Lens.Lens' AttributeValue (Prelude.Maybe Prelude.Text)
+attributeValue_s = Lens.lens (\AttributeValue' {s} -> s) (\s@AttributeValue' {} a -> s {s = a} :: AttributeValue)
+
+-- | A list of strings.
+attributeValue_ss :: Lens.Lens' AttributeValue (Prelude.Maybe [Prelude.Text])
+attributeValue_ss = Lens.lens (\AttributeValue' {ss} -> ss) (\s@AttributeValue' {} a -> s {ss = a} :: AttributeValue) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON AttributeValue where
+  parseJSON =
+    Data.withObject
+      "AttributeValue"
+      ( \x ->
+          AttributeValue'
+            Prelude.<$> (x Data..:? "B")
+            Prelude.<*> (x Data..:? "BS" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "N")
+            Prelude.<*> (x Data..:? "NS" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "S")
+            Prelude.<*> (x Data..:? "SS" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable AttributeValue where
+  hashWithSalt _salt AttributeValue' {..} =
+    _salt
+      `Prelude.hashWithSalt` b
+      `Prelude.hashWithSalt` bs
+      `Prelude.hashWithSalt` n
+      `Prelude.hashWithSalt` ns
+      `Prelude.hashWithSalt` s
+      `Prelude.hashWithSalt` ss
+
+instance Prelude.NFData AttributeValue where
+  rnf AttributeValue' {..} =
+    Prelude.rnf b
+      `Prelude.seq` Prelude.rnf bs
+      `Prelude.seq` Prelude.rnf n
+      `Prelude.seq` Prelude.rnf ns
+      `Prelude.seq` Prelude.rnf s
+      `Prelude.seq` Prelude.rnf ss
diff --git a/gen/Amazonka/LookoutMetrics/Types/AutoDetectionMetricSource.hs b/gen/Amazonka/LookoutMetrics/Types/AutoDetectionMetricSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/AutoDetectionMetricSource.hs
@@ -0,0 +1,73 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.Types.AutoDetectionMetricSource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.AutoDetectionMetricSource where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.AutoDetectionS3SourceConfig
+import qualified Amazonka.Prelude as Prelude
+
+-- | An auto detection metric source.
+--
+-- /See:/ 'newAutoDetectionMetricSource' smart constructor.
+data AutoDetectionMetricSource = AutoDetectionMetricSource'
+  { -- | The source\'s source config.
+    s3SourceConfig :: Prelude.Maybe AutoDetectionS3SourceConfig
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AutoDetectionMetricSource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3SourceConfig', 'autoDetectionMetricSource_s3SourceConfig' - The source\'s source config.
+newAutoDetectionMetricSource ::
+  AutoDetectionMetricSource
+newAutoDetectionMetricSource =
+  AutoDetectionMetricSource'
+    { s3SourceConfig =
+        Prelude.Nothing
+    }
+
+-- | The source\'s source config.
+autoDetectionMetricSource_s3SourceConfig :: Lens.Lens' AutoDetectionMetricSource (Prelude.Maybe AutoDetectionS3SourceConfig)
+autoDetectionMetricSource_s3SourceConfig = Lens.lens (\AutoDetectionMetricSource' {s3SourceConfig} -> s3SourceConfig) (\s@AutoDetectionMetricSource' {} a -> s {s3SourceConfig = a} :: AutoDetectionMetricSource)
+
+instance Prelude.Hashable AutoDetectionMetricSource where
+  hashWithSalt _salt AutoDetectionMetricSource' {..} =
+    _salt `Prelude.hashWithSalt` s3SourceConfig
+
+instance Prelude.NFData AutoDetectionMetricSource where
+  rnf AutoDetectionMetricSource' {..} =
+    Prelude.rnf s3SourceConfig
+
+instance Data.ToJSON AutoDetectionMetricSource where
+  toJSON AutoDetectionMetricSource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("S3SourceConfig" Data..=)
+              Prelude.<$> s3SourceConfig
+          ]
+      )
diff --git a/gen/Amazonka/LookoutMetrics/Types/AutoDetectionS3SourceConfig.hs b/gen/Amazonka/LookoutMetrics/Types/AutoDetectionS3SourceConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/AutoDetectionS3SourceConfig.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.LookoutMetrics.Types.AutoDetectionS3SourceConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.AutoDetectionS3SourceConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An auto detection source config.
+--
+-- /See:/ 'newAutoDetectionS3SourceConfig' smart constructor.
+data AutoDetectionS3SourceConfig = AutoDetectionS3SourceConfig'
+  { -- | The config\'s historical data path list.
+    historicalDataPathList :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The config\'s templated path list.
+    templatedPathList :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AutoDetectionS3SourceConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'historicalDataPathList', 'autoDetectionS3SourceConfig_historicalDataPathList' - The config\'s historical data path list.
+--
+-- 'templatedPathList', 'autoDetectionS3SourceConfig_templatedPathList' - The config\'s templated path list.
+newAutoDetectionS3SourceConfig ::
+  AutoDetectionS3SourceConfig
+newAutoDetectionS3SourceConfig =
+  AutoDetectionS3SourceConfig'
+    { historicalDataPathList =
+        Prelude.Nothing,
+      templatedPathList = Prelude.Nothing
+    }
+
+-- | The config\'s historical data path list.
+autoDetectionS3SourceConfig_historicalDataPathList :: Lens.Lens' AutoDetectionS3SourceConfig (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+autoDetectionS3SourceConfig_historicalDataPathList = Lens.lens (\AutoDetectionS3SourceConfig' {historicalDataPathList} -> historicalDataPathList) (\s@AutoDetectionS3SourceConfig' {} a -> s {historicalDataPathList = a} :: AutoDetectionS3SourceConfig) Prelude.. Lens.mapping Lens.coerced
+
+-- | The config\'s templated path list.
+autoDetectionS3SourceConfig_templatedPathList :: Lens.Lens' AutoDetectionS3SourceConfig (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+autoDetectionS3SourceConfig_templatedPathList = Lens.lens (\AutoDetectionS3SourceConfig' {templatedPathList} -> templatedPathList) (\s@AutoDetectionS3SourceConfig' {} a -> s {templatedPathList = a} :: AutoDetectionS3SourceConfig) Prelude.. Lens.mapping Lens.coerced
+
+instance Prelude.Hashable AutoDetectionS3SourceConfig where
+  hashWithSalt _salt AutoDetectionS3SourceConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` historicalDataPathList
+      `Prelude.hashWithSalt` templatedPathList
+
+instance Prelude.NFData AutoDetectionS3SourceConfig where
+  rnf AutoDetectionS3SourceConfig' {..} =
+    Prelude.rnf historicalDataPathList
+      `Prelude.seq` Prelude.rnf templatedPathList
+
+instance Data.ToJSON AutoDetectionS3SourceConfig where
+  toJSON AutoDetectionS3SourceConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("HistoricalDataPathList" Data..=)
+              Prelude.<$> historicalDataPathList,
+            ("TemplatedPathList" Data..=)
+              Prelude.<$> templatedPathList
+          ]
+      )
diff --git a/gen/Amazonka/LookoutMetrics/Types/BackTestConfiguration.hs b/gen/Amazonka/LookoutMetrics/Types/BackTestConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/BackTestConfiguration.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.Types.BackTestConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.BackTestConfiguration 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
+
+-- | Settings for backtest mode.
+--
+-- /See:/ 'newBackTestConfiguration' smart constructor.
+data BackTestConfiguration = BackTestConfiguration'
+  { -- | Run a backtest instead of monitoring new data.
+    runBackTestMode :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BackTestConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'runBackTestMode', 'backTestConfiguration_runBackTestMode' - Run a backtest instead of monitoring new data.
+newBackTestConfiguration ::
+  -- | 'runBackTestMode'
+  Prelude.Bool ->
+  BackTestConfiguration
+newBackTestConfiguration pRunBackTestMode_ =
+  BackTestConfiguration'
+    { runBackTestMode =
+        pRunBackTestMode_
+    }
+
+-- | Run a backtest instead of monitoring new data.
+backTestConfiguration_runBackTestMode :: Lens.Lens' BackTestConfiguration Prelude.Bool
+backTestConfiguration_runBackTestMode = Lens.lens (\BackTestConfiguration' {runBackTestMode} -> runBackTestMode) (\s@BackTestConfiguration' {} a -> s {runBackTestMode = a} :: BackTestConfiguration)
+
+instance Data.FromJSON BackTestConfiguration where
+  parseJSON =
+    Data.withObject
+      "BackTestConfiguration"
+      ( \x ->
+          BackTestConfiguration'
+            Prelude.<$> (x Data..: "RunBackTestMode")
+      )
+
+instance Prelude.Hashable BackTestConfiguration where
+  hashWithSalt _salt BackTestConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` runBackTestMode
+
+instance Prelude.NFData BackTestConfiguration where
+  rnf BackTestConfiguration' {..} =
+    Prelude.rnf runBackTestMode
+
+instance Data.ToJSON BackTestConfiguration where
+  toJSON BackTestConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("RunBackTestMode" Data..= runBackTestMode)
+          ]
+      )
diff --git a/gen/Amazonka/LookoutMetrics/Types/CSVFileCompression.hs b/gen/Amazonka/LookoutMetrics/Types/CSVFileCompression.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/CSVFileCompression.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.LookoutMetrics.Types.CSVFileCompression
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.CSVFileCompression
+  ( CSVFileCompression
+      ( ..,
+        CSVFileCompression_GZIP,
+        CSVFileCompression_NONE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype CSVFileCompression = CSVFileCompression'
+  { fromCSVFileCompression ::
+      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 CSVFileCompression_GZIP :: CSVFileCompression
+pattern CSVFileCompression_GZIP = CSVFileCompression' "GZIP"
+
+pattern CSVFileCompression_NONE :: CSVFileCompression
+pattern CSVFileCompression_NONE = CSVFileCompression' "NONE"
+
+{-# COMPLETE
+  CSVFileCompression_GZIP,
+  CSVFileCompression_NONE,
+  CSVFileCompression'
+  #-}
diff --git a/gen/Amazonka/LookoutMetrics/Types/CloudWatchConfig.hs b/gen/Amazonka/LookoutMetrics/Types/CloudWatchConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/CloudWatchConfig.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.LookoutMetrics.Types.CloudWatchConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.CloudWatchConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.BackTestConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about an Amazon CloudWatch datasource.
+--
+-- /See:/ 'newCloudWatchConfig' smart constructor.
+data CloudWatchConfig = CloudWatchConfig'
+  { -- | Settings for backtest mode.
+    backTestConfiguration :: Prelude.Maybe BackTestConfiguration,
+    -- | An IAM role that gives Amazon Lookout for Metrics permission to access
+    -- data in Amazon CloudWatch.
+    roleArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CloudWatchConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'backTestConfiguration', 'cloudWatchConfig_backTestConfiguration' - Settings for backtest mode.
+--
+-- 'roleArn', 'cloudWatchConfig_roleArn' - An IAM role that gives Amazon Lookout for Metrics permission to access
+-- data in Amazon CloudWatch.
+newCloudWatchConfig ::
+  CloudWatchConfig
+newCloudWatchConfig =
+  CloudWatchConfig'
+    { backTestConfiguration =
+        Prelude.Nothing,
+      roleArn = Prelude.Nothing
+    }
+
+-- | Settings for backtest mode.
+cloudWatchConfig_backTestConfiguration :: Lens.Lens' CloudWatchConfig (Prelude.Maybe BackTestConfiguration)
+cloudWatchConfig_backTestConfiguration = Lens.lens (\CloudWatchConfig' {backTestConfiguration} -> backTestConfiguration) (\s@CloudWatchConfig' {} a -> s {backTestConfiguration = a} :: CloudWatchConfig)
+
+-- | An IAM role that gives Amazon Lookout for Metrics permission to access
+-- data in Amazon CloudWatch.
+cloudWatchConfig_roleArn :: Lens.Lens' CloudWatchConfig (Prelude.Maybe Prelude.Text)
+cloudWatchConfig_roleArn = Lens.lens (\CloudWatchConfig' {roleArn} -> roleArn) (\s@CloudWatchConfig' {} a -> s {roleArn = a} :: CloudWatchConfig)
+
+instance Data.FromJSON CloudWatchConfig where
+  parseJSON =
+    Data.withObject
+      "CloudWatchConfig"
+      ( \x ->
+          CloudWatchConfig'
+            Prelude.<$> (x Data..:? "BackTestConfiguration")
+            Prelude.<*> (x Data..:? "RoleArn")
+      )
+
+instance Prelude.Hashable CloudWatchConfig where
+  hashWithSalt _salt CloudWatchConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` backTestConfiguration
+      `Prelude.hashWithSalt` roleArn
+
+instance Prelude.NFData CloudWatchConfig where
+  rnf CloudWatchConfig' {..} =
+    Prelude.rnf backTestConfiguration
+      `Prelude.seq` Prelude.rnf roleArn
+
+instance Data.ToJSON CloudWatchConfig where
+  toJSON CloudWatchConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("BackTestConfiguration" Data..=)
+              Prelude.<$> backTestConfiguration,
+            ("RoleArn" Data..=) Prelude.<$> roleArn
+          ]
+      )
diff --git a/gen/Amazonka/LookoutMetrics/Types/Confidence.hs b/gen/Amazonka/LookoutMetrics/Types/Confidence.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/Confidence.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.LookoutMetrics.Types.Confidence
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.Confidence
+  ( Confidence
+      ( ..,
+        Confidence_HIGH,
+        Confidence_LOW,
+        Confidence_NONE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Confidence = Confidence'
+  { fromConfidence ::
+      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 Confidence_HIGH :: Confidence
+pattern Confidence_HIGH = Confidence' "HIGH"
+
+pattern Confidence_LOW :: Confidence
+pattern Confidence_LOW = Confidence' "LOW"
+
+pattern Confidence_NONE :: Confidence
+pattern Confidence_NONE = Confidence' "NONE"
+
+{-# COMPLETE
+  Confidence_HIGH,
+  Confidence_LOW,
+  Confidence_NONE,
+  Confidence'
+  #-}
diff --git a/gen/Amazonka/LookoutMetrics/Types/ContributionMatrix.hs b/gen/Amazonka/LookoutMetrics/Types/ContributionMatrix.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/ContributionMatrix.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.LookoutMetrics.Types.ContributionMatrix
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.ContributionMatrix where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.DimensionContribution
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about dimensions that contributed to an anomaly.
+--
+-- /See:/ 'newContributionMatrix' smart constructor.
+data ContributionMatrix = ContributionMatrix'
+  { -- | A list of contributing dimensions.
+    dimensionContributionList :: Prelude.Maybe [DimensionContribution]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ContributionMatrix' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dimensionContributionList', 'contributionMatrix_dimensionContributionList' - A list of contributing dimensions.
+newContributionMatrix ::
+  ContributionMatrix
+newContributionMatrix =
+  ContributionMatrix'
+    { dimensionContributionList =
+        Prelude.Nothing
+    }
+
+-- | A list of contributing dimensions.
+contributionMatrix_dimensionContributionList :: Lens.Lens' ContributionMatrix (Prelude.Maybe [DimensionContribution])
+contributionMatrix_dimensionContributionList = Lens.lens (\ContributionMatrix' {dimensionContributionList} -> dimensionContributionList) (\s@ContributionMatrix' {} a -> s {dimensionContributionList = a} :: ContributionMatrix) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ContributionMatrix where
+  parseJSON =
+    Data.withObject
+      "ContributionMatrix"
+      ( \x ->
+          ContributionMatrix'
+            Prelude.<$> ( x
+                            Data..:? "DimensionContributionList"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ContributionMatrix where
+  hashWithSalt _salt ContributionMatrix' {..} =
+    _salt
+      `Prelude.hashWithSalt` dimensionContributionList
+
+instance Prelude.NFData ContributionMatrix where
+  rnf ContributionMatrix' {..} =
+    Prelude.rnf dimensionContributionList
diff --git a/gen/Amazonka/LookoutMetrics/Types/CsvFormatDescriptor.hs b/gen/Amazonka/LookoutMetrics/Types/CsvFormatDescriptor.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/CsvFormatDescriptor.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.LookoutMetrics.Types.CsvFormatDescriptor
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.CsvFormatDescriptor where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.CSVFileCompression
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains information about how a source CSV data file should be
+-- analyzed.
+--
+-- /See:/ 'newCsvFormatDescriptor' smart constructor.
+data CsvFormatDescriptor = CsvFormatDescriptor'
+  { -- | The character set in which the source CSV file is written.
+    charset :: Prelude.Maybe Prelude.Text,
+    -- | Whether or not the source CSV file contains a header.
+    containsHeader :: Prelude.Maybe Prelude.Bool,
+    -- | The character used to delimit the source CSV file.
+    delimiter :: Prelude.Maybe Prelude.Text,
+    -- | The level of compression of the source CSV file.
+    fileCompression :: Prelude.Maybe CSVFileCompression,
+    -- | A list of the source CSV file\'s headers, if any.
+    headerList :: Prelude.Maybe [Prelude.Text],
+    -- | The character used as a quote character.
+    quoteSymbol :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CsvFormatDescriptor' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'charset', 'csvFormatDescriptor_charset' - The character set in which the source CSV file is written.
+--
+-- 'containsHeader', 'csvFormatDescriptor_containsHeader' - Whether or not the source CSV file contains a header.
+--
+-- 'delimiter', 'csvFormatDescriptor_delimiter' - The character used to delimit the source CSV file.
+--
+-- 'fileCompression', 'csvFormatDescriptor_fileCompression' - The level of compression of the source CSV file.
+--
+-- 'headerList', 'csvFormatDescriptor_headerList' - A list of the source CSV file\'s headers, if any.
+--
+-- 'quoteSymbol', 'csvFormatDescriptor_quoteSymbol' - The character used as a quote character.
+newCsvFormatDescriptor ::
+  CsvFormatDescriptor
+newCsvFormatDescriptor =
+  CsvFormatDescriptor'
+    { charset = Prelude.Nothing,
+      containsHeader = Prelude.Nothing,
+      delimiter = Prelude.Nothing,
+      fileCompression = Prelude.Nothing,
+      headerList = Prelude.Nothing,
+      quoteSymbol = Prelude.Nothing
+    }
+
+-- | The character set in which the source CSV file is written.
+csvFormatDescriptor_charset :: Lens.Lens' CsvFormatDescriptor (Prelude.Maybe Prelude.Text)
+csvFormatDescriptor_charset = Lens.lens (\CsvFormatDescriptor' {charset} -> charset) (\s@CsvFormatDescriptor' {} a -> s {charset = a} :: CsvFormatDescriptor)
+
+-- | Whether or not the source CSV file contains a header.
+csvFormatDescriptor_containsHeader :: Lens.Lens' CsvFormatDescriptor (Prelude.Maybe Prelude.Bool)
+csvFormatDescriptor_containsHeader = Lens.lens (\CsvFormatDescriptor' {containsHeader} -> containsHeader) (\s@CsvFormatDescriptor' {} a -> s {containsHeader = a} :: CsvFormatDescriptor)
+
+-- | The character used to delimit the source CSV file.
+csvFormatDescriptor_delimiter :: Lens.Lens' CsvFormatDescriptor (Prelude.Maybe Prelude.Text)
+csvFormatDescriptor_delimiter = Lens.lens (\CsvFormatDescriptor' {delimiter} -> delimiter) (\s@CsvFormatDescriptor' {} a -> s {delimiter = a} :: CsvFormatDescriptor)
+
+-- | The level of compression of the source CSV file.
+csvFormatDescriptor_fileCompression :: Lens.Lens' CsvFormatDescriptor (Prelude.Maybe CSVFileCompression)
+csvFormatDescriptor_fileCompression = Lens.lens (\CsvFormatDescriptor' {fileCompression} -> fileCompression) (\s@CsvFormatDescriptor' {} a -> s {fileCompression = a} :: CsvFormatDescriptor)
+
+-- | A list of the source CSV file\'s headers, if any.
+csvFormatDescriptor_headerList :: Lens.Lens' CsvFormatDescriptor (Prelude.Maybe [Prelude.Text])
+csvFormatDescriptor_headerList = Lens.lens (\CsvFormatDescriptor' {headerList} -> headerList) (\s@CsvFormatDescriptor' {} a -> s {headerList = a} :: CsvFormatDescriptor) Prelude.. Lens.mapping Lens.coerced
+
+-- | The character used as a quote character.
+csvFormatDescriptor_quoteSymbol :: Lens.Lens' CsvFormatDescriptor (Prelude.Maybe Prelude.Text)
+csvFormatDescriptor_quoteSymbol = Lens.lens (\CsvFormatDescriptor' {quoteSymbol} -> quoteSymbol) (\s@CsvFormatDescriptor' {} a -> s {quoteSymbol = a} :: CsvFormatDescriptor)
+
+instance Data.FromJSON CsvFormatDescriptor where
+  parseJSON =
+    Data.withObject
+      "CsvFormatDescriptor"
+      ( \x ->
+          CsvFormatDescriptor'
+            Prelude.<$> (x Data..:? "Charset")
+            Prelude.<*> (x Data..:? "ContainsHeader")
+            Prelude.<*> (x Data..:? "Delimiter")
+            Prelude.<*> (x Data..:? "FileCompression")
+            Prelude.<*> (x Data..:? "HeaderList" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "QuoteSymbol")
+      )
+
+instance Prelude.Hashable CsvFormatDescriptor where
+  hashWithSalt _salt CsvFormatDescriptor' {..} =
+    _salt
+      `Prelude.hashWithSalt` charset
+      `Prelude.hashWithSalt` containsHeader
+      `Prelude.hashWithSalt` delimiter
+      `Prelude.hashWithSalt` fileCompression
+      `Prelude.hashWithSalt` headerList
+      `Prelude.hashWithSalt` quoteSymbol
+
+instance Prelude.NFData CsvFormatDescriptor where
+  rnf CsvFormatDescriptor' {..} =
+    Prelude.rnf charset
+      `Prelude.seq` Prelude.rnf containsHeader
+      `Prelude.seq` Prelude.rnf delimiter
+      `Prelude.seq` Prelude.rnf fileCompression
+      `Prelude.seq` Prelude.rnf headerList
+      `Prelude.seq` Prelude.rnf quoteSymbol
+
+instance Data.ToJSON CsvFormatDescriptor where
+  toJSON CsvFormatDescriptor' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Charset" Data..=) Prelude.<$> charset,
+            ("ContainsHeader" Data..=)
+              Prelude.<$> containsHeader,
+            ("Delimiter" Data..=) Prelude.<$> delimiter,
+            ("FileCompression" Data..=)
+              Prelude.<$> fileCompression,
+            ("HeaderList" Data..=) Prelude.<$> headerList,
+            ("QuoteSymbol" Data..=) Prelude.<$> quoteSymbol
+          ]
+      )
diff --git a/gen/Amazonka/LookoutMetrics/Types/DataQualityMetric.hs b/gen/Amazonka/LookoutMetrics/Types/DataQualityMetric.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/DataQualityMetric.hs
@@ -0,0 +1,112 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.Types.DataQualityMetric
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.DataQualityMetric where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.DataQualityMetricType
+import qualified Amazonka.Prelude as Prelude
+
+-- | An array that describes a data quality metric. Each @DataQualityMetric@
+-- object contains the data quality metric name, its value, a description
+-- of the metric, and the affected column.
+--
+-- /See:/ 'newDataQualityMetric' smart constructor.
+data DataQualityMetric = DataQualityMetric'
+  { -- | A description of the data quality metric.
+    metricDescription :: Prelude.Maybe Prelude.Text,
+    -- | The name of the data quality metric.
+    metricType :: Prelude.Maybe DataQualityMetricType,
+    -- | The value of the data quality metric.
+    metricValue :: Prelude.Maybe Prelude.Double,
+    -- | The column that is being monitored.
+    relatedColumnName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataQualityMetric' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'metricDescription', 'dataQualityMetric_metricDescription' - A description of the data quality metric.
+--
+-- 'metricType', 'dataQualityMetric_metricType' - The name of the data quality metric.
+--
+-- 'metricValue', 'dataQualityMetric_metricValue' - The value of the data quality metric.
+--
+-- 'relatedColumnName', 'dataQualityMetric_relatedColumnName' - The column that is being monitored.
+newDataQualityMetric ::
+  DataQualityMetric
+newDataQualityMetric =
+  DataQualityMetric'
+    { metricDescription =
+        Prelude.Nothing,
+      metricType = Prelude.Nothing,
+      metricValue = Prelude.Nothing,
+      relatedColumnName = Prelude.Nothing
+    }
+
+-- | A description of the data quality metric.
+dataQualityMetric_metricDescription :: Lens.Lens' DataQualityMetric (Prelude.Maybe Prelude.Text)
+dataQualityMetric_metricDescription = Lens.lens (\DataQualityMetric' {metricDescription} -> metricDescription) (\s@DataQualityMetric' {} a -> s {metricDescription = a} :: DataQualityMetric)
+
+-- | The name of the data quality metric.
+dataQualityMetric_metricType :: Lens.Lens' DataQualityMetric (Prelude.Maybe DataQualityMetricType)
+dataQualityMetric_metricType = Lens.lens (\DataQualityMetric' {metricType} -> metricType) (\s@DataQualityMetric' {} a -> s {metricType = a} :: DataQualityMetric)
+
+-- | The value of the data quality metric.
+dataQualityMetric_metricValue :: Lens.Lens' DataQualityMetric (Prelude.Maybe Prelude.Double)
+dataQualityMetric_metricValue = Lens.lens (\DataQualityMetric' {metricValue} -> metricValue) (\s@DataQualityMetric' {} a -> s {metricValue = a} :: DataQualityMetric)
+
+-- | The column that is being monitored.
+dataQualityMetric_relatedColumnName :: Lens.Lens' DataQualityMetric (Prelude.Maybe Prelude.Text)
+dataQualityMetric_relatedColumnName = Lens.lens (\DataQualityMetric' {relatedColumnName} -> relatedColumnName) (\s@DataQualityMetric' {} a -> s {relatedColumnName = a} :: DataQualityMetric)
+
+instance Data.FromJSON DataQualityMetric where
+  parseJSON =
+    Data.withObject
+      "DataQualityMetric"
+      ( \x ->
+          DataQualityMetric'
+            Prelude.<$> (x Data..:? "MetricDescription")
+            Prelude.<*> (x Data..:? "MetricType")
+            Prelude.<*> (x Data..:? "MetricValue")
+            Prelude.<*> (x Data..:? "RelatedColumnName")
+      )
+
+instance Prelude.Hashable DataQualityMetric where
+  hashWithSalt _salt DataQualityMetric' {..} =
+    _salt
+      `Prelude.hashWithSalt` metricDescription
+      `Prelude.hashWithSalt` metricType
+      `Prelude.hashWithSalt` metricValue
+      `Prelude.hashWithSalt` relatedColumnName
+
+instance Prelude.NFData DataQualityMetric where
+  rnf DataQualityMetric' {..} =
+    Prelude.rnf metricDescription
+      `Prelude.seq` Prelude.rnf metricType
+      `Prelude.seq` Prelude.rnf metricValue
+      `Prelude.seq` Prelude.rnf relatedColumnName
diff --git a/gen/Amazonka/LookoutMetrics/Types/DataQualityMetricType.hs b/gen/Amazonka/LookoutMetrics/Types/DataQualityMetricType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/DataQualityMetricType.hs
@@ -0,0 +1,111 @@
+{-# 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.LookoutMetrics.Types.DataQualityMetricType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.DataQualityMetricType
+  ( DataQualityMetricType
+      ( ..,
+        DataQualityMetricType_BACKTEST_INFERENCE_DATA_END_TIME_STAMP,
+        DataQualityMetricType_BACKTEST_INFERENCE_DATA_START_TIME_STAMP,
+        DataQualityMetricType_BACKTEST_TRAINING_DATA_END_TIME_STAMP,
+        DataQualityMetricType_BACKTEST_TRAINING_DATA_START_TIME_STAMP,
+        DataQualityMetricType_COLUMN_COMPLETENESS,
+        DataQualityMetricType_DIMENSION_UNIQUENESS,
+        DataQualityMetricType_INVALID_ROWS_COMPLIANCE,
+        DataQualityMetricType_ROWS_PARTIAL_COMPLIANCE,
+        DataQualityMetricType_ROWS_PROCESSED,
+        DataQualityMetricType_TIME_SERIES_COUNT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DataQualityMetricType = DataQualityMetricType'
+  { fromDataQualityMetricType ::
+      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 DataQualityMetricType_BACKTEST_INFERENCE_DATA_END_TIME_STAMP :: DataQualityMetricType
+pattern DataQualityMetricType_BACKTEST_INFERENCE_DATA_END_TIME_STAMP = DataQualityMetricType' "BACKTEST_INFERENCE_DATA_END_TIME_STAMP"
+
+pattern DataQualityMetricType_BACKTEST_INFERENCE_DATA_START_TIME_STAMP :: DataQualityMetricType
+pattern DataQualityMetricType_BACKTEST_INFERENCE_DATA_START_TIME_STAMP = DataQualityMetricType' "BACKTEST_INFERENCE_DATA_START_TIME_STAMP"
+
+pattern DataQualityMetricType_BACKTEST_TRAINING_DATA_END_TIME_STAMP :: DataQualityMetricType
+pattern DataQualityMetricType_BACKTEST_TRAINING_DATA_END_TIME_STAMP = DataQualityMetricType' "BACKTEST_TRAINING_DATA_END_TIME_STAMP"
+
+pattern DataQualityMetricType_BACKTEST_TRAINING_DATA_START_TIME_STAMP :: DataQualityMetricType
+pattern DataQualityMetricType_BACKTEST_TRAINING_DATA_START_TIME_STAMP = DataQualityMetricType' "BACKTEST_TRAINING_DATA_START_TIME_STAMP"
+
+pattern DataQualityMetricType_COLUMN_COMPLETENESS :: DataQualityMetricType
+pattern DataQualityMetricType_COLUMN_COMPLETENESS = DataQualityMetricType' "COLUMN_COMPLETENESS"
+
+pattern DataQualityMetricType_DIMENSION_UNIQUENESS :: DataQualityMetricType
+pattern DataQualityMetricType_DIMENSION_UNIQUENESS = DataQualityMetricType' "DIMENSION_UNIQUENESS"
+
+pattern DataQualityMetricType_INVALID_ROWS_COMPLIANCE :: DataQualityMetricType
+pattern DataQualityMetricType_INVALID_ROWS_COMPLIANCE = DataQualityMetricType' "INVALID_ROWS_COMPLIANCE"
+
+pattern DataQualityMetricType_ROWS_PARTIAL_COMPLIANCE :: DataQualityMetricType
+pattern DataQualityMetricType_ROWS_PARTIAL_COMPLIANCE = DataQualityMetricType' "ROWS_PARTIAL_COMPLIANCE"
+
+pattern DataQualityMetricType_ROWS_PROCESSED :: DataQualityMetricType
+pattern DataQualityMetricType_ROWS_PROCESSED = DataQualityMetricType' "ROWS_PROCESSED"
+
+pattern DataQualityMetricType_TIME_SERIES_COUNT :: DataQualityMetricType
+pattern DataQualityMetricType_TIME_SERIES_COUNT = DataQualityMetricType' "TIME_SERIES_COUNT"
+
+{-# COMPLETE
+  DataQualityMetricType_BACKTEST_INFERENCE_DATA_END_TIME_STAMP,
+  DataQualityMetricType_BACKTEST_INFERENCE_DATA_START_TIME_STAMP,
+  DataQualityMetricType_BACKTEST_TRAINING_DATA_END_TIME_STAMP,
+  DataQualityMetricType_BACKTEST_TRAINING_DATA_START_TIME_STAMP,
+  DataQualityMetricType_COLUMN_COMPLETENESS,
+  DataQualityMetricType_DIMENSION_UNIQUENESS,
+  DataQualityMetricType_INVALID_ROWS_COMPLIANCE,
+  DataQualityMetricType_ROWS_PARTIAL_COMPLIANCE,
+  DataQualityMetricType_ROWS_PROCESSED,
+  DataQualityMetricType_TIME_SERIES_COUNT,
+  DataQualityMetricType'
+  #-}
diff --git a/gen/Amazonka/LookoutMetrics/Types/DetectedCsvFormatDescriptor.hs b/gen/Amazonka/LookoutMetrics/Types/DetectedCsvFormatDescriptor.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/DetectedCsvFormatDescriptor.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.LookoutMetrics.Types.DetectedCsvFormatDescriptor
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.DetectedCsvFormatDescriptor where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.DetectedField
+import qualified Amazonka.Prelude as Prelude
+
+-- | Properties of an inferred CSV format.
+--
+-- /See:/ 'newDetectedCsvFormatDescriptor' smart constructor.
+data DetectedCsvFormatDescriptor = DetectedCsvFormatDescriptor'
+  { -- | The format\'s charset.
+    charset :: Prelude.Maybe DetectedField,
+    -- | Whether the format includes a header.
+    containsHeader :: Prelude.Maybe DetectedField,
+    -- | The format\'s delimiter.
+    delimiter :: Prelude.Maybe DetectedField,
+    -- | The format\'s file compression.
+    fileCompression :: Prelude.Maybe DetectedField,
+    -- | The format\'s header list.
+    headerList :: Prelude.Maybe DetectedField,
+    -- | The format\'s quote symbol.
+    quoteSymbol :: Prelude.Maybe DetectedField
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetectedCsvFormatDescriptor' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'charset', 'detectedCsvFormatDescriptor_charset' - The format\'s charset.
+--
+-- 'containsHeader', 'detectedCsvFormatDescriptor_containsHeader' - Whether the format includes a header.
+--
+-- 'delimiter', 'detectedCsvFormatDescriptor_delimiter' - The format\'s delimiter.
+--
+-- 'fileCompression', 'detectedCsvFormatDescriptor_fileCompression' - The format\'s file compression.
+--
+-- 'headerList', 'detectedCsvFormatDescriptor_headerList' - The format\'s header list.
+--
+-- 'quoteSymbol', 'detectedCsvFormatDescriptor_quoteSymbol' - The format\'s quote symbol.
+newDetectedCsvFormatDescriptor ::
+  DetectedCsvFormatDescriptor
+newDetectedCsvFormatDescriptor =
+  DetectedCsvFormatDescriptor'
+    { charset =
+        Prelude.Nothing,
+      containsHeader = Prelude.Nothing,
+      delimiter = Prelude.Nothing,
+      fileCompression = Prelude.Nothing,
+      headerList = Prelude.Nothing,
+      quoteSymbol = Prelude.Nothing
+    }
+
+-- | The format\'s charset.
+detectedCsvFormatDescriptor_charset :: Lens.Lens' DetectedCsvFormatDescriptor (Prelude.Maybe DetectedField)
+detectedCsvFormatDescriptor_charset = Lens.lens (\DetectedCsvFormatDescriptor' {charset} -> charset) (\s@DetectedCsvFormatDescriptor' {} a -> s {charset = a} :: DetectedCsvFormatDescriptor)
+
+-- | Whether the format includes a header.
+detectedCsvFormatDescriptor_containsHeader :: Lens.Lens' DetectedCsvFormatDescriptor (Prelude.Maybe DetectedField)
+detectedCsvFormatDescriptor_containsHeader = Lens.lens (\DetectedCsvFormatDescriptor' {containsHeader} -> containsHeader) (\s@DetectedCsvFormatDescriptor' {} a -> s {containsHeader = a} :: DetectedCsvFormatDescriptor)
+
+-- | The format\'s delimiter.
+detectedCsvFormatDescriptor_delimiter :: Lens.Lens' DetectedCsvFormatDescriptor (Prelude.Maybe DetectedField)
+detectedCsvFormatDescriptor_delimiter = Lens.lens (\DetectedCsvFormatDescriptor' {delimiter} -> delimiter) (\s@DetectedCsvFormatDescriptor' {} a -> s {delimiter = a} :: DetectedCsvFormatDescriptor)
+
+-- | The format\'s file compression.
+detectedCsvFormatDescriptor_fileCompression :: Lens.Lens' DetectedCsvFormatDescriptor (Prelude.Maybe DetectedField)
+detectedCsvFormatDescriptor_fileCompression = Lens.lens (\DetectedCsvFormatDescriptor' {fileCompression} -> fileCompression) (\s@DetectedCsvFormatDescriptor' {} a -> s {fileCompression = a} :: DetectedCsvFormatDescriptor)
+
+-- | The format\'s header list.
+detectedCsvFormatDescriptor_headerList :: Lens.Lens' DetectedCsvFormatDescriptor (Prelude.Maybe DetectedField)
+detectedCsvFormatDescriptor_headerList = Lens.lens (\DetectedCsvFormatDescriptor' {headerList} -> headerList) (\s@DetectedCsvFormatDescriptor' {} a -> s {headerList = a} :: DetectedCsvFormatDescriptor)
+
+-- | The format\'s quote symbol.
+detectedCsvFormatDescriptor_quoteSymbol :: Lens.Lens' DetectedCsvFormatDescriptor (Prelude.Maybe DetectedField)
+detectedCsvFormatDescriptor_quoteSymbol = Lens.lens (\DetectedCsvFormatDescriptor' {quoteSymbol} -> quoteSymbol) (\s@DetectedCsvFormatDescriptor' {} a -> s {quoteSymbol = a} :: DetectedCsvFormatDescriptor)
+
+instance Data.FromJSON DetectedCsvFormatDescriptor where
+  parseJSON =
+    Data.withObject
+      "DetectedCsvFormatDescriptor"
+      ( \x ->
+          DetectedCsvFormatDescriptor'
+            Prelude.<$> (x Data..:? "Charset")
+            Prelude.<*> (x Data..:? "ContainsHeader")
+            Prelude.<*> (x Data..:? "Delimiter")
+            Prelude.<*> (x Data..:? "FileCompression")
+            Prelude.<*> (x Data..:? "HeaderList")
+            Prelude.<*> (x Data..:? "QuoteSymbol")
+      )
+
+instance Prelude.Hashable DetectedCsvFormatDescriptor where
+  hashWithSalt _salt DetectedCsvFormatDescriptor' {..} =
+    _salt
+      `Prelude.hashWithSalt` charset
+      `Prelude.hashWithSalt` containsHeader
+      `Prelude.hashWithSalt` delimiter
+      `Prelude.hashWithSalt` fileCompression
+      `Prelude.hashWithSalt` headerList
+      `Prelude.hashWithSalt` quoteSymbol
+
+instance Prelude.NFData DetectedCsvFormatDescriptor where
+  rnf DetectedCsvFormatDescriptor' {..} =
+    Prelude.rnf charset
+      `Prelude.seq` Prelude.rnf containsHeader
+      `Prelude.seq` Prelude.rnf delimiter
+      `Prelude.seq` Prelude.rnf fileCompression
+      `Prelude.seq` Prelude.rnf headerList
+      `Prelude.seq` Prelude.rnf quoteSymbol
diff --git a/gen/Amazonka/LookoutMetrics/Types/DetectedField.hs b/gen/Amazonka/LookoutMetrics/Types/DetectedField.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/DetectedField.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.LookoutMetrics.Types.DetectedField
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.DetectedField where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.AttributeValue
+import Amazonka.LookoutMetrics.Types.Confidence
+import qualified Amazonka.Prelude as Prelude
+
+-- | An inferred field.
+--
+-- /See:/ 'newDetectedField' smart constructor.
+data DetectedField = DetectedField'
+  { -- | The field\'s confidence.
+    confidence :: Prelude.Maybe Confidence,
+    -- | The field\'s message.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The field\'s value.
+    value :: Prelude.Maybe AttributeValue
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetectedField' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'confidence', 'detectedField_confidence' - The field\'s confidence.
+--
+-- 'message', 'detectedField_message' - The field\'s message.
+--
+-- 'value', 'detectedField_value' - The field\'s value.
+newDetectedField ::
+  DetectedField
+newDetectedField =
+  DetectedField'
+    { confidence = Prelude.Nothing,
+      message = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | The field\'s confidence.
+detectedField_confidence :: Lens.Lens' DetectedField (Prelude.Maybe Confidence)
+detectedField_confidence = Lens.lens (\DetectedField' {confidence} -> confidence) (\s@DetectedField' {} a -> s {confidence = a} :: DetectedField)
+
+-- | The field\'s message.
+detectedField_message :: Lens.Lens' DetectedField (Prelude.Maybe Prelude.Text)
+detectedField_message = Lens.lens (\DetectedField' {message} -> message) (\s@DetectedField' {} a -> s {message = a} :: DetectedField)
+
+-- | The field\'s value.
+detectedField_value :: Lens.Lens' DetectedField (Prelude.Maybe AttributeValue)
+detectedField_value = Lens.lens (\DetectedField' {value} -> value) (\s@DetectedField' {} a -> s {value = a} :: DetectedField)
+
+instance Data.FromJSON DetectedField where
+  parseJSON =
+    Data.withObject
+      "DetectedField"
+      ( \x ->
+          DetectedField'
+            Prelude.<$> (x Data..:? "Confidence")
+            Prelude.<*> (x Data..:? "Message")
+            Prelude.<*> (x Data..:? "Value")
+      )
+
+instance Prelude.Hashable DetectedField where
+  hashWithSalt _salt DetectedField' {..} =
+    _salt
+      `Prelude.hashWithSalt` confidence
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData DetectedField where
+  rnf DetectedField' {..} =
+    Prelude.rnf confidence
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf value
diff --git a/gen/Amazonka/LookoutMetrics/Types/DetectedFileFormatDescriptor.hs b/gen/Amazonka/LookoutMetrics/Types/DetectedFileFormatDescriptor.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/DetectedFileFormatDescriptor.hs
@@ -0,0 +1,90 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.Types.DetectedFileFormatDescriptor
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.DetectedFileFormatDescriptor where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.DetectedCsvFormatDescriptor
+import Amazonka.LookoutMetrics.Types.DetectedJsonFormatDescriptor
+import qualified Amazonka.Prelude as Prelude
+
+-- | Properties of an inferred data format.
+--
+-- /See:/ 'newDetectedFileFormatDescriptor' smart constructor.
+data DetectedFileFormatDescriptor = DetectedFileFormatDescriptor'
+  { -- | Details about a CSV format.
+    csvFormatDescriptor :: Prelude.Maybe DetectedCsvFormatDescriptor,
+    -- | Details about a JSON format.
+    jsonFormatDescriptor :: Prelude.Maybe DetectedJsonFormatDescriptor
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetectedFileFormatDescriptor' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'csvFormatDescriptor', 'detectedFileFormatDescriptor_csvFormatDescriptor' - Details about a CSV format.
+--
+-- 'jsonFormatDescriptor', 'detectedFileFormatDescriptor_jsonFormatDescriptor' - Details about a JSON format.
+newDetectedFileFormatDescriptor ::
+  DetectedFileFormatDescriptor
+newDetectedFileFormatDescriptor =
+  DetectedFileFormatDescriptor'
+    { csvFormatDescriptor =
+        Prelude.Nothing,
+      jsonFormatDescriptor = Prelude.Nothing
+    }
+
+-- | Details about a CSV format.
+detectedFileFormatDescriptor_csvFormatDescriptor :: Lens.Lens' DetectedFileFormatDescriptor (Prelude.Maybe DetectedCsvFormatDescriptor)
+detectedFileFormatDescriptor_csvFormatDescriptor = Lens.lens (\DetectedFileFormatDescriptor' {csvFormatDescriptor} -> csvFormatDescriptor) (\s@DetectedFileFormatDescriptor' {} a -> s {csvFormatDescriptor = a} :: DetectedFileFormatDescriptor)
+
+-- | Details about a JSON format.
+detectedFileFormatDescriptor_jsonFormatDescriptor :: Lens.Lens' DetectedFileFormatDescriptor (Prelude.Maybe DetectedJsonFormatDescriptor)
+detectedFileFormatDescriptor_jsonFormatDescriptor = Lens.lens (\DetectedFileFormatDescriptor' {jsonFormatDescriptor} -> jsonFormatDescriptor) (\s@DetectedFileFormatDescriptor' {} a -> s {jsonFormatDescriptor = a} :: DetectedFileFormatDescriptor)
+
+instance Data.FromJSON DetectedFileFormatDescriptor where
+  parseJSON =
+    Data.withObject
+      "DetectedFileFormatDescriptor"
+      ( \x ->
+          DetectedFileFormatDescriptor'
+            Prelude.<$> (x Data..:? "CsvFormatDescriptor")
+            Prelude.<*> (x Data..:? "JsonFormatDescriptor")
+      )
+
+instance
+  Prelude.Hashable
+    DetectedFileFormatDescriptor
+  where
+  hashWithSalt _salt DetectedFileFormatDescriptor' {..} =
+    _salt
+      `Prelude.hashWithSalt` csvFormatDescriptor
+      `Prelude.hashWithSalt` jsonFormatDescriptor
+
+instance Prelude.NFData DetectedFileFormatDescriptor where
+  rnf DetectedFileFormatDescriptor' {..} =
+    Prelude.rnf csvFormatDescriptor
+      `Prelude.seq` Prelude.rnf jsonFormatDescriptor
diff --git a/gen/Amazonka/LookoutMetrics/Types/DetectedJsonFormatDescriptor.hs b/gen/Amazonka/LookoutMetrics/Types/DetectedJsonFormatDescriptor.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/DetectedJsonFormatDescriptor.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.LookoutMetrics.Types.DetectedJsonFormatDescriptor
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.DetectedJsonFormatDescriptor where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.DetectedField
+import qualified Amazonka.Prelude as Prelude
+
+-- | A detected JSON format descriptor.
+--
+-- /See:/ 'newDetectedJsonFormatDescriptor' smart constructor.
+data DetectedJsonFormatDescriptor = DetectedJsonFormatDescriptor'
+  { -- | The format\'s character set.
+    charset :: Prelude.Maybe DetectedField,
+    -- | The format\'s file compression.
+    fileCompression :: Prelude.Maybe DetectedField
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetectedJsonFormatDescriptor' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'charset', 'detectedJsonFormatDescriptor_charset' - The format\'s character set.
+--
+-- 'fileCompression', 'detectedJsonFormatDescriptor_fileCompression' - The format\'s file compression.
+newDetectedJsonFormatDescriptor ::
+  DetectedJsonFormatDescriptor
+newDetectedJsonFormatDescriptor =
+  DetectedJsonFormatDescriptor'
+    { charset =
+        Prelude.Nothing,
+      fileCompression = Prelude.Nothing
+    }
+
+-- | The format\'s character set.
+detectedJsonFormatDescriptor_charset :: Lens.Lens' DetectedJsonFormatDescriptor (Prelude.Maybe DetectedField)
+detectedJsonFormatDescriptor_charset = Lens.lens (\DetectedJsonFormatDescriptor' {charset} -> charset) (\s@DetectedJsonFormatDescriptor' {} a -> s {charset = a} :: DetectedJsonFormatDescriptor)
+
+-- | The format\'s file compression.
+detectedJsonFormatDescriptor_fileCompression :: Lens.Lens' DetectedJsonFormatDescriptor (Prelude.Maybe DetectedField)
+detectedJsonFormatDescriptor_fileCompression = Lens.lens (\DetectedJsonFormatDescriptor' {fileCompression} -> fileCompression) (\s@DetectedJsonFormatDescriptor' {} a -> s {fileCompression = a} :: DetectedJsonFormatDescriptor)
+
+instance Data.FromJSON DetectedJsonFormatDescriptor where
+  parseJSON =
+    Data.withObject
+      "DetectedJsonFormatDescriptor"
+      ( \x ->
+          DetectedJsonFormatDescriptor'
+            Prelude.<$> (x Data..:? "Charset")
+            Prelude.<*> (x Data..:? "FileCompression")
+      )
+
+instance
+  Prelude.Hashable
+    DetectedJsonFormatDescriptor
+  where
+  hashWithSalt _salt DetectedJsonFormatDescriptor' {..} =
+    _salt
+      `Prelude.hashWithSalt` charset
+      `Prelude.hashWithSalt` fileCompression
+
+instance Prelude.NFData DetectedJsonFormatDescriptor where
+  rnf DetectedJsonFormatDescriptor' {..} =
+    Prelude.rnf charset
+      `Prelude.seq` Prelude.rnf fileCompression
diff --git a/gen/Amazonka/LookoutMetrics/Types/DetectedMetricSetConfig.hs b/gen/Amazonka/LookoutMetrics/Types/DetectedMetricSetConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/DetectedMetricSetConfig.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.LookoutMetrics.Types.DetectedMetricSetConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.DetectedMetricSetConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.DetectedField
+import Amazonka.LookoutMetrics.Types.DetectedMetricSource
+import qualified Amazonka.Prelude as Prelude
+
+-- | An inferred dataset configuration.
+--
+-- /See:/ 'newDetectedMetricSetConfig' smart constructor.
+data DetectedMetricSetConfig = DetectedMetricSetConfig'
+  { -- | The dataset\'s interval.
+    metricSetFrequency :: Prelude.Maybe DetectedField,
+    -- | The dataset\'s data source.
+    metricSource :: Prelude.Maybe DetectedMetricSource,
+    -- | The dataset\'s offset.
+    offset :: Prelude.Maybe DetectedField
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetectedMetricSetConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'metricSetFrequency', 'detectedMetricSetConfig_metricSetFrequency' - The dataset\'s interval.
+--
+-- 'metricSource', 'detectedMetricSetConfig_metricSource' - The dataset\'s data source.
+--
+-- 'offset', 'detectedMetricSetConfig_offset' - The dataset\'s offset.
+newDetectedMetricSetConfig ::
+  DetectedMetricSetConfig
+newDetectedMetricSetConfig =
+  DetectedMetricSetConfig'
+    { metricSetFrequency =
+        Prelude.Nothing,
+      metricSource = Prelude.Nothing,
+      offset = Prelude.Nothing
+    }
+
+-- | The dataset\'s interval.
+detectedMetricSetConfig_metricSetFrequency :: Lens.Lens' DetectedMetricSetConfig (Prelude.Maybe DetectedField)
+detectedMetricSetConfig_metricSetFrequency = Lens.lens (\DetectedMetricSetConfig' {metricSetFrequency} -> metricSetFrequency) (\s@DetectedMetricSetConfig' {} a -> s {metricSetFrequency = a} :: DetectedMetricSetConfig)
+
+-- | The dataset\'s data source.
+detectedMetricSetConfig_metricSource :: Lens.Lens' DetectedMetricSetConfig (Prelude.Maybe DetectedMetricSource)
+detectedMetricSetConfig_metricSource = Lens.lens (\DetectedMetricSetConfig' {metricSource} -> metricSource) (\s@DetectedMetricSetConfig' {} a -> s {metricSource = a} :: DetectedMetricSetConfig)
+
+-- | The dataset\'s offset.
+detectedMetricSetConfig_offset :: Lens.Lens' DetectedMetricSetConfig (Prelude.Maybe DetectedField)
+detectedMetricSetConfig_offset = Lens.lens (\DetectedMetricSetConfig' {offset} -> offset) (\s@DetectedMetricSetConfig' {} a -> s {offset = a} :: DetectedMetricSetConfig)
+
+instance Data.FromJSON DetectedMetricSetConfig where
+  parseJSON =
+    Data.withObject
+      "DetectedMetricSetConfig"
+      ( \x ->
+          DetectedMetricSetConfig'
+            Prelude.<$> (x Data..:? "MetricSetFrequency")
+            Prelude.<*> (x Data..:? "MetricSource")
+            Prelude.<*> (x Data..:? "Offset")
+      )
+
+instance Prelude.Hashable DetectedMetricSetConfig where
+  hashWithSalt _salt DetectedMetricSetConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` metricSetFrequency
+      `Prelude.hashWithSalt` metricSource
+      `Prelude.hashWithSalt` offset
+
+instance Prelude.NFData DetectedMetricSetConfig where
+  rnf DetectedMetricSetConfig' {..} =
+    Prelude.rnf metricSetFrequency
+      `Prelude.seq` Prelude.rnf metricSource
+      `Prelude.seq` Prelude.rnf offset
diff --git a/gen/Amazonka/LookoutMetrics/Types/DetectedMetricSource.hs b/gen/Amazonka/LookoutMetrics/Types/DetectedMetricSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/DetectedMetricSource.hs
@@ -0,0 +1,73 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.Types.DetectedMetricSource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.DetectedMetricSource where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.DetectedS3SourceConfig
+import qualified Amazonka.Prelude as Prelude
+
+-- | An inferred data source.
+--
+-- /See:/ 'newDetectedMetricSource' smart constructor.
+data DetectedMetricSource = DetectedMetricSource'
+  { -- | The data source\'s source configuration.
+    s3SourceConfig :: Prelude.Maybe DetectedS3SourceConfig
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetectedMetricSource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3SourceConfig', 'detectedMetricSource_s3SourceConfig' - The data source\'s source configuration.
+newDetectedMetricSource ::
+  DetectedMetricSource
+newDetectedMetricSource =
+  DetectedMetricSource'
+    { s3SourceConfig =
+        Prelude.Nothing
+    }
+
+-- | The data source\'s source configuration.
+detectedMetricSource_s3SourceConfig :: Lens.Lens' DetectedMetricSource (Prelude.Maybe DetectedS3SourceConfig)
+detectedMetricSource_s3SourceConfig = Lens.lens (\DetectedMetricSource' {s3SourceConfig} -> s3SourceConfig) (\s@DetectedMetricSource' {} a -> s {s3SourceConfig = a} :: DetectedMetricSource)
+
+instance Data.FromJSON DetectedMetricSource where
+  parseJSON =
+    Data.withObject
+      "DetectedMetricSource"
+      ( \x ->
+          DetectedMetricSource'
+            Prelude.<$> (x Data..:? "S3SourceConfig")
+      )
+
+instance Prelude.Hashable DetectedMetricSource where
+  hashWithSalt _salt DetectedMetricSource' {..} =
+    _salt `Prelude.hashWithSalt` s3SourceConfig
+
+instance Prelude.NFData DetectedMetricSource where
+  rnf DetectedMetricSource' {..} =
+    Prelude.rnf s3SourceConfig
diff --git a/gen/Amazonka/LookoutMetrics/Types/DetectedS3SourceConfig.hs b/gen/Amazonka/LookoutMetrics/Types/DetectedS3SourceConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/DetectedS3SourceConfig.hs
@@ -0,0 +1,73 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.Types.DetectedS3SourceConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.DetectedS3SourceConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.DetectedFileFormatDescriptor
+import qualified Amazonka.Prelude as Prelude
+
+-- | An inferred source configuration.
+--
+-- /See:/ 'newDetectedS3SourceConfig' smart constructor.
+data DetectedS3SourceConfig = DetectedS3SourceConfig'
+  { -- | The source\'s file format descriptor.
+    fileFormatDescriptor :: Prelude.Maybe DetectedFileFormatDescriptor
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetectedS3SourceConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fileFormatDescriptor', 'detectedS3SourceConfig_fileFormatDescriptor' - The source\'s file format descriptor.
+newDetectedS3SourceConfig ::
+  DetectedS3SourceConfig
+newDetectedS3SourceConfig =
+  DetectedS3SourceConfig'
+    { fileFormatDescriptor =
+        Prelude.Nothing
+    }
+
+-- | The source\'s file format descriptor.
+detectedS3SourceConfig_fileFormatDescriptor :: Lens.Lens' DetectedS3SourceConfig (Prelude.Maybe DetectedFileFormatDescriptor)
+detectedS3SourceConfig_fileFormatDescriptor = Lens.lens (\DetectedS3SourceConfig' {fileFormatDescriptor} -> fileFormatDescriptor) (\s@DetectedS3SourceConfig' {} a -> s {fileFormatDescriptor = a} :: DetectedS3SourceConfig)
+
+instance Data.FromJSON DetectedS3SourceConfig where
+  parseJSON =
+    Data.withObject
+      "DetectedS3SourceConfig"
+      ( \x ->
+          DetectedS3SourceConfig'
+            Prelude.<$> (x Data..:? "FileFormatDescriptor")
+      )
+
+instance Prelude.Hashable DetectedS3SourceConfig where
+  hashWithSalt _salt DetectedS3SourceConfig' {..} =
+    _salt `Prelude.hashWithSalt` fileFormatDescriptor
+
+instance Prelude.NFData DetectedS3SourceConfig where
+  rnf DetectedS3SourceConfig' {..} =
+    Prelude.rnf fileFormatDescriptor
diff --git a/gen/Amazonka/LookoutMetrics/Types/DimensionContribution.hs b/gen/Amazonka/LookoutMetrics/Types/DimensionContribution.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/DimensionContribution.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.LookoutMetrics.Types.DimensionContribution
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.DimensionContribution where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.DimensionValueContribution
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about a dimension that contributed to an anomaly.
+--
+-- /See:/ 'newDimensionContribution' smart constructor.
+data DimensionContribution = DimensionContribution'
+  { -- | The name of the dimension.
+    dimensionName :: Prelude.Maybe Prelude.Text,
+    -- | A list of dimension values that contributed to the anomaly.
+    dimensionValueContributionList :: Prelude.Maybe [DimensionValueContribution]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DimensionContribution' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dimensionName', 'dimensionContribution_dimensionName' - The name of the dimension.
+--
+-- 'dimensionValueContributionList', 'dimensionContribution_dimensionValueContributionList' - A list of dimension values that contributed to the anomaly.
+newDimensionContribution ::
+  DimensionContribution
+newDimensionContribution =
+  DimensionContribution'
+    { dimensionName =
+        Prelude.Nothing,
+      dimensionValueContributionList = Prelude.Nothing
+    }
+
+-- | The name of the dimension.
+dimensionContribution_dimensionName :: Lens.Lens' DimensionContribution (Prelude.Maybe Prelude.Text)
+dimensionContribution_dimensionName = Lens.lens (\DimensionContribution' {dimensionName} -> dimensionName) (\s@DimensionContribution' {} a -> s {dimensionName = a} :: DimensionContribution)
+
+-- | A list of dimension values that contributed to the anomaly.
+dimensionContribution_dimensionValueContributionList :: Lens.Lens' DimensionContribution (Prelude.Maybe [DimensionValueContribution])
+dimensionContribution_dimensionValueContributionList = Lens.lens (\DimensionContribution' {dimensionValueContributionList} -> dimensionValueContributionList) (\s@DimensionContribution' {} a -> s {dimensionValueContributionList = a} :: DimensionContribution) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON DimensionContribution where
+  parseJSON =
+    Data.withObject
+      "DimensionContribution"
+      ( \x ->
+          DimensionContribution'
+            Prelude.<$> (x Data..:? "DimensionName")
+            Prelude.<*> ( x
+                            Data..:? "DimensionValueContributionList"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable DimensionContribution where
+  hashWithSalt _salt DimensionContribution' {..} =
+    _salt
+      `Prelude.hashWithSalt` dimensionName
+      `Prelude.hashWithSalt` dimensionValueContributionList
+
+instance Prelude.NFData DimensionContribution where
+  rnf DimensionContribution' {..} =
+    Prelude.rnf dimensionName
+      `Prelude.seq` Prelude.rnf dimensionValueContributionList
diff --git a/gen/Amazonka/LookoutMetrics/Types/DimensionFilter.hs b/gen/Amazonka/LookoutMetrics/Types/DimensionFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/DimensionFilter.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.LookoutMetrics.Types.DimensionFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.DimensionFilter 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 dimension filter, containing DimensionName and DimensionValueList.
+--
+-- /See:/ 'newDimensionFilter' smart constructor.
+data DimensionFilter = DimensionFilter'
+  { -- | The name of the dimension to filter on.
+    dimensionName :: Prelude.Maybe Prelude.Text,
+    -- | The list of values for the dimension specified in DimensionName that you
+    -- want to filter on.
+    dimensionValueList :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DimensionFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dimensionName', 'dimensionFilter_dimensionName' - The name of the dimension to filter on.
+--
+-- 'dimensionValueList', 'dimensionFilter_dimensionValueList' - The list of values for the dimension specified in DimensionName that you
+-- want to filter on.
+newDimensionFilter ::
+  DimensionFilter
+newDimensionFilter =
+  DimensionFilter'
+    { dimensionName = Prelude.Nothing,
+      dimensionValueList = Prelude.Nothing
+    }
+
+-- | The name of the dimension to filter on.
+dimensionFilter_dimensionName :: Lens.Lens' DimensionFilter (Prelude.Maybe Prelude.Text)
+dimensionFilter_dimensionName = Lens.lens (\DimensionFilter' {dimensionName} -> dimensionName) (\s@DimensionFilter' {} a -> s {dimensionName = a} :: DimensionFilter)
+
+-- | The list of values for the dimension specified in DimensionName that you
+-- want to filter on.
+dimensionFilter_dimensionValueList :: Lens.Lens' DimensionFilter (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+dimensionFilter_dimensionValueList = Lens.lens (\DimensionFilter' {dimensionValueList} -> dimensionValueList) (\s@DimensionFilter' {} a -> s {dimensionValueList = a} :: DimensionFilter) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON DimensionFilter where
+  parseJSON =
+    Data.withObject
+      "DimensionFilter"
+      ( \x ->
+          DimensionFilter'
+            Prelude.<$> (x Data..:? "DimensionName")
+            Prelude.<*> (x Data..:? "DimensionValueList")
+      )
+
+instance Prelude.Hashable DimensionFilter where
+  hashWithSalt _salt DimensionFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` dimensionName
+      `Prelude.hashWithSalt` dimensionValueList
+
+instance Prelude.NFData DimensionFilter where
+  rnf DimensionFilter' {..} =
+    Prelude.rnf dimensionName
+      `Prelude.seq` Prelude.rnf dimensionValueList
+
+instance Data.ToJSON DimensionFilter where
+  toJSON DimensionFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DimensionName" Data..=) Prelude.<$> dimensionName,
+            ("DimensionValueList" Data..=)
+              Prelude.<$> dimensionValueList
+          ]
+      )
diff --git a/gen/Amazonka/LookoutMetrics/Types/DimensionNameValue.hs b/gen/Amazonka/LookoutMetrics/Types/DimensionNameValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/DimensionNameValue.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.LookoutMetrics.Types.DimensionNameValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.DimensionNameValue 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 dimension name and value.
+--
+-- /See:/ 'newDimensionNameValue' smart constructor.
+data DimensionNameValue = DimensionNameValue'
+  { -- | The name of the dimension.
+    dimensionName :: Prelude.Text,
+    -- | The value of the dimension.
+    dimensionValue :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DimensionNameValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dimensionName', 'dimensionNameValue_dimensionName' - The name of the dimension.
+--
+-- 'dimensionValue', 'dimensionNameValue_dimensionValue' - The value of the dimension.
+newDimensionNameValue ::
+  -- | 'dimensionName'
+  Prelude.Text ->
+  -- | 'dimensionValue'
+  Prelude.Text ->
+  DimensionNameValue
+newDimensionNameValue
+  pDimensionName_
+  pDimensionValue_ =
+    DimensionNameValue'
+      { dimensionName =
+          pDimensionName_,
+        dimensionValue = pDimensionValue_
+      }
+
+-- | The name of the dimension.
+dimensionNameValue_dimensionName :: Lens.Lens' DimensionNameValue Prelude.Text
+dimensionNameValue_dimensionName = Lens.lens (\DimensionNameValue' {dimensionName} -> dimensionName) (\s@DimensionNameValue' {} a -> s {dimensionName = a} :: DimensionNameValue)
+
+-- | The value of the dimension.
+dimensionNameValue_dimensionValue :: Lens.Lens' DimensionNameValue Prelude.Text
+dimensionNameValue_dimensionValue = Lens.lens (\DimensionNameValue' {dimensionValue} -> dimensionValue) (\s@DimensionNameValue' {} a -> s {dimensionValue = a} :: DimensionNameValue)
+
+instance Data.FromJSON DimensionNameValue where
+  parseJSON =
+    Data.withObject
+      "DimensionNameValue"
+      ( \x ->
+          DimensionNameValue'
+            Prelude.<$> (x Data..: "DimensionName")
+            Prelude.<*> (x Data..: "DimensionValue")
+      )
+
+instance Prelude.Hashable DimensionNameValue where
+  hashWithSalt _salt DimensionNameValue' {..} =
+    _salt
+      `Prelude.hashWithSalt` dimensionName
+      `Prelude.hashWithSalt` dimensionValue
+
+instance Prelude.NFData DimensionNameValue where
+  rnf DimensionNameValue' {..} =
+    Prelude.rnf dimensionName
+      `Prelude.seq` Prelude.rnf dimensionValue
diff --git a/gen/Amazonka/LookoutMetrics/Types/DimensionValueContribution.hs b/gen/Amazonka/LookoutMetrics/Types/DimensionValueContribution.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/DimensionValueContribution.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.LookoutMetrics.Types.DimensionValueContribution
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.DimensionValueContribution 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 severity of a value of a dimension that contributed to an anomaly.
+--
+-- /See:/ 'newDimensionValueContribution' smart constructor.
+data DimensionValueContribution = DimensionValueContribution'
+  { -- | The severity score of the value.
+    contributionScore :: Prelude.Maybe Prelude.Double,
+    -- | The value of the dimension.
+    dimensionValue :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DimensionValueContribution' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contributionScore', 'dimensionValueContribution_contributionScore' - The severity score of the value.
+--
+-- 'dimensionValue', 'dimensionValueContribution_dimensionValue' - The value of the dimension.
+newDimensionValueContribution ::
+  DimensionValueContribution
+newDimensionValueContribution =
+  DimensionValueContribution'
+    { contributionScore =
+        Prelude.Nothing,
+      dimensionValue = Prelude.Nothing
+    }
+
+-- | The severity score of the value.
+dimensionValueContribution_contributionScore :: Lens.Lens' DimensionValueContribution (Prelude.Maybe Prelude.Double)
+dimensionValueContribution_contributionScore = Lens.lens (\DimensionValueContribution' {contributionScore} -> contributionScore) (\s@DimensionValueContribution' {} a -> s {contributionScore = a} :: DimensionValueContribution)
+
+-- | The value of the dimension.
+dimensionValueContribution_dimensionValue :: Lens.Lens' DimensionValueContribution (Prelude.Maybe Prelude.Text)
+dimensionValueContribution_dimensionValue = Lens.lens (\DimensionValueContribution' {dimensionValue} -> dimensionValue) (\s@DimensionValueContribution' {} a -> s {dimensionValue = a} :: DimensionValueContribution)
+
+instance Data.FromJSON DimensionValueContribution where
+  parseJSON =
+    Data.withObject
+      "DimensionValueContribution"
+      ( \x ->
+          DimensionValueContribution'
+            Prelude.<$> (x Data..:? "ContributionScore")
+            Prelude.<*> (x Data..:? "DimensionValue")
+      )
+
+instance Prelude.Hashable DimensionValueContribution where
+  hashWithSalt _salt DimensionValueContribution' {..} =
+    _salt
+      `Prelude.hashWithSalt` contributionScore
+      `Prelude.hashWithSalt` dimensionValue
+
+instance Prelude.NFData DimensionValueContribution where
+  rnf DimensionValueContribution' {..} =
+    Prelude.rnf contributionScore
+      `Prelude.seq` Prelude.rnf dimensionValue
diff --git a/gen/Amazonka/LookoutMetrics/Types/ExecutionStatus.hs b/gen/Amazonka/LookoutMetrics/Types/ExecutionStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/ExecutionStatus.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.LookoutMetrics.Types.ExecutionStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.ExecutionStatus where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.AnomalyDetectionTaskStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | The status of an anomaly detector run.
+--
+-- /See:/ 'newExecutionStatus' smart constructor.
+data ExecutionStatus = ExecutionStatus'
+  { -- | The reason that the run failed, if applicable.
+    failureReason :: Prelude.Maybe Prelude.Text,
+    -- | The run\'s status.
+    status :: Prelude.Maybe AnomalyDetectionTaskStatus,
+    -- | The run\'s timestamp.
+    timestamp :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExecutionStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failureReason', 'executionStatus_failureReason' - The reason that the run failed, if applicable.
+--
+-- 'status', 'executionStatus_status' - The run\'s status.
+--
+-- 'timestamp', 'executionStatus_timestamp' - The run\'s timestamp.
+newExecutionStatus ::
+  ExecutionStatus
+newExecutionStatus =
+  ExecutionStatus'
+    { failureReason = Prelude.Nothing,
+      status = Prelude.Nothing,
+      timestamp = Prelude.Nothing
+    }
+
+-- | The reason that the run failed, if applicable.
+executionStatus_failureReason :: Lens.Lens' ExecutionStatus (Prelude.Maybe Prelude.Text)
+executionStatus_failureReason = Lens.lens (\ExecutionStatus' {failureReason} -> failureReason) (\s@ExecutionStatus' {} a -> s {failureReason = a} :: ExecutionStatus)
+
+-- | The run\'s status.
+executionStatus_status :: Lens.Lens' ExecutionStatus (Prelude.Maybe AnomalyDetectionTaskStatus)
+executionStatus_status = Lens.lens (\ExecutionStatus' {status} -> status) (\s@ExecutionStatus' {} a -> s {status = a} :: ExecutionStatus)
+
+-- | The run\'s timestamp.
+executionStatus_timestamp :: Lens.Lens' ExecutionStatus (Prelude.Maybe Prelude.Text)
+executionStatus_timestamp = Lens.lens (\ExecutionStatus' {timestamp} -> timestamp) (\s@ExecutionStatus' {} a -> s {timestamp = a} :: ExecutionStatus)
+
+instance Data.FromJSON ExecutionStatus where
+  parseJSON =
+    Data.withObject
+      "ExecutionStatus"
+      ( \x ->
+          ExecutionStatus'
+            Prelude.<$> (x Data..:? "FailureReason")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "Timestamp")
+      )
+
+instance Prelude.Hashable ExecutionStatus where
+  hashWithSalt _salt ExecutionStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` failureReason
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` timestamp
+
+instance Prelude.NFData ExecutionStatus where
+  rnf ExecutionStatus' {..} =
+    Prelude.rnf failureReason
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf timestamp
diff --git a/gen/Amazonka/LookoutMetrics/Types/FileFormatDescriptor.hs b/gen/Amazonka/LookoutMetrics/Types/FileFormatDescriptor.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/FileFormatDescriptor.hs
@@ -0,0 +1,104 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.Types.FileFormatDescriptor
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.FileFormatDescriptor where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.CsvFormatDescriptor
+import Amazonka.LookoutMetrics.Types.JsonFormatDescriptor
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains information about a source file\'s formatting.
+--
+-- /See:/ 'newFileFormatDescriptor' smart constructor.
+data FileFormatDescriptor = FileFormatDescriptor'
+  { -- | Contains information about how a source CSV data file should be
+    -- analyzed.
+    csvFormatDescriptor :: Prelude.Maybe CsvFormatDescriptor,
+    -- | Contains information about how a source JSON data file should be
+    -- analyzed.
+    jsonFormatDescriptor :: Prelude.Maybe JsonFormatDescriptor
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FileFormatDescriptor' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'csvFormatDescriptor', 'fileFormatDescriptor_csvFormatDescriptor' - Contains information about how a source CSV data file should be
+-- analyzed.
+--
+-- 'jsonFormatDescriptor', 'fileFormatDescriptor_jsonFormatDescriptor' - Contains information about how a source JSON data file should be
+-- analyzed.
+newFileFormatDescriptor ::
+  FileFormatDescriptor
+newFileFormatDescriptor =
+  FileFormatDescriptor'
+    { csvFormatDescriptor =
+        Prelude.Nothing,
+      jsonFormatDescriptor = Prelude.Nothing
+    }
+
+-- | Contains information about how a source CSV data file should be
+-- analyzed.
+fileFormatDescriptor_csvFormatDescriptor :: Lens.Lens' FileFormatDescriptor (Prelude.Maybe CsvFormatDescriptor)
+fileFormatDescriptor_csvFormatDescriptor = Lens.lens (\FileFormatDescriptor' {csvFormatDescriptor} -> csvFormatDescriptor) (\s@FileFormatDescriptor' {} a -> s {csvFormatDescriptor = a} :: FileFormatDescriptor)
+
+-- | Contains information about how a source JSON data file should be
+-- analyzed.
+fileFormatDescriptor_jsonFormatDescriptor :: Lens.Lens' FileFormatDescriptor (Prelude.Maybe JsonFormatDescriptor)
+fileFormatDescriptor_jsonFormatDescriptor = Lens.lens (\FileFormatDescriptor' {jsonFormatDescriptor} -> jsonFormatDescriptor) (\s@FileFormatDescriptor' {} a -> s {jsonFormatDescriptor = a} :: FileFormatDescriptor)
+
+instance Data.FromJSON FileFormatDescriptor where
+  parseJSON =
+    Data.withObject
+      "FileFormatDescriptor"
+      ( \x ->
+          FileFormatDescriptor'
+            Prelude.<$> (x Data..:? "CsvFormatDescriptor")
+            Prelude.<*> (x Data..:? "JsonFormatDescriptor")
+      )
+
+instance Prelude.Hashable FileFormatDescriptor where
+  hashWithSalt _salt FileFormatDescriptor' {..} =
+    _salt
+      `Prelude.hashWithSalt` csvFormatDescriptor
+      `Prelude.hashWithSalt` jsonFormatDescriptor
+
+instance Prelude.NFData FileFormatDescriptor where
+  rnf FileFormatDescriptor' {..} =
+    Prelude.rnf csvFormatDescriptor
+      `Prelude.seq` Prelude.rnf jsonFormatDescriptor
+
+instance Data.ToJSON FileFormatDescriptor where
+  toJSON FileFormatDescriptor' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CsvFormatDescriptor" Data..=)
+              Prelude.<$> csvFormatDescriptor,
+            ("JsonFormatDescriptor" Data..=)
+              Prelude.<$> jsonFormatDescriptor
+          ]
+      )
diff --git a/gen/Amazonka/LookoutMetrics/Types/Filter.hs b/gen/Amazonka/LookoutMetrics/Types/Filter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/Filter.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.LookoutMetrics.Types.Filter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.Filter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.FilterOperation
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a filter for choosing a subset of dimension values. Each
+-- filter consists of the dimension that you want to include and the
+-- condition statement. The condition statement is specified in the
+-- @FilterOperation@ object.
+--
+-- /See:/ 'newFilter' smart constructor.
+data Filter = Filter'
+  { -- | The value that you want to include in the filter.
+    dimensionValue :: Prelude.Maybe Prelude.Text,
+    -- | The condition to apply.
+    filterOperation :: Prelude.Maybe FilterOperation
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Filter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dimensionValue', 'filter_dimensionValue' - The value that you want to include in the filter.
+--
+-- 'filterOperation', 'filter_filterOperation' - The condition to apply.
+newFilter ::
+  Filter
+newFilter =
+  Filter'
+    { dimensionValue = Prelude.Nothing,
+      filterOperation = Prelude.Nothing
+    }
+
+-- | The value that you want to include in the filter.
+filter_dimensionValue :: Lens.Lens' Filter (Prelude.Maybe Prelude.Text)
+filter_dimensionValue = Lens.lens (\Filter' {dimensionValue} -> dimensionValue) (\s@Filter' {} a -> s {dimensionValue = a} :: Filter)
+
+-- | The condition to apply.
+filter_filterOperation :: Lens.Lens' Filter (Prelude.Maybe FilterOperation)
+filter_filterOperation = Lens.lens (\Filter' {filterOperation} -> filterOperation) (\s@Filter' {} a -> s {filterOperation = a} :: Filter)
+
+instance Data.FromJSON Filter where
+  parseJSON =
+    Data.withObject
+      "Filter"
+      ( \x ->
+          Filter'
+            Prelude.<$> (x Data..:? "DimensionValue")
+            Prelude.<*> (x Data..:? "FilterOperation")
+      )
+
+instance Prelude.Hashable Filter where
+  hashWithSalt _salt Filter' {..} =
+    _salt
+      `Prelude.hashWithSalt` dimensionValue
+      `Prelude.hashWithSalt` filterOperation
+
+instance Prelude.NFData Filter where
+  rnf Filter' {..} =
+    Prelude.rnf dimensionValue
+      `Prelude.seq` Prelude.rnf filterOperation
+
+instance Data.ToJSON Filter where
+  toJSON Filter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DimensionValue" Data..=)
+              Prelude.<$> dimensionValue,
+            ("FilterOperation" Data..=)
+              Prelude.<$> filterOperation
+          ]
+      )
diff --git a/gen/Amazonka/LookoutMetrics/Types/FilterOperation.hs b/gen/Amazonka/LookoutMetrics/Types/FilterOperation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/FilterOperation.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.Types.FilterOperation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.FilterOperation
+  ( FilterOperation
+      ( ..,
+        FilterOperation_EQUALS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FilterOperation = FilterOperation'
+  { fromFilterOperation ::
+      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 FilterOperation_EQUALS :: FilterOperation
+pattern FilterOperation_EQUALS = FilterOperation' "EQUALS"
+
+{-# COMPLETE
+  FilterOperation_EQUALS,
+  FilterOperation'
+  #-}
diff --git a/gen/Amazonka/LookoutMetrics/Types/Frequency.hs b/gen/Amazonka/LookoutMetrics/Types/Frequency.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/Frequency.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.LookoutMetrics.Types.Frequency
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.Frequency
+  ( Frequency
+      ( ..,
+        Frequency_P1D,
+        Frequency_PT10M,
+        Frequency_PT1H,
+        Frequency_PT5M
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Frequency = Frequency'
+  { fromFrequency ::
+      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 Frequency_P1D :: Frequency
+pattern Frequency_P1D = Frequency' "P1D"
+
+pattern Frequency_PT10M :: Frequency
+pattern Frequency_PT10M = Frequency' "PT10M"
+
+pattern Frequency_PT1H :: Frequency
+pattern Frequency_PT1H = Frequency' "PT1H"
+
+pattern Frequency_PT5M :: Frequency
+pattern Frequency_PT5M = Frequency' "PT5M"
+
+{-# COMPLETE
+  Frequency_P1D,
+  Frequency_PT10M,
+  Frequency_PT1H,
+  Frequency_PT5M,
+  Frequency'
+  #-}
diff --git a/gen/Amazonka/LookoutMetrics/Types/InterMetricImpactDetails.hs b/gen/Amazonka/LookoutMetrics/Types/InterMetricImpactDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/InterMetricImpactDetails.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.LookoutMetrics.Types.InterMetricImpactDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.InterMetricImpactDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.RelationshipType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Aggregated details about the measures contributing to the anomaly group,
+-- and the measures potentially impacted by the anomaly group.
+--
+-- /See:/ 'newInterMetricImpactDetails' smart constructor.
+data InterMetricImpactDetails = InterMetricImpactDetails'
+  { -- | The ID of the anomaly group.
+    anomalyGroupId :: Prelude.Maybe Prelude.Text,
+    -- | For potential causes (@CAUSE_OF_INPUT_ANOMALY_GROUP@), the percentage
+    -- contribution the measure has in causing the anomalies.
+    contributionPercentage :: Prelude.Maybe Prelude.Double,
+    -- | The name of the measure.
+    metricName :: Prelude.Maybe Prelude.Text,
+    -- | Whether a measure is a potential cause of the anomaly group
+    -- (@CAUSE_OF_INPUT_ANOMALY_GROUP@), or whether the measure is impacted by
+    -- the anomaly group (@EFFECT_OF_INPUT_ANOMALY_GROUP@).
+    relationshipType :: Prelude.Maybe RelationshipType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InterMetricImpactDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyGroupId', 'interMetricImpactDetails_anomalyGroupId' - The ID of the anomaly group.
+--
+-- 'contributionPercentage', 'interMetricImpactDetails_contributionPercentage' - For potential causes (@CAUSE_OF_INPUT_ANOMALY_GROUP@), the percentage
+-- contribution the measure has in causing the anomalies.
+--
+-- 'metricName', 'interMetricImpactDetails_metricName' - The name of the measure.
+--
+-- 'relationshipType', 'interMetricImpactDetails_relationshipType' - Whether a measure is a potential cause of the anomaly group
+-- (@CAUSE_OF_INPUT_ANOMALY_GROUP@), or whether the measure is impacted by
+-- the anomaly group (@EFFECT_OF_INPUT_ANOMALY_GROUP@).
+newInterMetricImpactDetails ::
+  InterMetricImpactDetails
+newInterMetricImpactDetails =
+  InterMetricImpactDetails'
+    { anomalyGroupId =
+        Prelude.Nothing,
+      contributionPercentage = Prelude.Nothing,
+      metricName = Prelude.Nothing,
+      relationshipType = Prelude.Nothing
+    }
+
+-- | The ID of the anomaly group.
+interMetricImpactDetails_anomalyGroupId :: Lens.Lens' InterMetricImpactDetails (Prelude.Maybe Prelude.Text)
+interMetricImpactDetails_anomalyGroupId = Lens.lens (\InterMetricImpactDetails' {anomalyGroupId} -> anomalyGroupId) (\s@InterMetricImpactDetails' {} a -> s {anomalyGroupId = a} :: InterMetricImpactDetails)
+
+-- | For potential causes (@CAUSE_OF_INPUT_ANOMALY_GROUP@), the percentage
+-- contribution the measure has in causing the anomalies.
+interMetricImpactDetails_contributionPercentage :: Lens.Lens' InterMetricImpactDetails (Prelude.Maybe Prelude.Double)
+interMetricImpactDetails_contributionPercentage = Lens.lens (\InterMetricImpactDetails' {contributionPercentage} -> contributionPercentage) (\s@InterMetricImpactDetails' {} a -> s {contributionPercentage = a} :: InterMetricImpactDetails)
+
+-- | The name of the measure.
+interMetricImpactDetails_metricName :: Lens.Lens' InterMetricImpactDetails (Prelude.Maybe Prelude.Text)
+interMetricImpactDetails_metricName = Lens.lens (\InterMetricImpactDetails' {metricName} -> metricName) (\s@InterMetricImpactDetails' {} a -> s {metricName = a} :: InterMetricImpactDetails)
+
+-- | Whether a measure is a potential cause of the anomaly group
+-- (@CAUSE_OF_INPUT_ANOMALY_GROUP@), or whether the measure is impacted by
+-- the anomaly group (@EFFECT_OF_INPUT_ANOMALY_GROUP@).
+interMetricImpactDetails_relationshipType :: Lens.Lens' InterMetricImpactDetails (Prelude.Maybe RelationshipType)
+interMetricImpactDetails_relationshipType = Lens.lens (\InterMetricImpactDetails' {relationshipType} -> relationshipType) (\s@InterMetricImpactDetails' {} a -> s {relationshipType = a} :: InterMetricImpactDetails)
+
+instance Data.FromJSON InterMetricImpactDetails where
+  parseJSON =
+    Data.withObject
+      "InterMetricImpactDetails"
+      ( \x ->
+          InterMetricImpactDetails'
+            Prelude.<$> (x Data..:? "AnomalyGroupId")
+            Prelude.<*> (x Data..:? "ContributionPercentage")
+            Prelude.<*> (x Data..:? "MetricName")
+            Prelude.<*> (x Data..:? "RelationshipType")
+      )
+
+instance Prelude.Hashable InterMetricImpactDetails where
+  hashWithSalt _salt InterMetricImpactDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` anomalyGroupId
+      `Prelude.hashWithSalt` contributionPercentage
+      `Prelude.hashWithSalt` metricName
+      `Prelude.hashWithSalt` relationshipType
+
+instance Prelude.NFData InterMetricImpactDetails where
+  rnf InterMetricImpactDetails' {..} =
+    Prelude.rnf anomalyGroupId
+      `Prelude.seq` Prelude.rnf contributionPercentage
+      `Prelude.seq` Prelude.rnf metricName
+      `Prelude.seq` Prelude.rnf relationshipType
diff --git a/gen/Amazonka/LookoutMetrics/Types/ItemizedMetricStats.hs b/gen/Amazonka/LookoutMetrics/Types/ItemizedMetricStats.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/ItemizedMetricStats.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.Types.ItemizedMetricStats
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.ItemizedMetricStats 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
+
+-- | Aggregated statistics about a measure affected by an anomaly.
+--
+-- /See:/ 'newItemizedMetricStats' smart constructor.
+data ItemizedMetricStats = ItemizedMetricStats'
+  { -- | The name of the measure.
+    metricName :: Prelude.Maybe Prelude.Text,
+    -- | The number of times that the measure appears.
+    occurrenceCount :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ItemizedMetricStats' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'metricName', 'itemizedMetricStats_metricName' - The name of the measure.
+--
+-- 'occurrenceCount', 'itemizedMetricStats_occurrenceCount' - The number of times that the measure appears.
+newItemizedMetricStats ::
+  ItemizedMetricStats
+newItemizedMetricStats =
+  ItemizedMetricStats'
+    { metricName = Prelude.Nothing,
+      occurrenceCount = Prelude.Nothing
+    }
+
+-- | The name of the measure.
+itemizedMetricStats_metricName :: Lens.Lens' ItemizedMetricStats (Prelude.Maybe Prelude.Text)
+itemizedMetricStats_metricName = Lens.lens (\ItemizedMetricStats' {metricName} -> metricName) (\s@ItemizedMetricStats' {} a -> s {metricName = a} :: ItemizedMetricStats)
+
+-- | The number of times that the measure appears.
+itemizedMetricStats_occurrenceCount :: Lens.Lens' ItemizedMetricStats (Prelude.Maybe Prelude.Int)
+itemizedMetricStats_occurrenceCount = Lens.lens (\ItemizedMetricStats' {occurrenceCount} -> occurrenceCount) (\s@ItemizedMetricStats' {} a -> s {occurrenceCount = a} :: ItemizedMetricStats)
+
+instance Data.FromJSON ItemizedMetricStats where
+  parseJSON =
+    Data.withObject
+      "ItemizedMetricStats"
+      ( \x ->
+          ItemizedMetricStats'
+            Prelude.<$> (x Data..:? "MetricName")
+            Prelude.<*> (x Data..:? "OccurrenceCount")
+      )
+
+instance Prelude.Hashable ItemizedMetricStats where
+  hashWithSalt _salt ItemizedMetricStats' {..} =
+    _salt
+      `Prelude.hashWithSalt` metricName
+      `Prelude.hashWithSalt` occurrenceCount
+
+instance Prelude.NFData ItemizedMetricStats where
+  rnf ItemizedMetricStats' {..} =
+    Prelude.rnf metricName
+      `Prelude.seq` Prelude.rnf occurrenceCount
diff --git a/gen/Amazonka/LookoutMetrics/Types/JsonFileCompression.hs b/gen/Amazonka/LookoutMetrics/Types/JsonFileCompression.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/JsonFileCompression.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.LookoutMetrics.Types.JsonFileCompression
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.JsonFileCompression
+  ( JsonFileCompression
+      ( ..,
+        JsonFileCompression_GZIP,
+        JsonFileCompression_NONE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype JsonFileCompression = JsonFileCompression'
+  { fromJsonFileCompression ::
+      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 JsonFileCompression_GZIP :: JsonFileCompression
+pattern JsonFileCompression_GZIP = JsonFileCompression' "GZIP"
+
+pattern JsonFileCompression_NONE :: JsonFileCompression
+pattern JsonFileCompression_NONE = JsonFileCompression' "NONE"
+
+{-# COMPLETE
+  JsonFileCompression_GZIP,
+  JsonFileCompression_NONE,
+  JsonFileCompression'
+  #-}
diff --git a/gen/Amazonka/LookoutMetrics/Types/JsonFormatDescriptor.hs b/gen/Amazonka/LookoutMetrics/Types/JsonFormatDescriptor.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/JsonFormatDescriptor.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.LookoutMetrics.Types.JsonFormatDescriptor
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.JsonFormatDescriptor where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.JsonFileCompression
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains information about how a source JSON data file should be
+-- analyzed.
+--
+-- /See:/ 'newJsonFormatDescriptor' smart constructor.
+data JsonFormatDescriptor = JsonFormatDescriptor'
+  { -- | The character set in which the source JSON file is written.
+    charset :: Prelude.Maybe Prelude.Text,
+    -- | The level of compression of the source CSV file.
+    fileCompression :: Prelude.Maybe JsonFileCompression
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JsonFormatDescriptor' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'charset', 'jsonFormatDescriptor_charset' - The character set in which the source JSON file is written.
+--
+-- 'fileCompression', 'jsonFormatDescriptor_fileCompression' - The level of compression of the source CSV file.
+newJsonFormatDescriptor ::
+  JsonFormatDescriptor
+newJsonFormatDescriptor =
+  JsonFormatDescriptor'
+    { charset = Prelude.Nothing,
+      fileCompression = Prelude.Nothing
+    }
+
+-- | The character set in which the source JSON file is written.
+jsonFormatDescriptor_charset :: Lens.Lens' JsonFormatDescriptor (Prelude.Maybe Prelude.Text)
+jsonFormatDescriptor_charset = Lens.lens (\JsonFormatDescriptor' {charset} -> charset) (\s@JsonFormatDescriptor' {} a -> s {charset = a} :: JsonFormatDescriptor)
+
+-- | The level of compression of the source CSV file.
+jsonFormatDescriptor_fileCompression :: Lens.Lens' JsonFormatDescriptor (Prelude.Maybe JsonFileCompression)
+jsonFormatDescriptor_fileCompression = Lens.lens (\JsonFormatDescriptor' {fileCompression} -> fileCompression) (\s@JsonFormatDescriptor' {} a -> s {fileCompression = a} :: JsonFormatDescriptor)
+
+instance Data.FromJSON JsonFormatDescriptor where
+  parseJSON =
+    Data.withObject
+      "JsonFormatDescriptor"
+      ( \x ->
+          JsonFormatDescriptor'
+            Prelude.<$> (x Data..:? "Charset")
+            Prelude.<*> (x Data..:? "FileCompression")
+      )
+
+instance Prelude.Hashable JsonFormatDescriptor where
+  hashWithSalt _salt JsonFormatDescriptor' {..} =
+    _salt
+      `Prelude.hashWithSalt` charset
+      `Prelude.hashWithSalt` fileCompression
+
+instance Prelude.NFData JsonFormatDescriptor where
+  rnf JsonFormatDescriptor' {..} =
+    Prelude.rnf charset
+      `Prelude.seq` Prelude.rnf fileCompression
+
+instance Data.ToJSON JsonFormatDescriptor where
+  toJSON JsonFormatDescriptor' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Charset" Data..=) Prelude.<$> charset,
+            ("FileCompression" Data..=)
+              Prelude.<$> fileCompression
+          ]
+      )
diff --git a/gen/Amazonka/LookoutMetrics/Types/LambdaConfiguration.hs b/gen/Amazonka/LookoutMetrics/Types/LambdaConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/LambdaConfiguration.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.LookoutMetrics.Types.LambdaConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.LambdaConfiguration 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 a Lambda configuration.
+--
+-- /See:/ 'newLambdaConfiguration' smart constructor.
+data LambdaConfiguration = LambdaConfiguration'
+  { -- | The ARN of an IAM role that has permission to invoke the Lambda
+    -- function.
+    roleArn :: Prelude.Text,
+    -- | The ARN of the Lambda function.
+    lambdaArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LambdaConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'roleArn', 'lambdaConfiguration_roleArn' - The ARN of an IAM role that has permission to invoke the Lambda
+-- function.
+--
+-- 'lambdaArn', 'lambdaConfiguration_lambdaArn' - The ARN of the Lambda function.
+newLambdaConfiguration ::
+  -- | 'roleArn'
+  Prelude.Text ->
+  -- | 'lambdaArn'
+  Prelude.Text ->
+  LambdaConfiguration
+newLambdaConfiguration pRoleArn_ pLambdaArn_ =
+  LambdaConfiguration'
+    { roleArn = pRoleArn_,
+      lambdaArn = pLambdaArn_
+    }
+
+-- | The ARN of an IAM role that has permission to invoke the Lambda
+-- function.
+lambdaConfiguration_roleArn :: Lens.Lens' LambdaConfiguration Prelude.Text
+lambdaConfiguration_roleArn = Lens.lens (\LambdaConfiguration' {roleArn} -> roleArn) (\s@LambdaConfiguration' {} a -> s {roleArn = a} :: LambdaConfiguration)
+
+-- | The ARN of the Lambda function.
+lambdaConfiguration_lambdaArn :: Lens.Lens' LambdaConfiguration Prelude.Text
+lambdaConfiguration_lambdaArn = Lens.lens (\LambdaConfiguration' {lambdaArn} -> lambdaArn) (\s@LambdaConfiguration' {} a -> s {lambdaArn = a} :: LambdaConfiguration)
+
+instance Data.FromJSON LambdaConfiguration where
+  parseJSON =
+    Data.withObject
+      "LambdaConfiguration"
+      ( \x ->
+          LambdaConfiguration'
+            Prelude.<$> (x Data..: "RoleArn")
+            Prelude.<*> (x Data..: "LambdaArn")
+      )
+
+instance Prelude.Hashable LambdaConfiguration where
+  hashWithSalt _salt LambdaConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` lambdaArn
+
+instance Prelude.NFData LambdaConfiguration where
+  rnf LambdaConfiguration' {..} =
+    Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf lambdaArn
+
+instance Data.ToJSON LambdaConfiguration where
+  toJSON LambdaConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("RoleArn" Data..= roleArn),
+            Prelude.Just ("LambdaArn" Data..= lambdaArn)
+          ]
+      )
diff --git a/gen/Amazonka/LookoutMetrics/Types/Metric.hs b/gen/Amazonka/LookoutMetrics/Types/Metric.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/Metric.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.Types.Metric
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.Metric where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.AggregationFunction
+import qualified Amazonka.Prelude as Prelude
+
+-- | A calculation made by contrasting a measure and a dimension from your
+-- source data.
+--
+-- /See:/ 'newMetric' smart constructor.
+data Metric = Metric'
+  { -- | The namespace for the metric.
+    namespace :: Prelude.Maybe Prelude.Text,
+    -- | The name of the metric.
+    metricName :: Prelude.Text,
+    -- | The function with which the metric is calculated.
+    aggregationFunction :: AggregationFunction
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Metric' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'namespace', 'metric_namespace' - The namespace for the metric.
+--
+-- 'metricName', 'metric_metricName' - The name of the metric.
+--
+-- 'aggregationFunction', 'metric_aggregationFunction' - The function with which the metric is calculated.
+newMetric ::
+  -- | 'metricName'
+  Prelude.Text ->
+  -- | 'aggregationFunction'
+  AggregationFunction ->
+  Metric
+newMetric pMetricName_ pAggregationFunction_ =
+  Metric'
+    { namespace = Prelude.Nothing,
+      metricName = pMetricName_,
+      aggregationFunction = pAggregationFunction_
+    }
+
+-- | The namespace for the metric.
+metric_namespace :: Lens.Lens' Metric (Prelude.Maybe Prelude.Text)
+metric_namespace = Lens.lens (\Metric' {namespace} -> namespace) (\s@Metric' {} a -> s {namespace = a} :: Metric)
+
+-- | The name of the metric.
+metric_metricName :: Lens.Lens' Metric Prelude.Text
+metric_metricName = Lens.lens (\Metric' {metricName} -> metricName) (\s@Metric' {} a -> s {metricName = a} :: Metric)
+
+-- | The function with which the metric is calculated.
+metric_aggregationFunction :: Lens.Lens' Metric AggregationFunction
+metric_aggregationFunction = Lens.lens (\Metric' {aggregationFunction} -> aggregationFunction) (\s@Metric' {} a -> s {aggregationFunction = a} :: Metric)
+
+instance Data.FromJSON Metric where
+  parseJSON =
+    Data.withObject
+      "Metric"
+      ( \x ->
+          Metric'
+            Prelude.<$> (x Data..:? "Namespace")
+            Prelude.<*> (x Data..: "MetricName")
+            Prelude.<*> (x Data..: "AggregationFunction")
+      )
+
+instance Prelude.Hashable Metric where
+  hashWithSalt _salt Metric' {..} =
+    _salt
+      `Prelude.hashWithSalt` namespace
+      `Prelude.hashWithSalt` metricName
+      `Prelude.hashWithSalt` aggregationFunction
+
+instance Prelude.NFData Metric where
+  rnf Metric' {..} =
+    Prelude.rnf namespace
+      `Prelude.seq` Prelude.rnf metricName
+      `Prelude.seq` Prelude.rnf aggregationFunction
+
+instance Data.ToJSON Metric where
+  toJSON Metric' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Namespace" Data..=) Prelude.<$> namespace,
+            Prelude.Just ("MetricName" Data..= metricName),
+            Prelude.Just
+              ("AggregationFunction" Data..= aggregationFunction)
+          ]
+      )
diff --git a/gen/Amazonka/LookoutMetrics/Types/MetricLevelImpact.hs b/gen/Amazonka/LookoutMetrics/Types/MetricLevelImpact.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/MetricLevelImpact.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.LookoutMetrics.Types.MetricLevelImpact
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.MetricLevelImpact where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.ContributionMatrix
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about a measure affected by an anomaly.
+--
+-- /See:/ 'newMetricLevelImpact' smart constructor.
+data MetricLevelImpact = MetricLevelImpact'
+  { -- | Details about the dimensions that contributed to the anomaly.
+    contributionMatrix :: Prelude.Maybe ContributionMatrix,
+    -- | The name of the measure.
+    metricName :: Prelude.Maybe Prelude.Text,
+    -- | The number of anomalous metrics for the measure.
+    numTimeSeries :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MetricLevelImpact' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contributionMatrix', 'metricLevelImpact_contributionMatrix' - Details about the dimensions that contributed to the anomaly.
+--
+-- 'metricName', 'metricLevelImpact_metricName' - The name of the measure.
+--
+-- 'numTimeSeries', 'metricLevelImpact_numTimeSeries' - The number of anomalous metrics for the measure.
+newMetricLevelImpact ::
+  MetricLevelImpact
+newMetricLevelImpact =
+  MetricLevelImpact'
+    { contributionMatrix =
+        Prelude.Nothing,
+      metricName = Prelude.Nothing,
+      numTimeSeries = Prelude.Nothing
+    }
+
+-- | Details about the dimensions that contributed to the anomaly.
+metricLevelImpact_contributionMatrix :: Lens.Lens' MetricLevelImpact (Prelude.Maybe ContributionMatrix)
+metricLevelImpact_contributionMatrix = Lens.lens (\MetricLevelImpact' {contributionMatrix} -> contributionMatrix) (\s@MetricLevelImpact' {} a -> s {contributionMatrix = a} :: MetricLevelImpact)
+
+-- | The name of the measure.
+metricLevelImpact_metricName :: Lens.Lens' MetricLevelImpact (Prelude.Maybe Prelude.Text)
+metricLevelImpact_metricName = Lens.lens (\MetricLevelImpact' {metricName} -> metricName) (\s@MetricLevelImpact' {} a -> s {metricName = a} :: MetricLevelImpact)
+
+-- | The number of anomalous metrics for the measure.
+metricLevelImpact_numTimeSeries :: Lens.Lens' MetricLevelImpact (Prelude.Maybe Prelude.Int)
+metricLevelImpact_numTimeSeries = Lens.lens (\MetricLevelImpact' {numTimeSeries} -> numTimeSeries) (\s@MetricLevelImpact' {} a -> s {numTimeSeries = a} :: MetricLevelImpact)
+
+instance Data.FromJSON MetricLevelImpact where
+  parseJSON =
+    Data.withObject
+      "MetricLevelImpact"
+      ( \x ->
+          MetricLevelImpact'
+            Prelude.<$> (x Data..:? "ContributionMatrix")
+            Prelude.<*> (x Data..:? "MetricName")
+            Prelude.<*> (x Data..:? "NumTimeSeries")
+      )
+
+instance Prelude.Hashable MetricLevelImpact where
+  hashWithSalt _salt MetricLevelImpact' {..} =
+    _salt
+      `Prelude.hashWithSalt` contributionMatrix
+      `Prelude.hashWithSalt` metricName
+      `Prelude.hashWithSalt` numTimeSeries
+
+instance Prelude.NFData MetricLevelImpact where
+  rnf MetricLevelImpact' {..} =
+    Prelude.rnf contributionMatrix
+      `Prelude.seq` Prelude.rnf metricName
+      `Prelude.seq` Prelude.rnf numTimeSeries
diff --git a/gen/Amazonka/LookoutMetrics/Types/MetricSetDataQualityMetric.hs b/gen/Amazonka/LookoutMetrics/Types/MetricSetDataQualityMetric.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/MetricSetDataQualityMetric.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.LookoutMetrics.Types.MetricSetDataQualityMetric
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.MetricSetDataQualityMetric where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.DataQualityMetric
+import qualified Amazonka.Prelude as Prelude
+
+-- | An array of @DataQualityMetric@ objects that describes one or more data
+-- quality metrics.
+--
+-- /See:/ 'newMetricSetDataQualityMetric' smart constructor.
+data MetricSetDataQualityMetric = MetricSetDataQualityMetric'
+  { -- | The array of data quality metrics contained in the data quality metric
+    -- set.
+    dataQualityMetricList :: Prelude.Maybe [DataQualityMetric],
+    -- | The Amazon Resource Name (ARN) of the data quality metric array.
+    metricSetArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MetricSetDataQualityMetric' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataQualityMetricList', 'metricSetDataQualityMetric_dataQualityMetricList' - The array of data quality metrics contained in the data quality metric
+-- set.
+--
+-- 'metricSetArn', 'metricSetDataQualityMetric_metricSetArn' - The Amazon Resource Name (ARN) of the data quality metric array.
+newMetricSetDataQualityMetric ::
+  MetricSetDataQualityMetric
+newMetricSetDataQualityMetric =
+  MetricSetDataQualityMetric'
+    { dataQualityMetricList =
+        Prelude.Nothing,
+      metricSetArn = Prelude.Nothing
+    }
+
+-- | The array of data quality metrics contained in the data quality metric
+-- set.
+metricSetDataQualityMetric_dataQualityMetricList :: Lens.Lens' MetricSetDataQualityMetric (Prelude.Maybe [DataQualityMetric])
+metricSetDataQualityMetric_dataQualityMetricList = Lens.lens (\MetricSetDataQualityMetric' {dataQualityMetricList} -> dataQualityMetricList) (\s@MetricSetDataQualityMetric' {} a -> s {dataQualityMetricList = a} :: MetricSetDataQualityMetric) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the data quality metric array.
+metricSetDataQualityMetric_metricSetArn :: Lens.Lens' MetricSetDataQualityMetric (Prelude.Maybe Prelude.Text)
+metricSetDataQualityMetric_metricSetArn = Lens.lens (\MetricSetDataQualityMetric' {metricSetArn} -> metricSetArn) (\s@MetricSetDataQualityMetric' {} a -> s {metricSetArn = a} :: MetricSetDataQualityMetric)
+
+instance Data.FromJSON MetricSetDataQualityMetric where
+  parseJSON =
+    Data.withObject
+      "MetricSetDataQualityMetric"
+      ( \x ->
+          MetricSetDataQualityMetric'
+            Prelude.<$> ( x
+                            Data..:? "DataQualityMetricList"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "MetricSetArn")
+      )
+
+instance Prelude.Hashable MetricSetDataQualityMetric where
+  hashWithSalt _salt MetricSetDataQualityMetric' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataQualityMetricList
+      `Prelude.hashWithSalt` metricSetArn
+
+instance Prelude.NFData MetricSetDataQualityMetric where
+  rnf MetricSetDataQualityMetric' {..} =
+    Prelude.rnf dataQualityMetricList
+      `Prelude.seq` Prelude.rnf metricSetArn
diff --git a/gen/Amazonka/LookoutMetrics/Types/MetricSetDimensionFilter.hs b/gen/Amazonka/LookoutMetrics/Types/MetricSetDimensionFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/MetricSetDimensionFilter.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.LookoutMetrics.Types.MetricSetDimensionFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.MetricSetDimensionFilter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.Filter
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a list of filters for choosing a subset of dimension values.
+-- Each filter consists of the dimension and one of its values that you
+-- want to include. When multiple dimensions or values are specified, the
+-- dimensions are joined with an AND operation and the values are joined
+-- with an OR operation.
+--
+-- /See:/ 'newMetricSetDimensionFilter' smart constructor.
+data MetricSetDimensionFilter = MetricSetDimensionFilter'
+  { -- | The list of filters that you are applying.
+    filterList :: Prelude.Maybe (Prelude.NonEmpty Filter),
+    -- | The dimension that you want to filter on.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MetricSetDimensionFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filterList', 'metricSetDimensionFilter_filterList' - The list of filters that you are applying.
+--
+-- 'name', 'metricSetDimensionFilter_name' - The dimension that you want to filter on.
+newMetricSetDimensionFilter ::
+  MetricSetDimensionFilter
+newMetricSetDimensionFilter =
+  MetricSetDimensionFilter'
+    { filterList =
+        Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The list of filters that you are applying.
+metricSetDimensionFilter_filterList :: Lens.Lens' MetricSetDimensionFilter (Prelude.Maybe (Prelude.NonEmpty Filter))
+metricSetDimensionFilter_filterList = Lens.lens (\MetricSetDimensionFilter' {filterList} -> filterList) (\s@MetricSetDimensionFilter' {} a -> s {filterList = a} :: MetricSetDimensionFilter) Prelude.. Lens.mapping Lens.coerced
+
+-- | The dimension that you want to filter on.
+metricSetDimensionFilter_name :: Lens.Lens' MetricSetDimensionFilter (Prelude.Maybe Prelude.Text)
+metricSetDimensionFilter_name = Lens.lens (\MetricSetDimensionFilter' {name} -> name) (\s@MetricSetDimensionFilter' {} a -> s {name = a} :: MetricSetDimensionFilter)
+
+instance Data.FromJSON MetricSetDimensionFilter where
+  parseJSON =
+    Data.withObject
+      "MetricSetDimensionFilter"
+      ( \x ->
+          MetricSetDimensionFilter'
+            Prelude.<$> (x Data..:? "FilterList")
+            Prelude.<*> (x Data..:? "Name")
+      )
+
+instance Prelude.Hashable MetricSetDimensionFilter where
+  hashWithSalt _salt MetricSetDimensionFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` filterList
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData MetricSetDimensionFilter where
+  rnf MetricSetDimensionFilter' {..} =
+    Prelude.rnf filterList
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToJSON MetricSetDimensionFilter where
+  toJSON MetricSetDimensionFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("FilterList" Data..=) Prelude.<$> filterList,
+            ("Name" Data..=) Prelude.<$> name
+          ]
+      )
diff --git a/gen/Amazonka/LookoutMetrics/Types/MetricSetSummary.hs b/gen/Amazonka/LookoutMetrics/Types/MetricSetSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/MetricSetSummary.hs
@@ -0,0 +1,148 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.Types.MetricSetSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.MetricSetSummary 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 a dataset.
+--
+-- /See:/ 'newMetricSetSummary' smart constructor.
+data MetricSetSummary = MetricSetSummary'
+  { -- | The ARN of the detector to which the dataset belongs.
+    anomalyDetectorArn :: Prelude.Maybe Prelude.Text,
+    -- | The time at which the dataset was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The time at which the dataset was last modified.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | The ARN of the dataset.
+    metricSetArn :: Prelude.Maybe Prelude.Text,
+    -- | The description of the dataset.
+    metricSetDescription :: Prelude.Maybe Prelude.Text,
+    -- | The name of the dataset.
+    metricSetName :: Prelude.Maybe Prelude.Text,
+    -- | The dataset\'s
+    -- <https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html tags>.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MetricSetSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyDetectorArn', 'metricSetSummary_anomalyDetectorArn' - The ARN of the detector to which the dataset belongs.
+--
+-- 'creationTime', 'metricSetSummary_creationTime' - The time at which the dataset was created.
+--
+-- 'lastModificationTime', 'metricSetSummary_lastModificationTime' - The time at which the dataset was last modified.
+--
+-- 'metricSetArn', 'metricSetSummary_metricSetArn' - The ARN of the dataset.
+--
+-- 'metricSetDescription', 'metricSetSummary_metricSetDescription' - The description of the dataset.
+--
+-- 'metricSetName', 'metricSetSummary_metricSetName' - The name of the dataset.
+--
+-- 'tags', 'metricSetSummary_tags' - The dataset\'s
+-- <https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html tags>.
+newMetricSetSummary ::
+  MetricSetSummary
+newMetricSetSummary =
+  MetricSetSummary'
+    { anomalyDetectorArn =
+        Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      metricSetArn = Prelude.Nothing,
+      metricSetDescription = Prelude.Nothing,
+      metricSetName = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The ARN of the detector to which the dataset belongs.
+metricSetSummary_anomalyDetectorArn :: Lens.Lens' MetricSetSummary (Prelude.Maybe Prelude.Text)
+metricSetSummary_anomalyDetectorArn = Lens.lens (\MetricSetSummary' {anomalyDetectorArn} -> anomalyDetectorArn) (\s@MetricSetSummary' {} a -> s {anomalyDetectorArn = a} :: MetricSetSummary)
+
+-- | The time at which the dataset was created.
+metricSetSummary_creationTime :: Lens.Lens' MetricSetSummary (Prelude.Maybe Prelude.UTCTime)
+metricSetSummary_creationTime = Lens.lens (\MetricSetSummary' {creationTime} -> creationTime) (\s@MetricSetSummary' {} a -> s {creationTime = a} :: MetricSetSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The time at which the dataset was last modified.
+metricSetSummary_lastModificationTime :: Lens.Lens' MetricSetSummary (Prelude.Maybe Prelude.UTCTime)
+metricSetSummary_lastModificationTime = Lens.lens (\MetricSetSummary' {lastModificationTime} -> lastModificationTime) (\s@MetricSetSummary' {} a -> s {lastModificationTime = a} :: MetricSetSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The ARN of the dataset.
+metricSetSummary_metricSetArn :: Lens.Lens' MetricSetSummary (Prelude.Maybe Prelude.Text)
+metricSetSummary_metricSetArn = Lens.lens (\MetricSetSummary' {metricSetArn} -> metricSetArn) (\s@MetricSetSummary' {} a -> s {metricSetArn = a} :: MetricSetSummary)
+
+-- | The description of the dataset.
+metricSetSummary_metricSetDescription :: Lens.Lens' MetricSetSummary (Prelude.Maybe Prelude.Text)
+metricSetSummary_metricSetDescription = Lens.lens (\MetricSetSummary' {metricSetDescription} -> metricSetDescription) (\s@MetricSetSummary' {} a -> s {metricSetDescription = a} :: MetricSetSummary)
+
+-- | The name of the dataset.
+metricSetSummary_metricSetName :: Lens.Lens' MetricSetSummary (Prelude.Maybe Prelude.Text)
+metricSetSummary_metricSetName = Lens.lens (\MetricSetSummary' {metricSetName} -> metricSetName) (\s@MetricSetSummary' {} a -> s {metricSetName = a} :: MetricSetSummary)
+
+-- | The dataset\'s
+-- <https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html tags>.
+metricSetSummary_tags :: Lens.Lens' MetricSetSummary (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+metricSetSummary_tags = Lens.lens (\MetricSetSummary' {tags} -> tags) (\s@MetricSetSummary' {} a -> s {tags = a} :: MetricSetSummary) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON MetricSetSummary where
+  parseJSON =
+    Data.withObject
+      "MetricSetSummary"
+      ( \x ->
+          MetricSetSummary'
+            Prelude.<$> (x Data..:? "AnomalyDetectorArn")
+            Prelude.<*> (x Data..:? "CreationTime")
+            Prelude.<*> (x Data..:? "LastModificationTime")
+            Prelude.<*> (x Data..:? "MetricSetArn")
+            Prelude.<*> (x Data..:? "MetricSetDescription")
+            Prelude.<*> (x Data..:? "MetricSetName")
+            Prelude.<*> (x Data..:? "Tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable MetricSetSummary where
+  hashWithSalt _salt MetricSetSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` anomalyDetectorArn
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` lastModificationTime
+      `Prelude.hashWithSalt` metricSetArn
+      `Prelude.hashWithSalt` metricSetDescription
+      `Prelude.hashWithSalt` metricSetName
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData MetricSetSummary where
+  rnf MetricSetSummary' {..} =
+    Prelude.rnf anomalyDetectorArn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf metricSetArn
+      `Prelude.seq` Prelude.rnf metricSetDescription
+      `Prelude.seq` Prelude.rnf metricSetName
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/LookoutMetrics/Types/MetricSource.hs b/gen/Amazonka/LookoutMetrics/Types/MetricSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/MetricSource.hs
@@ -0,0 +1,155 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.Types.MetricSource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.MetricSource where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.AppFlowConfig
+import Amazonka.LookoutMetrics.Types.AthenaSourceConfig
+import Amazonka.LookoutMetrics.Types.CloudWatchConfig
+import Amazonka.LookoutMetrics.Types.RDSSourceConfig
+import Amazonka.LookoutMetrics.Types.RedshiftSourceConfig
+import Amazonka.LookoutMetrics.Types.S3SourceConfig
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains information about source data used to generate metrics.
+--
+-- /See:/ 'newMetricSource' smart constructor.
+data MetricSource = MetricSource'
+  { -- | Details about an AppFlow datasource.
+    appFlowConfig :: Prelude.Maybe AppFlowConfig,
+    -- | Details about an Amazon Athena datasource.
+    athenaSourceConfig :: Prelude.Maybe AthenaSourceConfig,
+    -- | Details about an Amazon CloudWatch monitoring datasource.
+    cloudWatchConfig :: Prelude.Maybe CloudWatchConfig,
+    -- | Details about an Amazon Relational Database Service (RDS) datasource.
+    rDSSourceConfig :: Prelude.Maybe RDSSourceConfig,
+    -- | Details about an Amazon Redshift database datasource.
+    redshiftSourceConfig :: Prelude.Maybe RedshiftSourceConfig,
+    s3SourceConfig :: Prelude.Maybe S3SourceConfig
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MetricSource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appFlowConfig', 'metricSource_appFlowConfig' - Details about an AppFlow datasource.
+--
+-- 'athenaSourceConfig', 'metricSource_athenaSourceConfig' - Details about an Amazon Athena datasource.
+--
+-- 'cloudWatchConfig', 'metricSource_cloudWatchConfig' - Details about an Amazon CloudWatch monitoring datasource.
+--
+-- 'rDSSourceConfig', 'metricSource_rDSSourceConfig' - Details about an Amazon Relational Database Service (RDS) datasource.
+--
+-- 'redshiftSourceConfig', 'metricSource_redshiftSourceConfig' - Details about an Amazon Redshift database datasource.
+--
+-- 's3SourceConfig', 'metricSource_s3SourceConfig' - Undocumented member.
+newMetricSource ::
+  MetricSource
+newMetricSource =
+  MetricSource'
+    { appFlowConfig = Prelude.Nothing,
+      athenaSourceConfig = Prelude.Nothing,
+      cloudWatchConfig = Prelude.Nothing,
+      rDSSourceConfig = Prelude.Nothing,
+      redshiftSourceConfig = Prelude.Nothing,
+      s3SourceConfig = Prelude.Nothing
+    }
+
+-- | Details about an AppFlow datasource.
+metricSource_appFlowConfig :: Lens.Lens' MetricSource (Prelude.Maybe AppFlowConfig)
+metricSource_appFlowConfig = Lens.lens (\MetricSource' {appFlowConfig} -> appFlowConfig) (\s@MetricSource' {} a -> s {appFlowConfig = a} :: MetricSource)
+
+-- | Details about an Amazon Athena datasource.
+metricSource_athenaSourceConfig :: Lens.Lens' MetricSource (Prelude.Maybe AthenaSourceConfig)
+metricSource_athenaSourceConfig = Lens.lens (\MetricSource' {athenaSourceConfig} -> athenaSourceConfig) (\s@MetricSource' {} a -> s {athenaSourceConfig = a} :: MetricSource)
+
+-- | Details about an Amazon CloudWatch monitoring datasource.
+metricSource_cloudWatchConfig :: Lens.Lens' MetricSource (Prelude.Maybe CloudWatchConfig)
+metricSource_cloudWatchConfig = Lens.lens (\MetricSource' {cloudWatchConfig} -> cloudWatchConfig) (\s@MetricSource' {} a -> s {cloudWatchConfig = a} :: MetricSource)
+
+-- | Details about an Amazon Relational Database Service (RDS) datasource.
+metricSource_rDSSourceConfig :: Lens.Lens' MetricSource (Prelude.Maybe RDSSourceConfig)
+metricSource_rDSSourceConfig = Lens.lens (\MetricSource' {rDSSourceConfig} -> rDSSourceConfig) (\s@MetricSource' {} a -> s {rDSSourceConfig = a} :: MetricSource)
+
+-- | Details about an Amazon Redshift database datasource.
+metricSource_redshiftSourceConfig :: Lens.Lens' MetricSource (Prelude.Maybe RedshiftSourceConfig)
+metricSource_redshiftSourceConfig = Lens.lens (\MetricSource' {redshiftSourceConfig} -> redshiftSourceConfig) (\s@MetricSource' {} a -> s {redshiftSourceConfig = a} :: MetricSource)
+
+-- | Undocumented member.
+metricSource_s3SourceConfig :: Lens.Lens' MetricSource (Prelude.Maybe S3SourceConfig)
+metricSource_s3SourceConfig = Lens.lens (\MetricSource' {s3SourceConfig} -> s3SourceConfig) (\s@MetricSource' {} a -> s {s3SourceConfig = a} :: MetricSource)
+
+instance Data.FromJSON MetricSource where
+  parseJSON =
+    Data.withObject
+      "MetricSource"
+      ( \x ->
+          MetricSource'
+            Prelude.<$> (x Data..:? "AppFlowConfig")
+            Prelude.<*> (x Data..:? "AthenaSourceConfig")
+            Prelude.<*> (x Data..:? "CloudWatchConfig")
+            Prelude.<*> (x Data..:? "RDSSourceConfig")
+            Prelude.<*> (x Data..:? "RedshiftSourceConfig")
+            Prelude.<*> (x Data..:? "S3SourceConfig")
+      )
+
+instance Prelude.Hashable MetricSource where
+  hashWithSalt _salt MetricSource' {..} =
+    _salt
+      `Prelude.hashWithSalt` appFlowConfig
+      `Prelude.hashWithSalt` athenaSourceConfig
+      `Prelude.hashWithSalt` cloudWatchConfig
+      `Prelude.hashWithSalt` rDSSourceConfig
+      `Prelude.hashWithSalt` redshiftSourceConfig
+      `Prelude.hashWithSalt` s3SourceConfig
+
+instance Prelude.NFData MetricSource where
+  rnf MetricSource' {..} =
+    Prelude.rnf appFlowConfig
+      `Prelude.seq` Prelude.rnf athenaSourceConfig
+      `Prelude.seq` Prelude.rnf cloudWatchConfig
+      `Prelude.seq` Prelude.rnf rDSSourceConfig
+      `Prelude.seq` Prelude.rnf redshiftSourceConfig
+      `Prelude.seq` Prelude.rnf s3SourceConfig
+
+instance Data.ToJSON MetricSource where
+  toJSON MetricSource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AppFlowConfig" Data..=) Prelude.<$> appFlowConfig,
+            ("AthenaSourceConfig" Data..=)
+              Prelude.<$> athenaSourceConfig,
+            ("CloudWatchConfig" Data..=)
+              Prelude.<$> cloudWatchConfig,
+            ("RDSSourceConfig" Data..=)
+              Prelude.<$> rDSSourceConfig,
+            ("RedshiftSourceConfig" Data..=)
+              Prelude.<$> redshiftSourceConfig,
+            ("S3SourceConfig" Data..=)
+              Prelude.<$> s3SourceConfig
+          ]
+      )
diff --git a/gen/Amazonka/LookoutMetrics/Types/RDSSourceConfig.hs b/gen/Amazonka/LookoutMetrics/Types/RDSSourceConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/RDSSourceConfig.hs
@@ -0,0 +1,180 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.Types.RDSSourceConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.RDSSourceConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.VpcConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains information about the Amazon Relational Database Service (RDS)
+-- configuration.
+--
+-- /See:/ 'newRDSSourceConfig' smart constructor.
+data RDSSourceConfig = RDSSourceConfig'
+  { -- | A string identifying the database instance.
+    dbInstanceIdentifier :: Prelude.Maybe Prelude.Text,
+    -- | The host name of the database.
+    databaseHost :: Prelude.Maybe Prelude.Text,
+    -- | The name of the RDS database.
+    databaseName :: Prelude.Maybe Prelude.Text,
+    -- | The port number where the database can be accessed.
+    databasePort :: Prelude.Maybe Prelude.Natural,
+    -- | The Amazon Resource Name (ARN) of the role.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the AWS Secrets Manager role.
+    secretManagerArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the table in the database.
+    tableName :: Prelude.Maybe Prelude.Text,
+    -- | An object containing information about the Amazon Virtual Private Cloud
+    -- (VPC) configuration.
+    vpcConfiguration :: Prelude.Maybe VpcConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RDSSourceConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dbInstanceIdentifier', 'rDSSourceConfig_dbInstanceIdentifier' - A string identifying the database instance.
+--
+-- 'databaseHost', 'rDSSourceConfig_databaseHost' - The host name of the database.
+--
+-- 'databaseName', 'rDSSourceConfig_databaseName' - The name of the RDS database.
+--
+-- 'databasePort', 'rDSSourceConfig_databasePort' - The port number where the database can be accessed.
+--
+-- 'roleArn', 'rDSSourceConfig_roleArn' - The Amazon Resource Name (ARN) of the role.
+--
+-- 'secretManagerArn', 'rDSSourceConfig_secretManagerArn' - The Amazon Resource Name (ARN) of the AWS Secrets Manager role.
+--
+-- 'tableName', 'rDSSourceConfig_tableName' - The name of the table in the database.
+--
+-- 'vpcConfiguration', 'rDSSourceConfig_vpcConfiguration' - An object containing information about the Amazon Virtual Private Cloud
+-- (VPC) configuration.
+newRDSSourceConfig ::
+  RDSSourceConfig
+newRDSSourceConfig =
+  RDSSourceConfig'
+    { dbInstanceIdentifier =
+        Prelude.Nothing,
+      databaseHost = Prelude.Nothing,
+      databaseName = Prelude.Nothing,
+      databasePort = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      secretManagerArn = Prelude.Nothing,
+      tableName = Prelude.Nothing,
+      vpcConfiguration = Prelude.Nothing
+    }
+
+-- | A string identifying the database instance.
+rDSSourceConfig_dbInstanceIdentifier :: Lens.Lens' RDSSourceConfig (Prelude.Maybe Prelude.Text)
+rDSSourceConfig_dbInstanceIdentifier = Lens.lens (\RDSSourceConfig' {dbInstanceIdentifier} -> dbInstanceIdentifier) (\s@RDSSourceConfig' {} a -> s {dbInstanceIdentifier = a} :: RDSSourceConfig)
+
+-- | The host name of the database.
+rDSSourceConfig_databaseHost :: Lens.Lens' RDSSourceConfig (Prelude.Maybe Prelude.Text)
+rDSSourceConfig_databaseHost = Lens.lens (\RDSSourceConfig' {databaseHost} -> databaseHost) (\s@RDSSourceConfig' {} a -> s {databaseHost = a} :: RDSSourceConfig)
+
+-- | The name of the RDS database.
+rDSSourceConfig_databaseName :: Lens.Lens' RDSSourceConfig (Prelude.Maybe Prelude.Text)
+rDSSourceConfig_databaseName = Lens.lens (\RDSSourceConfig' {databaseName} -> databaseName) (\s@RDSSourceConfig' {} a -> s {databaseName = a} :: RDSSourceConfig)
+
+-- | The port number where the database can be accessed.
+rDSSourceConfig_databasePort :: Lens.Lens' RDSSourceConfig (Prelude.Maybe Prelude.Natural)
+rDSSourceConfig_databasePort = Lens.lens (\RDSSourceConfig' {databasePort} -> databasePort) (\s@RDSSourceConfig' {} a -> s {databasePort = a} :: RDSSourceConfig)
+
+-- | The Amazon Resource Name (ARN) of the role.
+rDSSourceConfig_roleArn :: Lens.Lens' RDSSourceConfig (Prelude.Maybe Prelude.Text)
+rDSSourceConfig_roleArn = Lens.lens (\RDSSourceConfig' {roleArn} -> roleArn) (\s@RDSSourceConfig' {} a -> s {roleArn = a} :: RDSSourceConfig)
+
+-- | The Amazon Resource Name (ARN) of the AWS Secrets Manager role.
+rDSSourceConfig_secretManagerArn :: Lens.Lens' RDSSourceConfig (Prelude.Maybe Prelude.Text)
+rDSSourceConfig_secretManagerArn = Lens.lens (\RDSSourceConfig' {secretManagerArn} -> secretManagerArn) (\s@RDSSourceConfig' {} a -> s {secretManagerArn = a} :: RDSSourceConfig)
+
+-- | The name of the table in the database.
+rDSSourceConfig_tableName :: Lens.Lens' RDSSourceConfig (Prelude.Maybe Prelude.Text)
+rDSSourceConfig_tableName = Lens.lens (\RDSSourceConfig' {tableName} -> tableName) (\s@RDSSourceConfig' {} a -> s {tableName = a} :: RDSSourceConfig)
+
+-- | An object containing information about the Amazon Virtual Private Cloud
+-- (VPC) configuration.
+rDSSourceConfig_vpcConfiguration :: Lens.Lens' RDSSourceConfig (Prelude.Maybe VpcConfiguration)
+rDSSourceConfig_vpcConfiguration = Lens.lens (\RDSSourceConfig' {vpcConfiguration} -> vpcConfiguration) (\s@RDSSourceConfig' {} a -> s {vpcConfiguration = a} :: RDSSourceConfig)
+
+instance Data.FromJSON RDSSourceConfig where
+  parseJSON =
+    Data.withObject
+      "RDSSourceConfig"
+      ( \x ->
+          RDSSourceConfig'
+            Prelude.<$> (x Data..:? "DBInstanceIdentifier")
+            Prelude.<*> (x Data..:? "DatabaseHost")
+            Prelude.<*> (x Data..:? "DatabaseName")
+            Prelude.<*> (x Data..:? "DatabasePort")
+            Prelude.<*> (x Data..:? "RoleArn")
+            Prelude.<*> (x Data..:? "SecretManagerArn")
+            Prelude.<*> (x Data..:? "TableName")
+            Prelude.<*> (x Data..:? "VpcConfiguration")
+      )
+
+instance Prelude.Hashable RDSSourceConfig where
+  hashWithSalt _salt RDSSourceConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` dbInstanceIdentifier
+      `Prelude.hashWithSalt` databaseHost
+      `Prelude.hashWithSalt` databaseName
+      `Prelude.hashWithSalt` databasePort
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` secretManagerArn
+      `Prelude.hashWithSalt` tableName
+      `Prelude.hashWithSalt` vpcConfiguration
+
+instance Prelude.NFData RDSSourceConfig where
+  rnf RDSSourceConfig' {..} =
+    Prelude.rnf dbInstanceIdentifier
+      `Prelude.seq` Prelude.rnf databaseHost
+      `Prelude.seq` Prelude.rnf databaseName
+      `Prelude.seq` Prelude.rnf databasePort
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf secretManagerArn
+      `Prelude.seq` Prelude.rnf tableName
+      `Prelude.seq` Prelude.rnf vpcConfiguration
+
+instance Data.ToJSON RDSSourceConfig where
+  toJSON RDSSourceConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DBInstanceIdentifier" Data..=)
+              Prelude.<$> dbInstanceIdentifier,
+            ("DatabaseHost" Data..=) Prelude.<$> databaseHost,
+            ("DatabaseName" Data..=) Prelude.<$> databaseName,
+            ("DatabasePort" Data..=) Prelude.<$> databasePort,
+            ("RoleArn" Data..=) Prelude.<$> roleArn,
+            ("SecretManagerArn" Data..=)
+              Prelude.<$> secretManagerArn,
+            ("TableName" Data..=) Prelude.<$> tableName,
+            ("VpcConfiguration" Data..=)
+              Prelude.<$> vpcConfiguration
+          ]
+      )
diff --git a/gen/Amazonka/LookoutMetrics/Types/RedshiftSourceConfig.hs b/gen/Amazonka/LookoutMetrics/Types/RedshiftSourceConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/RedshiftSourceConfig.hs
@@ -0,0 +1,182 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.Types.RedshiftSourceConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.RedshiftSourceConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.VpcConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about the Amazon Redshift database configuration.
+--
+-- /See:/ 'newRedshiftSourceConfig' smart constructor.
+data RedshiftSourceConfig = RedshiftSourceConfig'
+  { -- | A string identifying the Redshift cluster.
+    clusterIdentifier :: Prelude.Maybe Prelude.Text,
+    -- | The name of the database host.
+    databaseHost :: Prelude.Maybe Prelude.Text,
+    -- | The Redshift database name.
+    databaseName :: Prelude.Maybe Prelude.Text,
+    -- | The port number where the database can be accessed.
+    databasePort :: Prelude.Maybe Prelude.Natural,
+    -- | The Amazon Resource Name (ARN) of the role providing access to the
+    -- database.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the AWS Secrets Manager role.
+    secretManagerArn :: Prelude.Maybe Prelude.Text,
+    -- | The table name of the Redshift database.
+    tableName :: Prelude.Maybe Prelude.Text,
+    -- | Contains information about the Amazon Virtual Private Cloud (VPC)
+    -- configuration.
+    vpcConfiguration :: Prelude.Maybe VpcConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RedshiftSourceConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clusterIdentifier', 'redshiftSourceConfig_clusterIdentifier' - A string identifying the Redshift cluster.
+--
+-- 'databaseHost', 'redshiftSourceConfig_databaseHost' - The name of the database host.
+--
+-- 'databaseName', 'redshiftSourceConfig_databaseName' - The Redshift database name.
+--
+-- 'databasePort', 'redshiftSourceConfig_databasePort' - The port number where the database can be accessed.
+--
+-- 'roleArn', 'redshiftSourceConfig_roleArn' - The Amazon Resource Name (ARN) of the role providing access to the
+-- database.
+--
+-- 'secretManagerArn', 'redshiftSourceConfig_secretManagerArn' - The Amazon Resource Name (ARN) of the AWS Secrets Manager role.
+--
+-- 'tableName', 'redshiftSourceConfig_tableName' - The table name of the Redshift database.
+--
+-- 'vpcConfiguration', 'redshiftSourceConfig_vpcConfiguration' - Contains information about the Amazon Virtual Private Cloud (VPC)
+-- configuration.
+newRedshiftSourceConfig ::
+  RedshiftSourceConfig
+newRedshiftSourceConfig =
+  RedshiftSourceConfig'
+    { clusterIdentifier =
+        Prelude.Nothing,
+      databaseHost = Prelude.Nothing,
+      databaseName = Prelude.Nothing,
+      databasePort = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      secretManagerArn = Prelude.Nothing,
+      tableName = Prelude.Nothing,
+      vpcConfiguration = Prelude.Nothing
+    }
+
+-- | A string identifying the Redshift cluster.
+redshiftSourceConfig_clusterIdentifier :: Lens.Lens' RedshiftSourceConfig (Prelude.Maybe Prelude.Text)
+redshiftSourceConfig_clusterIdentifier = Lens.lens (\RedshiftSourceConfig' {clusterIdentifier} -> clusterIdentifier) (\s@RedshiftSourceConfig' {} a -> s {clusterIdentifier = a} :: RedshiftSourceConfig)
+
+-- | The name of the database host.
+redshiftSourceConfig_databaseHost :: Lens.Lens' RedshiftSourceConfig (Prelude.Maybe Prelude.Text)
+redshiftSourceConfig_databaseHost = Lens.lens (\RedshiftSourceConfig' {databaseHost} -> databaseHost) (\s@RedshiftSourceConfig' {} a -> s {databaseHost = a} :: RedshiftSourceConfig)
+
+-- | The Redshift database name.
+redshiftSourceConfig_databaseName :: Lens.Lens' RedshiftSourceConfig (Prelude.Maybe Prelude.Text)
+redshiftSourceConfig_databaseName = Lens.lens (\RedshiftSourceConfig' {databaseName} -> databaseName) (\s@RedshiftSourceConfig' {} a -> s {databaseName = a} :: RedshiftSourceConfig)
+
+-- | The port number where the database can be accessed.
+redshiftSourceConfig_databasePort :: Lens.Lens' RedshiftSourceConfig (Prelude.Maybe Prelude.Natural)
+redshiftSourceConfig_databasePort = Lens.lens (\RedshiftSourceConfig' {databasePort} -> databasePort) (\s@RedshiftSourceConfig' {} a -> s {databasePort = a} :: RedshiftSourceConfig)
+
+-- | The Amazon Resource Name (ARN) of the role providing access to the
+-- database.
+redshiftSourceConfig_roleArn :: Lens.Lens' RedshiftSourceConfig (Prelude.Maybe Prelude.Text)
+redshiftSourceConfig_roleArn = Lens.lens (\RedshiftSourceConfig' {roleArn} -> roleArn) (\s@RedshiftSourceConfig' {} a -> s {roleArn = a} :: RedshiftSourceConfig)
+
+-- | The Amazon Resource Name (ARN) of the AWS Secrets Manager role.
+redshiftSourceConfig_secretManagerArn :: Lens.Lens' RedshiftSourceConfig (Prelude.Maybe Prelude.Text)
+redshiftSourceConfig_secretManagerArn = Lens.lens (\RedshiftSourceConfig' {secretManagerArn} -> secretManagerArn) (\s@RedshiftSourceConfig' {} a -> s {secretManagerArn = a} :: RedshiftSourceConfig)
+
+-- | The table name of the Redshift database.
+redshiftSourceConfig_tableName :: Lens.Lens' RedshiftSourceConfig (Prelude.Maybe Prelude.Text)
+redshiftSourceConfig_tableName = Lens.lens (\RedshiftSourceConfig' {tableName} -> tableName) (\s@RedshiftSourceConfig' {} a -> s {tableName = a} :: RedshiftSourceConfig)
+
+-- | Contains information about the Amazon Virtual Private Cloud (VPC)
+-- configuration.
+redshiftSourceConfig_vpcConfiguration :: Lens.Lens' RedshiftSourceConfig (Prelude.Maybe VpcConfiguration)
+redshiftSourceConfig_vpcConfiguration = Lens.lens (\RedshiftSourceConfig' {vpcConfiguration} -> vpcConfiguration) (\s@RedshiftSourceConfig' {} a -> s {vpcConfiguration = a} :: RedshiftSourceConfig)
+
+instance Data.FromJSON RedshiftSourceConfig where
+  parseJSON =
+    Data.withObject
+      "RedshiftSourceConfig"
+      ( \x ->
+          RedshiftSourceConfig'
+            Prelude.<$> (x Data..:? "ClusterIdentifier")
+            Prelude.<*> (x Data..:? "DatabaseHost")
+            Prelude.<*> (x Data..:? "DatabaseName")
+            Prelude.<*> (x Data..:? "DatabasePort")
+            Prelude.<*> (x Data..:? "RoleArn")
+            Prelude.<*> (x Data..:? "SecretManagerArn")
+            Prelude.<*> (x Data..:? "TableName")
+            Prelude.<*> (x Data..:? "VpcConfiguration")
+      )
+
+instance Prelude.Hashable RedshiftSourceConfig where
+  hashWithSalt _salt RedshiftSourceConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` clusterIdentifier
+      `Prelude.hashWithSalt` databaseHost
+      `Prelude.hashWithSalt` databaseName
+      `Prelude.hashWithSalt` databasePort
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` secretManagerArn
+      `Prelude.hashWithSalt` tableName
+      `Prelude.hashWithSalt` vpcConfiguration
+
+instance Prelude.NFData RedshiftSourceConfig where
+  rnf RedshiftSourceConfig' {..} =
+    Prelude.rnf clusterIdentifier
+      `Prelude.seq` Prelude.rnf databaseHost
+      `Prelude.seq` Prelude.rnf databaseName
+      `Prelude.seq` Prelude.rnf databasePort
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf secretManagerArn
+      `Prelude.seq` Prelude.rnf tableName
+      `Prelude.seq` Prelude.rnf vpcConfiguration
+
+instance Data.ToJSON RedshiftSourceConfig where
+  toJSON RedshiftSourceConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClusterIdentifier" Data..=)
+              Prelude.<$> clusterIdentifier,
+            ("DatabaseHost" Data..=) Prelude.<$> databaseHost,
+            ("DatabaseName" Data..=) Prelude.<$> databaseName,
+            ("DatabasePort" Data..=) Prelude.<$> databasePort,
+            ("RoleArn" Data..=) Prelude.<$> roleArn,
+            ("SecretManagerArn" Data..=)
+              Prelude.<$> secretManagerArn,
+            ("TableName" Data..=) Prelude.<$> tableName,
+            ("VpcConfiguration" Data..=)
+              Prelude.<$> vpcConfiguration
+          ]
+      )
diff --git a/gen/Amazonka/LookoutMetrics/Types/RelationshipType.hs b/gen/Amazonka/LookoutMetrics/Types/RelationshipType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/RelationshipType.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.LookoutMetrics.Types.RelationshipType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.RelationshipType
+  ( RelationshipType
+      ( ..,
+        RelationshipType_CAUSE_OF_INPUT_ANOMALY_GROUP,
+        RelationshipType_EFFECT_OF_INPUT_ANOMALY_GROUP
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RelationshipType = RelationshipType'
+  { fromRelationshipType ::
+      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 RelationshipType_CAUSE_OF_INPUT_ANOMALY_GROUP :: RelationshipType
+pattern RelationshipType_CAUSE_OF_INPUT_ANOMALY_GROUP = RelationshipType' "CAUSE_OF_INPUT_ANOMALY_GROUP"
+
+pattern RelationshipType_EFFECT_OF_INPUT_ANOMALY_GROUP :: RelationshipType
+pattern RelationshipType_EFFECT_OF_INPUT_ANOMALY_GROUP = RelationshipType' "EFFECT_OF_INPUT_ANOMALY_GROUP"
+
+{-# COMPLETE
+  RelationshipType_CAUSE_OF_INPUT_ANOMALY_GROUP,
+  RelationshipType_EFFECT_OF_INPUT_ANOMALY_GROUP,
+  RelationshipType'
+  #-}
diff --git a/gen/Amazonka/LookoutMetrics/Types/S3SourceConfig.hs b/gen/Amazonka/LookoutMetrics/Types/S3SourceConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/S3SourceConfig.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.LookoutMetrics.Types.S3SourceConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.S3SourceConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.FileFormatDescriptor
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains information about the configuration of the S3 bucket that
+-- contains source files.
+--
+-- /See:/ 'newS3SourceConfig' smart constructor.
+data S3SourceConfig = S3SourceConfig'
+  { -- | Contains information about a source file\'s formatting.
+    fileFormatDescriptor :: Prelude.Maybe FileFormatDescriptor,
+    -- | A list of paths to the historical data files.
+    historicalDataPathList :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The ARN of an IAM role that has read and write access permissions to the
+    -- source S3 bucket.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | A list of templated paths to the source files.
+    templatedPathList :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3SourceConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fileFormatDescriptor', 's3SourceConfig_fileFormatDescriptor' - Contains information about a source file\'s formatting.
+--
+-- 'historicalDataPathList', 's3SourceConfig_historicalDataPathList' - A list of paths to the historical data files.
+--
+-- 'roleArn', 's3SourceConfig_roleArn' - The ARN of an IAM role that has read and write access permissions to the
+-- source S3 bucket.
+--
+-- 'templatedPathList', 's3SourceConfig_templatedPathList' - A list of templated paths to the source files.
+newS3SourceConfig ::
+  S3SourceConfig
+newS3SourceConfig =
+  S3SourceConfig'
+    { fileFormatDescriptor =
+        Prelude.Nothing,
+      historicalDataPathList = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      templatedPathList = Prelude.Nothing
+    }
+
+-- | Contains information about a source file\'s formatting.
+s3SourceConfig_fileFormatDescriptor :: Lens.Lens' S3SourceConfig (Prelude.Maybe FileFormatDescriptor)
+s3SourceConfig_fileFormatDescriptor = Lens.lens (\S3SourceConfig' {fileFormatDescriptor} -> fileFormatDescriptor) (\s@S3SourceConfig' {} a -> s {fileFormatDescriptor = a} :: S3SourceConfig)
+
+-- | A list of paths to the historical data files.
+s3SourceConfig_historicalDataPathList :: Lens.Lens' S3SourceConfig (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+s3SourceConfig_historicalDataPathList = Lens.lens (\S3SourceConfig' {historicalDataPathList} -> historicalDataPathList) (\s@S3SourceConfig' {} a -> s {historicalDataPathList = a} :: S3SourceConfig) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARN of an IAM role that has read and write access permissions to the
+-- source S3 bucket.
+s3SourceConfig_roleArn :: Lens.Lens' S3SourceConfig (Prelude.Maybe Prelude.Text)
+s3SourceConfig_roleArn = Lens.lens (\S3SourceConfig' {roleArn} -> roleArn) (\s@S3SourceConfig' {} a -> s {roleArn = a} :: S3SourceConfig)
+
+-- | A list of templated paths to the source files.
+s3SourceConfig_templatedPathList :: Lens.Lens' S3SourceConfig (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+s3SourceConfig_templatedPathList = Lens.lens (\S3SourceConfig' {templatedPathList} -> templatedPathList) (\s@S3SourceConfig' {} a -> s {templatedPathList = a} :: S3SourceConfig) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON S3SourceConfig where
+  parseJSON =
+    Data.withObject
+      "S3SourceConfig"
+      ( \x ->
+          S3SourceConfig'
+            Prelude.<$> (x Data..:? "FileFormatDescriptor")
+            Prelude.<*> (x Data..:? "HistoricalDataPathList")
+            Prelude.<*> (x Data..:? "RoleArn")
+            Prelude.<*> (x Data..:? "TemplatedPathList")
+      )
+
+instance Prelude.Hashable S3SourceConfig where
+  hashWithSalt _salt S3SourceConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` fileFormatDescriptor
+      `Prelude.hashWithSalt` historicalDataPathList
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` templatedPathList
+
+instance Prelude.NFData S3SourceConfig where
+  rnf S3SourceConfig' {..} =
+    Prelude.rnf fileFormatDescriptor
+      `Prelude.seq` Prelude.rnf historicalDataPathList
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf templatedPathList
+
+instance Data.ToJSON S3SourceConfig where
+  toJSON S3SourceConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("FileFormatDescriptor" Data..=)
+              Prelude.<$> fileFormatDescriptor,
+            ("HistoricalDataPathList" Data..=)
+              Prelude.<$> historicalDataPathList,
+            ("RoleArn" Data..=) Prelude.<$> roleArn,
+            ("TemplatedPathList" Data..=)
+              Prelude.<$> templatedPathList
+          ]
+      )
diff --git a/gen/Amazonka/LookoutMetrics/Types/SNSConfiguration.hs b/gen/Amazonka/LookoutMetrics/Types/SNSConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/SNSConfiguration.hs
@@ -0,0 +1,142 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.Types.SNSConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.SNSConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.SnsFormat
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains information about the SNS topic to which you want to send your
+-- alerts and the IAM role that has access to that topic.
+--
+-- /See:/ 'newSNSConfiguration' smart constructor.
+data SNSConfiguration = SNSConfiguration'
+  { -- | The format of the SNS topic.
+    --
+    -- -   @JSON@ – Send JSON alerts with an anomaly ID and a link to the
+    --     anomaly detail page. This is the default.
+    --
+    -- -   @LONG_TEXT@ – Send human-readable alerts with information about the
+    --     impacted timeseries and a link to the anomaly detail page. We
+    --     recommend this for email.
+    --
+    -- -   @SHORT_TEXT@ – Send human-readable alerts with a link to the anomaly
+    --     detail page. We recommend this for SMS.
+    snsFormat :: Prelude.Maybe SnsFormat,
+    -- | The ARN of the IAM role that has access to the target SNS topic.
+    roleArn :: Prelude.Text,
+    -- | The ARN of the target SNS topic.
+    snsTopicArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SNSConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'snsFormat', 'sNSConfiguration_snsFormat' - The format of the SNS topic.
+--
+-- -   @JSON@ – Send JSON alerts with an anomaly ID and a link to the
+--     anomaly detail page. This is the default.
+--
+-- -   @LONG_TEXT@ – Send human-readable alerts with information about the
+--     impacted timeseries and a link to the anomaly detail page. We
+--     recommend this for email.
+--
+-- -   @SHORT_TEXT@ – Send human-readable alerts with a link to the anomaly
+--     detail page. We recommend this for SMS.
+--
+-- 'roleArn', 'sNSConfiguration_roleArn' - The ARN of the IAM role that has access to the target SNS topic.
+--
+-- 'snsTopicArn', 'sNSConfiguration_snsTopicArn' - The ARN of the target SNS topic.
+newSNSConfiguration ::
+  -- | 'roleArn'
+  Prelude.Text ->
+  -- | 'snsTopicArn'
+  Prelude.Text ->
+  SNSConfiguration
+newSNSConfiguration pRoleArn_ pSnsTopicArn_ =
+  SNSConfiguration'
+    { snsFormat = Prelude.Nothing,
+      roleArn = pRoleArn_,
+      snsTopicArn = pSnsTopicArn_
+    }
+
+-- | The format of the SNS topic.
+--
+-- -   @JSON@ – Send JSON alerts with an anomaly ID and a link to the
+--     anomaly detail page. This is the default.
+--
+-- -   @LONG_TEXT@ – Send human-readable alerts with information about the
+--     impacted timeseries and a link to the anomaly detail page. We
+--     recommend this for email.
+--
+-- -   @SHORT_TEXT@ – Send human-readable alerts with a link to the anomaly
+--     detail page. We recommend this for SMS.
+sNSConfiguration_snsFormat :: Lens.Lens' SNSConfiguration (Prelude.Maybe SnsFormat)
+sNSConfiguration_snsFormat = Lens.lens (\SNSConfiguration' {snsFormat} -> snsFormat) (\s@SNSConfiguration' {} a -> s {snsFormat = a} :: SNSConfiguration)
+
+-- | The ARN of the IAM role that has access to the target SNS topic.
+sNSConfiguration_roleArn :: Lens.Lens' SNSConfiguration Prelude.Text
+sNSConfiguration_roleArn = Lens.lens (\SNSConfiguration' {roleArn} -> roleArn) (\s@SNSConfiguration' {} a -> s {roleArn = a} :: SNSConfiguration)
+
+-- | The ARN of the target SNS topic.
+sNSConfiguration_snsTopicArn :: Lens.Lens' SNSConfiguration Prelude.Text
+sNSConfiguration_snsTopicArn = Lens.lens (\SNSConfiguration' {snsTopicArn} -> snsTopicArn) (\s@SNSConfiguration' {} a -> s {snsTopicArn = a} :: SNSConfiguration)
+
+instance Data.FromJSON SNSConfiguration where
+  parseJSON =
+    Data.withObject
+      "SNSConfiguration"
+      ( \x ->
+          SNSConfiguration'
+            Prelude.<$> (x Data..:? "SnsFormat")
+            Prelude.<*> (x Data..: "RoleArn")
+            Prelude.<*> (x Data..: "SnsTopicArn")
+      )
+
+instance Prelude.Hashable SNSConfiguration where
+  hashWithSalt _salt SNSConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` snsFormat
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` snsTopicArn
+
+instance Prelude.NFData SNSConfiguration where
+  rnf SNSConfiguration' {..} =
+    Prelude.rnf snsFormat
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf snsTopicArn
+
+instance Data.ToJSON SNSConfiguration where
+  toJSON SNSConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SnsFormat" Data..=) Prelude.<$> snsFormat,
+            Prelude.Just ("RoleArn" Data..= roleArn),
+            Prelude.Just ("SnsTopicArn" Data..= snsTopicArn)
+          ]
+      )
diff --git a/gen/Amazonka/LookoutMetrics/Types/SampleDataS3SourceConfig.hs b/gen/Amazonka/LookoutMetrics/Types/SampleDataS3SourceConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/SampleDataS3SourceConfig.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.LookoutMetrics.Types.SampleDataS3SourceConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.SampleDataS3SourceConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.FileFormatDescriptor
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains information about the source configuration in Amazon S3.
+--
+-- /See:/ 'newSampleDataS3SourceConfig' smart constructor.
+data SampleDataS3SourceConfig = SampleDataS3SourceConfig'
+  { -- | An array of strings containing the historical set of data paths.
+    historicalDataPathList :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | An array of strings containing the list of templated paths.
+    templatedPathList :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The Amazon Resource Name (ARN) of the role.
+    roleArn :: Prelude.Text,
+    fileFormatDescriptor :: FileFormatDescriptor
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SampleDataS3SourceConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'historicalDataPathList', 'sampleDataS3SourceConfig_historicalDataPathList' - An array of strings containing the historical set of data paths.
+--
+-- 'templatedPathList', 'sampleDataS3SourceConfig_templatedPathList' - An array of strings containing the list of templated paths.
+--
+-- 'roleArn', 'sampleDataS3SourceConfig_roleArn' - The Amazon Resource Name (ARN) of the role.
+--
+-- 'fileFormatDescriptor', 'sampleDataS3SourceConfig_fileFormatDescriptor' - Undocumented member.
+newSampleDataS3SourceConfig ::
+  -- | 'roleArn'
+  Prelude.Text ->
+  -- | 'fileFormatDescriptor'
+  FileFormatDescriptor ->
+  SampleDataS3SourceConfig
+newSampleDataS3SourceConfig
+  pRoleArn_
+  pFileFormatDescriptor_ =
+    SampleDataS3SourceConfig'
+      { historicalDataPathList =
+          Prelude.Nothing,
+        templatedPathList = Prelude.Nothing,
+        roleArn = pRoleArn_,
+        fileFormatDescriptor = pFileFormatDescriptor_
+      }
+
+-- | An array of strings containing the historical set of data paths.
+sampleDataS3SourceConfig_historicalDataPathList :: Lens.Lens' SampleDataS3SourceConfig (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+sampleDataS3SourceConfig_historicalDataPathList = Lens.lens (\SampleDataS3SourceConfig' {historicalDataPathList} -> historicalDataPathList) (\s@SampleDataS3SourceConfig' {} a -> s {historicalDataPathList = a} :: SampleDataS3SourceConfig) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array of strings containing the list of templated paths.
+sampleDataS3SourceConfig_templatedPathList :: Lens.Lens' SampleDataS3SourceConfig (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+sampleDataS3SourceConfig_templatedPathList = Lens.lens (\SampleDataS3SourceConfig' {templatedPathList} -> templatedPathList) (\s@SampleDataS3SourceConfig' {} a -> s {templatedPathList = a} :: SampleDataS3SourceConfig) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the role.
+sampleDataS3SourceConfig_roleArn :: Lens.Lens' SampleDataS3SourceConfig Prelude.Text
+sampleDataS3SourceConfig_roleArn = Lens.lens (\SampleDataS3SourceConfig' {roleArn} -> roleArn) (\s@SampleDataS3SourceConfig' {} a -> s {roleArn = a} :: SampleDataS3SourceConfig)
+
+-- | Undocumented member.
+sampleDataS3SourceConfig_fileFormatDescriptor :: Lens.Lens' SampleDataS3SourceConfig FileFormatDescriptor
+sampleDataS3SourceConfig_fileFormatDescriptor = Lens.lens (\SampleDataS3SourceConfig' {fileFormatDescriptor} -> fileFormatDescriptor) (\s@SampleDataS3SourceConfig' {} a -> s {fileFormatDescriptor = a} :: SampleDataS3SourceConfig)
+
+instance Prelude.Hashable SampleDataS3SourceConfig where
+  hashWithSalt _salt SampleDataS3SourceConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` historicalDataPathList
+      `Prelude.hashWithSalt` templatedPathList
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` fileFormatDescriptor
+
+instance Prelude.NFData SampleDataS3SourceConfig where
+  rnf SampleDataS3SourceConfig' {..} =
+    Prelude.rnf historicalDataPathList
+      `Prelude.seq` Prelude.rnf templatedPathList
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf fileFormatDescriptor
+
+instance Data.ToJSON SampleDataS3SourceConfig where
+  toJSON SampleDataS3SourceConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("HistoricalDataPathList" Data..=)
+              Prelude.<$> historicalDataPathList,
+            ("TemplatedPathList" Data..=)
+              Prelude.<$> templatedPathList,
+            Prelude.Just ("RoleArn" Data..= roleArn),
+            Prelude.Just
+              ( "FileFormatDescriptor"
+                  Data..= fileFormatDescriptor
+              )
+          ]
+      )
diff --git a/gen/Amazonka/LookoutMetrics/Types/SnsFormat.hs b/gen/Amazonka/LookoutMetrics/Types/SnsFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/SnsFormat.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.LookoutMetrics.Types.SnsFormat
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.SnsFormat
+  ( SnsFormat
+      ( ..,
+        SnsFormat_JSON,
+        SnsFormat_LONG_TEXT,
+        SnsFormat_SHORT_TEXT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SnsFormat = SnsFormat'
+  { fromSnsFormat ::
+      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 SnsFormat_JSON :: SnsFormat
+pattern SnsFormat_JSON = SnsFormat' "JSON"
+
+pattern SnsFormat_LONG_TEXT :: SnsFormat
+pattern SnsFormat_LONG_TEXT = SnsFormat' "LONG_TEXT"
+
+pattern SnsFormat_SHORT_TEXT :: SnsFormat
+pattern SnsFormat_SHORT_TEXT = SnsFormat' "SHORT_TEXT"
+
+{-# COMPLETE
+  SnsFormat_JSON,
+  SnsFormat_LONG_TEXT,
+  SnsFormat_SHORT_TEXT,
+  SnsFormat'
+  #-}
diff --git a/gen/Amazonka/LookoutMetrics/Types/TimeSeries.hs b/gen/Amazonka/LookoutMetrics/Types/TimeSeries.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/TimeSeries.hs
@@ -0,0 +1,104 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.Types.TimeSeries
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.TimeSeries where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types.DimensionNameValue
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about a metric. A metric is an aggregation of the values of a
+-- measure for a dimension value, such as /availability/ in the /us-east-1/
+-- Region.
+--
+-- /See:/ 'newTimeSeries' smart constructor.
+data TimeSeries = TimeSeries'
+  { -- | The ID of the metric.
+    timeSeriesId :: Prelude.Text,
+    -- | The dimensions of the metric.
+    dimensionList :: [DimensionNameValue],
+    -- | The values for the metric.
+    metricValueList :: [Prelude.Double]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TimeSeries' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'timeSeriesId', 'timeSeries_timeSeriesId' - The ID of the metric.
+--
+-- 'dimensionList', 'timeSeries_dimensionList' - The dimensions of the metric.
+--
+-- 'metricValueList', 'timeSeries_metricValueList' - The values for the metric.
+newTimeSeries ::
+  -- | 'timeSeriesId'
+  Prelude.Text ->
+  TimeSeries
+newTimeSeries pTimeSeriesId_ =
+  TimeSeries'
+    { timeSeriesId = pTimeSeriesId_,
+      dimensionList = Prelude.mempty,
+      metricValueList = Prelude.mempty
+    }
+
+-- | The ID of the metric.
+timeSeries_timeSeriesId :: Lens.Lens' TimeSeries Prelude.Text
+timeSeries_timeSeriesId = Lens.lens (\TimeSeries' {timeSeriesId} -> timeSeriesId) (\s@TimeSeries' {} a -> s {timeSeriesId = a} :: TimeSeries)
+
+-- | The dimensions of the metric.
+timeSeries_dimensionList :: Lens.Lens' TimeSeries [DimensionNameValue]
+timeSeries_dimensionList = Lens.lens (\TimeSeries' {dimensionList} -> dimensionList) (\s@TimeSeries' {} a -> s {dimensionList = a} :: TimeSeries) Prelude.. Lens.coerced
+
+-- | The values for the metric.
+timeSeries_metricValueList :: Lens.Lens' TimeSeries [Prelude.Double]
+timeSeries_metricValueList = Lens.lens (\TimeSeries' {metricValueList} -> metricValueList) (\s@TimeSeries' {} a -> s {metricValueList = a} :: TimeSeries) Prelude.. Lens.coerced
+
+instance Data.FromJSON TimeSeries where
+  parseJSON =
+    Data.withObject
+      "TimeSeries"
+      ( \x ->
+          TimeSeries'
+            Prelude.<$> (x Data..: "TimeSeriesId")
+            Prelude.<*> (x Data..:? "DimensionList" Data..!= Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..:? "MetricValueList"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable TimeSeries where
+  hashWithSalt _salt TimeSeries' {..} =
+    _salt
+      `Prelude.hashWithSalt` timeSeriesId
+      `Prelude.hashWithSalt` dimensionList
+      `Prelude.hashWithSalt` metricValueList
+
+instance Prelude.NFData TimeSeries where
+  rnf TimeSeries' {..} =
+    Prelude.rnf timeSeriesId
+      `Prelude.seq` Prelude.rnf dimensionList
+      `Prelude.seq` Prelude.rnf metricValueList
diff --git a/gen/Amazonka/LookoutMetrics/Types/TimeSeriesFeedback.hs b/gen/Amazonka/LookoutMetrics/Types/TimeSeriesFeedback.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/TimeSeriesFeedback.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.Types.TimeSeriesFeedback
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.TimeSeriesFeedback where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about feedback submitted for an anomalous metric.
+--
+-- /See:/ 'newTimeSeriesFeedback' smart constructor.
+data TimeSeriesFeedback = TimeSeriesFeedback'
+  { -- | Feedback on whether the metric is a legitimate anomaly.
+    isAnomaly :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the metric.
+    timeSeriesId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TimeSeriesFeedback' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'isAnomaly', 'timeSeriesFeedback_isAnomaly' - Feedback on whether the metric is a legitimate anomaly.
+--
+-- 'timeSeriesId', 'timeSeriesFeedback_timeSeriesId' - The ID of the metric.
+newTimeSeriesFeedback ::
+  TimeSeriesFeedback
+newTimeSeriesFeedback =
+  TimeSeriesFeedback'
+    { isAnomaly = Prelude.Nothing,
+      timeSeriesId = Prelude.Nothing
+    }
+
+-- | Feedback on whether the metric is a legitimate anomaly.
+timeSeriesFeedback_isAnomaly :: Lens.Lens' TimeSeriesFeedback (Prelude.Maybe Prelude.Bool)
+timeSeriesFeedback_isAnomaly = Lens.lens (\TimeSeriesFeedback' {isAnomaly} -> isAnomaly) (\s@TimeSeriesFeedback' {} a -> s {isAnomaly = a} :: TimeSeriesFeedback)
+
+-- | The ID of the metric.
+timeSeriesFeedback_timeSeriesId :: Lens.Lens' TimeSeriesFeedback (Prelude.Maybe Prelude.Text)
+timeSeriesFeedback_timeSeriesId = Lens.lens (\TimeSeriesFeedback' {timeSeriesId} -> timeSeriesId) (\s@TimeSeriesFeedback' {} a -> s {timeSeriesId = a} :: TimeSeriesFeedback)
+
+instance Data.FromJSON TimeSeriesFeedback where
+  parseJSON =
+    Data.withObject
+      "TimeSeriesFeedback"
+      ( \x ->
+          TimeSeriesFeedback'
+            Prelude.<$> (x Data..:? "IsAnomaly")
+            Prelude.<*> (x Data..:? "TimeSeriesId")
+      )
+
+instance Prelude.Hashable TimeSeriesFeedback where
+  hashWithSalt _salt TimeSeriesFeedback' {..} =
+    _salt
+      `Prelude.hashWithSalt` isAnomaly
+      `Prelude.hashWithSalt` timeSeriesId
+
+instance Prelude.NFData TimeSeriesFeedback where
+  rnf TimeSeriesFeedback' {..} =
+    Prelude.rnf isAnomaly
+      `Prelude.seq` Prelude.rnf timeSeriesId
diff --git a/gen/Amazonka/LookoutMetrics/Types/TimestampColumn.hs b/gen/Amazonka/LookoutMetrics/Types/TimestampColumn.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/TimestampColumn.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.LookoutMetrics.Types.TimestampColumn
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.TimestampColumn 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 column used to track time in a source
+-- data file.
+--
+-- /See:/ 'newTimestampColumn' smart constructor.
+data TimestampColumn = TimestampColumn'
+  { -- | The format of the timestamp column.
+    columnFormat :: Prelude.Maybe Prelude.Text,
+    -- | The name of the timestamp column.
+    columnName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TimestampColumn' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'columnFormat', 'timestampColumn_columnFormat' - The format of the timestamp column.
+--
+-- 'columnName', 'timestampColumn_columnName' - The name of the timestamp column.
+newTimestampColumn ::
+  TimestampColumn
+newTimestampColumn =
+  TimestampColumn'
+    { columnFormat = Prelude.Nothing,
+      columnName = Prelude.Nothing
+    }
+
+-- | The format of the timestamp column.
+timestampColumn_columnFormat :: Lens.Lens' TimestampColumn (Prelude.Maybe Prelude.Text)
+timestampColumn_columnFormat = Lens.lens (\TimestampColumn' {columnFormat} -> columnFormat) (\s@TimestampColumn' {} a -> s {columnFormat = a} :: TimestampColumn)
+
+-- | The name of the timestamp column.
+timestampColumn_columnName :: Lens.Lens' TimestampColumn (Prelude.Maybe Prelude.Text)
+timestampColumn_columnName = Lens.lens (\TimestampColumn' {columnName} -> columnName) (\s@TimestampColumn' {} a -> s {columnName = a} :: TimestampColumn)
+
+instance Data.FromJSON TimestampColumn where
+  parseJSON =
+    Data.withObject
+      "TimestampColumn"
+      ( \x ->
+          TimestampColumn'
+            Prelude.<$> (x Data..:? "ColumnFormat")
+            Prelude.<*> (x Data..:? "ColumnName")
+      )
+
+instance Prelude.Hashable TimestampColumn where
+  hashWithSalt _salt TimestampColumn' {..} =
+    _salt
+      `Prelude.hashWithSalt` columnFormat
+      `Prelude.hashWithSalt` columnName
+
+instance Prelude.NFData TimestampColumn where
+  rnf TimestampColumn' {..} =
+    Prelude.rnf columnFormat
+      `Prelude.seq` Prelude.rnf columnName
+
+instance Data.ToJSON TimestampColumn where
+  toJSON TimestampColumn' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ColumnFormat" Data..=) Prelude.<$> columnFormat,
+            ("ColumnName" Data..=) Prelude.<$> columnName
+          ]
+      )
diff --git a/gen/Amazonka/LookoutMetrics/Types/VpcConfiguration.hs b/gen/Amazonka/LookoutMetrics/Types/VpcConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/Types/VpcConfiguration.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.LookoutMetrics.Types.VpcConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LookoutMetrics.Types.VpcConfiguration 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 configuration information about the Amazon Virtual Private
+-- Cloud (VPC).
+--
+-- /See:/ 'newVpcConfiguration' smart constructor.
+data VpcConfiguration = VpcConfiguration'
+  { -- | An array of strings containing the Amazon VPC subnet IDs (e.g.,
+    -- @subnet-0bb1c79de3EXAMPLE@.
+    subnetIdList :: [Prelude.Text],
+    -- | An array of strings containing the list of security groups.
+    securityGroupIdList :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpcConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'subnetIdList', 'vpcConfiguration_subnetIdList' - An array of strings containing the Amazon VPC subnet IDs (e.g.,
+-- @subnet-0bb1c79de3EXAMPLE@.
+--
+-- 'securityGroupIdList', 'vpcConfiguration_securityGroupIdList' - An array of strings containing the list of security groups.
+newVpcConfiguration ::
+  VpcConfiguration
+newVpcConfiguration =
+  VpcConfiguration'
+    { subnetIdList = Prelude.mempty,
+      securityGroupIdList = Prelude.mempty
+    }
+
+-- | An array of strings containing the Amazon VPC subnet IDs (e.g.,
+-- @subnet-0bb1c79de3EXAMPLE@.
+vpcConfiguration_subnetIdList :: Lens.Lens' VpcConfiguration [Prelude.Text]
+vpcConfiguration_subnetIdList = Lens.lens (\VpcConfiguration' {subnetIdList} -> subnetIdList) (\s@VpcConfiguration' {} a -> s {subnetIdList = a} :: VpcConfiguration) Prelude.. Lens.coerced
+
+-- | An array of strings containing the list of security groups.
+vpcConfiguration_securityGroupIdList :: Lens.Lens' VpcConfiguration [Prelude.Text]
+vpcConfiguration_securityGroupIdList = Lens.lens (\VpcConfiguration' {securityGroupIdList} -> securityGroupIdList) (\s@VpcConfiguration' {} a -> s {securityGroupIdList = a} :: VpcConfiguration) Prelude.. Lens.coerced
+
+instance Data.FromJSON VpcConfiguration where
+  parseJSON =
+    Data.withObject
+      "VpcConfiguration"
+      ( \x ->
+          VpcConfiguration'
+            Prelude.<$> (x Data..:? "SubnetIdList" Data..!= Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..:? "SecurityGroupIdList"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable VpcConfiguration where
+  hashWithSalt _salt VpcConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` subnetIdList
+      `Prelude.hashWithSalt` securityGroupIdList
+
+instance Prelude.NFData VpcConfiguration where
+  rnf VpcConfiguration' {..} =
+    Prelude.rnf subnetIdList
+      `Prelude.seq` Prelude.rnf securityGroupIdList
+
+instance Data.ToJSON VpcConfiguration where
+  toJSON VpcConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("SubnetIdList" Data..= subnetIdList),
+            Prelude.Just
+              ("SecurityGroupIdList" Data..= securityGroupIdList)
+          ]
+      )
diff --git a/gen/Amazonka/LookoutMetrics/UntagResource.hs b/gen/Amazonka/LookoutMetrics/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/UntagResource.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.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
+-- <https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html tags>
+-- from a detector, dataset, or alert.
+module Amazonka.LookoutMetrics.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.LookoutMetrics.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 resource\'s Amazon Resource Name (ARN).
+    resourceArn :: Prelude.Text,
+    -- | Keys to remove from the resource\'s tags.
+    tagKeys :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The resource\'s Amazon Resource Name (ARN).
+--
+-- 'tagKeys', 'untagResource_tagKeys' - Keys to remove from the resource\'s tags.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  -- | 'tagKeys'
+  Prelude.NonEmpty Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ pTagKeys_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Lens.coerced Lens.# pTagKeys_
+    }
+
+-- | The resource\'s Amazon Resource Name (ARN).
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | Keys to remove from the resource\'s tags.
+untagResource_tagKeys :: Lens.Lens' UntagResource (Prelude.NonEmpty Prelude.Text)
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath UntagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery UntagResource where
+  toQuery UntagResource' {..} =
+    Prelude.mconcat
+      ["tagKeys" Data.=: Data.toQueryList "member" tagKeys]
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'untagResourceResponse_httpStatus' - The response's http status code.
+newUntagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourceResponse
+newUntagResourceResponse pHttpStatus_ =
+  UntagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int
+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf UntagResourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/UpdateAlert.hs b/gen/Amazonka/LookoutMetrics/UpdateAlert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/UpdateAlert.hs
@@ -0,0 +1,223 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.UpdateAlert
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Make changes to an existing alert.
+module Amazonka.LookoutMetrics.UpdateAlert
+  ( -- * Creating a Request
+    UpdateAlert (..),
+    newUpdateAlert,
+
+    -- * Request Lenses
+    updateAlert_action,
+    updateAlert_alertDescription,
+    updateAlert_alertFilters,
+    updateAlert_alertSensitivityThreshold,
+    updateAlert_alertArn,
+
+    -- * Destructuring the Response
+    UpdateAlertResponse (..),
+    newUpdateAlertResponse,
+
+    -- * Response Lenses
+    updateAlertResponse_alertArn,
+    updateAlertResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateAlert' smart constructor.
+data UpdateAlert = UpdateAlert'
+  { -- | Action that will be triggered when there is an alert.
+    action :: Prelude.Maybe Action,
+    -- | A description of the alert.
+    alertDescription :: Prelude.Maybe Prelude.Text,
+    -- | The configuration of the alert filters, containing MetricList and
+    -- DimensionFilterList.
+    alertFilters :: Prelude.Maybe AlertFilters,
+    -- | An integer from 0 to 100 specifying the alert sensitivity threshold.
+    alertSensitivityThreshold :: Prelude.Maybe Prelude.Natural,
+    -- | The ARN of the alert to update.
+    alertArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAlert' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'action', 'updateAlert_action' - Action that will be triggered when there is an alert.
+--
+-- 'alertDescription', 'updateAlert_alertDescription' - A description of the alert.
+--
+-- 'alertFilters', 'updateAlert_alertFilters' - The configuration of the alert filters, containing MetricList and
+-- DimensionFilterList.
+--
+-- 'alertSensitivityThreshold', 'updateAlert_alertSensitivityThreshold' - An integer from 0 to 100 specifying the alert sensitivity threshold.
+--
+-- 'alertArn', 'updateAlert_alertArn' - The ARN of the alert to update.
+newUpdateAlert ::
+  -- | 'alertArn'
+  Prelude.Text ->
+  UpdateAlert
+newUpdateAlert pAlertArn_ =
+  UpdateAlert'
+    { action = Prelude.Nothing,
+      alertDescription = Prelude.Nothing,
+      alertFilters = Prelude.Nothing,
+      alertSensitivityThreshold = Prelude.Nothing,
+      alertArn = pAlertArn_
+    }
+
+-- | Action that will be triggered when there is an alert.
+updateAlert_action :: Lens.Lens' UpdateAlert (Prelude.Maybe Action)
+updateAlert_action = Lens.lens (\UpdateAlert' {action} -> action) (\s@UpdateAlert' {} a -> s {action = a} :: UpdateAlert)
+
+-- | A description of the alert.
+updateAlert_alertDescription :: Lens.Lens' UpdateAlert (Prelude.Maybe Prelude.Text)
+updateAlert_alertDescription = Lens.lens (\UpdateAlert' {alertDescription} -> alertDescription) (\s@UpdateAlert' {} a -> s {alertDescription = a} :: UpdateAlert)
+
+-- | The configuration of the alert filters, containing MetricList and
+-- DimensionFilterList.
+updateAlert_alertFilters :: Lens.Lens' UpdateAlert (Prelude.Maybe AlertFilters)
+updateAlert_alertFilters = Lens.lens (\UpdateAlert' {alertFilters} -> alertFilters) (\s@UpdateAlert' {} a -> s {alertFilters = a} :: UpdateAlert)
+
+-- | An integer from 0 to 100 specifying the alert sensitivity threshold.
+updateAlert_alertSensitivityThreshold :: Lens.Lens' UpdateAlert (Prelude.Maybe Prelude.Natural)
+updateAlert_alertSensitivityThreshold = Lens.lens (\UpdateAlert' {alertSensitivityThreshold} -> alertSensitivityThreshold) (\s@UpdateAlert' {} a -> s {alertSensitivityThreshold = a} :: UpdateAlert)
+
+-- | The ARN of the alert to update.
+updateAlert_alertArn :: Lens.Lens' UpdateAlert Prelude.Text
+updateAlert_alertArn = Lens.lens (\UpdateAlert' {alertArn} -> alertArn) (\s@UpdateAlert' {} a -> s {alertArn = a} :: UpdateAlert)
+
+instance Core.AWSRequest UpdateAlert where
+  type AWSResponse UpdateAlert = UpdateAlertResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateAlertResponse'
+            Prelude.<$> (x Data..?> "AlertArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateAlert where
+  hashWithSalt _salt UpdateAlert' {..} =
+    _salt
+      `Prelude.hashWithSalt` action
+      `Prelude.hashWithSalt` alertDescription
+      `Prelude.hashWithSalt` alertFilters
+      `Prelude.hashWithSalt` alertSensitivityThreshold
+      `Prelude.hashWithSalt` alertArn
+
+instance Prelude.NFData UpdateAlert where
+  rnf UpdateAlert' {..} =
+    Prelude.rnf action
+      `Prelude.seq` Prelude.rnf alertDescription
+      `Prelude.seq` Prelude.rnf alertFilters
+      `Prelude.seq` Prelude.rnf alertSensitivityThreshold
+      `Prelude.seq` Prelude.rnf alertArn
+
+instance Data.ToHeaders UpdateAlert where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateAlert where
+  toJSON UpdateAlert' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Action" Data..=) Prelude.<$> action,
+            ("AlertDescription" Data..=)
+              Prelude.<$> alertDescription,
+            ("AlertFilters" Data..=) Prelude.<$> alertFilters,
+            ("AlertSensitivityThreshold" Data..=)
+              Prelude.<$> alertSensitivityThreshold,
+            Prelude.Just ("AlertArn" Data..= alertArn)
+          ]
+      )
+
+instance Data.ToPath UpdateAlert where
+  toPath = Prelude.const "/UpdateAlert"
+
+instance Data.ToQuery UpdateAlert where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateAlertResponse' smart constructor.
+data UpdateAlertResponse = UpdateAlertResponse'
+  { -- | The ARN of the updated alert.
+    alertArn :: 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 'UpdateAlertResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'alertArn', 'updateAlertResponse_alertArn' - The ARN of the updated alert.
+--
+-- 'httpStatus', 'updateAlertResponse_httpStatus' - The response's http status code.
+newUpdateAlertResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateAlertResponse
+newUpdateAlertResponse pHttpStatus_ =
+  UpdateAlertResponse'
+    { alertArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the updated alert.
+updateAlertResponse_alertArn :: Lens.Lens' UpdateAlertResponse (Prelude.Maybe Prelude.Text)
+updateAlertResponse_alertArn = Lens.lens (\UpdateAlertResponse' {alertArn} -> alertArn) (\s@UpdateAlertResponse' {} a -> s {alertArn = a} :: UpdateAlertResponse)
+
+-- | The response's http status code.
+updateAlertResponse_httpStatus :: Lens.Lens' UpdateAlertResponse Prelude.Int
+updateAlertResponse_httpStatus = Lens.lens (\UpdateAlertResponse' {httpStatus} -> httpStatus) (\s@UpdateAlertResponse' {} a -> s {httpStatus = a} :: UpdateAlertResponse)
+
+instance Prelude.NFData UpdateAlertResponse where
+  rnf UpdateAlertResponse' {..} =
+    Prelude.rnf alertArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/UpdateAnomalyDetector.hs b/gen/Amazonka/LookoutMetrics/UpdateAnomalyDetector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/UpdateAnomalyDetector.hs
@@ -0,0 +1,216 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.UpdateAnomalyDetector
+-- 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. After activation, you can only change a detector\'s
+-- ingestion delay and description.
+module Amazonka.LookoutMetrics.UpdateAnomalyDetector
+  ( -- * Creating a Request
+    UpdateAnomalyDetector (..),
+    newUpdateAnomalyDetector,
+
+    -- * Request Lenses
+    updateAnomalyDetector_anomalyDetectorConfig,
+    updateAnomalyDetector_anomalyDetectorDescription,
+    updateAnomalyDetector_kmsKeyArn,
+    updateAnomalyDetector_anomalyDetectorArn,
+
+    -- * Destructuring the Response
+    UpdateAnomalyDetectorResponse (..),
+    newUpdateAnomalyDetectorResponse,
+
+    -- * Response Lenses
+    updateAnomalyDetectorResponse_anomalyDetectorArn,
+    updateAnomalyDetectorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateAnomalyDetector' smart constructor.
+data UpdateAnomalyDetector = UpdateAnomalyDetector'
+  { -- | Contains information about the configuration to which the detector will
+    -- be updated.
+    anomalyDetectorConfig :: Prelude.Maybe AnomalyDetectorConfig,
+    -- | The updated detector description.
+    anomalyDetectorDescription :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of an AWS KMS encryption key.
+    kmsKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the detector to update.
+    anomalyDetectorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAnomalyDetector' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyDetectorConfig', 'updateAnomalyDetector_anomalyDetectorConfig' - Contains information about the configuration to which the detector will
+-- be updated.
+--
+-- 'anomalyDetectorDescription', 'updateAnomalyDetector_anomalyDetectorDescription' - The updated detector description.
+--
+-- 'kmsKeyArn', 'updateAnomalyDetector_kmsKeyArn' - The Amazon Resource Name (ARN) of an AWS KMS encryption key.
+--
+-- 'anomalyDetectorArn', 'updateAnomalyDetector_anomalyDetectorArn' - The ARN of the detector to update.
+newUpdateAnomalyDetector ::
+  -- | 'anomalyDetectorArn'
+  Prelude.Text ->
+  UpdateAnomalyDetector
+newUpdateAnomalyDetector pAnomalyDetectorArn_ =
+  UpdateAnomalyDetector'
+    { anomalyDetectorConfig =
+        Prelude.Nothing,
+      anomalyDetectorDescription = Prelude.Nothing,
+      kmsKeyArn = Prelude.Nothing,
+      anomalyDetectorArn = pAnomalyDetectorArn_
+    }
+
+-- | Contains information about the configuration to which the detector will
+-- be updated.
+updateAnomalyDetector_anomalyDetectorConfig :: Lens.Lens' UpdateAnomalyDetector (Prelude.Maybe AnomalyDetectorConfig)
+updateAnomalyDetector_anomalyDetectorConfig = Lens.lens (\UpdateAnomalyDetector' {anomalyDetectorConfig} -> anomalyDetectorConfig) (\s@UpdateAnomalyDetector' {} a -> s {anomalyDetectorConfig = a} :: UpdateAnomalyDetector)
+
+-- | The updated detector description.
+updateAnomalyDetector_anomalyDetectorDescription :: Lens.Lens' UpdateAnomalyDetector (Prelude.Maybe Prelude.Text)
+updateAnomalyDetector_anomalyDetectorDescription = Lens.lens (\UpdateAnomalyDetector' {anomalyDetectorDescription} -> anomalyDetectorDescription) (\s@UpdateAnomalyDetector' {} a -> s {anomalyDetectorDescription = a} :: UpdateAnomalyDetector)
+
+-- | The Amazon Resource Name (ARN) of an AWS KMS encryption key.
+updateAnomalyDetector_kmsKeyArn :: Lens.Lens' UpdateAnomalyDetector (Prelude.Maybe Prelude.Text)
+updateAnomalyDetector_kmsKeyArn = Lens.lens (\UpdateAnomalyDetector' {kmsKeyArn} -> kmsKeyArn) (\s@UpdateAnomalyDetector' {} a -> s {kmsKeyArn = a} :: UpdateAnomalyDetector)
+
+-- | The ARN of the detector to update.
+updateAnomalyDetector_anomalyDetectorArn :: Lens.Lens' UpdateAnomalyDetector Prelude.Text
+updateAnomalyDetector_anomalyDetectorArn = Lens.lens (\UpdateAnomalyDetector' {anomalyDetectorArn} -> anomalyDetectorArn) (\s@UpdateAnomalyDetector' {} a -> s {anomalyDetectorArn = a} :: UpdateAnomalyDetector)
+
+instance Core.AWSRequest UpdateAnomalyDetector where
+  type
+    AWSResponse UpdateAnomalyDetector =
+      UpdateAnomalyDetectorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateAnomalyDetectorResponse'
+            Prelude.<$> (x Data..?> "AnomalyDetectorArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateAnomalyDetector where
+  hashWithSalt _salt UpdateAnomalyDetector' {..} =
+    _salt
+      `Prelude.hashWithSalt` anomalyDetectorConfig
+      `Prelude.hashWithSalt` anomalyDetectorDescription
+      `Prelude.hashWithSalt` kmsKeyArn
+      `Prelude.hashWithSalt` anomalyDetectorArn
+
+instance Prelude.NFData UpdateAnomalyDetector where
+  rnf UpdateAnomalyDetector' {..} =
+    Prelude.rnf anomalyDetectorConfig
+      `Prelude.seq` Prelude.rnf anomalyDetectorDescription
+      `Prelude.seq` Prelude.rnf kmsKeyArn
+      `Prelude.seq` Prelude.rnf anomalyDetectorArn
+
+instance Data.ToHeaders UpdateAnomalyDetector where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateAnomalyDetector where
+  toJSON UpdateAnomalyDetector' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AnomalyDetectorConfig" Data..=)
+              Prelude.<$> anomalyDetectorConfig,
+            ("AnomalyDetectorDescription" Data..=)
+              Prelude.<$> anomalyDetectorDescription,
+            ("KmsKeyArn" Data..=) Prelude.<$> kmsKeyArn,
+            Prelude.Just
+              ("AnomalyDetectorArn" Data..= anomalyDetectorArn)
+          ]
+      )
+
+instance Data.ToPath UpdateAnomalyDetector where
+  toPath = Prelude.const "/UpdateAnomalyDetector"
+
+instance Data.ToQuery UpdateAnomalyDetector where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateAnomalyDetectorResponse' smart constructor.
+data UpdateAnomalyDetectorResponse = UpdateAnomalyDetectorResponse'
+  { -- | The ARN of the updated detector.
+    anomalyDetectorArn :: 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 'UpdateAnomalyDetectorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anomalyDetectorArn', 'updateAnomalyDetectorResponse_anomalyDetectorArn' - The ARN of the updated detector.
+--
+-- 'httpStatus', 'updateAnomalyDetectorResponse_httpStatus' - The response's http status code.
+newUpdateAnomalyDetectorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateAnomalyDetectorResponse
+newUpdateAnomalyDetectorResponse pHttpStatus_ =
+  UpdateAnomalyDetectorResponse'
+    { anomalyDetectorArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the updated detector.
+updateAnomalyDetectorResponse_anomalyDetectorArn :: Lens.Lens' UpdateAnomalyDetectorResponse (Prelude.Maybe Prelude.Text)
+updateAnomalyDetectorResponse_anomalyDetectorArn = Lens.lens (\UpdateAnomalyDetectorResponse' {anomalyDetectorArn} -> anomalyDetectorArn) (\s@UpdateAnomalyDetectorResponse' {} a -> s {anomalyDetectorArn = a} :: UpdateAnomalyDetectorResponse)
+
+-- | The response's http status code.
+updateAnomalyDetectorResponse_httpStatus :: Lens.Lens' UpdateAnomalyDetectorResponse Prelude.Int
+updateAnomalyDetectorResponse_httpStatus = Lens.lens (\UpdateAnomalyDetectorResponse' {httpStatus} -> httpStatus) (\s@UpdateAnomalyDetectorResponse' {} a -> s {httpStatus = a} :: UpdateAnomalyDetectorResponse)
+
+instance Prelude.NFData UpdateAnomalyDetectorResponse where
+  rnf UpdateAnomalyDetectorResponse' {..} =
+    Prelude.rnf anomalyDetectorArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/UpdateMetricSet.hs b/gen/Amazonka/LookoutMetrics/UpdateMetricSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/UpdateMetricSet.hs
@@ -0,0 +1,295 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LookoutMetrics.UpdateMetricSet
+-- 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 dataset.
+module Amazonka.LookoutMetrics.UpdateMetricSet
+  ( -- * Creating a Request
+    UpdateMetricSet (..),
+    newUpdateMetricSet,
+
+    -- * Request Lenses
+    updateMetricSet_dimensionFilterList,
+    updateMetricSet_dimensionList,
+    updateMetricSet_metricList,
+    updateMetricSet_metricSetDescription,
+    updateMetricSet_metricSetFrequency,
+    updateMetricSet_metricSource,
+    updateMetricSet_offset,
+    updateMetricSet_timestampColumn,
+    updateMetricSet_metricSetArn,
+
+    -- * Destructuring the Response
+    UpdateMetricSetResponse (..),
+    newUpdateMetricSetResponse,
+
+    -- * Response Lenses
+    updateMetricSetResponse_metricSetArn,
+    updateMetricSetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateMetricSet' smart constructor.
+data UpdateMetricSet = UpdateMetricSet'
+  { -- | Describes a list of filters for choosing specific dimensions and
+    -- specific values. Each filter consists of the dimension and one of its
+    -- values that you want to include. When multiple dimensions or values are
+    -- specified, the dimensions are joined with an AND operation and the
+    -- values are joined with an OR operation.
+    dimensionFilterList :: Prelude.Maybe [MetricSetDimensionFilter],
+    -- | The dimension list.
+    dimensionList :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The metric list.
+    metricList :: Prelude.Maybe (Prelude.NonEmpty Metric),
+    -- | The dataset\'s description.
+    metricSetDescription :: Prelude.Maybe Prelude.Text,
+    -- | The dataset\'s interval.
+    metricSetFrequency :: Prelude.Maybe Frequency,
+    metricSource :: Prelude.Maybe MetricSource,
+    -- | After an interval ends, the amount of seconds that the detector waits
+    -- before importing data. Offset is only supported for S3, Redshift, Athena
+    -- and datasources.
+    offset :: Prelude.Maybe Prelude.Natural,
+    -- | The timestamp column.
+    timestampColumn :: Prelude.Maybe TimestampColumn,
+    -- | The ARN of the dataset to update.
+    metricSetArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateMetricSet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dimensionFilterList', 'updateMetricSet_dimensionFilterList' - Describes a list of filters for choosing specific dimensions and
+-- specific values. Each filter consists of the dimension and one of its
+-- values that you want to include. When multiple dimensions or values are
+-- specified, the dimensions are joined with an AND operation and the
+-- values are joined with an OR operation.
+--
+-- 'dimensionList', 'updateMetricSet_dimensionList' - The dimension list.
+--
+-- 'metricList', 'updateMetricSet_metricList' - The metric list.
+--
+-- 'metricSetDescription', 'updateMetricSet_metricSetDescription' - The dataset\'s description.
+--
+-- 'metricSetFrequency', 'updateMetricSet_metricSetFrequency' - The dataset\'s interval.
+--
+-- 'metricSource', 'updateMetricSet_metricSource' - Undocumented member.
+--
+-- 'offset', 'updateMetricSet_offset' - After an interval ends, the amount of seconds that the detector waits
+-- before importing data. Offset is only supported for S3, Redshift, Athena
+-- and datasources.
+--
+-- 'timestampColumn', 'updateMetricSet_timestampColumn' - The timestamp column.
+--
+-- 'metricSetArn', 'updateMetricSet_metricSetArn' - The ARN of the dataset to update.
+newUpdateMetricSet ::
+  -- | 'metricSetArn'
+  Prelude.Text ->
+  UpdateMetricSet
+newUpdateMetricSet pMetricSetArn_ =
+  UpdateMetricSet'
+    { dimensionFilterList =
+        Prelude.Nothing,
+      dimensionList = Prelude.Nothing,
+      metricList = Prelude.Nothing,
+      metricSetDescription = Prelude.Nothing,
+      metricSetFrequency = Prelude.Nothing,
+      metricSource = Prelude.Nothing,
+      offset = Prelude.Nothing,
+      timestampColumn = Prelude.Nothing,
+      metricSetArn = pMetricSetArn_
+    }
+
+-- | Describes a list of filters for choosing specific dimensions and
+-- specific values. Each filter consists of the dimension and one of its
+-- values that you want to include. When multiple dimensions or values are
+-- specified, the dimensions are joined with an AND operation and the
+-- values are joined with an OR operation.
+updateMetricSet_dimensionFilterList :: Lens.Lens' UpdateMetricSet (Prelude.Maybe [MetricSetDimensionFilter])
+updateMetricSet_dimensionFilterList = Lens.lens (\UpdateMetricSet' {dimensionFilterList} -> dimensionFilterList) (\s@UpdateMetricSet' {} a -> s {dimensionFilterList = a} :: UpdateMetricSet) Prelude.. Lens.mapping Lens.coerced
+
+-- | The dimension list.
+updateMetricSet_dimensionList :: Lens.Lens' UpdateMetricSet (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+updateMetricSet_dimensionList = Lens.lens (\UpdateMetricSet' {dimensionList} -> dimensionList) (\s@UpdateMetricSet' {} a -> s {dimensionList = a} :: UpdateMetricSet) Prelude.. Lens.mapping Lens.coerced
+
+-- | The metric list.
+updateMetricSet_metricList :: Lens.Lens' UpdateMetricSet (Prelude.Maybe (Prelude.NonEmpty Metric))
+updateMetricSet_metricList = Lens.lens (\UpdateMetricSet' {metricList} -> metricList) (\s@UpdateMetricSet' {} a -> s {metricList = a} :: UpdateMetricSet) Prelude.. Lens.mapping Lens.coerced
+
+-- | The dataset\'s description.
+updateMetricSet_metricSetDescription :: Lens.Lens' UpdateMetricSet (Prelude.Maybe Prelude.Text)
+updateMetricSet_metricSetDescription = Lens.lens (\UpdateMetricSet' {metricSetDescription} -> metricSetDescription) (\s@UpdateMetricSet' {} a -> s {metricSetDescription = a} :: UpdateMetricSet)
+
+-- | The dataset\'s interval.
+updateMetricSet_metricSetFrequency :: Lens.Lens' UpdateMetricSet (Prelude.Maybe Frequency)
+updateMetricSet_metricSetFrequency = Lens.lens (\UpdateMetricSet' {metricSetFrequency} -> metricSetFrequency) (\s@UpdateMetricSet' {} a -> s {metricSetFrequency = a} :: UpdateMetricSet)
+
+-- | Undocumented member.
+updateMetricSet_metricSource :: Lens.Lens' UpdateMetricSet (Prelude.Maybe MetricSource)
+updateMetricSet_metricSource = Lens.lens (\UpdateMetricSet' {metricSource} -> metricSource) (\s@UpdateMetricSet' {} a -> s {metricSource = a} :: UpdateMetricSet)
+
+-- | After an interval ends, the amount of seconds that the detector waits
+-- before importing data. Offset is only supported for S3, Redshift, Athena
+-- and datasources.
+updateMetricSet_offset :: Lens.Lens' UpdateMetricSet (Prelude.Maybe Prelude.Natural)
+updateMetricSet_offset = Lens.lens (\UpdateMetricSet' {offset} -> offset) (\s@UpdateMetricSet' {} a -> s {offset = a} :: UpdateMetricSet)
+
+-- | The timestamp column.
+updateMetricSet_timestampColumn :: Lens.Lens' UpdateMetricSet (Prelude.Maybe TimestampColumn)
+updateMetricSet_timestampColumn = Lens.lens (\UpdateMetricSet' {timestampColumn} -> timestampColumn) (\s@UpdateMetricSet' {} a -> s {timestampColumn = a} :: UpdateMetricSet)
+
+-- | The ARN of the dataset to update.
+updateMetricSet_metricSetArn :: Lens.Lens' UpdateMetricSet Prelude.Text
+updateMetricSet_metricSetArn = Lens.lens (\UpdateMetricSet' {metricSetArn} -> metricSetArn) (\s@UpdateMetricSet' {} a -> s {metricSetArn = a} :: UpdateMetricSet)
+
+instance Core.AWSRequest UpdateMetricSet where
+  type
+    AWSResponse UpdateMetricSet =
+      UpdateMetricSetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateMetricSetResponse'
+            Prelude.<$> (x Data..?> "MetricSetArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateMetricSet where
+  hashWithSalt _salt UpdateMetricSet' {..} =
+    _salt
+      `Prelude.hashWithSalt` dimensionFilterList
+      `Prelude.hashWithSalt` dimensionList
+      `Prelude.hashWithSalt` metricList
+      `Prelude.hashWithSalt` metricSetDescription
+      `Prelude.hashWithSalt` metricSetFrequency
+      `Prelude.hashWithSalt` metricSource
+      `Prelude.hashWithSalt` offset
+      `Prelude.hashWithSalt` timestampColumn
+      `Prelude.hashWithSalt` metricSetArn
+
+instance Prelude.NFData UpdateMetricSet where
+  rnf UpdateMetricSet' {..} =
+    Prelude.rnf dimensionFilterList
+      `Prelude.seq` Prelude.rnf dimensionList
+      `Prelude.seq` Prelude.rnf metricList
+      `Prelude.seq` Prelude.rnf metricSetDescription
+      `Prelude.seq` Prelude.rnf metricSetFrequency
+      `Prelude.seq` Prelude.rnf metricSource
+      `Prelude.seq` Prelude.rnf offset
+      `Prelude.seq` Prelude.rnf timestampColumn
+      `Prelude.seq` Prelude.rnf metricSetArn
+
+instance Data.ToHeaders UpdateMetricSet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateMetricSet where
+  toJSON UpdateMetricSet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DimensionFilterList" Data..=)
+              Prelude.<$> dimensionFilterList,
+            ("DimensionList" Data..=) Prelude.<$> dimensionList,
+            ("MetricList" Data..=) Prelude.<$> metricList,
+            ("MetricSetDescription" Data..=)
+              Prelude.<$> metricSetDescription,
+            ("MetricSetFrequency" Data..=)
+              Prelude.<$> metricSetFrequency,
+            ("MetricSource" Data..=) Prelude.<$> metricSource,
+            ("Offset" Data..=) Prelude.<$> offset,
+            ("TimestampColumn" Data..=)
+              Prelude.<$> timestampColumn,
+            Prelude.Just ("MetricSetArn" Data..= metricSetArn)
+          ]
+      )
+
+instance Data.ToPath UpdateMetricSet where
+  toPath = Prelude.const "/UpdateMetricSet"
+
+instance Data.ToQuery UpdateMetricSet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateMetricSetResponse' smart constructor.
+data UpdateMetricSetResponse = UpdateMetricSetResponse'
+  { -- | The ARN of the dataset.
+    metricSetArn :: 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 'UpdateMetricSetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'metricSetArn', 'updateMetricSetResponse_metricSetArn' - The ARN of the dataset.
+--
+-- 'httpStatus', 'updateMetricSetResponse_httpStatus' - The response's http status code.
+newUpdateMetricSetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateMetricSetResponse
+newUpdateMetricSetResponse pHttpStatus_ =
+  UpdateMetricSetResponse'
+    { metricSetArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the dataset.
+updateMetricSetResponse_metricSetArn :: Lens.Lens' UpdateMetricSetResponse (Prelude.Maybe Prelude.Text)
+updateMetricSetResponse_metricSetArn = Lens.lens (\UpdateMetricSetResponse' {metricSetArn} -> metricSetArn) (\s@UpdateMetricSetResponse' {} a -> s {metricSetArn = a} :: UpdateMetricSetResponse)
+
+-- | The response's http status code.
+updateMetricSetResponse_httpStatus :: Lens.Lens' UpdateMetricSetResponse Prelude.Int
+updateMetricSetResponse_httpStatus = Lens.lens (\UpdateMetricSetResponse' {httpStatus} -> httpStatus) (\s@UpdateMetricSetResponse' {} a -> s {httpStatus = a} :: UpdateMetricSetResponse)
+
+instance Prelude.NFData UpdateMetricSetResponse where
+  rnf UpdateMetricSetResponse' {..} =
+    Prelude.rnf metricSetArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LookoutMetrics/Waiters.hs b/gen/Amazonka/LookoutMetrics/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LookoutMetrics/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.LookoutMetrics.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.LookoutMetrics.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LookoutMetrics.Lens
+import Amazonka.LookoutMetrics.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.LookoutMetrics
+import Test.Amazonka.LookoutMetrics.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "LookoutMetrics"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/LookoutMetrics.hs b/test/Test/Amazonka/Gen/LookoutMetrics.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/LookoutMetrics.hs
@@ -0,0 +1,638 @@
+{-# 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.LookoutMetrics
+-- Copyright   : (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.LookoutMetrics where
+
+import Amazonka.LookoutMetrics
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.LookoutMetrics.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"
+--         [ requestActivateAnomalyDetector $
+--             newActivateAnomalyDetector
+--
+--         , requestBackTestAnomalyDetector $
+--             newBackTestAnomalyDetector
+--
+--         , requestCreateAlert $
+--             newCreateAlert
+--
+--         , requestCreateAnomalyDetector $
+--             newCreateAnomalyDetector
+--
+--         , requestCreateMetricSet $
+--             newCreateMetricSet
+--
+--         , requestDeactivateAnomalyDetector $
+--             newDeactivateAnomalyDetector
+--
+--         , requestDeleteAlert $
+--             newDeleteAlert
+--
+--         , requestDeleteAnomalyDetector $
+--             newDeleteAnomalyDetector
+--
+--         , requestDescribeAlert $
+--             newDescribeAlert
+--
+--         , requestDescribeAnomalyDetectionExecutions $
+--             newDescribeAnomalyDetectionExecutions
+--
+--         , requestDescribeAnomalyDetector $
+--             newDescribeAnomalyDetector
+--
+--         , requestDescribeMetricSet $
+--             newDescribeMetricSet
+--
+--         , requestDetectMetricSetConfig $
+--             newDetectMetricSetConfig
+--
+--         , requestGetAnomalyGroup $
+--             newGetAnomalyGroup
+--
+--         , requestGetDataQualityMetrics $
+--             newGetDataQualityMetrics
+--
+--         , requestGetFeedback $
+--             newGetFeedback
+--
+--         , requestGetSampleData $
+--             newGetSampleData
+--
+--         , requestListAlerts $
+--             newListAlerts
+--
+--         , requestListAnomalyDetectors $
+--             newListAnomalyDetectors
+--
+--         , requestListAnomalyGroupRelatedMetrics $
+--             newListAnomalyGroupRelatedMetrics
+--
+--         , requestListAnomalyGroupSummaries $
+--             newListAnomalyGroupSummaries
+--
+--         , requestListAnomalyGroupTimeSeries $
+--             newListAnomalyGroupTimeSeries
+--
+--         , requestListMetricSets $
+--             newListMetricSets
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestPutFeedback $
+--             newPutFeedback
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateAlert $
+--             newUpdateAlert
+--
+--         , requestUpdateAnomalyDetector $
+--             newUpdateAnomalyDetector
+--
+--         , requestUpdateMetricSet $
+--             newUpdateMetricSet
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseActivateAnomalyDetector $
+--             newActivateAnomalyDetectorResponse
+--
+--         , responseBackTestAnomalyDetector $
+--             newBackTestAnomalyDetectorResponse
+--
+--         , responseCreateAlert $
+--             newCreateAlertResponse
+--
+--         , responseCreateAnomalyDetector $
+--             newCreateAnomalyDetectorResponse
+--
+--         , responseCreateMetricSet $
+--             newCreateMetricSetResponse
+--
+--         , responseDeactivateAnomalyDetector $
+--             newDeactivateAnomalyDetectorResponse
+--
+--         , responseDeleteAlert $
+--             newDeleteAlertResponse
+--
+--         , responseDeleteAnomalyDetector $
+--             newDeleteAnomalyDetectorResponse
+--
+--         , responseDescribeAlert $
+--             newDescribeAlertResponse
+--
+--         , responseDescribeAnomalyDetectionExecutions $
+--             newDescribeAnomalyDetectionExecutionsResponse
+--
+--         , responseDescribeAnomalyDetector $
+--             newDescribeAnomalyDetectorResponse
+--
+--         , responseDescribeMetricSet $
+--             newDescribeMetricSetResponse
+--
+--         , responseDetectMetricSetConfig $
+--             newDetectMetricSetConfigResponse
+--
+--         , responseGetAnomalyGroup $
+--             newGetAnomalyGroupResponse
+--
+--         , responseGetDataQualityMetrics $
+--             newGetDataQualityMetricsResponse
+--
+--         , responseGetFeedback $
+--             newGetFeedbackResponse
+--
+--         , responseGetSampleData $
+--             newGetSampleDataResponse
+--
+--         , responseListAlerts $
+--             newListAlertsResponse
+--
+--         , responseListAnomalyDetectors $
+--             newListAnomalyDetectorsResponse
+--
+--         , responseListAnomalyGroupRelatedMetrics $
+--             newListAnomalyGroupRelatedMetricsResponse
+--
+--         , responseListAnomalyGroupSummaries $
+--             newListAnomalyGroupSummariesResponse
+--
+--         , responseListAnomalyGroupTimeSeries $
+--             newListAnomalyGroupTimeSeriesResponse
+--
+--         , responseListMetricSets $
+--             newListMetricSetsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responsePutFeedback $
+--             newPutFeedbackResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateAlert $
+--             newUpdateAlertResponse
+--
+--         , responseUpdateAnomalyDetector $
+--             newUpdateAnomalyDetectorResponse
+--
+--         , responseUpdateMetricSet $
+--             newUpdateMetricSetResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestActivateAnomalyDetector :: ActivateAnomalyDetector -> TestTree
+requestActivateAnomalyDetector =
+  req
+    "ActivateAnomalyDetector"
+    "fixture/ActivateAnomalyDetector.yaml"
+
+requestBackTestAnomalyDetector :: BackTestAnomalyDetector -> TestTree
+requestBackTestAnomalyDetector =
+  req
+    "BackTestAnomalyDetector"
+    "fixture/BackTestAnomalyDetector.yaml"
+
+requestCreateAlert :: CreateAlert -> TestTree
+requestCreateAlert =
+  req
+    "CreateAlert"
+    "fixture/CreateAlert.yaml"
+
+requestCreateAnomalyDetector :: CreateAnomalyDetector -> TestTree
+requestCreateAnomalyDetector =
+  req
+    "CreateAnomalyDetector"
+    "fixture/CreateAnomalyDetector.yaml"
+
+requestCreateMetricSet :: CreateMetricSet -> TestTree
+requestCreateMetricSet =
+  req
+    "CreateMetricSet"
+    "fixture/CreateMetricSet.yaml"
+
+requestDeactivateAnomalyDetector :: DeactivateAnomalyDetector -> TestTree
+requestDeactivateAnomalyDetector =
+  req
+    "DeactivateAnomalyDetector"
+    "fixture/DeactivateAnomalyDetector.yaml"
+
+requestDeleteAlert :: DeleteAlert -> TestTree
+requestDeleteAlert =
+  req
+    "DeleteAlert"
+    "fixture/DeleteAlert.yaml"
+
+requestDeleteAnomalyDetector :: DeleteAnomalyDetector -> TestTree
+requestDeleteAnomalyDetector =
+  req
+    "DeleteAnomalyDetector"
+    "fixture/DeleteAnomalyDetector.yaml"
+
+requestDescribeAlert :: DescribeAlert -> TestTree
+requestDescribeAlert =
+  req
+    "DescribeAlert"
+    "fixture/DescribeAlert.yaml"
+
+requestDescribeAnomalyDetectionExecutions :: DescribeAnomalyDetectionExecutions -> TestTree
+requestDescribeAnomalyDetectionExecutions =
+  req
+    "DescribeAnomalyDetectionExecutions"
+    "fixture/DescribeAnomalyDetectionExecutions.yaml"
+
+requestDescribeAnomalyDetector :: DescribeAnomalyDetector -> TestTree
+requestDescribeAnomalyDetector =
+  req
+    "DescribeAnomalyDetector"
+    "fixture/DescribeAnomalyDetector.yaml"
+
+requestDescribeMetricSet :: DescribeMetricSet -> TestTree
+requestDescribeMetricSet =
+  req
+    "DescribeMetricSet"
+    "fixture/DescribeMetricSet.yaml"
+
+requestDetectMetricSetConfig :: DetectMetricSetConfig -> TestTree
+requestDetectMetricSetConfig =
+  req
+    "DetectMetricSetConfig"
+    "fixture/DetectMetricSetConfig.yaml"
+
+requestGetAnomalyGroup :: GetAnomalyGroup -> TestTree
+requestGetAnomalyGroup =
+  req
+    "GetAnomalyGroup"
+    "fixture/GetAnomalyGroup.yaml"
+
+requestGetDataQualityMetrics :: GetDataQualityMetrics -> TestTree
+requestGetDataQualityMetrics =
+  req
+    "GetDataQualityMetrics"
+    "fixture/GetDataQualityMetrics.yaml"
+
+requestGetFeedback :: GetFeedback -> TestTree
+requestGetFeedback =
+  req
+    "GetFeedback"
+    "fixture/GetFeedback.yaml"
+
+requestGetSampleData :: GetSampleData -> TestTree
+requestGetSampleData =
+  req
+    "GetSampleData"
+    "fixture/GetSampleData.yaml"
+
+requestListAlerts :: ListAlerts -> TestTree
+requestListAlerts =
+  req
+    "ListAlerts"
+    "fixture/ListAlerts.yaml"
+
+requestListAnomalyDetectors :: ListAnomalyDetectors -> TestTree
+requestListAnomalyDetectors =
+  req
+    "ListAnomalyDetectors"
+    "fixture/ListAnomalyDetectors.yaml"
+
+requestListAnomalyGroupRelatedMetrics :: ListAnomalyGroupRelatedMetrics -> TestTree
+requestListAnomalyGroupRelatedMetrics =
+  req
+    "ListAnomalyGroupRelatedMetrics"
+    "fixture/ListAnomalyGroupRelatedMetrics.yaml"
+
+requestListAnomalyGroupSummaries :: ListAnomalyGroupSummaries -> TestTree
+requestListAnomalyGroupSummaries =
+  req
+    "ListAnomalyGroupSummaries"
+    "fixture/ListAnomalyGroupSummaries.yaml"
+
+requestListAnomalyGroupTimeSeries :: ListAnomalyGroupTimeSeries -> TestTree
+requestListAnomalyGroupTimeSeries =
+  req
+    "ListAnomalyGroupTimeSeries"
+    "fixture/ListAnomalyGroupTimeSeries.yaml"
+
+requestListMetricSets :: ListMetricSets -> TestTree
+requestListMetricSets =
+  req
+    "ListMetricSets"
+    "fixture/ListMetricSets.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestPutFeedback :: PutFeedback -> TestTree
+requestPutFeedback =
+  req
+    "PutFeedback"
+    "fixture/PutFeedback.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateAlert :: UpdateAlert -> TestTree
+requestUpdateAlert =
+  req
+    "UpdateAlert"
+    "fixture/UpdateAlert.yaml"
+
+requestUpdateAnomalyDetector :: UpdateAnomalyDetector -> TestTree
+requestUpdateAnomalyDetector =
+  req
+    "UpdateAnomalyDetector"
+    "fixture/UpdateAnomalyDetector.yaml"
+
+requestUpdateMetricSet :: UpdateMetricSet -> TestTree
+requestUpdateMetricSet =
+  req
+    "UpdateMetricSet"
+    "fixture/UpdateMetricSet.yaml"
+
+-- Responses
+
+responseActivateAnomalyDetector :: ActivateAnomalyDetectorResponse -> TestTree
+responseActivateAnomalyDetector =
+  res
+    "ActivateAnomalyDetectorResponse"
+    "fixture/ActivateAnomalyDetectorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ActivateAnomalyDetector)
+
+responseBackTestAnomalyDetector :: BackTestAnomalyDetectorResponse -> TestTree
+responseBackTestAnomalyDetector =
+  res
+    "BackTestAnomalyDetectorResponse"
+    "fixture/BackTestAnomalyDetectorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BackTestAnomalyDetector)
+
+responseCreateAlert :: CreateAlertResponse -> TestTree
+responseCreateAlert =
+  res
+    "CreateAlertResponse"
+    "fixture/CreateAlertResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateAlert)
+
+responseCreateAnomalyDetector :: CreateAnomalyDetectorResponse -> TestTree
+responseCreateAnomalyDetector =
+  res
+    "CreateAnomalyDetectorResponse"
+    "fixture/CreateAnomalyDetectorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateAnomalyDetector)
+
+responseCreateMetricSet :: CreateMetricSetResponse -> TestTree
+responseCreateMetricSet =
+  res
+    "CreateMetricSetResponse"
+    "fixture/CreateMetricSetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateMetricSet)
+
+responseDeactivateAnomalyDetector :: DeactivateAnomalyDetectorResponse -> TestTree
+responseDeactivateAnomalyDetector =
+  res
+    "DeactivateAnomalyDetectorResponse"
+    "fixture/DeactivateAnomalyDetectorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeactivateAnomalyDetector)
+
+responseDeleteAlert :: DeleteAlertResponse -> TestTree
+responseDeleteAlert =
+  res
+    "DeleteAlertResponse"
+    "fixture/DeleteAlertResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAlert)
+
+responseDeleteAnomalyDetector :: DeleteAnomalyDetectorResponse -> TestTree
+responseDeleteAnomalyDetector =
+  res
+    "DeleteAnomalyDetectorResponse"
+    "fixture/DeleteAnomalyDetectorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAnomalyDetector)
+
+responseDescribeAlert :: DescribeAlertResponse -> TestTree
+responseDescribeAlert =
+  res
+    "DescribeAlertResponse"
+    "fixture/DescribeAlertResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAlert)
+
+responseDescribeAnomalyDetectionExecutions :: DescribeAnomalyDetectionExecutionsResponse -> TestTree
+responseDescribeAnomalyDetectionExecutions =
+  res
+    "DescribeAnomalyDetectionExecutionsResponse"
+    "fixture/DescribeAnomalyDetectionExecutionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAnomalyDetectionExecutions)
+
+responseDescribeAnomalyDetector :: DescribeAnomalyDetectorResponse -> TestTree
+responseDescribeAnomalyDetector =
+  res
+    "DescribeAnomalyDetectorResponse"
+    "fixture/DescribeAnomalyDetectorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAnomalyDetector)
+
+responseDescribeMetricSet :: DescribeMetricSetResponse -> TestTree
+responseDescribeMetricSet =
+  res
+    "DescribeMetricSetResponse"
+    "fixture/DescribeMetricSetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeMetricSet)
+
+responseDetectMetricSetConfig :: DetectMetricSetConfigResponse -> TestTree
+responseDetectMetricSetConfig =
+  res
+    "DetectMetricSetConfigResponse"
+    "fixture/DetectMetricSetConfigResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DetectMetricSetConfig)
+
+responseGetAnomalyGroup :: GetAnomalyGroupResponse -> TestTree
+responseGetAnomalyGroup =
+  res
+    "GetAnomalyGroupResponse"
+    "fixture/GetAnomalyGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAnomalyGroup)
+
+responseGetDataQualityMetrics :: GetDataQualityMetricsResponse -> TestTree
+responseGetDataQualityMetrics =
+  res
+    "GetDataQualityMetricsResponse"
+    "fixture/GetDataQualityMetricsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDataQualityMetrics)
+
+responseGetFeedback :: GetFeedbackResponse -> TestTree
+responseGetFeedback =
+  res
+    "GetFeedbackResponse"
+    "fixture/GetFeedbackResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetFeedback)
+
+responseGetSampleData :: GetSampleDataResponse -> TestTree
+responseGetSampleData =
+  res
+    "GetSampleDataResponse"
+    "fixture/GetSampleDataResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetSampleData)
+
+responseListAlerts :: ListAlertsResponse -> TestTree
+responseListAlerts =
+  res
+    "ListAlertsResponse"
+    "fixture/ListAlertsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAlerts)
+
+responseListAnomalyDetectors :: ListAnomalyDetectorsResponse -> TestTree
+responseListAnomalyDetectors =
+  res
+    "ListAnomalyDetectorsResponse"
+    "fixture/ListAnomalyDetectorsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAnomalyDetectors)
+
+responseListAnomalyGroupRelatedMetrics :: ListAnomalyGroupRelatedMetricsResponse -> TestTree
+responseListAnomalyGroupRelatedMetrics =
+  res
+    "ListAnomalyGroupRelatedMetricsResponse"
+    "fixture/ListAnomalyGroupRelatedMetricsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAnomalyGroupRelatedMetrics)
+
+responseListAnomalyGroupSummaries :: ListAnomalyGroupSummariesResponse -> TestTree
+responseListAnomalyGroupSummaries =
+  res
+    "ListAnomalyGroupSummariesResponse"
+    "fixture/ListAnomalyGroupSummariesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAnomalyGroupSummaries)
+
+responseListAnomalyGroupTimeSeries :: ListAnomalyGroupTimeSeriesResponse -> TestTree
+responseListAnomalyGroupTimeSeries =
+  res
+    "ListAnomalyGroupTimeSeriesResponse"
+    "fixture/ListAnomalyGroupTimeSeriesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAnomalyGroupTimeSeries)
+
+responseListMetricSets :: ListMetricSetsResponse -> TestTree
+responseListMetricSets =
+  res
+    "ListMetricSetsResponse"
+    "fixture/ListMetricSetsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListMetricSets)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responsePutFeedback :: PutFeedbackResponse -> TestTree
+responsePutFeedback =
+  res
+    "PutFeedbackResponse"
+    "fixture/PutFeedbackResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutFeedback)
+
+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)
+
+responseUpdateAlert :: UpdateAlertResponse -> TestTree
+responseUpdateAlert =
+  res
+    "UpdateAlertResponse"
+    "fixture/UpdateAlertResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateAlert)
+
+responseUpdateAnomalyDetector :: UpdateAnomalyDetectorResponse -> TestTree
+responseUpdateAnomalyDetector =
+  res
+    "UpdateAnomalyDetectorResponse"
+    "fixture/UpdateAnomalyDetectorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateAnomalyDetector)
+
+responseUpdateMetricSet :: UpdateMetricSetResponse -> TestTree
+responseUpdateMetricSet =
+  res
+    "UpdateMetricSetResponse"
+    "fixture/UpdateMetricSetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateMetricSet)
diff --git a/test/Test/Amazonka/LookoutMetrics.hs b/test/Test/Amazonka/LookoutMetrics.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/LookoutMetrics.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.LookoutMetrics
+-- Copyright   : (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.LookoutMetrics
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/LookoutMetrics/Internal.hs b/test/Test/Amazonka/LookoutMetrics/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/LookoutMetrics/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.LookoutMetrics.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.LookoutMetrics.Internal where
