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 Fraud Detector SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2019-11-15@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-frauddetector)
+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.FraudDetector](http://hackage.haskell.org/package/amazonka-frauddetector/docs/Amazonka-FraudDetector.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-frauddetector` 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-frauddetector.cabal b/amazonka-frauddetector.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-frauddetector.cabal
@@ -0,0 +1,233 @@
+cabal-version:      2.2
+name:               amazonka-frauddetector
+version:            2.0
+synopsis:           Amazon Fraud Detector 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 @2019-11-15@ 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.FraudDetector.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.FraudDetector" 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-frauddetector
+
+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.FraudDetector
+    Amazonka.FraudDetector.BatchCreateVariable
+    Amazonka.FraudDetector.BatchGetVariable
+    Amazonka.FraudDetector.CancelBatchImportJob
+    Amazonka.FraudDetector.CancelBatchPredictionJob
+    Amazonka.FraudDetector.CreateBatchImportJob
+    Amazonka.FraudDetector.CreateBatchPredictionJob
+    Amazonka.FraudDetector.CreateDetectorVersion
+    Amazonka.FraudDetector.CreateModel
+    Amazonka.FraudDetector.CreateModelVersion
+    Amazonka.FraudDetector.CreateRule
+    Amazonka.FraudDetector.CreateVariable
+    Amazonka.FraudDetector.DeleteBatchImportJob
+    Amazonka.FraudDetector.DeleteBatchPredictionJob
+    Amazonka.FraudDetector.DeleteDetector
+    Amazonka.FraudDetector.DeleteDetectorVersion
+    Amazonka.FraudDetector.DeleteEntityType
+    Amazonka.FraudDetector.DeleteEvent
+    Amazonka.FraudDetector.DeleteEventsByEventType
+    Amazonka.FraudDetector.DeleteEventType
+    Amazonka.FraudDetector.DeleteExternalModel
+    Amazonka.FraudDetector.DeleteLabel
+    Amazonka.FraudDetector.DeleteModel
+    Amazonka.FraudDetector.DeleteModelVersion
+    Amazonka.FraudDetector.DeleteOutcome
+    Amazonka.FraudDetector.DeleteRule
+    Amazonka.FraudDetector.DeleteVariable
+    Amazonka.FraudDetector.DescribeDetector
+    Amazonka.FraudDetector.DescribeModelVersions
+    Amazonka.FraudDetector.GetBatchImportJobs
+    Amazonka.FraudDetector.GetBatchPredictionJobs
+    Amazonka.FraudDetector.GetDeleteEventsByEventTypeStatus
+    Amazonka.FraudDetector.GetDetectors
+    Amazonka.FraudDetector.GetDetectorVersion
+    Amazonka.FraudDetector.GetEntityTypes
+    Amazonka.FraudDetector.GetEvent
+    Amazonka.FraudDetector.GetEventPrediction
+    Amazonka.FraudDetector.GetEventPredictionMetadata
+    Amazonka.FraudDetector.GetEventTypes
+    Amazonka.FraudDetector.GetExternalModels
+    Amazonka.FraudDetector.GetKMSEncryptionKey
+    Amazonka.FraudDetector.GetLabels
+    Amazonka.FraudDetector.GetModels
+    Amazonka.FraudDetector.GetModelVersion
+    Amazonka.FraudDetector.GetOutcomes
+    Amazonka.FraudDetector.GetRules
+    Amazonka.FraudDetector.GetVariables
+    Amazonka.FraudDetector.Lens
+    Amazonka.FraudDetector.ListEventPredictions
+    Amazonka.FraudDetector.ListTagsForResource
+    Amazonka.FraudDetector.PutDetector
+    Amazonka.FraudDetector.PutEntityType
+    Amazonka.FraudDetector.PutEventType
+    Amazonka.FraudDetector.PutExternalModel
+    Amazonka.FraudDetector.PutKMSEncryptionKey
+    Amazonka.FraudDetector.PutLabel
+    Amazonka.FraudDetector.PutOutcome
+    Amazonka.FraudDetector.SendEvent
+    Amazonka.FraudDetector.TagResource
+    Amazonka.FraudDetector.Types
+    Amazonka.FraudDetector.Types.AggregatedLogOddsMetric
+    Amazonka.FraudDetector.Types.AggregatedVariablesImpactExplanation
+    Amazonka.FraudDetector.Types.AggregatedVariablesImportanceMetrics
+    Amazonka.FraudDetector.Types.AsyncJobStatus
+    Amazonka.FraudDetector.Types.ATIMetricDataPoint
+    Amazonka.FraudDetector.Types.ATIModelPerformance
+    Amazonka.FraudDetector.Types.ATITrainingMetricsValue
+    Amazonka.FraudDetector.Types.BatchCreateVariableError
+    Amazonka.FraudDetector.Types.BatchGetVariableError
+    Amazonka.FraudDetector.Types.BatchImport
+    Amazonka.FraudDetector.Types.BatchPrediction
+    Amazonka.FraudDetector.Types.DataSource
+    Amazonka.FraudDetector.Types.DataType
+    Amazonka.FraudDetector.Types.DataValidationMetrics
+    Amazonka.FraudDetector.Types.Detector
+    Amazonka.FraudDetector.Types.DetectorVersionStatus
+    Amazonka.FraudDetector.Types.DetectorVersionSummary
+    Amazonka.FraudDetector.Types.Entity
+    Amazonka.FraudDetector.Types.EntityType
+    Amazonka.FraudDetector.Types.EvaluatedExternalModel
+    Amazonka.FraudDetector.Types.EvaluatedModelVersion
+    Amazonka.FraudDetector.Types.EvaluatedRule
+    Amazonka.FraudDetector.Types.Event
+    Amazonka.FraudDetector.Types.EventIngestion
+    Amazonka.FraudDetector.Types.EventPredictionSummary
+    Amazonka.FraudDetector.Types.EventType
+    Amazonka.FraudDetector.Types.EventVariableSummary
+    Amazonka.FraudDetector.Types.ExternalEventsDetail
+    Amazonka.FraudDetector.Types.ExternalModel
+    Amazonka.FraudDetector.Types.ExternalModelOutputs
+    Amazonka.FraudDetector.Types.ExternalModelSummary
+    Amazonka.FraudDetector.Types.FieldValidationMessage
+    Amazonka.FraudDetector.Types.FileValidationMessage
+    Amazonka.FraudDetector.Types.FilterCondition
+    Amazonka.FraudDetector.Types.IngestedEventsDetail
+    Amazonka.FraudDetector.Types.IngestedEventStatistics
+    Amazonka.FraudDetector.Types.IngestedEventsTimeWindow
+    Amazonka.FraudDetector.Types.KMSKey
+    Amazonka.FraudDetector.Types.Label
+    Amazonka.FraudDetector.Types.LabelSchema
+    Amazonka.FraudDetector.Types.Language
+    Amazonka.FraudDetector.Types.LogOddsMetric
+    Amazonka.FraudDetector.Types.MetricDataPoint
+    Amazonka.FraudDetector.Types.Model
+    Amazonka.FraudDetector.Types.ModelEndpointDataBlob
+    Amazonka.FraudDetector.Types.ModelEndpointStatus
+    Amazonka.FraudDetector.Types.ModelInputConfiguration
+    Amazonka.FraudDetector.Types.ModelInputDataFormat
+    Amazonka.FraudDetector.Types.ModelOutputConfiguration
+    Amazonka.FraudDetector.Types.ModelOutputDataFormat
+    Amazonka.FraudDetector.Types.ModelScores
+    Amazonka.FraudDetector.Types.ModelSource
+    Amazonka.FraudDetector.Types.ModelTypeEnum
+    Amazonka.FraudDetector.Types.ModelVersion
+    Amazonka.FraudDetector.Types.ModelVersionDetail
+    Amazonka.FraudDetector.Types.ModelVersionEvaluation
+    Amazonka.FraudDetector.Types.ModelVersionStatus
+    Amazonka.FraudDetector.Types.OFIMetricDataPoint
+    Amazonka.FraudDetector.Types.OFIModelPerformance
+    Amazonka.FraudDetector.Types.OFITrainingMetricsValue
+    Amazonka.FraudDetector.Types.Outcome
+    Amazonka.FraudDetector.Types.PredictionExplanations
+    Amazonka.FraudDetector.Types.PredictionTimeRange
+    Amazonka.FraudDetector.Types.Rule
+    Amazonka.FraudDetector.Types.RuleDetail
+    Amazonka.FraudDetector.Types.RuleExecutionMode
+    Amazonka.FraudDetector.Types.RuleResult
+    Amazonka.FraudDetector.Types.Tag
+    Amazonka.FraudDetector.Types.TFIMetricDataPoint
+    Amazonka.FraudDetector.Types.TFIModelPerformance
+    Amazonka.FraudDetector.Types.TFITrainingMetricsValue
+    Amazonka.FraudDetector.Types.TrainingDataSchema
+    Amazonka.FraudDetector.Types.TrainingDataSourceEnum
+    Amazonka.FraudDetector.Types.TrainingMetrics
+    Amazonka.FraudDetector.Types.TrainingMetricsV2
+    Amazonka.FraudDetector.Types.TrainingResult
+    Amazonka.FraudDetector.Types.TrainingResultV2
+    Amazonka.FraudDetector.Types.UnlabeledEventsTreatment
+    Amazonka.FraudDetector.Types.Variable
+    Amazonka.FraudDetector.Types.VariableEntry
+    Amazonka.FraudDetector.Types.VariableImpactExplanation
+    Amazonka.FraudDetector.Types.VariableImportanceMetrics
+    Amazonka.FraudDetector.UntagResource
+    Amazonka.FraudDetector.UpdateDetectorVersion
+    Amazonka.FraudDetector.UpdateDetectorVersionMetadata
+    Amazonka.FraudDetector.UpdateDetectorVersionStatus
+    Amazonka.FraudDetector.UpdateEventLabel
+    Amazonka.FraudDetector.UpdateModel
+    Amazonka.FraudDetector.UpdateModelVersion
+    Amazonka.FraudDetector.UpdateModelVersionStatus
+    Amazonka.FraudDetector.UpdateRuleMetadata
+    Amazonka.FraudDetector.UpdateRuleVersion
+    Amazonka.FraudDetector.UpdateVariable
+    Amazonka.FraudDetector.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-frauddetector-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.FraudDetector
+    Test.Amazonka.FraudDetector.Internal
+    Test.Amazonka.Gen.FraudDetector
+
+  build-depends:
+    , amazonka-core           >=2.0 && <2.1
+    , amazonka-frauddetector
+    , amazonka-test           >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/BatchCreateVariable.yaml b/fixture/BatchCreateVariable.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchCreateVariable.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/BatchCreateVariableResponse.proto b/fixture/BatchCreateVariableResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchCreateVariableResponse.proto
diff --git a/fixture/BatchGetVariable.yaml b/fixture/BatchGetVariable.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchGetVariable.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/BatchGetVariableResponse.proto b/fixture/BatchGetVariableResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchGetVariableResponse.proto
diff --git a/fixture/CancelBatchImportJob.yaml b/fixture/CancelBatchImportJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CancelBatchImportJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/CancelBatchImportJobResponse.proto b/fixture/CancelBatchImportJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CancelBatchImportJobResponse.proto
diff --git a/fixture/CancelBatchPredictionJob.yaml b/fixture/CancelBatchPredictionJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CancelBatchPredictionJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/CancelBatchPredictionJobResponse.proto b/fixture/CancelBatchPredictionJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CancelBatchPredictionJobResponse.proto
diff --git a/fixture/CreateBatchImportJob.yaml b/fixture/CreateBatchImportJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateBatchImportJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/CreateBatchImportJobResponse.proto b/fixture/CreateBatchImportJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateBatchImportJobResponse.proto
diff --git a/fixture/CreateBatchPredictionJob.yaml b/fixture/CreateBatchPredictionJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateBatchPredictionJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/CreateBatchPredictionJobResponse.proto b/fixture/CreateBatchPredictionJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateBatchPredictionJobResponse.proto
diff --git a/fixture/CreateDetectorVersion.yaml b/fixture/CreateDetectorVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDetectorVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/CreateDetectorVersionResponse.proto b/fixture/CreateDetectorVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDetectorVersionResponse.proto
diff --git a/fixture/CreateModel.yaml b/fixture/CreateModel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateModel.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/CreateModelResponse.proto b/fixture/CreateModelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateModelResponse.proto
diff --git a/fixture/CreateModelVersion.yaml b/fixture/CreateModelVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateModelVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/CreateModelVersionResponse.proto b/fixture/CreateModelVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateModelVersionResponse.proto
diff --git a/fixture/CreateRule.yaml b/fixture/CreateRule.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRule.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/CreateRuleResponse.proto b/fixture/CreateRuleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRuleResponse.proto
diff --git a/fixture/CreateVariable.yaml b/fixture/CreateVariable.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVariable.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/CreateVariableResponse.proto b/fixture/CreateVariableResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVariableResponse.proto
diff --git a/fixture/DeleteBatchImportJob.yaml b/fixture/DeleteBatchImportJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBatchImportJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/DeleteBatchImportJobResponse.proto b/fixture/DeleteBatchImportJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBatchImportJobResponse.proto
diff --git a/fixture/DeleteBatchPredictionJob.yaml b/fixture/DeleteBatchPredictionJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBatchPredictionJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/DeleteBatchPredictionJobResponse.proto b/fixture/DeleteBatchPredictionJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBatchPredictionJobResponse.proto
diff --git a/fixture/DeleteDetector.yaml b/fixture/DeleteDetector.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDetector.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/DeleteDetectorResponse.proto b/fixture/DeleteDetectorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDetectorResponse.proto
diff --git a/fixture/DeleteDetectorVersion.yaml b/fixture/DeleteDetectorVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDetectorVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/DeleteDetectorVersionResponse.proto b/fixture/DeleteDetectorVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDetectorVersionResponse.proto
diff --git a/fixture/DeleteEntityType.yaml b/fixture/DeleteEntityType.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEntityType.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/DeleteEntityTypeResponse.proto b/fixture/DeleteEntityTypeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEntityTypeResponse.proto
diff --git a/fixture/DeleteEvent.yaml b/fixture/DeleteEvent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEvent.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/DeleteEventResponse.proto b/fixture/DeleteEventResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEventResponse.proto
diff --git a/fixture/DeleteEventType.yaml b/fixture/DeleteEventType.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEventType.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/DeleteEventTypeResponse.proto b/fixture/DeleteEventTypeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEventTypeResponse.proto
diff --git a/fixture/DeleteEventsByEventType.yaml b/fixture/DeleteEventsByEventType.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEventsByEventType.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/DeleteEventsByEventTypeResponse.proto b/fixture/DeleteEventsByEventTypeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEventsByEventTypeResponse.proto
diff --git a/fixture/DeleteExternalModel.yaml b/fixture/DeleteExternalModel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteExternalModel.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/DeleteExternalModelResponse.proto b/fixture/DeleteExternalModelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteExternalModelResponse.proto
diff --git a/fixture/DeleteLabel.yaml b/fixture/DeleteLabel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteLabel.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/DeleteLabelResponse.proto b/fixture/DeleteLabelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteLabelResponse.proto
diff --git a/fixture/DeleteModel.yaml b/fixture/DeleteModel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteModel.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/DeleteModelResponse.proto b/fixture/DeleteModelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteModelResponse.proto
diff --git a/fixture/DeleteModelVersion.yaml b/fixture/DeleteModelVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteModelVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/DeleteModelVersionResponse.proto b/fixture/DeleteModelVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteModelVersionResponse.proto
diff --git a/fixture/DeleteOutcome.yaml b/fixture/DeleteOutcome.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteOutcome.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/DeleteOutcomeResponse.proto b/fixture/DeleteOutcomeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteOutcomeResponse.proto
diff --git a/fixture/DeleteRule.yaml b/fixture/DeleteRule.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRule.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/DeleteRuleResponse.proto b/fixture/DeleteRuleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRuleResponse.proto
diff --git a/fixture/DeleteVariable.yaml b/fixture/DeleteVariable.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVariable.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/DeleteVariableResponse.proto b/fixture/DeleteVariableResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVariableResponse.proto
diff --git a/fixture/DescribeDetector.yaml b/fixture/DescribeDetector.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeDetector.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/DescribeDetectorResponse.proto b/fixture/DescribeDetectorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeDetectorResponse.proto
diff --git a/fixture/DescribeModelVersions.yaml b/fixture/DescribeModelVersions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeModelVersions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/DescribeModelVersionsResponse.proto b/fixture/DescribeModelVersionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeModelVersionsResponse.proto
diff --git a/fixture/GetBatchImportJobs.yaml b/fixture/GetBatchImportJobs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBatchImportJobs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/GetBatchImportJobsResponse.proto b/fixture/GetBatchImportJobsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBatchImportJobsResponse.proto
diff --git a/fixture/GetBatchPredictionJobs.yaml b/fixture/GetBatchPredictionJobs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBatchPredictionJobs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/GetBatchPredictionJobsResponse.proto b/fixture/GetBatchPredictionJobsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBatchPredictionJobsResponse.proto
diff --git a/fixture/GetDeleteEventsByEventTypeStatus.yaml b/fixture/GetDeleteEventsByEventTypeStatus.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDeleteEventsByEventTypeStatus.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/GetDeleteEventsByEventTypeStatusResponse.proto b/fixture/GetDeleteEventsByEventTypeStatusResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDeleteEventsByEventTypeStatusResponse.proto
diff --git a/fixture/GetDetectorVersion.yaml b/fixture/GetDetectorVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDetectorVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/GetDetectorVersionResponse.proto b/fixture/GetDetectorVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDetectorVersionResponse.proto
diff --git a/fixture/GetDetectors.yaml b/fixture/GetDetectors.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDetectors.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/GetDetectorsResponse.proto b/fixture/GetDetectorsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDetectorsResponse.proto
diff --git a/fixture/GetEntityTypes.yaml b/fixture/GetEntityTypes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetEntityTypes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/GetEntityTypesResponse.proto b/fixture/GetEntityTypesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetEntityTypesResponse.proto
diff --git a/fixture/GetEvent.yaml b/fixture/GetEvent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetEvent.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/GetEventPrediction.yaml b/fixture/GetEventPrediction.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetEventPrediction.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/GetEventPredictionMetadata.yaml b/fixture/GetEventPredictionMetadata.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetEventPredictionMetadata.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/GetEventPredictionMetadataResponse.proto b/fixture/GetEventPredictionMetadataResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetEventPredictionMetadataResponse.proto
diff --git a/fixture/GetEventPredictionResponse.proto b/fixture/GetEventPredictionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetEventPredictionResponse.proto
diff --git a/fixture/GetEventResponse.proto b/fixture/GetEventResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetEventResponse.proto
diff --git a/fixture/GetEventTypes.yaml b/fixture/GetEventTypes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetEventTypes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/GetEventTypesResponse.proto b/fixture/GetEventTypesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetEventTypesResponse.proto
diff --git a/fixture/GetExternalModels.yaml b/fixture/GetExternalModels.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetExternalModels.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/GetExternalModelsResponse.proto b/fixture/GetExternalModelsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetExternalModelsResponse.proto
diff --git a/fixture/GetKMSEncryptionKey.yaml b/fixture/GetKMSEncryptionKey.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetKMSEncryptionKey.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/GetKMSEncryptionKeyResponse.proto b/fixture/GetKMSEncryptionKeyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetKMSEncryptionKeyResponse.proto
diff --git a/fixture/GetLabels.yaml b/fixture/GetLabels.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetLabels.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/GetLabelsResponse.proto b/fixture/GetLabelsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetLabelsResponse.proto
diff --git a/fixture/GetModelVersion.yaml b/fixture/GetModelVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetModelVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/GetModelVersionResponse.proto b/fixture/GetModelVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetModelVersionResponse.proto
diff --git a/fixture/GetModels.yaml b/fixture/GetModels.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetModels.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/GetModelsResponse.proto b/fixture/GetModelsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetModelsResponse.proto
diff --git a/fixture/GetOutcomes.yaml b/fixture/GetOutcomes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetOutcomes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/GetOutcomesResponse.proto b/fixture/GetOutcomesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetOutcomesResponse.proto
diff --git a/fixture/GetRules.yaml b/fixture/GetRules.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetRules.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/GetRulesResponse.proto b/fixture/GetRulesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetRulesResponse.proto
diff --git a/fixture/GetVariables.yaml b/fixture/GetVariables.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetVariables.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/GetVariablesResponse.proto b/fixture/GetVariablesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetVariablesResponse.proto
diff --git a/fixture/ListEventPredictions.yaml b/fixture/ListEventPredictions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListEventPredictions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/ListEventPredictionsResponse.proto b/fixture/ListEventPredictionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListEventPredictionsResponse.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: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/PutDetector.yaml b/fixture/PutDetector.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutDetector.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/PutDetectorResponse.proto b/fixture/PutDetectorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutDetectorResponse.proto
diff --git a/fixture/PutEntityType.yaml b/fixture/PutEntityType.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutEntityType.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/PutEntityTypeResponse.proto b/fixture/PutEntityTypeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutEntityTypeResponse.proto
diff --git a/fixture/PutEventType.yaml b/fixture/PutEventType.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutEventType.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/PutEventTypeResponse.proto b/fixture/PutEventTypeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutEventTypeResponse.proto
diff --git a/fixture/PutExternalModel.yaml b/fixture/PutExternalModel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutExternalModel.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/PutExternalModelResponse.proto b/fixture/PutExternalModelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutExternalModelResponse.proto
diff --git a/fixture/PutKMSEncryptionKey.yaml b/fixture/PutKMSEncryptionKey.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutKMSEncryptionKey.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/PutKMSEncryptionKeyResponse.proto b/fixture/PutKMSEncryptionKeyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutKMSEncryptionKeyResponse.proto
diff --git a/fixture/PutLabel.yaml b/fixture/PutLabel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutLabel.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/PutLabelResponse.proto b/fixture/PutLabelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutLabelResponse.proto
diff --git a/fixture/PutOutcome.yaml b/fixture/PutOutcome.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutOutcome.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/PutOutcomeResponse.proto b/fixture/PutOutcomeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutOutcomeResponse.proto
diff --git a/fixture/SendEvent.yaml b/fixture/SendEvent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SendEvent.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/SendEventResponse.proto b/fixture/SendEventResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SendEventResponse.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/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/UpdateDetectorVersion.yaml b/fixture/UpdateDetectorVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDetectorVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/UpdateDetectorVersionMetadata.yaml b/fixture/UpdateDetectorVersionMetadata.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDetectorVersionMetadata.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/UpdateDetectorVersionMetadataResponse.proto b/fixture/UpdateDetectorVersionMetadataResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDetectorVersionMetadataResponse.proto
diff --git a/fixture/UpdateDetectorVersionResponse.proto b/fixture/UpdateDetectorVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDetectorVersionResponse.proto
diff --git a/fixture/UpdateDetectorVersionStatus.yaml b/fixture/UpdateDetectorVersionStatus.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDetectorVersionStatus.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/UpdateDetectorVersionStatusResponse.proto b/fixture/UpdateDetectorVersionStatusResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDetectorVersionStatusResponse.proto
diff --git a/fixture/UpdateEventLabel.yaml b/fixture/UpdateEventLabel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateEventLabel.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/UpdateEventLabelResponse.proto b/fixture/UpdateEventLabelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateEventLabelResponse.proto
diff --git a/fixture/UpdateModel.yaml b/fixture/UpdateModel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateModel.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/UpdateModelResponse.proto b/fixture/UpdateModelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateModelResponse.proto
diff --git a/fixture/UpdateModelVersion.yaml b/fixture/UpdateModelVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateModelVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/UpdateModelVersionResponse.proto b/fixture/UpdateModelVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateModelVersionResponse.proto
diff --git a/fixture/UpdateModelVersionStatus.yaml b/fixture/UpdateModelVersionStatus.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateModelVersionStatus.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/UpdateModelVersionStatusResponse.proto b/fixture/UpdateModelVersionStatusResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateModelVersionStatusResponse.proto
diff --git a/fixture/UpdateRuleMetadata.yaml b/fixture/UpdateRuleMetadata.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRuleMetadata.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/UpdateRuleMetadataResponse.proto b/fixture/UpdateRuleMetadataResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRuleMetadataResponse.proto
diff --git a/fixture/UpdateRuleVersion.yaml b/fixture/UpdateRuleVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRuleVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/UpdateRuleVersionResponse.proto b/fixture/UpdateRuleVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRuleVersionResponse.proto
diff --git a/fixture/UpdateVariable.yaml b/fixture/UpdateVariable.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateVariable.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/frauddetector/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  frauddetector.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/UpdateVariableResponse.proto b/fixture/UpdateVariableResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateVariableResponse.proto
diff --git a/gen/Amazonka/FraudDetector.hs b/gen/Amazonka/FraudDetector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector.hs
@@ -0,0 +1,889 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.FraudDetector
+-- 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 @2019-11-15@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- This is the Amazon Fraud Detector API Reference. This guide is for
+-- developers who need detailed information about Amazon Fraud Detector API
+-- actions, data types, and errors. For more information about Amazon Fraud
+-- Detector features, see the
+-- <https://docs.aws.amazon.com/frauddetector/latest/ug/ Amazon Fraud Detector User Guide>.
+--
+-- We provide the Query API as well as AWS software development kits (SDK)
+-- for Amazon Fraud Detector in Java and Python programming languages.
+--
+-- The Amazon Fraud Detector Query API provides HTTPS requests that use the
+-- HTTP verb GET or POST and a Query parameter @Action@. AWS SDK provides
+-- libraries, sample code, tutorials, and other resources for software
+-- developers who prefer to build applications using language-specific APIs
+-- instead of submitting a request over HTTP or HTTPS. These libraries
+-- provide basic functions that automatically take care of tasks such as
+-- cryptographically signing your requests, retrying requests, and handling
+-- error responses, so that it is easier for you to get started. For more
+-- information about the AWS SDKs, see
+-- <https://docs.aws.amazon.com/https:/aws.amazon.com/tools/ Tools to build on AWS>.
+module Amazonka.FraudDetector
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ResourceUnavailableException
+    _ResourceUnavailableException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** BatchCreateVariable
+    BatchCreateVariable (BatchCreateVariable'),
+    newBatchCreateVariable,
+    BatchCreateVariableResponse (BatchCreateVariableResponse'),
+    newBatchCreateVariableResponse,
+
+    -- ** BatchGetVariable
+    BatchGetVariable (BatchGetVariable'),
+    newBatchGetVariable,
+    BatchGetVariableResponse (BatchGetVariableResponse'),
+    newBatchGetVariableResponse,
+
+    -- ** CancelBatchImportJob
+    CancelBatchImportJob (CancelBatchImportJob'),
+    newCancelBatchImportJob,
+    CancelBatchImportJobResponse (CancelBatchImportJobResponse'),
+    newCancelBatchImportJobResponse,
+
+    -- ** CancelBatchPredictionJob
+    CancelBatchPredictionJob (CancelBatchPredictionJob'),
+    newCancelBatchPredictionJob,
+    CancelBatchPredictionJobResponse (CancelBatchPredictionJobResponse'),
+    newCancelBatchPredictionJobResponse,
+
+    -- ** CreateBatchImportJob
+    CreateBatchImportJob (CreateBatchImportJob'),
+    newCreateBatchImportJob,
+    CreateBatchImportJobResponse (CreateBatchImportJobResponse'),
+    newCreateBatchImportJobResponse,
+
+    -- ** CreateBatchPredictionJob
+    CreateBatchPredictionJob (CreateBatchPredictionJob'),
+    newCreateBatchPredictionJob,
+    CreateBatchPredictionJobResponse (CreateBatchPredictionJobResponse'),
+    newCreateBatchPredictionJobResponse,
+
+    -- ** CreateDetectorVersion
+    CreateDetectorVersion (CreateDetectorVersion'),
+    newCreateDetectorVersion,
+    CreateDetectorVersionResponse (CreateDetectorVersionResponse'),
+    newCreateDetectorVersionResponse,
+
+    -- ** CreateModel
+    CreateModel (CreateModel'),
+    newCreateModel,
+    CreateModelResponse (CreateModelResponse'),
+    newCreateModelResponse,
+
+    -- ** CreateModelVersion
+    CreateModelVersion (CreateModelVersion'),
+    newCreateModelVersion,
+    CreateModelVersionResponse (CreateModelVersionResponse'),
+    newCreateModelVersionResponse,
+
+    -- ** CreateRule
+    CreateRule (CreateRule'),
+    newCreateRule,
+    CreateRuleResponse (CreateRuleResponse'),
+    newCreateRuleResponse,
+
+    -- ** CreateVariable
+    CreateVariable (CreateVariable'),
+    newCreateVariable,
+    CreateVariableResponse (CreateVariableResponse'),
+    newCreateVariableResponse,
+
+    -- ** DeleteBatchImportJob
+    DeleteBatchImportJob (DeleteBatchImportJob'),
+    newDeleteBatchImportJob,
+    DeleteBatchImportJobResponse (DeleteBatchImportJobResponse'),
+    newDeleteBatchImportJobResponse,
+
+    -- ** DeleteBatchPredictionJob
+    DeleteBatchPredictionJob (DeleteBatchPredictionJob'),
+    newDeleteBatchPredictionJob,
+    DeleteBatchPredictionJobResponse (DeleteBatchPredictionJobResponse'),
+    newDeleteBatchPredictionJobResponse,
+
+    -- ** DeleteDetector
+    DeleteDetector (DeleteDetector'),
+    newDeleteDetector,
+    DeleteDetectorResponse (DeleteDetectorResponse'),
+    newDeleteDetectorResponse,
+
+    -- ** DeleteDetectorVersion
+    DeleteDetectorVersion (DeleteDetectorVersion'),
+    newDeleteDetectorVersion,
+    DeleteDetectorVersionResponse (DeleteDetectorVersionResponse'),
+    newDeleteDetectorVersionResponse,
+
+    -- ** DeleteEntityType
+    DeleteEntityType (DeleteEntityType'),
+    newDeleteEntityType,
+    DeleteEntityTypeResponse (DeleteEntityTypeResponse'),
+    newDeleteEntityTypeResponse,
+
+    -- ** DeleteEvent
+    DeleteEvent (DeleteEvent'),
+    newDeleteEvent,
+    DeleteEventResponse (DeleteEventResponse'),
+    newDeleteEventResponse,
+
+    -- ** DeleteEventType
+    DeleteEventType (DeleteEventType'),
+    newDeleteEventType,
+    DeleteEventTypeResponse (DeleteEventTypeResponse'),
+    newDeleteEventTypeResponse,
+
+    -- ** DeleteEventsByEventType
+    DeleteEventsByEventType (DeleteEventsByEventType'),
+    newDeleteEventsByEventType,
+    DeleteEventsByEventTypeResponse (DeleteEventsByEventTypeResponse'),
+    newDeleteEventsByEventTypeResponse,
+
+    -- ** DeleteExternalModel
+    DeleteExternalModel (DeleteExternalModel'),
+    newDeleteExternalModel,
+    DeleteExternalModelResponse (DeleteExternalModelResponse'),
+    newDeleteExternalModelResponse,
+
+    -- ** DeleteLabel
+    DeleteLabel (DeleteLabel'),
+    newDeleteLabel,
+    DeleteLabelResponse (DeleteLabelResponse'),
+    newDeleteLabelResponse,
+
+    -- ** DeleteModel
+    DeleteModel (DeleteModel'),
+    newDeleteModel,
+    DeleteModelResponse (DeleteModelResponse'),
+    newDeleteModelResponse,
+
+    -- ** DeleteModelVersion
+    DeleteModelVersion (DeleteModelVersion'),
+    newDeleteModelVersion,
+    DeleteModelVersionResponse (DeleteModelVersionResponse'),
+    newDeleteModelVersionResponse,
+
+    -- ** DeleteOutcome
+    DeleteOutcome (DeleteOutcome'),
+    newDeleteOutcome,
+    DeleteOutcomeResponse (DeleteOutcomeResponse'),
+    newDeleteOutcomeResponse,
+
+    -- ** DeleteRule
+    DeleteRule (DeleteRule'),
+    newDeleteRule,
+    DeleteRuleResponse (DeleteRuleResponse'),
+    newDeleteRuleResponse,
+
+    -- ** DeleteVariable
+    DeleteVariable (DeleteVariable'),
+    newDeleteVariable,
+    DeleteVariableResponse (DeleteVariableResponse'),
+    newDeleteVariableResponse,
+
+    -- ** DescribeDetector
+    DescribeDetector (DescribeDetector'),
+    newDescribeDetector,
+    DescribeDetectorResponse (DescribeDetectorResponse'),
+    newDescribeDetectorResponse,
+
+    -- ** DescribeModelVersions
+    DescribeModelVersions (DescribeModelVersions'),
+    newDescribeModelVersions,
+    DescribeModelVersionsResponse (DescribeModelVersionsResponse'),
+    newDescribeModelVersionsResponse,
+
+    -- ** GetBatchImportJobs
+    GetBatchImportJobs (GetBatchImportJobs'),
+    newGetBatchImportJobs,
+    GetBatchImportJobsResponse (GetBatchImportJobsResponse'),
+    newGetBatchImportJobsResponse,
+
+    -- ** GetBatchPredictionJobs
+    GetBatchPredictionJobs (GetBatchPredictionJobs'),
+    newGetBatchPredictionJobs,
+    GetBatchPredictionJobsResponse (GetBatchPredictionJobsResponse'),
+    newGetBatchPredictionJobsResponse,
+
+    -- ** GetDeleteEventsByEventTypeStatus
+    GetDeleteEventsByEventTypeStatus (GetDeleteEventsByEventTypeStatus'),
+    newGetDeleteEventsByEventTypeStatus,
+    GetDeleteEventsByEventTypeStatusResponse (GetDeleteEventsByEventTypeStatusResponse'),
+    newGetDeleteEventsByEventTypeStatusResponse,
+
+    -- ** GetDetectorVersion
+    GetDetectorVersion (GetDetectorVersion'),
+    newGetDetectorVersion,
+    GetDetectorVersionResponse (GetDetectorVersionResponse'),
+    newGetDetectorVersionResponse,
+
+    -- ** GetDetectors
+    GetDetectors (GetDetectors'),
+    newGetDetectors,
+    GetDetectorsResponse (GetDetectorsResponse'),
+    newGetDetectorsResponse,
+
+    -- ** GetEntityTypes
+    GetEntityTypes (GetEntityTypes'),
+    newGetEntityTypes,
+    GetEntityTypesResponse (GetEntityTypesResponse'),
+    newGetEntityTypesResponse,
+
+    -- ** GetEvent
+    GetEvent (GetEvent'),
+    newGetEvent,
+    GetEventResponse (GetEventResponse'),
+    newGetEventResponse,
+
+    -- ** GetEventPrediction
+    GetEventPrediction (GetEventPrediction'),
+    newGetEventPrediction,
+    GetEventPredictionResponse (GetEventPredictionResponse'),
+    newGetEventPredictionResponse,
+
+    -- ** GetEventPredictionMetadata
+    GetEventPredictionMetadata (GetEventPredictionMetadata'),
+    newGetEventPredictionMetadata,
+    GetEventPredictionMetadataResponse (GetEventPredictionMetadataResponse'),
+    newGetEventPredictionMetadataResponse,
+
+    -- ** GetEventTypes
+    GetEventTypes (GetEventTypes'),
+    newGetEventTypes,
+    GetEventTypesResponse (GetEventTypesResponse'),
+    newGetEventTypesResponse,
+
+    -- ** GetExternalModels
+    GetExternalModels (GetExternalModels'),
+    newGetExternalModels,
+    GetExternalModelsResponse (GetExternalModelsResponse'),
+    newGetExternalModelsResponse,
+
+    -- ** GetKMSEncryptionKey
+    GetKMSEncryptionKey (GetKMSEncryptionKey'),
+    newGetKMSEncryptionKey,
+    GetKMSEncryptionKeyResponse (GetKMSEncryptionKeyResponse'),
+    newGetKMSEncryptionKeyResponse,
+
+    -- ** GetLabels
+    GetLabels (GetLabels'),
+    newGetLabels,
+    GetLabelsResponse (GetLabelsResponse'),
+    newGetLabelsResponse,
+
+    -- ** GetModelVersion
+    GetModelVersion (GetModelVersion'),
+    newGetModelVersion,
+    GetModelVersionResponse (GetModelVersionResponse'),
+    newGetModelVersionResponse,
+
+    -- ** GetModels
+    GetModels (GetModels'),
+    newGetModels,
+    GetModelsResponse (GetModelsResponse'),
+    newGetModelsResponse,
+
+    -- ** GetOutcomes
+    GetOutcomes (GetOutcomes'),
+    newGetOutcomes,
+    GetOutcomesResponse (GetOutcomesResponse'),
+    newGetOutcomesResponse,
+
+    -- ** GetRules
+    GetRules (GetRules'),
+    newGetRules,
+    GetRulesResponse (GetRulesResponse'),
+    newGetRulesResponse,
+
+    -- ** GetVariables
+    GetVariables (GetVariables'),
+    newGetVariables,
+    GetVariablesResponse (GetVariablesResponse'),
+    newGetVariablesResponse,
+
+    -- ** ListEventPredictions
+    ListEventPredictions (ListEventPredictions'),
+    newListEventPredictions,
+    ListEventPredictionsResponse (ListEventPredictionsResponse'),
+    newListEventPredictionsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** PutDetector
+    PutDetector (PutDetector'),
+    newPutDetector,
+    PutDetectorResponse (PutDetectorResponse'),
+    newPutDetectorResponse,
+
+    -- ** PutEntityType
+    PutEntityType (PutEntityType'),
+    newPutEntityType,
+    PutEntityTypeResponse (PutEntityTypeResponse'),
+    newPutEntityTypeResponse,
+
+    -- ** PutEventType
+    PutEventType (PutEventType'),
+    newPutEventType,
+    PutEventTypeResponse (PutEventTypeResponse'),
+    newPutEventTypeResponse,
+
+    -- ** PutExternalModel
+    PutExternalModel (PutExternalModel'),
+    newPutExternalModel,
+    PutExternalModelResponse (PutExternalModelResponse'),
+    newPutExternalModelResponse,
+
+    -- ** PutKMSEncryptionKey
+    PutKMSEncryptionKey (PutKMSEncryptionKey'),
+    newPutKMSEncryptionKey,
+    PutKMSEncryptionKeyResponse (PutKMSEncryptionKeyResponse'),
+    newPutKMSEncryptionKeyResponse,
+
+    -- ** PutLabel
+    PutLabel (PutLabel'),
+    newPutLabel,
+    PutLabelResponse (PutLabelResponse'),
+    newPutLabelResponse,
+
+    -- ** PutOutcome
+    PutOutcome (PutOutcome'),
+    newPutOutcome,
+    PutOutcomeResponse (PutOutcomeResponse'),
+    newPutOutcomeResponse,
+
+    -- ** SendEvent
+    SendEvent (SendEvent'),
+    newSendEvent,
+    SendEventResponse (SendEventResponse'),
+    newSendEventResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateDetectorVersion
+    UpdateDetectorVersion (UpdateDetectorVersion'),
+    newUpdateDetectorVersion,
+    UpdateDetectorVersionResponse (UpdateDetectorVersionResponse'),
+    newUpdateDetectorVersionResponse,
+
+    -- ** UpdateDetectorVersionMetadata
+    UpdateDetectorVersionMetadata (UpdateDetectorVersionMetadata'),
+    newUpdateDetectorVersionMetadata,
+    UpdateDetectorVersionMetadataResponse (UpdateDetectorVersionMetadataResponse'),
+    newUpdateDetectorVersionMetadataResponse,
+
+    -- ** UpdateDetectorVersionStatus
+    UpdateDetectorVersionStatus (UpdateDetectorVersionStatus'),
+    newUpdateDetectorVersionStatus,
+    UpdateDetectorVersionStatusResponse (UpdateDetectorVersionStatusResponse'),
+    newUpdateDetectorVersionStatusResponse,
+
+    -- ** UpdateEventLabel
+    UpdateEventLabel (UpdateEventLabel'),
+    newUpdateEventLabel,
+    UpdateEventLabelResponse (UpdateEventLabelResponse'),
+    newUpdateEventLabelResponse,
+
+    -- ** UpdateModel
+    UpdateModel (UpdateModel'),
+    newUpdateModel,
+    UpdateModelResponse (UpdateModelResponse'),
+    newUpdateModelResponse,
+
+    -- ** UpdateModelVersion
+    UpdateModelVersion (UpdateModelVersion'),
+    newUpdateModelVersion,
+    UpdateModelVersionResponse (UpdateModelVersionResponse'),
+    newUpdateModelVersionResponse,
+
+    -- ** UpdateModelVersionStatus
+    UpdateModelVersionStatus (UpdateModelVersionStatus'),
+    newUpdateModelVersionStatus,
+    UpdateModelVersionStatusResponse (UpdateModelVersionStatusResponse'),
+    newUpdateModelVersionStatusResponse,
+
+    -- ** UpdateRuleMetadata
+    UpdateRuleMetadata (UpdateRuleMetadata'),
+    newUpdateRuleMetadata,
+    UpdateRuleMetadataResponse (UpdateRuleMetadataResponse'),
+    newUpdateRuleMetadataResponse,
+
+    -- ** UpdateRuleVersion
+    UpdateRuleVersion (UpdateRuleVersion'),
+    newUpdateRuleVersion,
+    UpdateRuleVersionResponse (UpdateRuleVersionResponse'),
+    newUpdateRuleVersionResponse,
+
+    -- ** UpdateVariable
+    UpdateVariable (UpdateVariable'),
+    newUpdateVariable,
+    UpdateVariableResponse (UpdateVariableResponse'),
+    newUpdateVariableResponse,
+
+    -- * Types
+
+    -- ** AsyncJobStatus
+    AsyncJobStatus (..),
+
+    -- ** DataSource
+    DataSource (..),
+
+    -- ** DataType
+    DataType (..),
+
+    -- ** DetectorVersionStatus
+    DetectorVersionStatus (..),
+
+    -- ** EventIngestion
+    EventIngestion (..),
+
+    -- ** Language
+    Language (..),
+
+    -- ** ModelEndpointStatus
+    ModelEndpointStatus (..),
+
+    -- ** ModelInputDataFormat
+    ModelInputDataFormat (..),
+
+    -- ** ModelOutputDataFormat
+    ModelOutputDataFormat (..),
+
+    -- ** ModelSource
+    ModelSource (..),
+
+    -- ** ModelTypeEnum
+    ModelTypeEnum (..),
+
+    -- ** ModelVersionStatus
+    ModelVersionStatus (..),
+
+    -- ** RuleExecutionMode
+    RuleExecutionMode (..),
+
+    -- ** TrainingDataSourceEnum
+    TrainingDataSourceEnum (..),
+
+    -- ** UnlabeledEventsTreatment
+    UnlabeledEventsTreatment (..),
+
+    -- ** ATIMetricDataPoint
+    ATIMetricDataPoint (ATIMetricDataPoint'),
+    newATIMetricDataPoint,
+
+    -- ** ATIModelPerformance
+    ATIModelPerformance (ATIModelPerformance'),
+    newATIModelPerformance,
+
+    -- ** ATITrainingMetricsValue
+    ATITrainingMetricsValue (ATITrainingMetricsValue'),
+    newATITrainingMetricsValue,
+
+    -- ** AggregatedLogOddsMetric
+    AggregatedLogOddsMetric (AggregatedLogOddsMetric'),
+    newAggregatedLogOddsMetric,
+
+    -- ** AggregatedVariablesImpactExplanation
+    AggregatedVariablesImpactExplanation (AggregatedVariablesImpactExplanation'),
+    newAggregatedVariablesImpactExplanation,
+
+    -- ** AggregatedVariablesImportanceMetrics
+    AggregatedVariablesImportanceMetrics (AggregatedVariablesImportanceMetrics'),
+    newAggregatedVariablesImportanceMetrics,
+
+    -- ** BatchCreateVariableError
+    BatchCreateVariableError (BatchCreateVariableError'),
+    newBatchCreateVariableError,
+
+    -- ** BatchGetVariableError
+    BatchGetVariableError (BatchGetVariableError'),
+    newBatchGetVariableError,
+
+    -- ** BatchImport
+    BatchImport (BatchImport'),
+    newBatchImport,
+
+    -- ** BatchPrediction
+    BatchPrediction (BatchPrediction'),
+    newBatchPrediction,
+
+    -- ** DataValidationMetrics
+    DataValidationMetrics (DataValidationMetrics'),
+    newDataValidationMetrics,
+
+    -- ** Detector
+    Detector (Detector'),
+    newDetector,
+
+    -- ** DetectorVersionSummary
+    DetectorVersionSummary (DetectorVersionSummary'),
+    newDetectorVersionSummary,
+
+    -- ** Entity
+    Entity (Entity'),
+    newEntity,
+
+    -- ** EntityType
+    EntityType (EntityType'),
+    newEntityType,
+
+    -- ** EvaluatedExternalModel
+    EvaluatedExternalModel (EvaluatedExternalModel'),
+    newEvaluatedExternalModel,
+
+    -- ** EvaluatedModelVersion
+    EvaluatedModelVersion (EvaluatedModelVersion'),
+    newEvaluatedModelVersion,
+
+    -- ** EvaluatedRule
+    EvaluatedRule (EvaluatedRule'),
+    newEvaluatedRule,
+
+    -- ** Event
+    Event (Event'),
+    newEvent,
+
+    -- ** EventPredictionSummary
+    EventPredictionSummary (EventPredictionSummary'),
+    newEventPredictionSummary,
+
+    -- ** EventType
+    EventType (EventType'),
+    newEventType,
+
+    -- ** EventVariableSummary
+    EventVariableSummary (EventVariableSummary'),
+    newEventVariableSummary,
+
+    -- ** ExternalEventsDetail
+    ExternalEventsDetail (ExternalEventsDetail'),
+    newExternalEventsDetail,
+
+    -- ** ExternalModel
+    ExternalModel (ExternalModel'),
+    newExternalModel,
+
+    -- ** ExternalModelOutputs
+    ExternalModelOutputs (ExternalModelOutputs'),
+    newExternalModelOutputs,
+
+    -- ** ExternalModelSummary
+    ExternalModelSummary (ExternalModelSummary'),
+    newExternalModelSummary,
+
+    -- ** FieldValidationMessage
+    FieldValidationMessage (FieldValidationMessage'),
+    newFieldValidationMessage,
+
+    -- ** FileValidationMessage
+    FileValidationMessage (FileValidationMessage'),
+    newFileValidationMessage,
+
+    -- ** FilterCondition
+    FilterCondition (FilterCondition'),
+    newFilterCondition,
+
+    -- ** IngestedEventStatistics
+    IngestedEventStatistics (IngestedEventStatistics'),
+    newIngestedEventStatistics,
+
+    -- ** IngestedEventsDetail
+    IngestedEventsDetail (IngestedEventsDetail'),
+    newIngestedEventsDetail,
+
+    -- ** IngestedEventsTimeWindow
+    IngestedEventsTimeWindow (IngestedEventsTimeWindow'),
+    newIngestedEventsTimeWindow,
+
+    -- ** KMSKey
+    KMSKey (KMSKey'),
+    newKMSKey,
+
+    -- ** Label
+    Label (Label'),
+    newLabel,
+
+    -- ** LabelSchema
+    LabelSchema (LabelSchema'),
+    newLabelSchema,
+
+    -- ** LogOddsMetric
+    LogOddsMetric (LogOddsMetric'),
+    newLogOddsMetric,
+
+    -- ** MetricDataPoint
+    MetricDataPoint (MetricDataPoint'),
+    newMetricDataPoint,
+
+    -- ** Model
+    Model (Model'),
+    newModel,
+
+    -- ** ModelEndpointDataBlob
+    ModelEndpointDataBlob (ModelEndpointDataBlob'),
+    newModelEndpointDataBlob,
+
+    -- ** ModelInputConfiguration
+    ModelInputConfiguration (ModelInputConfiguration'),
+    newModelInputConfiguration,
+
+    -- ** ModelOutputConfiguration
+    ModelOutputConfiguration (ModelOutputConfiguration'),
+    newModelOutputConfiguration,
+
+    -- ** ModelScores
+    ModelScores (ModelScores'),
+    newModelScores,
+
+    -- ** ModelVersion
+    ModelVersion (ModelVersion'),
+    newModelVersion,
+
+    -- ** ModelVersionDetail
+    ModelVersionDetail (ModelVersionDetail'),
+    newModelVersionDetail,
+
+    -- ** ModelVersionEvaluation
+    ModelVersionEvaluation (ModelVersionEvaluation'),
+    newModelVersionEvaluation,
+
+    -- ** OFIMetricDataPoint
+    OFIMetricDataPoint (OFIMetricDataPoint'),
+    newOFIMetricDataPoint,
+
+    -- ** OFIModelPerformance
+    OFIModelPerformance (OFIModelPerformance'),
+    newOFIModelPerformance,
+
+    -- ** OFITrainingMetricsValue
+    OFITrainingMetricsValue (OFITrainingMetricsValue'),
+    newOFITrainingMetricsValue,
+
+    -- ** Outcome
+    Outcome (Outcome'),
+    newOutcome,
+
+    -- ** PredictionExplanations
+    PredictionExplanations (PredictionExplanations'),
+    newPredictionExplanations,
+
+    -- ** PredictionTimeRange
+    PredictionTimeRange (PredictionTimeRange'),
+    newPredictionTimeRange,
+
+    -- ** Rule
+    Rule (Rule'),
+    newRule,
+
+    -- ** RuleDetail
+    RuleDetail (RuleDetail'),
+    newRuleDetail,
+
+    -- ** RuleResult
+    RuleResult (RuleResult'),
+    newRuleResult,
+
+    -- ** TFIMetricDataPoint
+    TFIMetricDataPoint (TFIMetricDataPoint'),
+    newTFIMetricDataPoint,
+
+    -- ** TFIModelPerformance
+    TFIModelPerformance (TFIModelPerformance'),
+    newTFIModelPerformance,
+
+    -- ** TFITrainingMetricsValue
+    TFITrainingMetricsValue (TFITrainingMetricsValue'),
+    newTFITrainingMetricsValue,
+
+    -- ** Tag
+    Tag (Tag'),
+    newTag,
+
+    -- ** TrainingDataSchema
+    TrainingDataSchema (TrainingDataSchema'),
+    newTrainingDataSchema,
+
+    -- ** TrainingMetrics
+    TrainingMetrics (TrainingMetrics'),
+    newTrainingMetrics,
+
+    -- ** TrainingMetricsV2
+    TrainingMetricsV2 (TrainingMetricsV2'),
+    newTrainingMetricsV2,
+
+    -- ** TrainingResult
+    TrainingResult (TrainingResult'),
+    newTrainingResult,
+
+    -- ** TrainingResultV2
+    TrainingResultV2 (TrainingResultV2'),
+    newTrainingResultV2,
+
+    -- ** Variable
+    Variable (Variable'),
+    newVariable,
+
+    -- ** VariableEntry
+    VariableEntry (VariableEntry'),
+    newVariableEntry,
+
+    -- ** VariableImpactExplanation
+    VariableImpactExplanation (VariableImpactExplanation'),
+    newVariableImpactExplanation,
+
+    -- ** VariableImportanceMetrics
+    VariableImportanceMetrics (VariableImportanceMetrics'),
+    newVariableImportanceMetrics,
+  )
+where
+
+import Amazonka.FraudDetector.BatchCreateVariable
+import Amazonka.FraudDetector.BatchGetVariable
+import Amazonka.FraudDetector.CancelBatchImportJob
+import Amazonka.FraudDetector.CancelBatchPredictionJob
+import Amazonka.FraudDetector.CreateBatchImportJob
+import Amazonka.FraudDetector.CreateBatchPredictionJob
+import Amazonka.FraudDetector.CreateDetectorVersion
+import Amazonka.FraudDetector.CreateModel
+import Amazonka.FraudDetector.CreateModelVersion
+import Amazonka.FraudDetector.CreateRule
+import Amazonka.FraudDetector.CreateVariable
+import Amazonka.FraudDetector.DeleteBatchImportJob
+import Amazonka.FraudDetector.DeleteBatchPredictionJob
+import Amazonka.FraudDetector.DeleteDetector
+import Amazonka.FraudDetector.DeleteDetectorVersion
+import Amazonka.FraudDetector.DeleteEntityType
+import Amazonka.FraudDetector.DeleteEvent
+import Amazonka.FraudDetector.DeleteEventType
+import Amazonka.FraudDetector.DeleteEventsByEventType
+import Amazonka.FraudDetector.DeleteExternalModel
+import Amazonka.FraudDetector.DeleteLabel
+import Amazonka.FraudDetector.DeleteModel
+import Amazonka.FraudDetector.DeleteModelVersion
+import Amazonka.FraudDetector.DeleteOutcome
+import Amazonka.FraudDetector.DeleteRule
+import Amazonka.FraudDetector.DeleteVariable
+import Amazonka.FraudDetector.DescribeDetector
+import Amazonka.FraudDetector.DescribeModelVersions
+import Amazonka.FraudDetector.GetBatchImportJobs
+import Amazonka.FraudDetector.GetBatchPredictionJobs
+import Amazonka.FraudDetector.GetDeleteEventsByEventTypeStatus
+import Amazonka.FraudDetector.GetDetectorVersion
+import Amazonka.FraudDetector.GetDetectors
+import Amazonka.FraudDetector.GetEntityTypes
+import Amazonka.FraudDetector.GetEvent
+import Amazonka.FraudDetector.GetEventPrediction
+import Amazonka.FraudDetector.GetEventPredictionMetadata
+import Amazonka.FraudDetector.GetEventTypes
+import Amazonka.FraudDetector.GetExternalModels
+import Amazonka.FraudDetector.GetKMSEncryptionKey
+import Amazonka.FraudDetector.GetLabels
+import Amazonka.FraudDetector.GetModelVersion
+import Amazonka.FraudDetector.GetModels
+import Amazonka.FraudDetector.GetOutcomes
+import Amazonka.FraudDetector.GetRules
+import Amazonka.FraudDetector.GetVariables
+import Amazonka.FraudDetector.Lens
+import Amazonka.FraudDetector.ListEventPredictions
+import Amazonka.FraudDetector.ListTagsForResource
+import Amazonka.FraudDetector.PutDetector
+import Amazonka.FraudDetector.PutEntityType
+import Amazonka.FraudDetector.PutEventType
+import Amazonka.FraudDetector.PutExternalModel
+import Amazonka.FraudDetector.PutKMSEncryptionKey
+import Amazonka.FraudDetector.PutLabel
+import Amazonka.FraudDetector.PutOutcome
+import Amazonka.FraudDetector.SendEvent
+import Amazonka.FraudDetector.TagResource
+import Amazonka.FraudDetector.Types
+import Amazonka.FraudDetector.UntagResource
+import Amazonka.FraudDetector.UpdateDetectorVersion
+import Amazonka.FraudDetector.UpdateDetectorVersionMetadata
+import Amazonka.FraudDetector.UpdateDetectorVersionStatus
+import Amazonka.FraudDetector.UpdateEventLabel
+import Amazonka.FraudDetector.UpdateModel
+import Amazonka.FraudDetector.UpdateModelVersion
+import Amazonka.FraudDetector.UpdateModelVersionStatus
+import Amazonka.FraudDetector.UpdateRuleMetadata
+import Amazonka.FraudDetector.UpdateRuleVersion
+import Amazonka.FraudDetector.UpdateVariable
+import Amazonka.FraudDetector.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 'FraudDetector'.
+
+-- $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/FraudDetector/BatchCreateVariable.hs b/gen/Amazonka/FraudDetector/BatchCreateVariable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/BatchCreateVariable.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.FraudDetector.BatchCreateVariable
+-- 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 batch of variables.
+module Amazonka.FraudDetector.BatchCreateVariable
+  ( -- * Creating a Request
+    BatchCreateVariable (..),
+    newBatchCreateVariable,
+
+    -- * Request Lenses
+    batchCreateVariable_tags,
+    batchCreateVariable_variableEntries,
+
+    -- * Destructuring the Response
+    BatchCreateVariableResponse (..),
+    newBatchCreateVariableResponse,
+
+    -- * Response Lenses
+    batchCreateVariableResponse_errors,
+    batchCreateVariableResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newBatchCreateVariable' smart constructor.
+data BatchCreateVariable = BatchCreateVariable'
+  { -- | A collection of key and value pairs.
+    tags :: Prelude.Maybe [Tag],
+    -- | The list of variables for the batch create variable request.
+    variableEntries :: Prelude.NonEmpty VariableEntry
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchCreateVariable' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'batchCreateVariable_tags' - A collection of key and value pairs.
+--
+-- 'variableEntries', 'batchCreateVariable_variableEntries' - The list of variables for the batch create variable request.
+newBatchCreateVariable ::
+  -- | 'variableEntries'
+  Prelude.NonEmpty VariableEntry ->
+  BatchCreateVariable
+newBatchCreateVariable pVariableEntries_ =
+  BatchCreateVariable'
+    { tags = Prelude.Nothing,
+      variableEntries =
+        Lens.coerced Lens.# pVariableEntries_
+    }
+
+-- | A collection of key and value pairs.
+batchCreateVariable_tags :: Lens.Lens' BatchCreateVariable (Prelude.Maybe [Tag])
+batchCreateVariable_tags = Lens.lens (\BatchCreateVariable' {tags} -> tags) (\s@BatchCreateVariable' {} a -> s {tags = a} :: BatchCreateVariable) Prelude.. Lens.mapping Lens.coerced
+
+-- | The list of variables for the batch create variable request.
+batchCreateVariable_variableEntries :: Lens.Lens' BatchCreateVariable (Prelude.NonEmpty VariableEntry)
+batchCreateVariable_variableEntries = Lens.lens (\BatchCreateVariable' {variableEntries} -> variableEntries) (\s@BatchCreateVariable' {} a -> s {variableEntries = a} :: BatchCreateVariable) Prelude.. Lens.coerced
+
+instance Core.AWSRequest BatchCreateVariable where
+  type
+    AWSResponse BatchCreateVariable =
+      BatchCreateVariableResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchCreateVariableResponse'
+            Prelude.<$> (x Data..?> "errors" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable BatchCreateVariable where
+  hashWithSalt _salt BatchCreateVariable' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` variableEntries
+
+instance Prelude.NFData BatchCreateVariable where
+  rnf BatchCreateVariable' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf variableEntries
+
+instance Data.ToHeaders BatchCreateVariable where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.BatchCreateVariable" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BatchCreateVariable where
+  toJSON BatchCreateVariable' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("variableEntries" Data..= variableEntries)
+          ]
+      )
+
+instance Data.ToPath BatchCreateVariable where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery BatchCreateVariable where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newBatchCreateVariableResponse' smart constructor.
+data BatchCreateVariableResponse = BatchCreateVariableResponse'
+  { -- | Provides the errors for the @BatchCreateVariable@ request.
+    errors :: Prelude.Maybe [BatchCreateVariableError],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchCreateVariableResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errors', 'batchCreateVariableResponse_errors' - Provides the errors for the @BatchCreateVariable@ request.
+--
+-- 'httpStatus', 'batchCreateVariableResponse_httpStatus' - The response's http status code.
+newBatchCreateVariableResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BatchCreateVariableResponse
+newBatchCreateVariableResponse pHttpStatus_ =
+  BatchCreateVariableResponse'
+    { errors =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Provides the errors for the @BatchCreateVariable@ request.
+batchCreateVariableResponse_errors :: Lens.Lens' BatchCreateVariableResponse (Prelude.Maybe [BatchCreateVariableError])
+batchCreateVariableResponse_errors = Lens.lens (\BatchCreateVariableResponse' {errors} -> errors) (\s@BatchCreateVariableResponse' {} a -> s {errors = a} :: BatchCreateVariableResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+batchCreateVariableResponse_httpStatus :: Lens.Lens' BatchCreateVariableResponse Prelude.Int
+batchCreateVariableResponse_httpStatus = Lens.lens (\BatchCreateVariableResponse' {httpStatus} -> httpStatus) (\s@BatchCreateVariableResponse' {} a -> s {httpStatus = a} :: BatchCreateVariableResponse)
+
+instance Prelude.NFData BatchCreateVariableResponse where
+  rnf BatchCreateVariableResponse' {..} =
+    Prelude.rnf errors
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/BatchGetVariable.hs b/gen/Amazonka/FraudDetector/BatchGetVariable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/BatchGetVariable.hs
@@ -0,0 +1,182 @@
+{-# 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.FraudDetector.BatchGetVariable
+-- 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 batch of variables.
+module Amazonka.FraudDetector.BatchGetVariable
+  ( -- * Creating a Request
+    BatchGetVariable (..),
+    newBatchGetVariable,
+
+    -- * Request Lenses
+    batchGetVariable_names,
+
+    -- * Destructuring the Response
+    BatchGetVariableResponse (..),
+    newBatchGetVariableResponse,
+
+    -- * Response Lenses
+    batchGetVariableResponse_errors,
+    batchGetVariableResponse_variables,
+    batchGetVariableResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newBatchGetVariable' smart constructor.
+data BatchGetVariable = BatchGetVariable'
+  { -- | The list of variable names to get.
+    names :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchGetVariable' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'names', 'batchGetVariable_names' - The list of variable names to get.
+newBatchGetVariable ::
+  -- | 'names'
+  Prelude.NonEmpty Prelude.Text ->
+  BatchGetVariable
+newBatchGetVariable pNames_ =
+  BatchGetVariable'
+    { names =
+        Lens.coerced Lens.# pNames_
+    }
+
+-- | The list of variable names to get.
+batchGetVariable_names :: Lens.Lens' BatchGetVariable (Prelude.NonEmpty Prelude.Text)
+batchGetVariable_names = Lens.lens (\BatchGetVariable' {names} -> names) (\s@BatchGetVariable' {} a -> s {names = a} :: BatchGetVariable) Prelude.. Lens.coerced
+
+instance Core.AWSRequest BatchGetVariable where
+  type
+    AWSResponse BatchGetVariable =
+      BatchGetVariableResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchGetVariableResponse'
+            Prelude.<$> (x Data..?> "errors" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "variables" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable BatchGetVariable where
+  hashWithSalt _salt BatchGetVariable' {..} =
+    _salt `Prelude.hashWithSalt` names
+
+instance Prelude.NFData BatchGetVariable where
+  rnf BatchGetVariable' {..} = Prelude.rnf names
+
+instance Data.ToHeaders BatchGetVariable where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.BatchGetVariable" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BatchGetVariable where
+  toJSON BatchGetVariable' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("names" Data..= names)]
+      )
+
+instance Data.ToPath BatchGetVariable where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery BatchGetVariable where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newBatchGetVariableResponse' smart constructor.
+data BatchGetVariableResponse = BatchGetVariableResponse'
+  { -- | The errors from the request.
+    errors :: Prelude.Maybe [BatchGetVariableError],
+    -- | The returned variables.
+    variables :: Prelude.Maybe [Variable],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchGetVariableResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errors', 'batchGetVariableResponse_errors' - The errors from the request.
+--
+-- 'variables', 'batchGetVariableResponse_variables' - The returned variables.
+--
+-- 'httpStatus', 'batchGetVariableResponse_httpStatus' - The response's http status code.
+newBatchGetVariableResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BatchGetVariableResponse
+newBatchGetVariableResponse pHttpStatus_ =
+  BatchGetVariableResponse'
+    { errors = Prelude.Nothing,
+      variables = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The errors from the request.
+batchGetVariableResponse_errors :: Lens.Lens' BatchGetVariableResponse (Prelude.Maybe [BatchGetVariableError])
+batchGetVariableResponse_errors = Lens.lens (\BatchGetVariableResponse' {errors} -> errors) (\s@BatchGetVariableResponse' {} a -> s {errors = a} :: BatchGetVariableResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The returned variables.
+batchGetVariableResponse_variables :: Lens.Lens' BatchGetVariableResponse (Prelude.Maybe [Variable])
+batchGetVariableResponse_variables = Lens.lens (\BatchGetVariableResponse' {variables} -> variables) (\s@BatchGetVariableResponse' {} a -> s {variables = a} :: BatchGetVariableResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+batchGetVariableResponse_httpStatus :: Lens.Lens' BatchGetVariableResponse Prelude.Int
+batchGetVariableResponse_httpStatus = Lens.lens (\BatchGetVariableResponse' {httpStatus} -> httpStatus) (\s@BatchGetVariableResponse' {} a -> s {httpStatus = a} :: BatchGetVariableResponse)
+
+instance Prelude.NFData BatchGetVariableResponse where
+  rnf BatchGetVariableResponse' {..} =
+    Prelude.rnf errors
+      `Prelude.seq` Prelude.rnf variables
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/CancelBatchImportJob.hs b/gen/Amazonka/FraudDetector/CancelBatchImportJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/CancelBatchImportJob.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.FraudDetector.CancelBatchImportJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Cancels an in-progress batch import job.
+module Amazonka.FraudDetector.CancelBatchImportJob
+  ( -- * Creating a Request
+    CancelBatchImportJob (..),
+    newCancelBatchImportJob,
+
+    -- * Request Lenses
+    cancelBatchImportJob_jobId,
+
+    -- * Destructuring the Response
+    CancelBatchImportJobResponse (..),
+    newCancelBatchImportJobResponse,
+
+    -- * Response Lenses
+    cancelBatchImportJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCancelBatchImportJob' smart constructor.
+data CancelBatchImportJob = CancelBatchImportJob'
+  { -- | The ID of an in-progress batch import job to cancel.
+    --
+    -- Amazon Fraud Detector will throw an error if the batch import job is in
+    -- @FAILED@, @CANCELED@, or @COMPLETED@ state.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelBatchImportJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'cancelBatchImportJob_jobId' - The ID of an in-progress batch import job to cancel.
+--
+-- Amazon Fraud Detector will throw an error if the batch import job is in
+-- @FAILED@, @CANCELED@, or @COMPLETED@ state.
+newCancelBatchImportJob ::
+  -- | 'jobId'
+  Prelude.Text ->
+  CancelBatchImportJob
+newCancelBatchImportJob pJobId_ =
+  CancelBatchImportJob' {jobId = pJobId_}
+
+-- | The ID of an in-progress batch import job to cancel.
+--
+-- Amazon Fraud Detector will throw an error if the batch import job is in
+-- @FAILED@, @CANCELED@, or @COMPLETED@ state.
+cancelBatchImportJob_jobId :: Lens.Lens' CancelBatchImportJob Prelude.Text
+cancelBatchImportJob_jobId = Lens.lens (\CancelBatchImportJob' {jobId} -> jobId) (\s@CancelBatchImportJob' {} a -> s {jobId = a} :: CancelBatchImportJob)
+
+instance Core.AWSRequest CancelBatchImportJob where
+  type
+    AWSResponse CancelBatchImportJob =
+      CancelBatchImportJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          CancelBatchImportJobResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CancelBatchImportJob where
+  hashWithSalt _salt CancelBatchImportJob' {..} =
+    _salt `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData CancelBatchImportJob where
+  rnf CancelBatchImportJob' {..} = Prelude.rnf jobId
+
+instance Data.ToHeaders CancelBatchImportJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.CancelBatchImportJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CancelBatchImportJob where
+  toJSON CancelBatchImportJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("jobId" Data..= jobId)]
+      )
+
+instance Data.ToPath CancelBatchImportJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CancelBatchImportJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCancelBatchImportJobResponse' smart constructor.
+data CancelBatchImportJobResponse = CancelBatchImportJobResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelBatchImportJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'cancelBatchImportJobResponse_httpStatus' - The response's http status code.
+newCancelBatchImportJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CancelBatchImportJobResponse
+newCancelBatchImportJobResponse pHttpStatus_ =
+  CancelBatchImportJobResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+cancelBatchImportJobResponse_httpStatus :: Lens.Lens' CancelBatchImportJobResponse Prelude.Int
+cancelBatchImportJobResponse_httpStatus = Lens.lens (\CancelBatchImportJobResponse' {httpStatus} -> httpStatus) (\s@CancelBatchImportJobResponse' {} a -> s {httpStatus = a} :: CancelBatchImportJobResponse)
+
+instance Prelude.NFData CancelBatchImportJobResponse where
+  rnf CancelBatchImportJobResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/CancelBatchPredictionJob.hs b/gen/Amazonka/FraudDetector/CancelBatchPredictionJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/CancelBatchPredictionJob.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.FraudDetector.CancelBatchPredictionJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Cancels the specified batch prediction job.
+module Amazonka.FraudDetector.CancelBatchPredictionJob
+  ( -- * Creating a Request
+    CancelBatchPredictionJob (..),
+    newCancelBatchPredictionJob,
+
+    -- * Request Lenses
+    cancelBatchPredictionJob_jobId,
+
+    -- * Destructuring the Response
+    CancelBatchPredictionJobResponse (..),
+    newCancelBatchPredictionJobResponse,
+
+    -- * Response Lenses
+    cancelBatchPredictionJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCancelBatchPredictionJob' smart constructor.
+data CancelBatchPredictionJob = CancelBatchPredictionJob'
+  { -- | The ID of the batch prediction job to cancel.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelBatchPredictionJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'cancelBatchPredictionJob_jobId' - The ID of the batch prediction job to cancel.
+newCancelBatchPredictionJob ::
+  -- | 'jobId'
+  Prelude.Text ->
+  CancelBatchPredictionJob
+newCancelBatchPredictionJob pJobId_ =
+  CancelBatchPredictionJob' {jobId = pJobId_}
+
+-- | The ID of the batch prediction job to cancel.
+cancelBatchPredictionJob_jobId :: Lens.Lens' CancelBatchPredictionJob Prelude.Text
+cancelBatchPredictionJob_jobId = Lens.lens (\CancelBatchPredictionJob' {jobId} -> jobId) (\s@CancelBatchPredictionJob' {} a -> s {jobId = a} :: CancelBatchPredictionJob)
+
+instance Core.AWSRequest CancelBatchPredictionJob where
+  type
+    AWSResponse CancelBatchPredictionJob =
+      CancelBatchPredictionJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          CancelBatchPredictionJobResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CancelBatchPredictionJob where
+  hashWithSalt _salt CancelBatchPredictionJob' {..} =
+    _salt `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData CancelBatchPredictionJob where
+  rnf CancelBatchPredictionJob' {..} = Prelude.rnf jobId
+
+instance Data.ToHeaders CancelBatchPredictionJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.CancelBatchPredictionJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CancelBatchPredictionJob where
+  toJSON CancelBatchPredictionJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("jobId" Data..= jobId)]
+      )
+
+instance Data.ToPath CancelBatchPredictionJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CancelBatchPredictionJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCancelBatchPredictionJobResponse' smart constructor.
+data CancelBatchPredictionJobResponse = CancelBatchPredictionJobResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelBatchPredictionJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'cancelBatchPredictionJobResponse_httpStatus' - The response's http status code.
+newCancelBatchPredictionJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CancelBatchPredictionJobResponse
+newCancelBatchPredictionJobResponse pHttpStatus_ =
+  CancelBatchPredictionJobResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+cancelBatchPredictionJobResponse_httpStatus :: Lens.Lens' CancelBatchPredictionJobResponse Prelude.Int
+cancelBatchPredictionJobResponse_httpStatus = Lens.lens (\CancelBatchPredictionJobResponse' {httpStatus} -> httpStatus) (\s@CancelBatchPredictionJobResponse' {} a -> s {httpStatus = a} :: CancelBatchPredictionJobResponse)
+
+instance
+  Prelude.NFData
+    CancelBatchPredictionJobResponse
+  where
+  rnf CancelBatchPredictionJobResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/CreateBatchImportJob.hs b/gen/Amazonka/FraudDetector/CreateBatchImportJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/CreateBatchImportJob.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.FraudDetector.CreateBatchImportJob
+-- 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 batch import job.
+module Amazonka.FraudDetector.CreateBatchImportJob
+  ( -- * Creating a Request
+    CreateBatchImportJob (..),
+    newCreateBatchImportJob,
+
+    -- * Request Lenses
+    createBatchImportJob_tags,
+    createBatchImportJob_jobId,
+    createBatchImportJob_inputPath,
+    createBatchImportJob_outputPath,
+    createBatchImportJob_eventTypeName,
+    createBatchImportJob_iamRoleArn,
+
+    -- * Destructuring the Response
+    CreateBatchImportJobResponse (..),
+    newCreateBatchImportJobResponse,
+
+    -- * Response Lenses
+    createBatchImportJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateBatchImportJob' smart constructor.
+data CreateBatchImportJob = CreateBatchImportJob'
+  { -- | A collection of key-value pairs associated with this request.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the batch import job. The ID cannot be of a past job, unless
+    -- the job exists in @CREATE_FAILED@ state.
+    jobId :: Prelude.Text,
+    -- | The URI that points to the Amazon S3 location of your data file.
+    inputPath :: Prelude.Text,
+    -- | The URI that points to the Amazon S3 location for storing your results.
+    outputPath :: Prelude.Text,
+    -- | The name of the event type.
+    eventTypeName :: Prelude.Text,
+    -- | The ARN of the IAM role created for Amazon S3 bucket that holds your
+    -- data file.
+    --
+    -- The IAM role must have read permissions to your input S3 bucket and
+    -- write permissions to your output S3 bucket. For more information about
+    -- bucket permissions, see
+    -- <https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-policies-s3.html User policy examples>
+    -- in the /Amazon S3 User Guide/.
+    iamRoleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateBatchImportJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createBatchImportJob_tags' - A collection of key-value pairs associated with this request.
+--
+-- 'jobId', 'createBatchImportJob_jobId' - The ID of the batch import job. The ID cannot be of a past job, unless
+-- the job exists in @CREATE_FAILED@ state.
+--
+-- 'inputPath', 'createBatchImportJob_inputPath' - The URI that points to the Amazon S3 location of your data file.
+--
+-- 'outputPath', 'createBatchImportJob_outputPath' - The URI that points to the Amazon S3 location for storing your results.
+--
+-- 'eventTypeName', 'createBatchImportJob_eventTypeName' - The name of the event type.
+--
+-- 'iamRoleArn', 'createBatchImportJob_iamRoleArn' - The ARN of the IAM role created for Amazon S3 bucket that holds your
+-- data file.
+--
+-- The IAM role must have read permissions to your input S3 bucket and
+-- write permissions to your output S3 bucket. For more information about
+-- bucket permissions, see
+-- <https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-policies-s3.html User policy examples>
+-- in the /Amazon S3 User Guide/.
+newCreateBatchImportJob ::
+  -- | 'jobId'
+  Prelude.Text ->
+  -- | 'inputPath'
+  Prelude.Text ->
+  -- | 'outputPath'
+  Prelude.Text ->
+  -- | 'eventTypeName'
+  Prelude.Text ->
+  -- | 'iamRoleArn'
+  Prelude.Text ->
+  CreateBatchImportJob
+newCreateBatchImportJob
+  pJobId_
+  pInputPath_
+  pOutputPath_
+  pEventTypeName_
+  pIamRoleArn_ =
+    CreateBatchImportJob'
+      { tags = Prelude.Nothing,
+        jobId = pJobId_,
+        inputPath = pInputPath_,
+        outputPath = pOutputPath_,
+        eventTypeName = pEventTypeName_,
+        iamRoleArn = pIamRoleArn_
+      }
+
+-- | A collection of key-value pairs associated with this request.
+createBatchImportJob_tags :: Lens.Lens' CreateBatchImportJob (Prelude.Maybe [Tag])
+createBatchImportJob_tags = Lens.lens (\CreateBatchImportJob' {tags} -> tags) (\s@CreateBatchImportJob' {} a -> s {tags = a} :: CreateBatchImportJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the batch import job. The ID cannot be of a past job, unless
+-- the job exists in @CREATE_FAILED@ state.
+createBatchImportJob_jobId :: Lens.Lens' CreateBatchImportJob Prelude.Text
+createBatchImportJob_jobId = Lens.lens (\CreateBatchImportJob' {jobId} -> jobId) (\s@CreateBatchImportJob' {} a -> s {jobId = a} :: CreateBatchImportJob)
+
+-- | The URI that points to the Amazon S3 location of your data file.
+createBatchImportJob_inputPath :: Lens.Lens' CreateBatchImportJob Prelude.Text
+createBatchImportJob_inputPath = Lens.lens (\CreateBatchImportJob' {inputPath} -> inputPath) (\s@CreateBatchImportJob' {} a -> s {inputPath = a} :: CreateBatchImportJob)
+
+-- | The URI that points to the Amazon S3 location for storing your results.
+createBatchImportJob_outputPath :: Lens.Lens' CreateBatchImportJob Prelude.Text
+createBatchImportJob_outputPath = Lens.lens (\CreateBatchImportJob' {outputPath} -> outputPath) (\s@CreateBatchImportJob' {} a -> s {outputPath = a} :: CreateBatchImportJob)
+
+-- | The name of the event type.
+createBatchImportJob_eventTypeName :: Lens.Lens' CreateBatchImportJob Prelude.Text
+createBatchImportJob_eventTypeName = Lens.lens (\CreateBatchImportJob' {eventTypeName} -> eventTypeName) (\s@CreateBatchImportJob' {} a -> s {eventTypeName = a} :: CreateBatchImportJob)
+
+-- | The ARN of the IAM role created for Amazon S3 bucket that holds your
+-- data file.
+--
+-- The IAM role must have read permissions to your input S3 bucket and
+-- write permissions to your output S3 bucket. For more information about
+-- bucket permissions, see
+-- <https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-policies-s3.html User policy examples>
+-- in the /Amazon S3 User Guide/.
+createBatchImportJob_iamRoleArn :: Lens.Lens' CreateBatchImportJob Prelude.Text
+createBatchImportJob_iamRoleArn = Lens.lens (\CreateBatchImportJob' {iamRoleArn} -> iamRoleArn) (\s@CreateBatchImportJob' {} a -> s {iamRoleArn = a} :: CreateBatchImportJob)
+
+instance Core.AWSRequest CreateBatchImportJob where
+  type
+    AWSResponse CreateBatchImportJob =
+      CreateBatchImportJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          CreateBatchImportJobResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateBatchImportJob where
+  hashWithSalt _salt CreateBatchImportJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` jobId
+      `Prelude.hashWithSalt` inputPath
+      `Prelude.hashWithSalt` outputPath
+      `Prelude.hashWithSalt` eventTypeName
+      `Prelude.hashWithSalt` iamRoleArn
+
+instance Prelude.NFData CreateBatchImportJob where
+  rnf CreateBatchImportJob' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf inputPath
+      `Prelude.seq` Prelude.rnf outputPath
+      `Prelude.seq` Prelude.rnf eventTypeName
+      `Prelude.seq` Prelude.rnf iamRoleArn
+
+instance Data.ToHeaders CreateBatchImportJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.CreateBatchImportJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateBatchImportJob where
+  toJSON CreateBatchImportJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("jobId" Data..= jobId),
+            Prelude.Just ("inputPath" Data..= inputPath),
+            Prelude.Just ("outputPath" Data..= outputPath),
+            Prelude.Just ("eventTypeName" Data..= eventTypeName),
+            Prelude.Just ("iamRoleArn" Data..= iamRoleArn)
+          ]
+      )
+
+instance Data.ToPath CreateBatchImportJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateBatchImportJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateBatchImportJobResponse' smart constructor.
+data CreateBatchImportJobResponse = CreateBatchImportJobResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateBatchImportJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createBatchImportJobResponse_httpStatus' - The response's http status code.
+newCreateBatchImportJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateBatchImportJobResponse
+newCreateBatchImportJobResponse pHttpStatus_ =
+  CreateBatchImportJobResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+createBatchImportJobResponse_httpStatus :: Lens.Lens' CreateBatchImportJobResponse Prelude.Int
+createBatchImportJobResponse_httpStatus = Lens.lens (\CreateBatchImportJobResponse' {httpStatus} -> httpStatus) (\s@CreateBatchImportJobResponse' {} a -> s {httpStatus = a} :: CreateBatchImportJobResponse)
+
+instance Prelude.NFData CreateBatchImportJobResponse where
+  rnf CreateBatchImportJobResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/CreateBatchPredictionJob.hs b/gen/Amazonka/FraudDetector/CreateBatchPredictionJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/CreateBatchPredictionJob.hs
@@ -0,0 +1,291 @@
+{-# 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.FraudDetector.CreateBatchPredictionJob
+-- 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 batch prediction job.
+module Amazonka.FraudDetector.CreateBatchPredictionJob
+  ( -- * Creating a Request
+    CreateBatchPredictionJob (..),
+    newCreateBatchPredictionJob,
+
+    -- * Request Lenses
+    createBatchPredictionJob_detectorVersion,
+    createBatchPredictionJob_tags,
+    createBatchPredictionJob_jobId,
+    createBatchPredictionJob_inputPath,
+    createBatchPredictionJob_outputPath,
+    createBatchPredictionJob_eventTypeName,
+    createBatchPredictionJob_detectorName,
+    createBatchPredictionJob_iamRoleArn,
+
+    -- * Destructuring the Response
+    CreateBatchPredictionJobResponse (..),
+    newCreateBatchPredictionJobResponse,
+
+    -- * Response Lenses
+    createBatchPredictionJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateBatchPredictionJob' smart constructor.
+data CreateBatchPredictionJob = CreateBatchPredictionJob'
+  { -- | The detector version.
+    detectorVersion :: Prelude.Maybe Prelude.Text,
+    -- | A collection of key and value pairs.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the batch prediction job.
+    jobId :: Prelude.Text,
+    -- | The Amazon S3 location of your training file.
+    inputPath :: Prelude.Text,
+    -- | The Amazon S3 location of your output file.
+    outputPath :: Prelude.Text,
+    -- | The name of the event type.
+    eventTypeName :: Prelude.Text,
+    -- | The name of the detector.
+    detectorName :: Prelude.Text,
+    -- | The ARN of the IAM role to use for this job request.
+    --
+    -- The IAM Role must have read permissions to your input S3 bucket and
+    -- write permissions to your output S3 bucket. For more information about
+    -- bucket permissions, see
+    -- <https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-policies-s3.html User policy examples>
+    -- in the /Amazon S3 User Guide/.
+    iamRoleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateBatchPredictionJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detectorVersion', 'createBatchPredictionJob_detectorVersion' - The detector version.
+--
+-- 'tags', 'createBatchPredictionJob_tags' - A collection of key and value pairs.
+--
+-- 'jobId', 'createBatchPredictionJob_jobId' - The ID of the batch prediction job.
+--
+-- 'inputPath', 'createBatchPredictionJob_inputPath' - The Amazon S3 location of your training file.
+--
+-- 'outputPath', 'createBatchPredictionJob_outputPath' - The Amazon S3 location of your output file.
+--
+-- 'eventTypeName', 'createBatchPredictionJob_eventTypeName' - The name of the event type.
+--
+-- 'detectorName', 'createBatchPredictionJob_detectorName' - The name of the detector.
+--
+-- 'iamRoleArn', 'createBatchPredictionJob_iamRoleArn' - The ARN of the IAM role to use for this job request.
+--
+-- The IAM Role must have read permissions to your input S3 bucket and
+-- write permissions to your output S3 bucket. For more information about
+-- bucket permissions, see
+-- <https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-policies-s3.html User policy examples>
+-- in the /Amazon S3 User Guide/.
+newCreateBatchPredictionJob ::
+  -- | 'jobId'
+  Prelude.Text ->
+  -- | 'inputPath'
+  Prelude.Text ->
+  -- | 'outputPath'
+  Prelude.Text ->
+  -- | 'eventTypeName'
+  Prelude.Text ->
+  -- | 'detectorName'
+  Prelude.Text ->
+  -- | 'iamRoleArn'
+  Prelude.Text ->
+  CreateBatchPredictionJob
+newCreateBatchPredictionJob
+  pJobId_
+  pInputPath_
+  pOutputPath_
+  pEventTypeName_
+  pDetectorName_
+  pIamRoleArn_ =
+    CreateBatchPredictionJob'
+      { detectorVersion =
+          Prelude.Nothing,
+        tags = Prelude.Nothing,
+        jobId = pJobId_,
+        inputPath = pInputPath_,
+        outputPath = pOutputPath_,
+        eventTypeName = pEventTypeName_,
+        detectorName = pDetectorName_,
+        iamRoleArn = pIamRoleArn_
+      }
+
+-- | The detector version.
+createBatchPredictionJob_detectorVersion :: Lens.Lens' CreateBatchPredictionJob (Prelude.Maybe Prelude.Text)
+createBatchPredictionJob_detectorVersion = Lens.lens (\CreateBatchPredictionJob' {detectorVersion} -> detectorVersion) (\s@CreateBatchPredictionJob' {} a -> s {detectorVersion = a} :: CreateBatchPredictionJob)
+
+-- | A collection of key and value pairs.
+createBatchPredictionJob_tags :: Lens.Lens' CreateBatchPredictionJob (Prelude.Maybe [Tag])
+createBatchPredictionJob_tags = Lens.lens (\CreateBatchPredictionJob' {tags} -> tags) (\s@CreateBatchPredictionJob' {} a -> s {tags = a} :: CreateBatchPredictionJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the batch prediction job.
+createBatchPredictionJob_jobId :: Lens.Lens' CreateBatchPredictionJob Prelude.Text
+createBatchPredictionJob_jobId = Lens.lens (\CreateBatchPredictionJob' {jobId} -> jobId) (\s@CreateBatchPredictionJob' {} a -> s {jobId = a} :: CreateBatchPredictionJob)
+
+-- | The Amazon S3 location of your training file.
+createBatchPredictionJob_inputPath :: Lens.Lens' CreateBatchPredictionJob Prelude.Text
+createBatchPredictionJob_inputPath = Lens.lens (\CreateBatchPredictionJob' {inputPath} -> inputPath) (\s@CreateBatchPredictionJob' {} a -> s {inputPath = a} :: CreateBatchPredictionJob)
+
+-- | The Amazon S3 location of your output file.
+createBatchPredictionJob_outputPath :: Lens.Lens' CreateBatchPredictionJob Prelude.Text
+createBatchPredictionJob_outputPath = Lens.lens (\CreateBatchPredictionJob' {outputPath} -> outputPath) (\s@CreateBatchPredictionJob' {} a -> s {outputPath = a} :: CreateBatchPredictionJob)
+
+-- | The name of the event type.
+createBatchPredictionJob_eventTypeName :: Lens.Lens' CreateBatchPredictionJob Prelude.Text
+createBatchPredictionJob_eventTypeName = Lens.lens (\CreateBatchPredictionJob' {eventTypeName} -> eventTypeName) (\s@CreateBatchPredictionJob' {} a -> s {eventTypeName = a} :: CreateBatchPredictionJob)
+
+-- | The name of the detector.
+createBatchPredictionJob_detectorName :: Lens.Lens' CreateBatchPredictionJob Prelude.Text
+createBatchPredictionJob_detectorName = Lens.lens (\CreateBatchPredictionJob' {detectorName} -> detectorName) (\s@CreateBatchPredictionJob' {} a -> s {detectorName = a} :: CreateBatchPredictionJob)
+
+-- | The ARN of the IAM role to use for this job request.
+--
+-- The IAM Role must have read permissions to your input S3 bucket and
+-- write permissions to your output S3 bucket. For more information about
+-- bucket permissions, see
+-- <https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-policies-s3.html User policy examples>
+-- in the /Amazon S3 User Guide/.
+createBatchPredictionJob_iamRoleArn :: Lens.Lens' CreateBatchPredictionJob Prelude.Text
+createBatchPredictionJob_iamRoleArn = Lens.lens (\CreateBatchPredictionJob' {iamRoleArn} -> iamRoleArn) (\s@CreateBatchPredictionJob' {} a -> s {iamRoleArn = a} :: CreateBatchPredictionJob)
+
+instance Core.AWSRequest CreateBatchPredictionJob where
+  type
+    AWSResponse CreateBatchPredictionJob =
+      CreateBatchPredictionJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          CreateBatchPredictionJobResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateBatchPredictionJob where
+  hashWithSalt _salt CreateBatchPredictionJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` detectorVersion
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` jobId
+      `Prelude.hashWithSalt` inputPath
+      `Prelude.hashWithSalt` outputPath
+      `Prelude.hashWithSalt` eventTypeName
+      `Prelude.hashWithSalt` detectorName
+      `Prelude.hashWithSalt` iamRoleArn
+
+instance Prelude.NFData CreateBatchPredictionJob where
+  rnf CreateBatchPredictionJob' {..} =
+    Prelude.rnf detectorVersion
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf inputPath
+      `Prelude.seq` Prelude.rnf outputPath
+      `Prelude.seq` Prelude.rnf eventTypeName
+      `Prelude.seq` Prelude.rnf detectorName
+      `Prelude.seq` Prelude.rnf iamRoleArn
+
+instance Data.ToHeaders CreateBatchPredictionJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.CreateBatchPredictionJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateBatchPredictionJob where
+  toJSON CreateBatchPredictionJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("detectorVersion" Data..=)
+              Prelude.<$> detectorVersion,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("jobId" Data..= jobId),
+            Prelude.Just ("inputPath" Data..= inputPath),
+            Prelude.Just ("outputPath" Data..= outputPath),
+            Prelude.Just ("eventTypeName" Data..= eventTypeName),
+            Prelude.Just ("detectorName" Data..= detectorName),
+            Prelude.Just ("iamRoleArn" Data..= iamRoleArn)
+          ]
+      )
+
+instance Data.ToPath CreateBatchPredictionJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateBatchPredictionJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateBatchPredictionJobResponse' smart constructor.
+data CreateBatchPredictionJobResponse = CreateBatchPredictionJobResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateBatchPredictionJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createBatchPredictionJobResponse_httpStatus' - The response's http status code.
+newCreateBatchPredictionJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateBatchPredictionJobResponse
+newCreateBatchPredictionJobResponse pHttpStatus_ =
+  CreateBatchPredictionJobResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+createBatchPredictionJobResponse_httpStatus :: Lens.Lens' CreateBatchPredictionJobResponse Prelude.Int
+createBatchPredictionJobResponse_httpStatus = Lens.lens (\CreateBatchPredictionJobResponse' {httpStatus} -> httpStatus) (\s@CreateBatchPredictionJobResponse' {} a -> s {httpStatus = a} :: CreateBatchPredictionJobResponse)
+
+instance
+  Prelude.NFData
+    CreateBatchPredictionJobResponse
+  where
+  rnf CreateBatchPredictionJobResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/CreateDetectorVersion.hs b/gen/Amazonka/FraudDetector/CreateDetectorVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/CreateDetectorVersion.hs
@@ -0,0 +1,315 @@
+{-# 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.FraudDetector.CreateDetectorVersion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a detector version. The detector version starts in a @DRAFT@
+-- status.
+module Amazonka.FraudDetector.CreateDetectorVersion
+  ( -- * Creating a Request
+    CreateDetectorVersion (..),
+    newCreateDetectorVersion,
+
+    -- * Request Lenses
+    createDetectorVersion_description,
+    createDetectorVersion_externalModelEndpoints,
+    createDetectorVersion_modelVersions,
+    createDetectorVersion_ruleExecutionMode,
+    createDetectorVersion_tags,
+    createDetectorVersion_detectorId,
+    createDetectorVersion_rules,
+
+    -- * Destructuring the Response
+    CreateDetectorVersionResponse (..),
+    newCreateDetectorVersionResponse,
+
+    -- * Response Lenses
+    createDetectorVersionResponse_detectorId,
+    createDetectorVersionResponse_detectorVersionId,
+    createDetectorVersionResponse_status,
+    createDetectorVersionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateDetectorVersion' smart constructor.
+data CreateDetectorVersion = CreateDetectorVersion'
+  { -- | The description of the detector version.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Sagemaker model endpoints to include in the detector version.
+    externalModelEndpoints :: Prelude.Maybe [Prelude.Text],
+    -- | The model versions to include in the detector version.
+    modelVersions :: Prelude.Maybe [ModelVersion],
+    -- | The rule execution mode for the rules included in the detector version.
+    --
+    -- You can define and edit the rule mode at the detector version level,
+    -- when it is in draft status.
+    --
+    -- If you specify @FIRST_MATCHED@, Amazon Fraud Detector evaluates rules
+    -- sequentially, first to last, stopping at the first matched rule. Amazon
+    -- Fraud dectector then provides the outcomes for that single rule.
+    --
+    -- If you specifiy @ALL_MATCHED@, Amazon Fraud Detector evaluates all rules
+    -- and returns the outcomes for all matched rules.
+    --
+    -- The default behavior is @FIRST_MATCHED@.
+    ruleExecutionMode :: Prelude.Maybe RuleExecutionMode,
+    -- | A collection of key and value pairs.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the detector under which you want to create a new version.
+    detectorId :: Prelude.Text,
+    -- | The rules to include in the detector version.
+    rules :: [Rule]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDetectorVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createDetectorVersion_description' - The description of the detector version.
+--
+-- 'externalModelEndpoints', 'createDetectorVersion_externalModelEndpoints' - The Amazon Sagemaker model endpoints to include in the detector version.
+--
+-- 'modelVersions', 'createDetectorVersion_modelVersions' - The model versions to include in the detector version.
+--
+-- 'ruleExecutionMode', 'createDetectorVersion_ruleExecutionMode' - The rule execution mode for the rules included in the detector version.
+--
+-- You can define and edit the rule mode at the detector version level,
+-- when it is in draft status.
+--
+-- If you specify @FIRST_MATCHED@, Amazon Fraud Detector evaluates rules
+-- sequentially, first to last, stopping at the first matched rule. Amazon
+-- Fraud dectector then provides the outcomes for that single rule.
+--
+-- If you specifiy @ALL_MATCHED@, Amazon Fraud Detector evaluates all rules
+-- and returns the outcomes for all matched rules.
+--
+-- The default behavior is @FIRST_MATCHED@.
+--
+-- 'tags', 'createDetectorVersion_tags' - A collection of key and value pairs.
+--
+-- 'detectorId', 'createDetectorVersion_detectorId' - The ID of the detector under which you want to create a new version.
+--
+-- 'rules', 'createDetectorVersion_rules' - The rules to include in the detector version.
+newCreateDetectorVersion ::
+  -- | 'detectorId'
+  Prelude.Text ->
+  CreateDetectorVersion
+newCreateDetectorVersion pDetectorId_ =
+  CreateDetectorVersion'
+    { description =
+        Prelude.Nothing,
+      externalModelEndpoints = Prelude.Nothing,
+      modelVersions = Prelude.Nothing,
+      ruleExecutionMode = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      detectorId = pDetectorId_,
+      rules = Prelude.mempty
+    }
+
+-- | The description of the detector version.
+createDetectorVersion_description :: Lens.Lens' CreateDetectorVersion (Prelude.Maybe Prelude.Text)
+createDetectorVersion_description = Lens.lens (\CreateDetectorVersion' {description} -> description) (\s@CreateDetectorVersion' {} a -> s {description = a} :: CreateDetectorVersion)
+
+-- | The Amazon Sagemaker model endpoints to include in the detector version.
+createDetectorVersion_externalModelEndpoints :: Lens.Lens' CreateDetectorVersion (Prelude.Maybe [Prelude.Text])
+createDetectorVersion_externalModelEndpoints = Lens.lens (\CreateDetectorVersion' {externalModelEndpoints} -> externalModelEndpoints) (\s@CreateDetectorVersion' {} a -> s {externalModelEndpoints = a} :: CreateDetectorVersion) Prelude.. Lens.mapping Lens.coerced
+
+-- | The model versions to include in the detector version.
+createDetectorVersion_modelVersions :: Lens.Lens' CreateDetectorVersion (Prelude.Maybe [ModelVersion])
+createDetectorVersion_modelVersions = Lens.lens (\CreateDetectorVersion' {modelVersions} -> modelVersions) (\s@CreateDetectorVersion' {} a -> s {modelVersions = a} :: CreateDetectorVersion) Prelude.. Lens.mapping Lens.coerced
+
+-- | The rule execution mode for the rules included in the detector version.
+--
+-- You can define and edit the rule mode at the detector version level,
+-- when it is in draft status.
+--
+-- If you specify @FIRST_MATCHED@, Amazon Fraud Detector evaluates rules
+-- sequentially, first to last, stopping at the first matched rule. Amazon
+-- Fraud dectector then provides the outcomes for that single rule.
+--
+-- If you specifiy @ALL_MATCHED@, Amazon Fraud Detector evaluates all rules
+-- and returns the outcomes for all matched rules.
+--
+-- The default behavior is @FIRST_MATCHED@.
+createDetectorVersion_ruleExecutionMode :: Lens.Lens' CreateDetectorVersion (Prelude.Maybe RuleExecutionMode)
+createDetectorVersion_ruleExecutionMode = Lens.lens (\CreateDetectorVersion' {ruleExecutionMode} -> ruleExecutionMode) (\s@CreateDetectorVersion' {} a -> s {ruleExecutionMode = a} :: CreateDetectorVersion)
+
+-- | A collection of key and value pairs.
+createDetectorVersion_tags :: Lens.Lens' CreateDetectorVersion (Prelude.Maybe [Tag])
+createDetectorVersion_tags = Lens.lens (\CreateDetectorVersion' {tags} -> tags) (\s@CreateDetectorVersion' {} a -> s {tags = a} :: CreateDetectorVersion) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the detector under which you want to create a new version.
+createDetectorVersion_detectorId :: Lens.Lens' CreateDetectorVersion Prelude.Text
+createDetectorVersion_detectorId = Lens.lens (\CreateDetectorVersion' {detectorId} -> detectorId) (\s@CreateDetectorVersion' {} a -> s {detectorId = a} :: CreateDetectorVersion)
+
+-- | The rules to include in the detector version.
+createDetectorVersion_rules :: Lens.Lens' CreateDetectorVersion [Rule]
+createDetectorVersion_rules = Lens.lens (\CreateDetectorVersion' {rules} -> rules) (\s@CreateDetectorVersion' {} a -> s {rules = a} :: CreateDetectorVersion) Prelude.. Lens.coerced
+
+instance Core.AWSRequest CreateDetectorVersion where
+  type
+    AWSResponse CreateDetectorVersion =
+      CreateDetectorVersionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateDetectorVersionResponse'
+            Prelude.<$> (x Data..?> "detectorId")
+            Prelude.<*> (x Data..?> "detectorVersionId")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateDetectorVersion where
+  hashWithSalt _salt CreateDetectorVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` externalModelEndpoints
+      `Prelude.hashWithSalt` modelVersions
+      `Prelude.hashWithSalt` ruleExecutionMode
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` detectorId
+      `Prelude.hashWithSalt` rules
+
+instance Prelude.NFData CreateDetectorVersion where
+  rnf CreateDetectorVersion' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf externalModelEndpoints
+      `Prelude.seq` Prelude.rnf modelVersions
+      `Prelude.seq` Prelude.rnf ruleExecutionMode
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf detectorId
+      `Prelude.seq` Prelude.rnf rules
+
+instance Data.ToHeaders CreateDetectorVersion where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.CreateDetectorVersion" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateDetectorVersion where
+  toJSON CreateDetectorVersion' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("externalModelEndpoints" Data..=)
+              Prelude.<$> externalModelEndpoints,
+            ("modelVersions" Data..=) Prelude.<$> modelVersions,
+            ("ruleExecutionMode" Data..=)
+              Prelude.<$> ruleExecutionMode,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("detectorId" Data..= detectorId),
+            Prelude.Just ("rules" Data..= rules)
+          ]
+      )
+
+instance Data.ToPath CreateDetectorVersion where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateDetectorVersion where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateDetectorVersionResponse' smart constructor.
+data CreateDetectorVersionResponse = CreateDetectorVersionResponse'
+  { -- | The ID for the created version\'s parent detector.
+    detectorId :: Prelude.Maybe Prelude.Text,
+    -- | The ID for the created detector.
+    detectorVersionId :: Prelude.Maybe Prelude.Text,
+    -- | The status of the detector version.
+    status :: Prelude.Maybe DetectorVersionStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDetectorVersionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detectorId', 'createDetectorVersionResponse_detectorId' - The ID for the created version\'s parent detector.
+--
+-- 'detectorVersionId', 'createDetectorVersionResponse_detectorVersionId' - The ID for the created detector.
+--
+-- 'status', 'createDetectorVersionResponse_status' - The status of the detector version.
+--
+-- 'httpStatus', 'createDetectorVersionResponse_httpStatus' - The response's http status code.
+newCreateDetectorVersionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateDetectorVersionResponse
+newCreateDetectorVersionResponse pHttpStatus_ =
+  CreateDetectorVersionResponse'
+    { detectorId =
+        Prelude.Nothing,
+      detectorVersionId = Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID for the created version\'s parent detector.
+createDetectorVersionResponse_detectorId :: Lens.Lens' CreateDetectorVersionResponse (Prelude.Maybe Prelude.Text)
+createDetectorVersionResponse_detectorId = Lens.lens (\CreateDetectorVersionResponse' {detectorId} -> detectorId) (\s@CreateDetectorVersionResponse' {} a -> s {detectorId = a} :: CreateDetectorVersionResponse)
+
+-- | The ID for the created detector.
+createDetectorVersionResponse_detectorVersionId :: Lens.Lens' CreateDetectorVersionResponse (Prelude.Maybe Prelude.Text)
+createDetectorVersionResponse_detectorVersionId = Lens.lens (\CreateDetectorVersionResponse' {detectorVersionId} -> detectorVersionId) (\s@CreateDetectorVersionResponse' {} a -> s {detectorVersionId = a} :: CreateDetectorVersionResponse)
+
+-- | The status of the detector version.
+createDetectorVersionResponse_status :: Lens.Lens' CreateDetectorVersionResponse (Prelude.Maybe DetectorVersionStatus)
+createDetectorVersionResponse_status = Lens.lens (\CreateDetectorVersionResponse' {status} -> status) (\s@CreateDetectorVersionResponse' {} a -> s {status = a} :: CreateDetectorVersionResponse)
+
+-- | The response's http status code.
+createDetectorVersionResponse_httpStatus :: Lens.Lens' CreateDetectorVersionResponse Prelude.Int
+createDetectorVersionResponse_httpStatus = Lens.lens (\CreateDetectorVersionResponse' {httpStatus} -> httpStatus) (\s@CreateDetectorVersionResponse' {} a -> s {httpStatus = a} :: CreateDetectorVersionResponse)
+
+instance Prelude.NFData CreateDetectorVersionResponse where
+  rnf CreateDetectorVersionResponse' {..} =
+    Prelude.rnf detectorId
+      `Prelude.seq` Prelude.rnf detectorVersionId
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/CreateModel.hs b/gen/Amazonka/FraudDetector/CreateModel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/CreateModel.hs
@@ -0,0 +1,212 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.CreateModel
+-- 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 model using the specified model type.
+module Amazonka.FraudDetector.CreateModel
+  ( -- * Creating a Request
+    CreateModel (..),
+    newCreateModel,
+
+    -- * Request Lenses
+    createModel_description,
+    createModel_tags,
+    createModel_modelId,
+    createModel_modelType,
+    createModel_eventTypeName,
+
+    -- * Destructuring the Response
+    CreateModelResponse (..),
+    newCreateModelResponse,
+
+    -- * Response Lenses
+    createModelResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateModel' smart constructor.
+data CreateModel = CreateModel'
+  { -- | The model description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A collection of key and value pairs.
+    tags :: Prelude.Maybe [Tag],
+    -- | The model ID.
+    modelId :: Prelude.Text,
+    -- | The model type.
+    modelType :: ModelTypeEnum,
+    -- | The name of the event type.
+    eventTypeName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateModel' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createModel_description' - The model description.
+--
+-- 'tags', 'createModel_tags' - A collection of key and value pairs.
+--
+-- 'modelId', 'createModel_modelId' - The model ID.
+--
+-- 'modelType', 'createModel_modelType' - The model type.
+--
+-- 'eventTypeName', 'createModel_eventTypeName' - The name of the event type.
+newCreateModel ::
+  -- | 'modelId'
+  Prelude.Text ->
+  -- | 'modelType'
+  ModelTypeEnum ->
+  -- | 'eventTypeName'
+  Prelude.Text ->
+  CreateModel
+newCreateModel pModelId_ pModelType_ pEventTypeName_ =
+  CreateModel'
+    { description = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      modelId = pModelId_,
+      modelType = pModelType_,
+      eventTypeName = pEventTypeName_
+    }
+
+-- | The model description.
+createModel_description :: Lens.Lens' CreateModel (Prelude.Maybe Prelude.Text)
+createModel_description = Lens.lens (\CreateModel' {description} -> description) (\s@CreateModel' {} a -> s {description = a} :: CreateModel)
+
+-- | A collection of key and value pairs.
+createModel_tags :: Lens.Lens' CreateModel (Prelude.Maybe [Tag])
+createModel_tags = Lens.lens (\CreateModel' {tags} -> tags) (\s@CreateModel' {} a -> s {tags = a} :: CreateModel) Prelude.. Lens.mapping Lens.coerced
+
+-- | The model ID.
+createModel_modelId :: Lens.Lens' CreateModel Prelude.Text
+createModel_modelId = Lens.lens (\CreateModel' {modelId} -> modelId) (\s@CreateModel' {} a -> s {modelId = a} :: CreateModel)
+
+-- | The model type.
+createModel_modelType :: Lens.Lens' CreateModel ModelTypeEnum
+createModel_modelType = Lens.lens (\CreateModel' {modelType} -> modelType) (\s@CreateModel' {} a -> s {modelType = a} :: CreateModel)
+
+-- | The name of the event type.
+createModel_eventTypeName :: Lens.Lens' CreateModel Prelude.Text
+createModel_eventTypeName = Lens.lens (\CreateModel' {eventTypeName} -> eventTypeName) (\s@CreateModel' {} a -> s {eventTypeName = a} :: CreateModel)
+
+instance Core.AWSRequest CreateModel where
+  type AWSResponse CreateModel = CreateModelResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          CreateModelResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateModel where
+  hashWithSalt _salt CreateModel' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` modelId
+      `Prelude.hashWithSalt` modelType
+      `Prelude.hashWithSalt` eventTypeName
+
+instance Prelude.NFData CreateModel where
+  rnf CreateModel' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf modelId
+      `Prelude.seq` Prelude.rnf modelType
+      `Prelude.seq` Prelude.rnf eventTypeName
+
+instance Data.ToHeaders CreateModel where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.CreateModel" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateModel where
+  toJSON CreateModel' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("modelId" Data..= modelId),
+            Prelude.Just ("modelType" Data..= modelType),
+            Prelude.Just
+              ("eventTypeName" Data..= eventTypeName)
+          ]
+      )
+
+instance Data.ToPath CreateModel where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateModel where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateModelResponse' smart constructor.
+data CreateModelResponse = CreateModelResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateModelResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createModelResponse_httpStatus' - The response's http status code.
+newCreateModelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateModelResponse
+newCreateModelResponse pHttpStatus_ =
+  CreateModelResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+createModelResponse_httpStatus :: Lens.Lens' CreateModelResponse Prelude.Int
+createModelResponse_httpStatus = Lens.lens (\CreateModelResponse' {httpStatus} -> httpStatus) (\s@CreateModelResponse' {} a -> s {httpStatus = a} :: CreateModelResponse)
+
+instance Prelude.NFData CreateModelResponse where
+  rnf CreateModelResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/CreateModelVersion.hs b/gen/Amazonka/FraudDetector/CreateModelVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/CreateModelVersion.hs
@@ -0,0 +1,309 @@
+{-# 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.FraudDetector.CreateModelVersion
+-- 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 version of the model using the specified model type and model
+-- id.
+module Amazonka.FraudDetector.CreateModelVersion
+  ( -- * Creating a Request
+    CreateModelVersion (..),
+    newCreateModelVersion,
+
+    -- * Request Lenses
+    createModelVersion_externalEventsDetail,
+    createModelVersion_ingestedEventsDetail,
+    createModelVersion_tags,
+    createModelVersion_modelId,
+    createModelVersion_modelType,
+    createModelVersion_trainingDataSource,
+    createModelVersion_trainingDataSchema,
+
+    -- * Destructuring the Response
+    CreateModelVersionResponse (..),
+    newCreateModelVersionResponse,
+
+    -- * Response Lenses
+    createModelVersionResponse_modelId,
+    createModelVersionResponse_modelType,
+    createModelVersionResponse_modelVersionNumber,
+    createModelVersionResponse_status,
+    createModelVersionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateModelVersion' smart constructor.
+data CreateModelVersion = CreateModelVersion'
+  { -- | Details of the external events data used for model version training.
+    -- Required if @trainingDataSource@ is @EXTERNAL_EVENTS@.
+    externalEventsDetail :: Prelude.Maybe ExternalEventsDetail,
+    -- | Details of the ingested events data used for model version training.
+    -- Required if @trainingDataSource@ is @INGESTED_EVENTS@.
+    ingestedEventsDetail :: Prelude.Maybe IngestedEventsDetail,
+    -- | A collection of key and value pairs.
+    tags :: Prelude.Maybe [Tag],
+    -- | The model ID.
+    modelId :: Prelude.Text,
+    -- | The model type.
+    modelType :: ModelTypeEnum,
+    -- | The training data source location in Amazon S3.
+    trainingDataSource :: TrainingDataSourceEnum,
+    -- | The training data schema.
+    trainingDataSchema :: TrainingDataSchema
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateModelVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'externalEventsDetail', 'createModelVersion_externalEventsDetail' - Details of the external events data used for model version training.
+-- Required if @trainingDataSource@ is @EXTERNAL_EVENTS@.
+--
+-- 'ingestedEventsDetail', 'createModelVersion_ingestedEventsDetail' - Details of the ingested events data used for model version training.
+-- Required if @trainingDataSource@ is @INGESTED_EVENTS@.
+--
+-- 'tags', 'createModelVersion_tags' - A collection of key and value pairs.
+--
+-- 'modelId', 'createModelVersion_modelId' - The model ID.
+--
+-- 'modelType', 'createModelVersion_modelType' - The model type.
+--
+-- 'trainingDataSource', 'createModelVersion_trainingDataSource' - The training data source location in Amazon S3.
+--
+-- 'trainingDataSchema', 'createModelVersion_trainingDataSchema' - The training data schema.
+newCreateModelVersion ::
+  -- | 'modelId'
+  Prelude.Text ->
+  -- | 'modelType'
+  ModelTypeEnum ->
+  -- | 'trainingDataSource'
+  TrainingDataSourceEnum ->
+  -- | 'trainingDataSchema'
+  TrainingDataSchema ->
+  CreateModelVersion
+newCreateModelVersion
+  pModelId_
+  pModelType_
+  pTrainingDataSource_
+  pTrainingDataSchema_ =
+    CreateModelVersion'
+      { externalEventsDetail =
+          Prelude.Nothing,
+        ingestedEventsDetail = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        modelId = pModelId_,
+        modelType = pModelType_,
+        trainingDataSource = pTrainingDataSource_,
+        trainingDataSchema = pTrainingDataSchema_
+      }
+
+-- | Details of the external events data used for model version training.
+-- Required if @trainingDataSource@ is @EXTERNAL_EVENTS@.
+createModelVersion_externalEventsDetail :: Lens.Lens' CreateModelVersion (Prelude.Maybe ExternalEventsDetail)
+createModelVersion_externalEventsDetail = Lens.lens (\CreateModelVersion' {externalEventsDetail} -> externalEventsDetail) (\s@CreateModelVersion' {} a -> s {externalEventsDetail = a} :: CreateModelVersion)
+
+-- | Details of the ingested events data used for model version training.
+-- Required if @trainingDataSource@ is @INGESTED_EVENTS@.
+createModelVersion_ingestedEventsDetail :: Lens.Lens' CreateModelVersion (Prelude.Maybe IngestedEventsDetail)
+createModelVersion_ingestedEventsDetail = Lens.lens (\CreateModelVersion' {ingestedEventsDetail} -> ingestedEventsDetail) (\s@CreateModelVersion' {} a -> s {ingestedEventsDetail = a} :: CreateModelVersion)
+
+-- | A collection of key and value pairs.
+createModelVersion_tags :: Lens.Lens' CreateModelVersion (Prelude.Maybe [Tag])
+createModelVersion_tags = Lens.lens (\CreateModelVersion' {tags} -> tags) (\s@CreateModelVersion' {} a -> s {tags = a} :: CreateModelVersion) Prelude.. Lens.mapping Lens.coerced
+
+-- | The model ID.
+createModelVersion_modelId :: Lens.Lens' CreateModelVersion Prelude.Text
+createModelVersion_modelId = Lens.lens (\CreateModelVersion' {modelId} -> modelId) (\s@CreateModelVersion' {} a -> s {modelId = a} :: CreateModelVersion)
+
+-- | The model type.
+createModelVersion_modelType :: Lens.Lens' CreateModelVersion ModelTypeEnum
+createModelVersion_modelType = Lens.lens (\CreateModelVersion' {modelType} -> modelType) (\s@CreateModelVersion' {} a -> s {modelType = a} :: CreateModelVersion)
+
+-- | The training data source location in Amazon S3.
+createModelVersion_trainingDataSource :: Lens.Lens' CreateModelVersion TrainingDataSourceEnum
+createModelVersion_trainingDataSource = Lens.lens (\CreateModelVersion' {trainingDataSource} -> trainingDataSource) (\s@CreateModelVersion' {} a -> s {trainingDataSource = a} :: CreateModelVersion)
+
+-- | The training data schema.
+createModelVersion_trainingDataSchema :: Lens.Lens' CreateModelVersion TrainingDataSchema
+createModelVersion_trainingDataSchema = Lens.lens (\CreateModelVersion' {trainingDataSchema} -> trainingDataSchema) (\s@CreateModelVersion' {} a -> s {trainingDataSchema = a} :: CreateModelVersion)
+
+instance Core.AWSRequest CreateModelVersion where
+  type
+    AWSResponse CreateModelVersion =
+      CreateModelVersionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateModelVersionResponse'
+            Prelude.<$> (x Data..?> "modelId")
+            Prelude.<*> (x Data..?> "modelType")
+            Prelude.<*> (x Data..?> "modelVersionNumber")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateModelVersion where
+  hashWithSalt _salt CreateModelVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` externalEventsDetail
+      `Prelude.hashWithSalt` ingestedEventsDetail
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` modelId
+      `Prelude.hashWithSalt` modelType
+      `Prelude.hashWithSalt` trainingDataSource
+      `Prelude.hashWithSalt` trainingDataSchema
+
+instance Prelude.NFData CreateModelVersion where
+  rnf CreateModelVersion' {..} =
+    Prelude.rnf externalEventsDetail
+      `Prelude.seq` Prelude.rnf ingestedEventsDetail
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf modelId
+      `Prelude.seq` Prelude.rnf modelType
+      `Prelude.seq` Prelude.rnf trainingDataSource
+      `Prelude.seq` Prelude.rnf trainingDataSchema
+
+instance Data.ToHeaders CreateModelVersion where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.CreateModelVersion" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateModelVersion where
+  toJSON CreateModelVersion' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("externalEventsDetail" Data..=)
+              Prelude.<$> externalEventsDetail,
+            ("ingestedEventsDetail" Data..=)
+              Prelude.<$> ingestedEventsDetail,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("modelId" Data..= modelId),
+            Prelude.Just ("modelType" Data..= modelType),
+            Prelude.Just
+              ("trainingDataSource" Data..= trainingDataSource),
+            Prelude.Just
+              ("trainingDataSchema" Data..= trainingDataSchema)
+          ]
+      )
+
+instance Data.ToPath CreateModelVersion where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateModelVersion where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateModelVersionResponse' smart constructor.
+data CreateModelVersionResponse = CreateModelVersionResponse'
+  { -- | The model ID.
+    modelId :: Prelude.Maybe Prelude.Text,
+    -- | The model type.
+    modelType :: Prelude.Maybe ModelTypeEnum,
+    -- | The model version number of the model version created.
+    modelVersionNumber :: Prelude.Maybe Prelude.Text,
+    -- | The model version status.
+    status :: 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 'CreateModelVersionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'modelId', 'createModelVersionResponse_modelId' - The model ID.
+--
+-- 'modelType', 'createModelVersionResponse_modelType' - The model type.
+--
+-- 'modelVersionNumber', 'createModelVersionResponse_modelVersionNumber' - The model version number of the model version created.
+--
+-- 'status', 'createModelVersionResponse_status' - The model version status.
+--
+-- 'httpStatus', 'createModelVersionResponse_httpStatus' - The response's http status code.
+newCreateModelVersionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateModelVersionResponse
+newCreateModelVersionResponse pHttpStatus_ =
+  CreateModelVersionResponse'
+    { modelId =
+        Prelude.Nothing,
+      modelType = Prelude.Nothing,
+      modelVersionNumber = Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The model ID.
+createModelVersionResponse_modelId :: Lens.Lens' CreateModelVersionResponse (Prelude.Maybe Prelude.Text)
+createModelVersionResponse_modelId = Lens.lens (\CreateModelVersionResponse' {modelId} -> modelId) (\s@CreateModelVersionResponse' {} a -> s {modelId = a} :: CreateModelVersionResponse)
+
+-- | The model type.
+createModelVersionResponse_modelType :: Lens.Lens' CreateModelVersionResponse (Prelude.Maybe ModelTypeEnum)
+createModelVersionResponse_modelType = Lens.lens (\CreateModelVersionResponse' {modelType} -> modelType) (\s@CreateModelVersionResponse' {} a -> s {modelType = a} :: CreateModelVersionResponse)
+
+-- | The model version number of the model version created.
+createModelVersionResponse_modelVersionNumber :: Lens.Lens' CreateModelVersionResponse (Prelude.Maybe Prelude.Text)
+createModelVersionResponse_modelVersionNumber = Lens.lens (\CreateModelVersionResponse' {modelVersionNumber} -> modelVersionNumber) (\s@CreateModelVersionResponse' {} a -> s {modelVersionNumber = a} :: CreateModelVersionResponse)
+
+-- | The model version status.
+createModelVersionResponse_status :: Lens.Lens' CreateModelVersionResponse (Prelude.Maybe Prelude.Text)
+createModelVersionResponse_status = Lens.lens (\CreateModelVersionResponse' {status} -> status) (\s@CreateModelVersionResponse' {} a -> s {status = a} :: CreateModelVersionResponse)
+
+-- | The response's http status code.
+createModelVersionResponse_httpStatus :: Lens.Lens' CreateModelVersionResponse Prelude.Int
+createModelVersionResponse_httpStatus = Lens.lens (\CreateModelVersionResponse' {httpStatus} -> httpStatus) (\s@CreateModelVersionResponse' {} a -> s {httpStatus = a} :: CreateModelVersionResponse)
+
+instance Prelude.NFData CreateModelVersionResponse where
+  rnf CreateModelVersionResponse' {..} =
+    Prelude.rnf modelId
+      `Prelude.seq` Prelude.rnf modelType
+      `Prelude.seq` Prelude.rnf modelVersionNumber
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/CreateRule.hs b/gen/Amazonka/FraudDetector/CreateRule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/CreateRule.hs
@@ -0,0 +1,261 @@
+{-# 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.FraudDetector.CreateRule
+-- 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 rule for use with the specified detector.
+module Amazonka.FraudDetector.CreateRule
+  ( -- * Creating a Request
+    CreateRule (..),
+    newCreateRule,
+
+    -- * Request Lenses
+    createRule_description,
+    createRule_tags,
+    createRule_ruleId,
+    createRule_detectorId,
+    createRule_expression,
+    createRule_language,
+    createRule_outcomes,
+
+    -- * Destructuring the Response
+    CreateRuleResponse (..),
+    newCreateRuleResponse,
+
+    -- * Response Lenses
+    createRuleResponse_rule,
+    createRuleResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateRule' smart constructor.
+data CreateRule = CreateRule'
+  { -- | The rule description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A collection of key and value pairs.
+    tags :: Prelude.Maybe [Tag],
+    -- | The rule ID.
+    ruleId :: Prelude.Text,
+    -- | The detector ID for the rule\'s parent detector.
+    detectorId :: Prelude.Text,
+    -- | The rule expression.
+    expression :: Data.Sensitive Prelude.Text,
+    -- | The language of the rule.
+    language :: Language,
+    -- | The outcome or outcomes returned when the rule expression matches.
+    outcomes :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createRule_description' - The rule description.
+--
+-- 'tags', 'createRule_tags' - A collection of key and value pairs.
+--
+-- 'ruleId', 'createRule_ruleId' - The rule ID.
+--
+-- 'detectorId', 'createRule_detectorId' - The detector ID for the rule\'s parent detector.
+--
+-- 'expression', 'createRule_expression' - The rule expression.
+--
+-- 'language', 'createRule_language' - The language of the rule.
+--
+-- 'outcomes', 'createRule_outcomes' - The outcome or outcomes returned when the rule expression matches.
+newCreateRule ::
+  -- | 'ruleId'
+  Prelude.Text ->
+  -- | 'detectorId'
+  Prelude.Text ->
+  -- | 'expression'
+  Prelude.Text ->
+  -- | 'language'
+  Language ->
+  -- | 'outcomes'
+  Prelude.NonEmpty Prelude.Text ->
+  CreateRule
+newCreateRule
+  pRuleId_
+  pDetectorId_
+  pExpression_
+  pLanguage_
+  pOutcomes_ =
+    CreateRule'
+      { description = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        ruleId = pRuleId_,
+        detectorId = pDetectorId_,
+        expression = Data._Sensitive Lens.# pExpression_,
+        language = pLanguage_,
+        outcomes = Lens.coerced Lens.# pOutcomes_
+      }
+
+-- | The rule description.
+createRule_description :: Lens.Lens' CreateRule (Prelude.Maybe Prelude.Text)
+createRule_description = Lens.lens (\CreateRule' {description} -> description) (\s@CreateRule' {} a -> s {description = a} :: CreateRule)
+
+-- | A collection of key and value pairs.
+createRule_tags :: Lens.Lens' CreateRule (Prelude.Maybe [Tag])
+createRule_tags = Lens.lens (\CreateRule' {tags} -> tags) (\s@CreateRule' {} a -> s {tags = a} :: CreateRule) Prelude.. Lens.mapping Lens.coerced
+
+-- | The rule ID.
+createRule_ruleId :: Lens.Lens' CreateRule Prelude.Text
+createRule_ruleId = Lens.lens (\CreateRule' {ruleId} -> ruleId) (\s@CreateRule' {} a -> s {ruleId = a} :: CreateRule)
+
+-- | The detector ID for the rule\'s parent detector.
+createRule_detectorId :: Lens.Lens' CreateRule Prelude.Text
+createRule_detectorId = Lens.lens (\CreateRule' {detectorId} -> detectorId) (\s@CreateRule' {} a -> s {detectorId = a} :: CreateRule)
+
+-- | The rule expression.
+createRule_expression :: Lens.Lens' CreateRule Prelude.Text
+createRule_expression = Lens.lens (\CreateRule' {expression} -> expression) (\s@CreateRule' {} a -> s {expression = a} :: CreateRule) Prelude.. Data._Sensitive
+
+-- | The language of the rule.
+createRule_language :: Lens.Lens' CreateRule Language
+createRule_language = Lens.lens (\CreateRule' {language} -> language) (\s@CreateRule' {} a -> s {language = a} :: CreateRule)
+
+-- | The outcome or outcomes returned when the rule expression matches.
+createRule_outcomes :: Lens.Lens' CreateRule (Prelude.NonEmpty Prelude.Text)
+createRule_outcomes = Lens.lens (\CreateRule' {outcomes} -> outcomes) (\s@CreateRule' {} a -> s {outcomes = a} :: CreateRule) Prelude.. Lens.coerced
+
+instance Core.AWSRequest CreateRule where
+  type AWSResponse CreateRule = CreateRuleResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateRuleResponse'
+            Prelude.<$> (x Data..?> "rule")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateRule where
+  hashWithSalt _salt CreateRule' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` ruleId
+      `Prelude.hashWithSalt` detectorId
+      `Prelude.hashWithSalt` expression
+      `Prelude.hashWithSalt` language
+      `Prelude.hashWithSalt` outcomes
+
+instance Prelude.NFData CreateRule where
+  rnf CreateRule' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf ruleId
+      `Prelude.seq` Prelude.rnf detectorId
+      `Prelude.seq` Prelude.rnf expression
+      `Prelude.seq` Prelude.rnf language
+      `Prelude.seq` Prelude.rnf outcomes
+
+instance Data.ToHeaders CreateRule where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.CreateRule" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateRule where
+  toJSON CreateRule' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("ruleId" Data..= ruleId),
+            Prelude.Just ("detectorId" Data..= detectorId),
+            Prelude.Just ("expression" Data..= expression),
+            Prelude.Just ("language" Data..= language),
+            Prelude.Just ("outcomes" Data..= outcomes)
+          ]
+      )
+
+instance Data.ToPath CreateRule where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateRule where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateRuleResponse' smart constructor.
+data CreateRuleResponse = CreateRuleResponse'
+  { -- | The created rule.
+    rule :: Prelude.Maybe Rule,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRuleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'rule', 'createRuleResponse_rule' - The created rule.
+--
+-- 'httpStatus', 'createRuleResponse_httpStatus' - The response's http status code.
+newCreateRuleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateRuleResponse
+newCreateRuleResponse pHttpStatus_ =
+  CreateRuleResponse'
+    { rule = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The created rule.
+createRuleResponse_rule :: Lens.Lens' CreateRuleResponse (Prelude.Maybe Rule)
+createRuleResponse_rule = Lens.lens (\CreateRuleResponse' {rule} -> rule) (\s@CreateRuleResponse' {} a -> s {rule = a} :: CreateRuleResponse)
+
+-- | The response's http status code.
+createRuleResponse_httpStatus :: Lens.Lens' CreateRuleResponse Prelude.Int
+createRuleResponse_httpStatus = Lens.lens (\CreateRuleResponse' {httpStatus} -> httpStatus) (\s@CreateRuleResponse' {} a -> s {httpStatus = a} :: CreateRuleResponse)
+
+instance Prelude.NFData CreateRuleResponse where
+  rnf CreateRuleResponse' {..} =
+    Prelude.rnf rule
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/CreateVariable.hs b/gen/Amazonka/FraudDetector/CreateVariable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/CreateVariable.hs
@@ -0,0 +1,258 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.CreateVariable
+-- 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 variable.
+module Amazonka.FraudDetector.CreateVariable
+  ( -- * Creating a Request
+    CreateVariable (..),
+    newCreateVariable,
+
+    -- * Request Lenses
+    createVariable_description,
+    createVariable_tags,
+    createVariable_variableType,
+    createVariable_name,
+    createVariable_dataType,
+    createVariable_dataSource,
+    createVariable_defaultValue,
+
+    -- * Destructuring the Response
+    CreateVariableResponse (..),
+    newCreateVariableResponse,
+
+    -- * Response Lenses
+    createVariableResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateVariable' smart constructor.
+data CreateVariable = CreateVariable'
+  { -- | The description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A collection of key and value pairs.
+    tags :: Prelude.Maybe [Tag],
+    -- | The variable type. For more information see
+    -- <https://docs.aws.amazon.com/frauddetector/latest/ug/create-a-variable.html#variable-types Variable types>.
+    --
+    -- Valid Values:
+    -- @AUTH_CODE | AVS | BILLING_ADDRESS_L1 | BILLING_ADDRESS_L2 | BILLING_CITY | BILLING_COUNTRY | BILLING_NAME | BILLING_PHONE | BILLING_STATE | BILLING_ZIP | CARD_BIN | CATEGORICAL | CURRENCY_CODE | EMAIL_ADDRESS | FINGERPRINT | FRAUD_LABEL | FREE_FORM_TEXT | IP_ADDRESS | NUMERIC | ORDER_ID | PAYMENT_TYPE | PHONE_NUMBER | PRICE | PRODUCT_CATEGORY | SHIPPING_ADDRESS_L1 | SHIPPING_ADDRESS_L2 | SHIPPING_CITY | SHIPPING_COUNTRY | SHIPPING_NAME | SHIPPING_PHONE | SHIPPING_STATE | SHIPPING_ZIP | USERAGENT@
+    variableType :: Prelude.Maybe Prelude.Text,
+    -- | The name of the variable.
+    name :: Prelude.Text,
+    -- | The data type.
+    dataType :: DataType,
+    -- | The source of the data.
+    dataSource :: DataSource,
+    -- | The default value for the variable when no value is received.
+    defaultValue :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVariable' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createVariable_description' - The description.
+--
+-- 'tags', 'createVariable_tags' - A collection of key and value pairs.
+--
+-- 'variableType', 'createVariable_variableType' - The variable type. For more information see
+-- <https://docs.aws.amazon.com/frauddetector/latest/ug/create-a-variable.html#variable-types Variable types>.
+--
+-- Valid Values:
+-- @AUTH_CODE | AVS | BILLING_ADDRESS_L1 | BILLING_ADDRESS_L2 | BILLING_CITY | BILLING_COUNTRY | BILLING_NAME | BILLING_PHONE | BILLING_STATE | BILLING_ZIP | CARD_BIN | CATEGORICAL | CURRENCY_CODE | EMAIL_ADDRESS | FINGERPRINT | FRAUD_LABEL | FREE_FORM_TEXT | IP_ADDRESS | NUMERIC | ORDER_ID | PAYMENT_TYPE | PHONE_NUMBER | PRICE | PRODUCT_CATEGORY | SHIPPING_ADDRESS_L1 | SHIPPING_ADDRESS_L2 | SHIPPING_CITY | SHIPPING_COUNTRY | SHIPPING_NAME | SHIPPING_PHONE | SHIPPING_STATE | SHIPPING_ZIP | USERAGENT@
+--
+-- 'name', 'createVariable_name' - The name of the variable.
+--
+-- 'dataType', 'createVariable_dataType' - The data type.
+--
+-- 'dataSource', 'createVariable_dataSource' - The source of the data.
+--
+-- 'defaultValue', 'createVariable_defaultValue' - The default value for the variable when no value is received.
+newCreateVariable ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'dataType'
+  DataType ->
+  -- | 'dataSource'
+  DataSource ->
+  -- | 'defaultValue'
+  Prelude.Text ->
+  CreateVariable
+newCreateVariable
+  pName_
+  pDataType_
+  pDataSource_
+  pDefaultValue_ =
+    CreateVariable'
+      { description = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        variableType = Prelude.Nothing,
+        name = pName_,
+        dataType = pDataType_,
+        dataSource = pDataSource_,
+        defaultValue = pDefaultValue_
+      }
+
+-- | The description.
+createVariable_description :: Lens.Lens' CreateVariable (Prelude.Maybe Prelude.Text)
+createVariable_description = Lens.lens (\CreateVariable' {description} -> description) (\s@CreateVariable' {} a -> s {description = a} :: CreateVariable)
+
+-- | A collection of key and value pairs.
+createVariable_tags :: Lens.Lens' CreateVariable (Prelude.Maybe [Tag])
+createVariable_tags = Lens.lens (\CreateVariable' {tags} -> tags) (\s@CreateVariable' {} a -> s {tags = a} :: CreateVariable) Prelude.. Lens.mapping Lens.coerced
+
+-- | The variable type. For more information see
+-- <https://docs.aws.amazon.com/frauddetector/latest/ug/create-a-variable.html#variable-types Variable types>.
+--
+-- Valid Values:
+-- @AUTH_CODE | AVS | BILLING_ADDRESS_L1 | BILLING_ADDRESS_L2 | BILLING_CITY | BILLING_COUNTRY | BILLING_NAME | BILLING_PHONE | BILLING_STATE | BILLING_ZIP | CARD_BIN | CATEGORICAL | CURRENCY_CODE | EMAIL_ADDRESS | FINGERPRINT | FRAUD_LABEL | FREE_FORM_TEXT | IP_ADDRESS | NUMERIC | ORDER_ID | PAYMENT_TYPE | PHONE_NUMBER | PRICE | PRODUCT_CATEGORY | SHIPPING_ADDRESS_L1 | SHIPPING_ADDRESS_L2 | SHIPPING_CITY | SHIPPING_COUNTRY | SHIPPING_NAME | SHIPPING_PHONE | SHIPPING_STATE | SHIPPING_ZIP | USERAGENT@
+createVariable_variableType :: Lens.Lens' CreateVariable (Prelude.Maybe Prelude.Text)
+createVariable_variableType = Lens.lens (\CreateVariable' {variableType} -> variableType) (\s@CreateVariable' {} a -> s {variableType = a} :: CreateVariable)
+
+-- | The name of the variable.
+createVariable_name :: Lens.Lens' CreateVariable Prelude.Text
+createVariable_name = Lens.lens (\CreateVariable' {name} -> name) (\s@CreateVariable' {} a -> s {name = a} :: CreateVariable)
+
+-- | The data type.
+createVariable_dataType :: Lens.Lens' CreateVariable DataType
+createVariable_dataType = Lens.lens (\CreateVariable' {dataType} -> dataType) (\s@CreateVariable' {} a -> s {dataType = a} :: CreateVariable)
+
+-- | The source of the data.
+createVariable_dataSource :: Lens.Lens' CreateVariable DataSource
+createVariable_dataSource = Lens.lens (\CreateVariable' {dataSource} -> dataSource) (\s@CreateVariable' {} a -> s {dataSource = a} :: CreateVariable)
+
+-- | The default value for the variable when no value is received.
+createVariable_defaultValue :: Lens.Lens' CreateVariable Prelude.Text
+createVariable_defaultValue = Lens.lens (\CreateVariable' {defaultValue} -> defaultValue) (\s@CreateVariable' {} a -> s {defaultValue = a} :: CreateVariable)
+
+instance Core.AWSRequest CreateVariable where
+  type
+    AWSResponse CreateVariable =
+      CreateVariableResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          CreateVariableResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateVariable where
+  hashWithSalt _salt CreateVariable' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` variableType
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` dataType
+      `Prelude.hashWithSalt` dataSource
+      `Prelude.hashWithSalt` defaultValue
+
+instance Prelude.NFData CreateVariable where
+  rnf CreateVariable' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf variableType
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf dataType
+      `Prelude.seq` Prelude.rnf dataSource
+      `Prelude.seq` Prelude.rnf defaultValue
+
+instance Data.ToHeaders CreateVariable where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.CreateVariable" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateVariable where
+  toJSON CreateVariable' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("tags" Data..=) Prelude.<$> tags,
+            ("variableType" Data..=) Prelude.<$> variableType,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("dataType" Data..= dataType),
+            Prelude.Just ("dataSource" Data..= dataSource),
+            Prelude.Just ("defaultValue" Data..= defaultValue)
+          ]
+      )
+
+instance Data.ToPath CreateVariable where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateVariable where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateVariableResponse' smart constructor.
+data CreateVariableResponse = CreateVariableResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVariableResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createVariableResponse_httpStatus' - The response's http status code.
+newCreateVariableResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateVariableResponse
+newCreateVariableResponse pHttpStatus_ =
+  CreateVariableResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+createVariableResponse_httpStatus :: Lens.Lens' CreateVariableResponse Prelude.Int
+createVariableResponse_httpStatus = Lens.lens (\CreateVariableResponse' {httpStatus} -> httpStatus) (\s@CreateVariableResponse' {} a -> s {httpStatus = a} :: CreateVariableResponse)
+
+instance Prelude.NFData CreateVariableResponse where
+  rnf CreateVariableResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/DeleteBatchImportJob.hs b/gen/Amazonka/FraudDetector/DeleteBatchImportJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/DeleteBatchImportJob.hs
@@ -0,0 +1,157 @@
+{-# 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.FraudDetector.DeleteBatchImportJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified batch import job ID record. This action does not
+-- delete the data that was batch imported.
+module Amazonka.FraudDetector.DeleteBatchImportJob
+  ( -- * Creating a Request
+    DeleteBatchImportJob (..),
+    newDeleteBatchImportJob,
+
+    -- * Request Lenses
+    deleteBatchImportJob_jobId,
+
+    -- * Destructuring the Response
+    DeleteBatchImportJobResponse (..),
+    newDeleteBatchImportJobResponse,
+
+    -- * Response Lenses
+    deleteBatchImportJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteBatchImportJob' smart constructor.
+data DeleteBatchImportJob = DeleteBatchImportJob'
+  { -- | The ID of the batch import job to delete.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteBatchImportJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'deleteBatchImportJob_jobId' - The ID of the batch import job to delete.
+newDeleteBatchImportJob ::
+  -- | 'jobId'
+  Prelude.Text ->
+  DeleteBatchImportJob
+newDeleteBatchImportJob pJobId_ =
+  DeleteBatchImportJob' {jobId = pJobId_}
+
+-- | The ID of the batch import job to delete.
+deleteBatchImportJob_jobId :: Lens.Lens' DeleteBatchImportJob Prelude.Text
+deleteBatchImportJob_jobId = Lens.lens (\DeleteBatchImportJob' {jobId} -> jobId) (\s@DeleteBatchImportJob' {} a -> s {jobId = a} :: DeleteBatchImportJob)
+
+instance Core.AWSRequest DeleteBatchImportJob where
+  type
+    AWSResponse DeleteBatchImportJob =
+      DeleteBatchImportJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteBatchImportJobResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteBatchImportJob where
+  hashWithSalt _salt DeleteBatchImportJob' {..} =
+    _salt `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData DeleteBatchImportJob where
+  rnf DeleteBatchImportJob' {..} = Prelude.rnf jobId
+
+instance Data.ToHeaders DeleteBatchImportJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.DeleteBatchImportJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteBatchImportJob where
+  toJSON DeleteBatchImportJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("jobId" Data..= jobId)]
+      )
+
+instance Data.ToPath DeleteBatchImportJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteBatchImportJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteBatchImportJobResponse' smart constructor.
+data DeleteBatchImportJobResponse = DeleteBatchImportJobResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteBatchImportJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteBatchImportJobResponse_httpStatus' - The response's http status code.
+newDeleteBatchImportJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteBatchImportJobResponse
+newDeleteBatchImportJobResponse pHttpStatus_ =
+  DeleteBatchImportJobResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteBatchImportJobResponse_httpStatus :: Lens.Lens' DeleteBatchImportJobResponse Prelude.Int
+deleteBatchImportJobResponse_httpStatus = Lens.lens (\DeleteBatchImportJobResponse' {httpStatus} -> httpStatus) (\s@DeleteBatchImportJobResponse' {} a -> s {httpStatus = a} :: DeleteBatchImportJobResponse)
+
+instance Prelude.NFData DeleteBatchImportJobResponse where
+  rnf DeleteBatchImportJobResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/DeleteBatchPredictionJob.hs b/gen/Amazonka/FraudDetector/DeleteBatchPredictionJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/DeleteBatchPredictionJob.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.FraudDetector.DeleteBatchPredictionJob
+-- 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 batch prediction job.
+module Amazonka.FraudDetector.DeleteBatchPredictionJob
+  ( -- * Creating a Request
+    DeleteBatchPredictionJob (..),
+    newDeleteBatchPredictionJob,
+
+    -- * Request Lenses
+    deleteBatchPredictionJob_jobId,
+
+    -- * Destructuring the Response
+    DeleteBatchPredictionJobResponse (..),
+    newDeleteBatchPredictionJobResponse,
+
+    -- * Response Lenses
+    deleteBatchPredictionJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteBatchPredictionJob' smart constructor.
+data DeleteBatchPredictionJob = DeleteBatchPredictionJob'
+  { -- | The ID of the batch prediction job to delete.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteBatchPredictionJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'deleteBatchPredictionJob_jobId' - The ID of the batch prediction job to delete.
+newDeleteBatchPredictionJob ::
+  -- | 'jobId'
+  Prelude.Text ->
+  DeleteBatchPredictionJob
+newDeleteBatchPredictionJob pJobId_ =
+  DeleteBatchPredictionJob' {jobId = pJobId_}
+
+-- | The ID of the batch prediction job to delete.
+deleteBatchPredictionJob_jobId :: Lens.Lens' DeleteBatchPredictionJob Prelude.Text
+deleteBatchPredictionJob_jobId = Lens.lens (\DeleteBatchPredictionJob' {jobId} -> jobId) (\s@DeleteBatchPredictionJob' {} a -> s {jobId = a} :: DeleteBatchPredictionJob)
+
+instance Core.AWSRequest DeleteBatchPredictionJob where
+  type
+    AWSResponse DeleteBatchPredictionJob =
+      DeleteBatchPredictionJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteBatchPredictionJobResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteBatchPredictionJob where
+  hashWithSalt _salt DeleteBatchPredictionJob' {..} =
+    _salt `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData DeleteBatchPredictionJob where
+  rnf DeleteBatchPredictionJob' {..} = Prelude.rnf jobId
+
+instance Data.ToHeaders DeleteBatchPredictionJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.DeleteBatchPredictionJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteBatchPredictionJob where
+  toJSON DeleteBatchPredictionJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("jobId" Data..= jobId)]
+      )
+
+instance Data.ToPath DeleteBatchPredictionJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteBatchPredictionJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteBatchPredictionJobResponse' smart constructor.
+data DeleteBatchPredictionJobResponse = DeleteBatchPredictionJobResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteBatchPredictionJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteBatchPredictionJobResponse_httpStatus' - The response's http status code.
+newDeleteBatchPredictionJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteBatchPredictionJobResponse
+newDeleteBatchPredictionJobResponse pHttpStatus_ =
+  DeleteBatchPredictionJobResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteBatchPredictionJobResponse_httpStatus :: Lens.Lens' DeleteBatchPredictionJobResponse Prelude.Int
+deleteBatchPredictionJobResponse_httpStatus = Lens.lens (\DeleteBatchPredictionJobResponse' {httpStatus} -> httpStatus) (\s@DeleteBatchPredictionJobResponse' {} a -> s {httpStatus = a} :: DeleteBatchPredictionJobResponse)
+
+instance
+  Prelude.NFData
+    DeleteBatchPredictionJobResponse
+  where
+  rnf DeleteBatchPredictionJobResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/DeleteDetector.hs b/gen/Amazonka/FraudDetector/DeleteDetector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/DeleteDetector.hs
@@ -0,0 +1,157 @@
+{-# 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.FraudDetector.DeleteDetector
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the detector. Before deleting a detector, you must first delete
+-- all detector versions and rule versions associated with the detector.
+--
+-- When you delete a detector, Amazon Fraud Detector permanently deletes
+-- the detector and the data is no longer stored in Amazon Fraud Detector.
+module Amazonka.FraudDetector.DeleteDetector
+  ( -- * Creating a Request
+    DeleteDetector (..),
+    newDeleteDetector,
+
+    -- * Request Lenses
+    deleteDetector_detectorId,
+
+    -- * Destructuring the Response
+    DeleteDetectorResponse (..),
+    newDeleteDetectorResponse,
+
+    -- * Response Lenses
+    deleteDetectorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteDetector' smart constructor.
+data DeleteDetector = DeleteDetector'
+  { -- | The ID of the detector to delete.
+    detectorId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDetector' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detectorId', 'deleteDetector_detectorId' - The ID of the detector to delete.
+newDeleteDetector ::
+  -- | 'detectorId'
+  Prelude.Text ->
+  DeleteDetector
+newDeleteDetector pDetectorId_ =
+  DeleteDetector' {detectorId = pDetectorId_}
+
+-- | The ID of the detector to delete.
+deleteDetector_detectorId :: Lens.Lens' DeleteDetector Prelude.Text
+deleteDetector_detectorId = Lens.lens (\DeleteDetector' {detectorId} -> detectorId) (\s@DeleteDetector' {} a -> s {detectorId = a} :: DeleteDetector)
+
+instance Core.AWSRequest DeleteDetector where
+  type
+    AWSResponse DeleteDetector =
+      DeleteDetectorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteDetectorResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteDetector where
+  hashWithSalt _salt DeleteDetector' {..} =
+    _salt `Prelude.hashWithSalt` detectorId
+
+instance Prelude.NFData DeleteDetector where
+  rnf DeleteDetector' {..} = Prelude.rnf detectorId
+
+instance Data.ToHeaders DeleteDetector where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.DeleteDetector" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteDetector where
+  toJSON DeleteDetector' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("detectorId" Data..= detectorId)]
+      )
+
+instance Data.ToPath DeleteDetector where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteDetector where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteDetectorResponse' smart constructor.
+data DeleteDetectorResponse = DeleteDetectorResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDetectorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteDetectorResponse_httpStatus' - The response's http status code.
+newDeleteDetectorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteDetectorResponse
+newDeleteDetectorResponse pHttpStatus_ =
+  DeleteDetectorResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteDetectorResponse_httpStatus :: Lens.Lens' DeleteDetectorResponse Prelude.Int
+deleteDetectorResponse_httpStatus = Lens.lens (\DeleteDetectorResponse' {httpStatus} -> httpStatus) (\s@DeleteDetectorResponse' {} a -> s {httpStatus = a} :: DeleteDetectorResponse)
+
+instance Prelude.NFData DeleteDetectorResponse where
+  rnf DeleteDetectorResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/DeleteDetectorVersion.hs b/gen/Amazonka/FraudDetector/DeleteDetectorVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/DeleteDetectorVersion.hs
@@ -0,0 +1,184 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.DeleteDetectorVersion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the detector version. You cannot delete detector versions that
+-- are in @ACTIVE@ status.
+--
+-- When you delete a detector version, Amazon Fraud Detector permanently
+-- deletes the detector and the data is no longer stored in Amazon Fraud
+-- Detector.
+module Amazonka.FraudDetector.DeleteDetectorVersion
+  ( -- * Creating a Request
+    DeleteDetectorVersion (..),
+    newDeleteDetectorVersion,
+
+    -- * Request Lenses
+    deleteDetectorVersion_detectorId,
+    deleteDetectorVersion_detectorVersionId,
+
+    -- * Destructuring the Response
+    DeleteDetectorVersionResponse (..),
+    newDeleteDetectorVersionResponse,
+
+    -- * Response Lenses
+    deleteDetectorVersionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteDetectorVersion' smart constructor.
+data DeleteDetectorVersion = DeleteDetectorVersion'
+  { -- | The ID of the parent detector for the detector version to delete.
+    detectorId :: Prelude.Text,
+    -- | The ID of the detector version to delete.
+    detectorVersionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDetectorVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detectorId', 'deleteDetectorVersion_detectorId' - The ID of the parent detector for the detector version to delete.
+--
+-- 'detectorVersionId', 'deleteDetectorVersion_detectorVersionId' - The ID of the detector version to delete.
+newDeleteDetectorVersion ::
+  -- | 'detectorId'
+  Prelude.Text ->
+  -- | 'detectorVersionId'
+  Prelude.Text ->
+  DeleteDetectorVersion
+newDeleteDetectorVersion
+  pDetectorId_
+  pDetectorVersionId_ =
+    DeleteDetectorVersion'
+      { detectorId = pDetectorId_,
+        detectorVersionId = pDetectorVersionId_
+      }
+
+-- | The ID of the parent detector for the detector version to delete.
+deleteDetectorVersion_detectorId :: Lens.Lens' DeleteDetectorVersion Prelude.Text
+deleteDetectorVersion_detectorId = Lens.lens (\DeleteDetectorVersion' {detectorId} -> detectorId) (\s@DeleteDetectorVersion' {} a -> s {detectorId = a} :: DeleteDetectorVersion)
+
+-- | The ID of the detector version to delete.
+deleteDetectorVersion_detectorVersionId :: Lens.Lens' DeleteDetectorVersion Prelude.Text
+deleteDetectorVersion_detectorVersionId = Lens.lens (\DeleteDetectorVersion' {detectorVersionId} -> detectorVersionId) (\s@DeleteDetectorVersion' {} a -> s {detectorVersionId = a} :: DeleteDetectorVersion)
+
+instance Core.AWSRequest DeleteDetectorVersion where
+  type
+    AWSResponse DeleteDetectorVersion =
+      DeleteDetectorVersionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteDetectorVersionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteDetectorVersion where
+  hashWithSalt _salt DeleteDetectorVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` detectorId
+      `Prelude.hashWithSalt` detectorVersionId
+
+instance Prelude.NFData DeleteDetectorVersion where
+  rnf DeleteDetectorVersion' {..} =
+    Prelude.rnf detectorId
+      `Prelude.seq` Prelude.rnf detectorVersionId
+
+instance Data.ToHeaders DeleteDetectorVersion where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.DeleteDetectorVersion" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteDetectorVersion where
+  toJSON DeleteDetectorVersion' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("detectorId" Data..= detectorId),
+            Prelude.Just
+              ("detectorVersionId" Data..= detectorVersionId)
+          ]
+      )
+
+instance Data.ToPath DeleteDetectorVersion where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteDetectorVersion where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteDetectorVersionResponse' smart constructor.
+data DeleteDetectorVersionResponse = DeleteDetectorVersionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDetectorVersionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteDetectorVersionResponse_httpStatus' - The response's http status code.
+newDeleteDetectorVersionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteDetectorVersionResponse
+newDeleteDetectorVersionResponse pHttpStatus_ =
+  DeleteDetectorVersionResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteDetectorVersionResponse_httpStatus :: Lens.Lens' DeleteDetectorVersionResponse Prelude.Int
+deleteDetectorVersionResponse_httpStatus = Lens.lens (\DeleteDetectorVersionResponse' {httpStatus} -> httpStatus) (\s@DeleteDetectorVersionResponse' {} a -> s {httpStatus = a} :: DeleteDetectorVersionResponse)
+
+instance Prelude.NFData DeleteDetectorVersionResponse where
+  rnf DeleteDetectorVersionResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/DeleteEntityType.hs b/gen/Amazonka/FraudDetector/DeleteEntityType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/DeleteEntityType.hs
@@ -0,0 +1,162 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.DeleteEntityType
+-- 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 entity type.
+--
+-- You cannot delete an entity type that is included in an event type.
+--
+-- When you delete an entity type, Amazon Fraud Detector permanently
+-- deletes that entity type and the data is no longer stored in Amazon
+-- Fraud Detector.
+module Amazonka.FraudDetector.DeleteEntityType
+  ( -- * Creating a Request
+    DeleteEntityType (..),
+    newDeleteEntityType,
+
+    -- * Request Lenses
+    deleteEntityType_name,
+
+    -- * Destructuring the Response
+    DeleteEntityTypeResponse (..),
+    newDeleteEntityTypeResponse,
+
+    -- * Response Lenses
+    deleteEntityTypeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteEntityType' smart constructor.
+data DeleteEntityType = DeleteEntityType'
+  { -- | The name of the entity type to delete.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEntityType' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'deleteEntityType_name' - The name of the entity type to delete.
+newDeleteEntityType ::
+  -- | 'name'
+  Prelude.Text ->
+  DeleteEntityType
+newDeleteEntityType pName_ =
+  DeleteEntityType' {name = pName_}
+
+-- | The name of the entity type to delete.
+deleteEntityType_name :: Lens.Lens' DeleteEntityType Prelude.Text
+deleteEntityType_name = Lens.lens (\DeleteEntityType' {name} -> name) (\s@DeleteEntityType' {} a -> s {name = a} :: DeleteEntityType)
+
+instance Core.AWSRequest DeleteEntityType where
+  type
+    AWSResponse DeleteEntityType =
+      DeleteEntityTypeResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteEntityTypeResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteEntityType where
+  hashWithSalt _salt DeleteEntityType' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DeleteEntityType where
+  rnf DeleteEntityType' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DeleteEntityType where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.DeleteEntityType" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteEntityType where
+  toJSON DeleteEntityType' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("name" Data..= name)]
+      )
+
+instance Data.ToPath DeleteEntityType where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteEntityType where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteEntityTypeResponse' smart constructor.
+data DeleteEntityTypeResponse = DeleteEntityTypeResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEntityTypeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteEntityTypeResponse_httpStatus' - The response's http status code.
+newDeleteEntityTypeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteEntityTypeResponse
+newDeleteEntityTypeResponse pHttpStatus_ =
+  DeleteEntityTypeResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteEntityTypeResponse_httpStatus :: Lens.Lens' DeleteEntityTypeResponse Prelude.Int
+deleteEntityTypeResponse_httpStatus = Lens.lens (\DeleteEntityTypeResponse' {httpStatus} -> httpStatus) (\s@DeleteEntityTypeResponse' {} a -> s {httpStatus = a} :: DeleteEntityTypeResponse)
+
+instance Prelude.NFData DeleteEntityTypeResponse where
+  rnf DeleteEntityTypeResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/DeleteEvent.hs b/gen/Amazonka/FraudDetector/DeleteEvent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/DeleteEvent.hs
@@ -0,0 +1,191 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.DeleteEvent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified event.
+--
+-- When you delete an event, Amazon Fraud Detector permanently deletes that
+-- event and the event data is no longer stored in Amazon Fraud Detector.
+module Amazonka.FraudDetector.DeleteEvent
+  ( -- * Creating a Request
+    DeleteEvent (..),
+    newDeleteEvent,
+
+    -- * Request Lenses
+    deleteEvent_deleteAuditHistory,
+    deleteEvent_eventId,
+    deleteEvent_eventTypeName,
+
+    -- * Destructuring the Response
+    DeleteEventResponse (..),
+    newDeleteEventResponse,
+
+    -- * Response Lenses
+    deleteEventResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteEvent' smart constructor.
+data DeleteEvent = DeleteEvent'
+  { -- | Specifies whether or not to delete any predictions associated with the
+    -- event.
+    deleteAuditHistory :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the event to delete.
+    eventId :: Prelude.Text,
+    -- | The name of the event type.
+    eventTypeName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEvent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deleteAuditHistory', 'deleteEvent_deleteAuditHistory' - Specifies whether or not to delete any predictions associated with the
+-- event.
+--
+-- 'eventId', 'deleteEvent_eventId' - The ID of the event to delete.
+--
+-- 'eventTypeName', 'deleteEvent_eventTypeName' - The name of the event type.
+newDeleteEvent ::
+  -- | 'eventId'
+  Prelude.Text ->
+  -- | 'eventTypeName'
+  Prelude.Text ->
+  DeleteEvent
+newDeleteEvent pEventId_ pEventTypeName_ =
+  DeleteEvent'
+    { deleteAuditHistory = Prelude.Nothing,
+      eventId = pEventId_,
+      eventTypeName = pEventTypeName_
+    }
+
+-- | Specifies whether or not to delete any predictions associated with the
+-- event.
+deleteEvent_deleteAuditHistory :: Lens.Lens' DeleteEvent (Prelude.Maybe Prelude.Bool)
+deleteEvent_deleteAuditHistory = Lens.lens (\DeleteEvent' {deleteAuditHistory} -> deleteAuditHistory) (\s@DeleteEvent' {} a -> s {deleteAuditHistory = a} :: DeleteEvent)
+
+-- | The ID of the event to delete.
+deleteEvent_eventId :: Lens.Lens' DeleteEvent Prelude.Text
+deleteEvent_eventId = Lens.lens (\DeleteEvent' {eventId} -> eventId) (\s@DeleteEvent' {} a -> s {eventId = a} :: DeleteEvent)
+
+-- | The name of the event type.
+deleteEvent_eventTypeName :: Lens.Lens' DeleteEvent Prelude.Text
+deleteEvent_eventTypeName = Lens.lens (\DeleteEvent' {eventTypeName} -> eventTypeName) (\s@DeleteEvent' {} a -> s {eventTypeName = a} :: DeleteEvent)
+
+instance Core.AWSRequest DeleteEvent where
+  type AWSResponse DeleteEvent = DeleteEventResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteEventResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteEvent where
+  hashWithSalt _salt DeleteEvent' {..} =
+    _salt
+      `Prelude.hashWithSalt` deleteAuditHistory
+      `Prelude.hashWithSalt` eventId
+      `Prelude.hashWithSalt` eventTypeName
+
+instance Prelude.NFData DeleteEvent where
+  rnf DeleteEvent' {..} =
+    Prelude.rnf deleteAuditHistory
+      `Prelude.seq` Prelude.rnf eventId
+      `Prelude.seq` Prelude.rnf eventTypeName
+
+instance Data.ToHeaders DeleteEvent where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.DeleteEvent" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteEvent where
+  toJSON DeleteEvent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("deleteAuditHistory" Data..=)
+              Prelude.<$> deleteAuditHistory,
+            Prelude.Just ("eventId" Data..= eventId),
+            Prelude.Just
+              ("eventTypeName" Data..= eventTypeName)
+          ]
+      )
+
+instance Data.ToPath DeleteEvent where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteEvent where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteEventResponse' smart constructor.
+data DeleteEventResponse = DeleteEventResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEventResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteEventResponse_httpStatus' - The response's http status code.
+newDeleteEventResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteEventResponse
+newDeleteEventResponse pHttpStatus_ =
+  DeleteEventResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteEventResponse_httpStatus :: Lens.Lens' DeleteEventResponse Prelude.Int
+deleteEventResponse_httpStatus = Lens.lens (\DeleteEventResponse' {httpStatus} -> httpStatus) (\s@DeleteEventResponse' {} a -> s {httpStatus = a} :: DeleteEventResponse)
+
+instance Prelude.NFData DeleteEventResponse where
+  rnf DeleteEventResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/DeleteEventType.hs b/gen/Amazonka/FraudDetector/DeleteEventType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/DeleteEventType.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.FraudDetector.DeleteEventType
+-- 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 event type.
+--
+-- You cannot delete an event type that is used in a detector or a model.
+--
+-- When you delete an event type, Amazon Fraud Detector permanently deletes
+-- that event type and the data is no longer stored in Amazon Fraud
+-- Detector.
+module Amazonka.FraudDetector.DeleteEventType
+  ( -- * Creating a Request
+    DeleteEventType (..),
+    newDeleteEventType,
+
+    -- * Request Lenses
+    deleteEventType_name,
+
+    -- * Destructuring the Response
+    DeleteEventTypeResponse (..),
+    newDeleteEventTypeResponse,
+
+    -- * Response Lenses
+    deleteEventTypeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteEventType' smart constructor.
+data DeleteEventType = DeleteEventType'
+  { -- | The name of the event type to delete.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEventType' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'deleteEventType_name' - The name of the event type to delete.
+newDeleteEventType ::
+  -- | 'name'
+  Prelude.Text ->
+  DeleteEventType
+newDeleteEventType pName_ =
+  DeleteEventType' {name = pName_}
+
+-- | The name of the event type to delete.
+deleteEventType_name :: Lens.Lens' DeleteEventType Prelude.Text
+deleteEventType_name = Lens.lens (\DeleteEventType' {name} -> name) (\s@DeleteEventType' {} a -> s {name = a} :: DeleteEventType)
+
+instance Core.AWSRequest DeleteEventType where
+  type
+    AWSResponse DeleteEventType =
+      DeleteEventTypeResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteEventTypeResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteEventType where
+  hashWithSalt _salt DeleteEventType' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DeleteEventType where
+  rnf DeleteEventType' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DeleteEventType where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.DeleteEventType" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteEventType where
+  toJSON DeleteEventType' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("name" Data..= name)]
+      )
+
+instance Data.ToPath DeleteEventType where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteEventType where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteEventTypeResponse' smart constructor.
+data DeleteEventTypeResponse = DeleteEventTypeResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEventTypeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteEventTypeResponse_httpStatus' - The response's http status code.
+newDeleteEventTypeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteEventTypeResponse
+newDeleteEventTypeResponse pHttpStatus_ =
+  DeleteEventTypeResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteEventTypeResponse_httpStatus :: Lens.Lens' DeleteEventTypeResponse Prelude.Int
+deleteEventTypeResponse_httpStatus = Lens.lens (\DeleteEventTypeResponse' {httpStatus} -> httpStatus) (\s@DeleteEventTypeResponse' {} a -> s {httpStatus = a} :: DeleteEventTypeResponse)
+
+instance Prelude.NFData DeleteEventTypeResponse where
+  rnf DeleteEventTypeResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/DeleteEventsByEventType.hs b/gen/Amazonka/FraudDetector/DeleteEventsByEventType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/DeleteEventsByEventType.hs
@@ -0,0 +1,189 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.DeleteEventsByEventType
+-- 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 all events of a particular event type.
+module Amazonka.FraudDetector.DeleteEventsByEventType
+  ( -- * Creating a Request
+    DeleteEventsByEventType (..),
+    newDeleteEventsByEventType,
+
+    -- * Request Lenses
+    deleteEventsByEventType_eventTypeName,
+
+    -- * Destructuring the Response
+    DeleteEventsByEventTypeResponse (..),
+    newDeleteEventsByEventTypeResponse,
+
+    -- * Response Lenses
+    deleteEventsByEventTypeResponse_eventTypeName,
+    deleteEventsByEventTypeResponse_eventsDeletionStatus,
+    deleteEventsByEventTypeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteEventsByEventType' smart constructor.
+data DeleteEventsByEventType = DeleteEventsByEventType'
+  { -- | The name of the event type.
+    eventTypeName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEventsByEventType' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eventTypeName', 'deleteEventsByEventType_eventTypeName' - The name of the event type.
+newDeleteEventsByEventType ::
+  -- | 'eventTypeName'
+  Prelude.Text ->
+  DeleteEventsByEventType
+newDeleteEventsByEventType pEventTypeName_ =
+  DeleteEventsByEventType'
+    { eventTypeName =
+        pEventTypeName_
+    }
+
+-- | The name of the event type.
+deleteEventsByEventType_eventTypeName :: Lens.Lens' DeleteEventsByEventType Prelude.Text
+deleteEventsByEventType_eventTypeName = Lens.lens (\DeleteEventsByEventType' {eventTypeName} -> eventTypeName) (\s@DeleteEventsByEventType' {} a -> s {eventTypeName = a} :: DeleteEventsByEventType)
+
+instance Core.AWSRequest DeleteEventsByEventType where
+  type
+    AWSResponse DeleteEventsByEventType =
+      DeleteEventsByEventTypeResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteEventsByEventTypeResponse'
+            Prelude.<$> (x Data..?> "eventTypeName")
+            Prelude.<*> (x Data..?> "eventsDeletionStatus")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteEventsByEventType where
+  hashWithSalt _salt DeleteEventsByEventType' {..} =
+    _salt `Prelude.hashWithSalt` eventTypeName
+
+instance Prelude.NFData DeleteEventsByEventType where
+  rnf DeleteEventsByEventType' {..} =
+    Prelude.rnf eventTypeName
+
+instance Data.ToHeaders DeleteEventsByEventType where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.DeleteEventsByEventType" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteEventsByEventType where
+  toJSON DeleteEventsByEventType' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("eventTypeName" Data..= eventTypeName)
+          ]
+      )
+
+instance Data.ToPath DeleteEventsByEventType where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteEventsByEventType where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteEventsByEventTypeResponse' smart constructor.
+data DeleteEventsByEventTypeResponse = DeleteEventsByEventTypeResponse'
+  { -- | Name of event type for which to delete the events.
+    eventTypeName :: Prelude.Maybe Prelude.Text,
+    -- | The status of the delete request.
+    eventsDeletionStatus :: 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 'DeleteEventsByEventTypeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eventTypeName', 'deleteEventsByEventTypeResponse_eventTypeName' - Name of event type for which to delete the events.
+--
+-- 'eventsDeletionStatus', 'deleteEventsByEventTypeResponse_eventsDeletionStatus' - The status of the delete request.
+--
+-- 'httpStatus', 'deleteEventsByEventTypeResponse_httpStatus' - The response's http status code.
+newDeleteEventsByEventTypeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteEventsByEventTypeResponse
+newDeleteEventsByEventTypeResponse pHttpStatus_ =
+  DeleteEventsByEventTypeResponse'
+    { eventTypeName =
+        Prelude.Nothing,
+      eventsDeletionStatus = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Name of event type for which to delete the events.
+deleteEventsByEventTypeResponse_eventTypeName :: Lens.Lens' DeleteEventsByEventTypeResponse (Prelude.Maybe Prelude.Text)
+deleteEventsByEventTypeResponse_eventTypeName = Lens.lens (\DeleteEventsByEventTypeResponse' {eventTypeName} -> eventTypeName) (\s@DeleteEventsByEventTypeResponse' {} a -> s {eventTypeName = a} :: DeleteEventsByEventTypeResponse)
+
+-- | The status of the delete request.
+deleteEventsByEventTypeResponse_eventsDeletionStatus :: Lens.Lens' DeleteEventsByEventTypeResponse (Prelude.Maybe Prelude.Text)
+deleteEventsByEventTypeResponse_eventsDeletionStatus = Lens.lens (\DeleteEventsByEventTypeResponse' {eventsDeletionStatus} -> eventsDeletionStatus) (\s@DeleteEventsByEventTypeResponse' {} a -> s {eventsDeletionStatus = a} :: DeleteEventsByEventTypeResponse)
+
+-- | The response's http status code.
+deleteEventsByEventTypeResponse_httpStatus :: Lens.Lens' DeleteEventsByEventTypeResponse Prelude.Int
+deleteEventsByEventTypeResponse_httpStatus = Lens.lens (\DeleteEventsByEventTypeResponse' {httpStatus} -> httpStatus) (\s@DeleteEventsByEventTypeResponse' {} a -> s {httpStatus = a} :: DeleteEventsByEventTypeResponse)
+
+instance
+  Prelude.NFData
+    DeleteEventsByEventTypeResponse
+  where
+  rnf DeleteEventsByEventTypeResponse' {..} =
+    Prelude.rnf eventTypeName
+      `Prelude.seq` Prelude.rnf eventsDeletionStatus
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/DeleteExternalModel.hs b/gen/Amazonka/FraudDetector/DeleteExternalModel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/DeleteExternalModel.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.DeleteExternalModel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes a SageMaker model from Amazon Fraud Detector.
+--
+-- You can remove an Amazon SageMaker model if it is not associated with a
+-- detector version. Removing a SageMaker model disconnects it from Amazon
+-- Fraud Detector, but the model remains available in SageMaker.
+module Amazonka.FraudDetector.DeleteExternalModel
+  ( -- * Creating a Request
+    DeleteExternalModel (..),
+    newDeleteExternalModel,
+
+    -- * Request Lenses
+    deleteExternalModel_modelEndpoint,
+
+    -- * Destructuring the Response
+    DeleteExternalModelResponse (..),
+    newDeleteExternalModelResponse,
+
+    -- * Response Lenses
+    deleteExternalModelResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteExternalModel' smart constructor.
+data DeleteExternalModel = DeleteExternalModel'
+  { -- | The endpoint of the Amazon Sagemaker model to delete.
+    modelEndpoint :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteExternalModel' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'modelEndpoint', 'deleteExternalModel_modelEndpoint' - The endpoint of the Amazon Sagemaker model to delete.
+newDeleteExternalModel ::
+  -- | 'modelEndpoint'
+  Prelude.Text ->
+  DeleteExternalModel
+newDeleteExternalModel pModelEndpoint_ =
+  DeleteExternalModel'
+    { modelEndpoint =
+        pModelEndpoint_
+    }
+
+-- | The endpoint of the Amazon Sagemaker model to delete.
+deleteExternalModel_modelEndpoint :: Lens.Lens' DeleteExternalModel Prelude.Text
+deleteExternalModel_modelEndpoint = Lens.lens (\DeleteExternalModel' {modelEndpoint} -> modelEndpoint) (\s@DeleteExternalModel' {} a -> s {modelEndpoint = a} :: DeleteExternalModel)
+
+instance Core.AWSRequest DeleteExternalModel where
+  type
+    AWSResponse DeleteExternalModel =
+      DeleteExternalModelResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteExternalModelResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteExternalModel where
+  hashWithSalt _salt DeleteExternalModel' {..} =
+    _salt `Prelude.hashWithSalt` modelEndpoint
+
+instance Prelude.NFData DeleteExternalModel where
+  rnf DeleteExternalModel' {..} =
+    Prelude.rnf modelEndpoint
+
+instance Data.ToHeaders DeleteExternalModel where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.DeleteExternalModel" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteExternalModel where
+  toJSON DeleteExternalModel' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("modelEndpoint" Data..= modelEndpoint)
+          ]
+      )
+
+instance Data.ToPath DeleteExternalModel where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteExternalModel where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteExternalModelResponse' smart constructor.
+data DeleteExternalModelResponse = DeleteExternalModelResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteExternalModelResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteExternalModelResponse_httpStatus' - The response's http status code.
+newDeleteExternalModelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteExternalModelResponse
+newDeleteExternalModelResponse pHttpStatus_ =
+  DeleteExternalModelResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteExternalModelResponse_httpStatus :: Lens.Lens' DeleteExternalModelResponse Prelude.Int
+deleteExternalModelResponse_httpStatus = Lens.lens (\DeleteExternalModelResponse' {httpStatus} -> httpStatus) (\s@DeleteExternalModelResponse' {} a -> s {httpStatus = a} :: DeleteExternalModelResponse)
+
+instance Prelude.NFData DeleteExternalModelResponse where
+  rnf DeleteExternalModelResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/DeleteLabel.hs b/gen/Amazonka/FraudDetector/DeleteLabel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/DeleteLabel.hs
@@ -0,0 +1,158 @@
+{-# 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.FraudDetector.DeleteLabel
+-- 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 label.
+--
+-- You cannot delete labels that are included in an event type in Amazon
+-- Fraud Detector.
+--
+-- You cannot delete a label assigned to an event ID. You must first delete
+-- the relevant event ID.
+--
+-- When you delete a label, Amazon Fraud Detector permanently deletes that
+-- label and the data is no longer stored in Amazon Fraud Detector.
+module Amazonka.FraudDetector.DeleteLabel
+  ( -- * Creating a Request
+    DeleteLabel (..),
+    newDeleteLabel,
+
+    -- * Request Lenses
+    deleteLabel_name,
+
+    -- * Destructuring the Response
+    DeleteLabelResponse (..),
+    newDeleteLabelResponse,
+
+    -- * Response Lenses
+    deleteLabelResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteLabel' smart constructor.
+data DeleteLabel = DeleteLabel'
+  { -- | The name of the label to delete.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLabel' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'deleteLabel_name' - The name of the label to delete.
+newDeleteLabel ::
+  -- | 'name'
+  Prelude.Text ->
+  DeleteLabel
+newDeleteLabel pName_ = DeleteLabel' {name = pName_}
+
+-- | The name of the label to delete.
+deleteLabel_name :: Lens.Lens' DeleteLabel Prelude.Text
+deleteLabel_name = Lens.lens (\DeleteLabel' {name} -> name) (\s@DeleteLabel' {} a -> s {name = a} :: DeleteLabel)
+
+instance Core.AWSRequest DeleteLabel where
+  type AWSResponse DeleteLabel = DeleteLabelResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteLabelResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteLabel where
+  hashWithSalt _salt DeleteLabel' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DeleteLabel where
+  rnf DeleteLabel' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DeleteLabel where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.DeleteLabel" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteLabel where
+  toJSON DeleteLabel' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("name" Data..= name)]
+      )
+
+instance Data.ToPath DeleteLabel where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteLabel where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteLabelResponse' smart constructor.
+data DeleteLabelResponse = DeleteLabelResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLabelResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteLabelResponse_httpStatus' - The response's http status code.
+newDeleteLabelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteLabelResponse
+newDeleteLabelResponse pHttpStatus_ =
+  DeleteLabelResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteLabelResponse_httpStatus :: Lens.Lens' DeleteLabelResponse Prelude.Int
+deleteLabelResponse_httpStatus = Lens.lens (\DeleteLabelResponse' {httpStatus} -> httpStatus) (\s@DeleteLabelResponse' {} a -> s {httpStatus = a} :: DeleteLabelResponse)
+
+instance Prelude.NFData DeleteLabelResponse where
+  rnf DeleteLabelResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/DeleteModel.hs b/gen/Amazonka/FraudDetector/DeleteModel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/DeleteModel.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.FraudDetector.DeleteModel
+-- 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 model.
+--
+-- You can delete models and model versions in Amazon Fraud Detector,
+-- provided that they are not associated with a detector version.
+--
+-- When you delete a model, Amazon Fraud Detector permanently deletes that
+-- model and the data is no longer stored in Amazon Fraud Detector.
+module Amazonka.FraudDetector.DeleteModel
+  ( -- * Creating a Request
+    DeleteModel (..),
+    newDeleteModel,
+
+    -- * Request Lenses
+    deleteModel_modelId,
+    deleteModel_modelType,
+
+    -- * Destructuring the Response
+    DeleteModelResponse (..),
+    newDeleteModelResponse,
+
+    -- * Response Lenses
+    deleteModelResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteModel' smart constructor.
+data DeleteModel = DeleteModel'
+  { -- | The model ID of the model to delete.
+    modelId :: Prelude.Text,
+    -- | The model type of the model to delete.
+    modelType :: ModelTypeEnum
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteModel' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'modelId', 'deleteModel_modelId' - The model ID of the model to delete.
+--
+-- 'modelType', 'deleteModel_modelType' - The model type of the model to delete.
+newDeleteModel ::
+  -- | 'modelId'
+  Prelude.Text ->
+  -- | 'modelType'
+  ModelTypeEnum ->
+  DeleteModel
+newDeleteModel pModelId_ pModelType_ =
+  DeleteModel'
+    { modelId = pModelId_,
+      modelType = pModelType_
+    }
+
+-- | The model ID of the model to delete.
+deleteModel_modelId :: Lens.Lens' DeleteModel Prelude.Text
+deleteModel_modelId = Lens.lens (\DeleteModel' {modelId} -> modelId) (\s@DeleteModel' {} a -> s {modelId = a} :: DeleteModel)
+
+-- | The model type of the model to delete.
+deleteModel_modelType :: Lens.Lens' DeleteModel ModelTypeEnum
+deleteModel_modelType = Lens.lens (\DeleteModel' {modelType} -> modelType) (\s@DeleteModel' {} a -> s {modelType = a} :: DeleteModel)
+
+instance Core.AWSRequest DeleteModel where
+  type AWSResponse DeleteModel = DeleteModelResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteModelResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteModel where
+  hashWithSalt _salt DeleteModel' {..} =
+    _salt
+      `Prelude.hashWithSalt` modelId
+      `Prelude.hashWithSalt` modelType
+
+instance Prelude.NFData DeleteModel where
+  rnf DeleteModel' {..} =
+    Prelude.rnf modelId
+      `Prelude.seq` Prelude.rnf modelType
+
+instance Data.ToHeaders DeleteModel where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.DeleteModel" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteModel where
+  toJSON DeleteModel' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("modelId" Data..= modelId),
+            Prelude.Just ("modelType" Data..= modelType)
+          ]
+      )
+
+instance Data.ToPath DeleteModel where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteModel where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteModelResponse' smart constructor.
+data DeleteModelResponse = DeleteModelResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteModelResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteModelResponse_httpStatus' - The response's http status code.
+newDeleteModelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteModelResponse
+newDeleteModelResponse pHttpStatus_ =
+  DeleteModelResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteModelResponse_httpStatus :: Lens.Lens' DeleteModelResponse Prelude.Int
+deleteModelResponse_httpStatus = Lens.lens (\DeleteModelResponse' {httpStatus} -> httpStatus) (\s@DeleteModelResponse' {} a -> s {httpStatus = a} :: DeleteModelResponse)
+
+instance Prelude.NFData DeleteModelResponse where
+  rnf DeleteModelResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/DeleteModelVersion.hs b/gen/Amazonka/FraudDetector/DeleteModelVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/DeleteModelVersion.hs
@@ -0,0 +1,202 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.DeleteModelVersion
+-- 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 model version.
+--
+-- You can delete models and model versions in Amazon Fraud Detector,
+-- provided that they are not associated with a detector version.
+--
+-- When you delete a model version, Amazon Fraud Detector permanently
+-- deletes that model version and the data is no longer stored in Amazon
+-- Fraud Detector.
+module Amazonka.FraudDetector.DeleteModelVersion
+  ( -- * Creating a Request
+    DeleteModelVersion (..),
+    newDeleteModelVersion,
+
+    -- * Request Lenses
+    deleteModelVersion_modelId,
+    deleteModelVersion_modelType,
+    deleteModelVersion_modelVersionNumber,
+
+    -- * Destructuring the Response
+    DeleteModelVersionResponse (..),
+    newDeleteModelVersionResponse,
+
+    -- * Response Lenses
+    deleteModelVersionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteModelVersion' smart constructor.
+data DeleteModelVersion = DeleteModelVersion'
+  { -- | The model ID of the model version to delete.
+    modelId :: Prelude.Text,
+    -- | The model type of the model version to delete.
+    modelType :: ModelTypeEnum,
+    -- | The model version number of the model version to delete.
+    modelVersionNumber :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteModelVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'modelId', 'deleteModelVersion_modelId' - The model ID of the model version to delete.
+--
+-- 'modelType', 'deleteModelVersion_modelType' - The model type of the model version to delete.
+--
+-- 'modelVersionNumber', 'deleteModelVersion_modelVersionNumber' - The model version number of the model version to delete.
+newDeleteModelVersion ::
+  -- | 'modelId'
+  Prelude.Text ->
+  -- | 'modelType'
+  ModelTypeEnum ->
+  -- | 'modelVersionNumber'
+  Prelude.Text ->
+  DeleteModelVersion
+newDeleteModelVersion
+  pModelId_
+  pModelType_
+  pModelVersionNumber_ =
+    DeleteModelVersion'
+      { modelId = pModelId_,
+        modelType = pModelType_,
+        modelVersionNumber = pModelVersionNumber_
+      }
+
+-- | The model ID of the model version to delete.
+deleteModelVersion_modelId :: Lens.Lens' DeleteModelVersion Prelude.Text
+deleteModelVersion_modelId = Lens.lens (\DeleteModelVersion' {modelId} -> modelId) (\s@DeleteModelVersion' {} a -> s {modelId = a} :: DeleteModelVersion)
+
+-- | The model type of the model version to delete.
+deleteModelVersion_modelType :: Lens.Lens' DeleteModelVersion ModelTypeEnum
+deleteModelVersion_modelType = Lens.lens (\DeleteModelVersion' {modelType} -> modelType) (\s@DeleteModelVersion' {} a -> s {modelType = a} :: DeleteModelVersion)
+
+-- | The model version number of the model version to delete.
+deleteModelVersion_modelVersionNumber :: Lens.Lens' DeleteModelVersion Prelude.Text
+deleteModelVersion_modelVersionNumber = Lens.lens (\DeleteModelVersion' {modelVersionNumber} -> modelVersionNumber) (\s@DeleteModelVersion' {} a -> s {modelVersionNumber = a} :: DeleteModelVersion)
+
+instance Core.AWSRequest DeleteModelVersion where
+  type
+    AWSResponse DeleteModelVersion =
+      DeleteModelVersionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteModelVersionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteModelVersion where
+  hashWithSalt _salt DeleteModelVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` modelId
+      `Prelude.hashWithSalt` modelType
+      `Prelude.hashWithSalt` modelVersionNumber
+
+instance Prelude.NFData DeleteModelVersion where
+  rnf DeleteModelVersion' {..} =
+    Prelude.rnf modelId
+      `Prelude.seq` Prelude.rnf modelType
+      `Prelude.seq` Prelude.rnf modelVersionNumber
+
+instance Data.ToHeaders DeleteModelVersion where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.DeleteModelVersion" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteModelVersion where
+  toJSON DeleteModelVersion' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("modelId" Data..= modelId),
+            Prelude.Just ("modelType" Data..= modelType),
+            Prelude.Just
+              ("modelVersionNumber" Data..= modelVersionNumber)
+          ]
+      )
+
+instance Data.ToPath DeleteModelVersion where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteModelVersion where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteModelVersionResponse' smart constructor.
+data DeleteModelVersionResponse = DeleteModelVersionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteModelVersionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteModelVersionResponse_httpStatus' - The response's http status code.
+newDeleteModelVersionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteModelVersionResponse
+newDeleteModelVersionResponse pHttpStatus_ =
+  DeleteModelVersionResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteModelVersionResponse_httpStatus :: Lens.Lens' DeleteModelVersionResponse Prelude.Int
+deleteModelVersionResponse_httpStatus = Lens.lens (\DeleteModelVersionResponse' {httpStatus} -> httpStatus) (\s@DeleteModelVersionResponse' {} a -> s {httpStatus = a} :: DeleteModelVersionResponse)
+
+instance Prelude.NFData DeleteModelVersionResponse where
+  rnf DeleteModelVersionResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/DeleteOutcome.hs b/gen/Amazonka/FraudDetector/DeleteOutcome.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/DeleteOutcome.hs
@@ -0,0 +1,158 @@
+{-# 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.FraudDetector.DeleteOutcome
+-- 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 outcome.
+--
+-- You cannot delete an outcome that is used in a rule version.
+--
+-- When you delete an outcome, Amazon Fraud Detector permanently deletes
+-- that outcome and the data is no longer stored in Amazon Fraud Detector.
+module Amazonka.FraudDetector.DeleteOutcome
+  ( -- * Creating a Request
+    DeleteOutcome (..),
+    newDeleteOutcome,
+
+    -- * Request Lenses
+    deleteOutcome_name,
+
+    -- * Destructuring the Response
+    DeleteOutcomeResponse (..),
+    newDeleteOutcomeResponse,
+
+    -- * Response Lenses
+    deleteOutcomeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteOutcome' smart constructor.
+data DeleteOutcome = DeleteOutcome'
+  { -- | The name of the outcome to delete.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteOutcome' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'deleteOutcome_name' - The name of the outcome to delete.
+newDeleteOutcome ::
+  -- | 'name'
+  Prelude.Text ->
+  DeleteOutcome
+newDeleteOutcome pName_ =
+  DeleteOutcome' {name = pName_}
+
+-- | The name of the outcome to delete.
+deleteOutcome_name :: Lens.Lens' DeleteOutcome Prelude.Text
+deleteOutcome_name = Lens.lens (\DeleteOutcome' {name} -> name) (\s@DeleteOutcome' {} a -> s {name = a} :: DeleteOutcome)
+
+instance Core.AWSRequest DeleteOutcome where
+  type
+    AWSResponse DeleteOutcome =
+      DeleteOutcomeResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteOutcomeResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteOutcome where
+  hashWithSalt _salt DeleteOutcome' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DeleteOutcome where
+  rnf DeleteOutcome' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DeleteOutcome where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.DeleteOutcome" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteOutcome where
+  toJSON DeleteOutcome' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("name" Data..= name)]
+      )
+
+instance Data.ToPath DeleteOutcome where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteOutcome where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteOutcomeResponse' smart constructor.
+data DeleteOutcomeResponse = DeleteOutcomeResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteOutcomeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteOutcomeResponse_httpStatus' - The response's http status code.
+newDeleteOutcomeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteOutcomeResponse
+newDeleteOutcomeResponse pHttpStatus_ =
+  DeleteOutcomeResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteOutcomeResponse_httpStatus :: Lens.Lens' DeleteOutcomeResponse Prelude.Int
+deleteOutcomeResponse_httpStatus = Lens.lens (\DeleteOutcomeResponse' {httpStatus} -> httpStatus) (\s@DeleteOutcomeResponse' {} a -> s {httpStatus = a} :: DeleteOutcomeResponse)
+
+instance Prelude.NFData DeleteOutcomeResponse where
+  rnf DeleteOutcomeResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/DeleteRule.hs b/gen/Amazonka/FraudDetector/DeleteRule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/DeleteRule.hs
@@ -0,0 +1,152 @@
+{-# 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.FraudDetector.DeleteRule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the rule. You cannot delete a rule if it is used by an @ACTIVE@
+-- or @INACTIVE@ detector version.
+--
+-- When you delete a rule, Amazon Fraud Detector permanently deletes that
+-- rule and the data is no longer stored in Amazon Fraud Detector.
+module Amazonka.FraudDetector.DeleteRule
+  ( -- * Creating a Request
+    DeleteRule (..),
+    newDeleteRule,
+
+    -- * Request Lenses
+    deleteRule_rule,
+
+    -- * Destructuring the Response
+    DeleteRuleResponse (..),
+    newDeleteRuleResponse,
+
+    -- * Response Lenses
+    deleteRuleResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteRule' smart constructor.
+data DeleteRule = DeleteRule'
+  { rule :: Rule
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'rule', 'deleteRule_rule' - Undocumented member.
+newDeleteRule ::
+  -- | 'rule'
+  Rule ->
+  DeleteRule
+newDeleteRule pRule_ = DeleteRule' {rule = pRule_}
+
+-- | Undocumented member.
+deleteRule_rule :: Lens.Lens' DeleteRule Rule
+deleteRule_rule = Lens.lens (\DeleteRule' {rule} -> rule) (\s@DeleteRule' {} a -> s {rule = a} :: DeleteRule)
+
+instance Core.AWSRequest DeleteRule where
+  type AWSResponse DeleteRule = DeleteRuleResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteRuleResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteRule where
+  hashWithSalt _salt DeleteRule' {..} =
+    _salt `Prelude.hashWithSalt` rule
+
+instance Prelude.NFData DeleteRule where
+  rnf DeleteRule' {..} = Prelude.rnf rule
+
+instance Data.ToHeaders DeleteRule where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.DeleteRule" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteRule where
+  toJSON DeleteRule' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("rule" Data..= rule)]
+      )
+
+instance Data.ToPath DeleteRule where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteRule where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteRuleResponse' smart constructor.
+data DeleteRuleResponse = DeleteRuleResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRuleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteRuleResponse_httpStatus' - The response's http status code.
+newDeleteRuleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteRuleResponse
+newDeleteRuleResponse pHttpStatus_ =
+  DeleteRuleResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteRuleResponse_httpStatus :: Lens.Lens' DeleteRuleResponse Prelude.Int
+deleteRuleResponse_httpStatus = Lens.lens (\DeleteRuleResponse' {httpStatus} -> httpStatus) (\s@DeleteRuleResponse' {} a -> s {httpStatus = a} :: DeleteRuleResponse)
+
+instance Prelude.NFData DeleteRuleResponse where
+  rnf DeleteRuleResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/DeleteVariable.hs b/gen/Amazonka/FraudDetector/DeleteVariable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/DeleteVariable.hs
@@ -0,0 +1,163 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.DeleteVariable
+-- 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 variable.
+--
+-- You can\'t delete variables that are included in an event type in Amazon
+-- Fraud Detector.
+--
+-- Amazon Fraud Detector automatically deletes model output variables and
+-- SageMaker model output variables when you delete the model. You can\'t
+-- delete these variables manually.
+--
+-- When you delete a variable, Amazon Fraud Detector permanently deletes
+-- that variable and the data is no longer stored in Amazon Fraud Detector.
+module Amazonka.FraudDetector.DeleteVariable
+  ( -- * Creating a Request
+    DeleteVariable (..),
+    newDeleteVariable,
+
+    -- * Request Lenses
+    deleteVariable_name,
+
+    -- * Destructuring the Response
+    DeleteVariableResponse (..),
+    newDeleteVariableResponse,
+
+    -- * Response Lenses
+    deleteVariableResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteVariable' smart constructor.
+data DeleteVariable = DeleteVariable'
+  { -- | The name of the variable to delete.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVariable' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'deleteVariable_name' - The name of the variable to delete.
+newDeleteVariable ::
+  -- | 'name'
+  Prelude.Text ->
+  DeleteVariable
+newDeleteVariable pName_ =
+  DeleteVariable' {name = pName_}
+
+-- | The name of the variable to delete.
+deleteVariable_name :: Lens.Lens' DeleteVariable Prelude.Text
+deleteVariable_name = Lens.lens (\DeleteVariable' {name} -> name) (\s@DeleteVariable' {} a -> s {name = a} :: DeleteVariable)
+
+instance Core.AWSRequest DeleteVariable where
+  type
+    AWSResponse DeleteVariable =
+      DeleteVariableResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteVariableResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteVariable where
+  hashWithSalt _salt DeleteVariable' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DeleteVariable where
+  rnf DeleteVariable' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DeleteVariable where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.DeleteVariable" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteVariable where
+  toJSON DeleteVariable' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("name" Data..= name)]
+      )
+
+instance Data.ToPath DeleteVariable where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteVariable where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteVariableResponse' smart constructor.
+data DeleteVariableResponse = DeleteVariableResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVariableResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteVariableResponse_httpStatus' - The response's http status code.
+newDeleteVariableResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteVariableResponse
+newDeleteVariableResponse pHttpStatus_ =
+  DeleteVariableResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteVariableResponse_httpStatus :: Lens.Lens' DeleteVariableResponse Prelude.Int
+deleteVariableResponse_httpStatus = Lens.lens (\DeleteVariableResponse' {httpStatus} -> httpStatus) (\s@DeleteVariableResponse' {} a -> s {httpStatus = a} :: DeleteVariableResponse)
+
+instance Prelude.NFData DeleteVariableResponse where
+  rnf DeleteVariableResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/DescribeDetector.hs b/gen/Amazonka/FraudDetector/DescribeDetector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/DescribeDetector.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.FraudDetector.DescribeDetector
+-- 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 all versions for a specified detector.
+module Amazonka.FraudDetector.DescribeDetector
+  ( -- * Creating a Request
+    DescribeDetector (..),
+    newDescribeDetector,
+
+    -- * Request Lenses
+    describeDetector_maxResults,
+    describeDetector_nextToken,
+    describeDetector_detectorId,
+
+    -- * Destructuring the Response
+    DescribeDetectorResponse (..),
+    newDescribeDetectorResponse,
+
+    -- * Response Lenses
+    describeDetectorResponse_arn,
+    describeDetectorResponse_detectorId,
+    describeDetectorResponse_detectorVersionSummaries,
+    describeDetectorResponse_nextToken,
+    describeDetectorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeDetector' smart constructor.
+data DescribeDetector = DescribeDetector'
+  { -- | The maximum number of results to return for the request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The next token from the previous response.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The detector ID.
+    detectorId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeDetector' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeDetector_maxResults' - The maximum number of results to return for the request.
+--
+-- 'nextToken', 'describeDetector_nextToken' - The next token from the previous response.
+--
+-- 'detectorId', 'describeDetector_detectorId' - The detector ID.
+newDescribeDetector ::
+  -- | 'detectorId'
+  Prelude.Text ->
+  DescribeDetector
+newDescribeDetector pDetectorId_ =
+  DescribeDetector'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      detectorId = pDetectorId_
+    }
+
+-- | The maximum number of results to return for the request.
+describeDetector_maxResults :: Lens.Lens' DescribeDetector (Prelude.Maybe Prelude.Natural)
+describeDetector_maxResults = Lens.lens (\DescribeDetector' {maxResults} -> maxResults) (\s@DescribeDetector' {} a -> s {maxResults = a} :: DescribeDetector)
+
+-- | The next token from the previous response.
+describeDetector_nextToken :: Lens.Lens' DescribeDetector (Prelude.Maybe Prelude.Text)
+describeDetector_nextToken = Lens.lens (\DescribeDetector' {nextToken} -> nextToken) (\s@DescribeDetector' {} a -> s {nextToken = a} :: DescribeDetector)
+
+-- | The detector ID.
+describeDetector_detectorId :: Lens.Lens' DescribeDetector Prelude.Text
+describeDetector_detectorId = Lens.lens (\DescribeDetector' {detectorId} -> detectorId) (\s@DescribeDetector' {} a -> s {detectorId = a} :: DescribeDetector)
+
+instance Core.AWSRequest DescribeDetector where
+  type
+    AWSResponse DescribeDetector =
+      DescribeDetectorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeDetectorResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "detectorId")
+            Prelude.<*> ( x
+                            Data..?> "detectorVersionSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeDetector where
+  hashWithSalt _salt DescribeDetector' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` detectorId
+
+instance Prelude.NFData DescribeDetector where
+  rnf DescribeDetector' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf detectorId
+
+instance Data.ToHeaders DescribeDetector where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.DescribeDetector" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeDetector where
+  toJSON DescribeDetector' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("detectorId" Data..= detectorId)
+          ]
+      )
+
+instance Data.ToPath DescribeDetector where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeDetector where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeDetectorResponse' smart constructor.
+data DescribeDetectorResponse = DescribeDetectorResponse'
+  { -- | The detector ARN.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The detector ID.
+    detectorId :: Prelude.Maybe Prelude.Text,
+    -- | The status and description for each detector version.
+    detectorVersionSummaries :: Prelude.Maybe [DetectorVersionSummary],
+    -- | The next token to be used for subsequent requests.
+    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 'DescribeDetectorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'describeDetectorResponse_arn' - The detector ARN.
+--
+-- 'detectorId', 'describeDetectorResponse_detectorId' - The detector ID.
+--
+-- 'detectorVersionSummaries', 'describeDetectorResponse_detectorVersionSummaries' - The status and description for each detector version.
+--
+-- 'nextToken', 'describeDetectorResponse_nextToken' - The next token to be used for subsequent requests.
+--
+-- 'httpStatus', 'describeDetectorResponse_httpStatus' - The response's http status code.
+newDescribeDetectorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeDetectorResponse
+newDescribeDetectorResponse pHttpStatus_ =
+  DescribeDetectorResponse'
+    { arn = Prelude.Nothing,
+      detectorId = Prelude.Nothing,
+      detectorVersionSummaries = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The detector ARN.
+describeDetectorResponse_arn :: Lens.Lens' DescribeDetectorResponse (Prelude.Maybe Prelude.Text)
+describeDetectorResponse_arn = Lens.lens (\DescribeDetectorResponse' {arn} -> arn) (\s@DescribeDetectorResponse' {} a -> s {arn = a} :: DescribeDetectorResponse)
+
+-- | The detector ID.
+describeDetectorResponse_detectorId :: Lens.Lens' DescribeDetectorResponse (Prelude.Maybe Prelude.Text)
+describeDetectorResponse_detectorId = Lens.lens (\DescribeDetectorResponse' {detectorId} -> detectorId) (\s@DescribeDetectorResponse' {} a -> s {detectorId = a} :: DescribeDetectorResponse)
+
+-- | The status and description for each detector version.
+describeDetectorResponse_detectorVersionSummaries :: Lens.Lens' DescribeDetectorResponse (Prelude.Maybe [DetectorVersionSummary])
+describeDetectorResponse_detectorVersionSummaries = Lens.lens (\DescribeDetectorResponse' {detectorVersionSummaries} -> detectorVersionSummaries) (\s@DescribeDetectorResponse' {} a -> s {detectorVersionSummaries = a} :: DescribeDetectorResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next token to be used for subsequent requests.
+describeDetectorResponse_nextToken :: Lens.Lens' DescribeDetectorResponse (Prelude.Maybe Prelude.Text)
+describeDetectorResponse_nextToken = Lens.lens (\DescribeDetectorResponse' {nextToken} -> nextToken) (\s@DescribeDetectorResponse' {} a -> s {nextToken = a} :: DescribeDetectorResponse)
+
+-- | The response's http status code.
+describeDetectorResponse_httpStatus :: Lens.Lens' DescribeDetectorResponse Prelude.Int
+describeDetectorResponse_httpStatus = Lens.lens (\DescribeDetectorResponse' {httpStatus} -> httpStatus) (\s@DescribeDetectorResponse' {} a -> s {httpStatus = a} :: DescribeDetectorResponse)
+
+instance Prelude.NFData DescribeDetectorResponse where
+  rnf DescribeDetectorResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf detectorId
+      `Prelude.seq` Prelude.rnf detectorVersionSummaries
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/DescribeModelVersions.hs b/gen/Amazonka/FraudDetector/DescribeModelVersions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/DescribeModelVersions.hs
@@ -0,0 +1,242 @@
+{-# 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.FraudDetector.DescribeModelVersions
+-- 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 all of the model versions for the specified model type or for the
+-- specified model type and model ID. You can also get details for a
+-- single, specified model version.
+module Amazonka.FraudDetector.DescribeModelVersions
+  ( -- * Creating a Request
+    DescribeModelVersions (..),
+    newDescribeModelVersions,
+
+    -- * Request Lenses
+    describeModelVersions_maxResults,
+    describeModelVersions_modelId,
+    describeModelVersions_modelType,
+    describeModelVersions_modelVersionNumber,
+    describeModelVersions_nextToken,
+
+    -- * Destructuring the Response
+    DescribeModelVersionsResponse (..),
+    newDescribeModelVersionsResponse,
+
+    -- * Response Lenses
+    describeModelVersionsResponse_modelVersionDetails,
+    describeModelVersionsResponse_nextToken,
+    describeModelVersionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeModelVersions' smart constructor.
+data DescribeModelVersions = DescribeModelVersions'
+  { -- | The maximum number of results to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The model ID.
+    modelId :: Prelude.Maybe Prelude.Text,
+    -- | The model type.
+    modelType :: Prelude.Maybe ModelTypeEnum,
+    -- | The model version number.
+    modelVersionNumber :: Prelude.Maybe Prelude.Text,
+    -- | The next token from the previous results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeModelVersions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeModelVersions_maxResults' - The maximum number of results to return.
+--
+-- 'modelId', 'describeModelVersions_modelId' - The model ID.
+--
+-- 'modelType', 'describeModelVersions_modelType' - The model type.
+--
+-- 'modelVersionNumber', 'describeModelVersions_modelVersionNumber' - The model version number.
+--
+-- 'nextToken', 'describeModelVersions_nextToken' - The next token from the previous results.
+newDescribeModelVersions ::
+  DescribeModelVersions
+newDescribeModelVersions =
+  DescribeModelVersions'
+    { maxResults =
+        Prelude.Nothing,
+      modelId = Prelude.Nothing,
+      modelType = Prelude.Nothing,
+      modelVersionNumber = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return.
+describeModelVersions_maxResults :: Lens.Lens' DescribeModelVersions (Prelude.Maybe Prelude.Natural)
+describeModelVersions_maxResults = Lens.lens (\DescribeModelVersions' {maxResults} -> maxResults) (\s@DescribeModelVersions' {} a -> s {maxResults = a} :: DescribeModelVersions)
+
+-- | The model ID.
+describeModelVersions_modelId :: Lens.Lens' DescribeModelVersions (Prelude.Maybe Prelude.Text)
+describeModelVersions_modelId = Lens.lens (\DescribeModelVersions' {modelId} -> modelId) (\s@DescribeModelVersions' {} a -> s {modelId = a} :: DescribeModelVersions)
+
+-- | The model type.
+describeModelVersions_modelType :: Lens.Lens' DescribeModelVersions (Prelude.Maybe ModelTypeEnum)
+describeModelVersions_modelType = Lens.lens (\DescribeModelVersions' {modelType} -> modelType) (\s@DescribeModelVersions' {} a -> s {modelType = a} :: DescribeModelVersions)
+
+-- | The model version number.
+describeModelVersions_modelVersionNumber :: Lens.Lens' DescribeModelVersions (Prelude.Maybe Prelude.Text)
+describeModelVersions_modelVersionNumber = Lens.lens (\DescribeModelVersions' {modelVersionNumber} -> modelVersionNumber) (\s@DescribeModelVersions' {} a -> s {modelVersionNumber = a} :: DescribeModelVersions)
+
+-- | The next token from the previous results.
+describeModelVersions_nextToken :: Lens.Lens' DescribeModelVersions (Prelude.Maybe Prelude.Text)
+describeModelVersions_nextToken = Lens.lens (\DescribeModelVersions' {nextToken} -> nextToken) (\s@DescribeModelVersions' {} a -> s {nextToken = a} :: DescribeModelVersions)
+
+instance Core.AWSRequest DescribeModelVersions where
+  type
+    AWSResponse DescribeModelVersions =
+      DescribeModelVersionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeModelVersionsResponse'
+            Prelude.<$> ( x
+                            Data..?> "modelVersionDetails"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeModelVersions where
+  hashWithSalt _salt DescribeModelVersions' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` modelId
+      `Prelude.hashWithSalt` modelType
+      `Prelude.hashWithSalt` modelVersionNumber
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeModelVersions where
+  rnf DescribeModelVersions' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf modelId
+      `Prelude.seq` Prelude.rnf modelType
+      `Prelude.seq` Prelude.rnf modelVersionNumber
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeModelVersions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.DescribeModelVersions" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeModelVersions where
+  toJSON DescribeModelVersions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("modelId" Data..=) Prelude.<$> modelId,
+            ("modelType" Data..=) Prelude.<$> modelType,
+            ("modelVersionNumber" Data..=)
+              Prelude.<$> modelVersionNumber,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath DescribeModelVersions where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeModelVersions where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeModelVersionsResponse' smart constructor.
+data DescribeModelVersionsResponse = DescribeModelVersionsResponse'
+  { -- | The model version details.
+    modelVersionDetails :: Prelude.Maybe [ModelVersionDetail],
+    -- | The next token.
+    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 'DescribeModelVersionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'modelVersionDetails', 'describeModelVersionsResponse_modelVersionDetails' - The model version details.
+--
+-- 'nextToken', 'describeModelVersionsResponse_nextToken' - The next token.
+--
+-- 'httpStatus', 'describeModelVersionsResponse_httpStatus' - The response's http status code.
+newDescribeModelVersionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeModelVersionsResponse
+newDescribeModelVersionsResponse pHttpStatus_ =
+  DescribeModelVersionsResponse'
+    { modelVersionDetails =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The model version details.
+describeModelVersionsResponse_modelVersionDetails :: Lens.Lens' DescribeModelVersionsResponse (Prelude.Maybe [ModelVersionDetail])
+describeModelVersionsResponse_modelVersionDetails = Lens.lens (\DescribeModelVersionsResponse' {modelVersionDetails} -> modelVersionDetails) (\s@DescribeModelVersionsResponse' {} a -> s {modelVersionDetails = a} :: DescribeModelVersionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next token.
+describeModelVersionsResponse_nextToken :: Lens.Lens' DescribeModelVersionsResponse (Prelude.Maybe Prelude.Text)
+describeModelVersionsResponse_nextToken = Lens.lens (\DescribeModelVersionsResponse' {nextToken} -> nextToken) (\s@DescribeModelVersionsResponse' {} a -> s {nextToken = a} :: DescribeModelVersionsResponse)
+
+-- | The response's http status code.
+describeModelVersionsResponse_httpStatus :: Lens.Lens' DescribeModelVersionsResponse Prelude.Int
+describeModelVersionsResponse_httpStatus = Lens.lens (\DescribeModelVersionsResponse' {httpStatus} -> httpStatus) (\s@DescribeModelVersionsResponse' {} a -> s {httpStatus = a} :: DescribeModelVersionsResponse)
+
+instance Prelude.NFData DescribeModelVersionsResponse where
+  rnf DescribeModelVersionsResponse' {..} =
+    Prelude.rnf modelVersionDetails
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/GetBatchImportJobs.hs b/gen/Amazonka/FraudDetector/GetBatchImportJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/GetBatchImportJobs.hs
@@ -0,0 +1,215 @@
+{-# 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.FraudDetector.GetBatchImportJobs
+-- 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 all batch import jobs or a specific job of the specified ID. This
+-- is a paginated API. If you provide a null @maxResults@, this action
+-- retrieves a maximum of 50 records per page. If you provide a
+-- @maxResults@, the value must be between 1 and 50. To get the next page
+-- results, provide the pagination token from the
+-- @GetBatchImportJobsResponse@ as part of your request. A null pagination
+-- token fetches the records from the beginning.
+module Amazonka.FraudDetector.GetBatchImportJobs
+  ( -- * Creating a Request
+    GetBatchImportJobs (..),
+    newGetBatchImportJobs,
+
+    -- * Request Lenses
+    getBatchImportJobs_jobId,
+    getBatchImportJobs_maxResults,
+    getBatchImportJobs_nextToken,
+
+    -- * Destructuring the Response
+    GetBatchImportJobsResponse (..),
+    newGetBatchImportJobsResponse,
+
+    -- * Response Lenses
+    getBatchImportJobsResponse_batchImports,
+    getBatchImportJobsResponse_nextToken,
+    getBatchImportJobsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetBatchImportJobs' smart constructor.
+data GetBatchImportJobs = GetBatchImportJobs'
+  { -- | The ID of the batch import job to get.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of objects to return for request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The next token from the previous request.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetBatchImportJobs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'getBatchImportJobs_jobId' - The ID of the batch import job to get.
+--
+-- 'maxResults', 'getBatchImportJobs_maxResults' - The maximum number of objects to return for request.
+--
+-- 'nextToken', 'getBatchImportJobs_nextToken' - The next token from the previous request.
+newGetBatchImportJobs ::
+  GetBatchImportJobs
+newGetBatchImportJobs =
+  GetBatchImportJobs'
+    { jobId = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The ID of the batch import job to get.
+getBatchImportJobs_jobId :: Lens.Lens' GetBatchImportJobs (Prelude.Maybe Prelude.Text)
+getBatchImportJobs_jobId = Lens.lens (\GetBatchImportJobs' {jobId} -> jobId) (\s@GetBatchImportJobs' {} a -> s {jobId = a} :: GetBatchImportJobs)
+
+-- | The maximum number of objects to return for request.
+getBatchImportJobs_maxResults :: Lens.Lens' GetBatchImportJobs (Prelude.Maybe Prelude.Natural)
+getBatchImportJobs_maxResults = Lens.lens (\GetBatchImportJobs' {maxResults} -> maxResults) (\s@GetBatchImportJobs' {} a -> s {maxResults = a} :: GetBatchImportJobs)
+
+-- | The next token from the previous request.
+getBatchImportJobs_nextToken :: Lens.Lens' GetBatchImportJobs (Prelude.Maybe Prelude.Text)
+getBatchImportJobs_nextToken = Lens.lens (\GetBatchImportJobs' {nextToken} -> nextToken) (\s@GetBatchImportJobs' {} a -> s {nextToken = a} :: GetBatchImportJobs)
+
+instance Core.AWSRequest GetBatchImportJobs where
+  type
+    AWSResponse GetBatchImportJobs =
+      GetBatchImportJobsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetBatchImportJobsResponse'
+            Prelude.<$> (x Data..?> "batchImports" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetBatchImportJobs where
+  hashWithSalt _salt GetBatchImportJobs' {..} =
+    _salt
+      `Prelude.hashWithSalt` jobId
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData GetBatchImportJobs where
+  rnf GetBatchImportJobs' {..} =
+    Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders GetBatchImportJobs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.GetBatchImportJobs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetBatchImportJobs where
+  toJSON GetBatchImportJobs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("jobId" Data..=) Prelude.<$> jobId,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath GetBatchImportJobs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetBatchImportJobs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetBatchImportJobsResponse' smart constructor.
+data GetBatchImportJobsResponse = GetBatchImportJobsResponse'
+  { -- | An array containing the details of each batch import job.
+    batchImports :: Prelude.Maybe [BatchImport],
+    -- | The next token for the subsequent resquest.
+    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 'GetBatchImportJobsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'batchImports', 'getBatchImportJobsResponse_batchImports' - An array containing the details of each batch import job.
+--
+-- 'nextToken', 'getBatchImportJobsResponse_nextToken' - The next token for the subsequent resquest.
+--
+-- 'httpStatus', 'getBatchImportJobsResponse_httpStatus' - The response's http status code.
+newGetBatchImportJobsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetBatchImportJobsResponse
+newGetBatchImportJobsResponse pHttpStatus_ =
+  GetBatchImportJobsResponse'
+    { batchImports =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array containing the details of each batch import job.
+getBatchImportJobsResponse_batchImports :: Lens.Lens' GetBatchImportJobsResponse (Prelude.Maybe [BatchImport])
+getBatchImportJobsResponse_batchImports = Lens.lens (\GetBatchImportJobsResponse' {batchImports} -> batchImports) (\s@GetBatchImportJobsResponse' {} a -> s {batchImports = a} :: GetBatchImportJobsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next token for the subsequent resquest.
+getBatchImportJobsResponse_nextToken :: Lens.Lens' GetBatchImportJobsResponse (Prelude.Maybe Prelude.Text)
+getBatchImportJobsResponse_nextToken = Lens.lens (\GetBatchImportJobsResponse' {nextToken} -> nextToken) (\s@GetBatchImportJobsResponse' {} a -> s {nextToken = a} :: GetBatchImportJobsResponse)
+
+-- | The response's http status code.
+getBatchImportJobsResponse_httpStatus :: Lens.Lens' GetBatchImportJobsResponse Prelude.Int
+getBatchImportJobsResponse_httpStatus = Lens.lens (\GetBatchImportJobsResponse' {httpStatus} -> httpStatus) (\s@GetBatchImportJobsResponse' {} a -> s {httpStatus = a} :: GetBatchImportJobsResponse)
+
+instance Prelude.NFData GetBatchImportJobsResponse where
+  rnf GetBatchImportJobsResponse' {..} =
+    Prelude.rnf batchImports
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/GetBatchPredictionJobs.hs b/gen/Amazonka/FraudDetector/GetBatchPredictionJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/GetBatchPredictionJobs.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.FraudDetector.GetBatchPredictionJobs
+-- 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 all batch prediction jobs or a specific job if you specify a job
+-- ID. This is a paginated API. If you provide a null maxResults, this
+-- action retrieves a maximum of 50 records per page. If you provide a
+-- maxResults, the value must be between 1 and 50. To get the next page
+-- results, provide the pagination token from the
+-- GetBatchPredictionJobsResponse as part of your request. A null
+-- pagination token fetches the records from the beginning.
+module Amazonka.FraudDetector.GetBatchPredictionJobs
+  ( -- * Creating a Request
+    GetBatchPredictionJobs (..),
+    newGetBatchPredictionJobs,
+
+    -- * Request Lenses
+    getBatchPredictionJobs_jobId,
+    getBatchPredictionJobs_maxResults,
+    getBatchPredictionJobs_nextToken,
+
+    -- * Destructuring the Response
+    GetBatchPredictionJobsResponse (..),
+    newGetBatchPredictionJobsResponse,
+
+    -- * Response Lenses
+    getBatchPredictionJobsResponse_batchPredictions,
+    getBatchPredictionJobsResponse_nextToken,
+    getBatchPredictionJobsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetBatchPredictionJobs' smart constructor.
+data GetBatchPredictionJobs = GetBatchPredictionJobs'
+  { -- | The batch prediction job for which to get the details.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of objects to return for the request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The next token from the previous request.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetBatchPredictionJobs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'getBatchPredictionJobs_jobId' - The batch prediction job for which to get the details.
+--
+-- 'maxResults', 'getBatchPredictionJobs_maxResults' - The maximum number of objects to return for the request.
+--
+-- 'nextToken', 'getBatchPredictionJobs_nextToken' - The next token from the previous request.
+newGetBatchPredictionJobs ::
+  GetBatchPredictionJobs
+newGetBatchPredictionJobs =
+  GetBatchPredictionJobs'
+    { jobId = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The batch prediction job for which to get the details.
+getBatchPredictionJobs_jobId :: Lens.Lens' GetBatchPredictionJobs (Prelude.Maybe Prelude.Text)
+getBatchPredictionJobs_jobId = Lens.lens (\GetBatchPredictionJobs' {jobId} -> jobId) (\s@GetBatchPredictionJobs' {} a -> s {jobId = a} :: GetBatchPredictionJobs)
+
+-- | The maximum number of objects to return for the request.
+getBatchPredictionJobs_maxResults :: Lens.Lens' GetBatchPredictionJobs (Prelude.Maybe Prelude.Natural)
+getBatchPredictionJobs_maxResults = Lens.lens (\GetBatchPredictionJobs' {maxResults} -> maxResults) (\s@GetBatchPredictionJobs' {} a -> s {maxResults = a} :: GetBatchPredictionJobs)
+
+-- | The next token from the previous request.
+getBatchPredictionJobs_nextToken :: Lens.Lens' GetBatchPredictionJobs (Prelude.Maybe Prelude.Text)
+getBatchPredictionJobs_nextToken = Lens.lens (\GetBatchPredictionJobs' {nextToken} -> nextToken) (\s@GetBatchPredictionJobs' {} a -> s {nextToken = a} :: GetBatchPredictionJobs)
+
+instance Core.AWSRequest GetBatchPredictionJobs where
+  type
+    AWSResponse GetBatchPredictionJobs =
+      GetBatchPredictionJobsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetBatchPredictionJobsResponse'
+            Prelude.<$> ( x
+                            Data..?> "batchPredictions"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetBatchPredictionJobs where
+  hashWithSalt _salt GetBatchPredictionJobs' {..} =
+    _salt
+      `Prelude.hashWithSalt` jobId
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData GetBatchPredictionJobs where
+  rnf GetBatchPredictionJobs' {..} =
+    Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders GetBatchPredictionJobs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.GetBatchPredictionJobs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetBatchPredictionJobs where
+  toJSON GetBatchPredictionJobs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("jobId" Data..=) Prelude.<$> jobId,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath GetBatchPredictionJobs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetBatchPredictionJobs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetBatchPredictionJobsResponse' smart constructor.
+data GetBatchPredictionJobsResponse = GetBatchPredictionJobsResponse'
+  { -- | An array containing the details of each batch prediction job.
+    batchPredictions :: Prelude.Maybe [BatchPrediction],
+    -- | The next token for the subsequent 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 'GetBatchPredictionJobsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'batchPredictions', 'getBatchPredictionJobsResponse_batchPredictions' - An array containing the details of each batch prediction job.
+--
+-- 'nextToken', 'getBatchPredictionJobsResponse_nextToken' - The next token for the subsequent request.
+--
+-- 'httpStatus', 'getBatchPredictionJobsResponse_httpStatus' - The response's http status code.
+newGetBatchPredictionJobsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetBatchPredictionJobsResponse
+newGetBatchPredictionJobsResponse pHttpStatus_ =
+  GetBatchPredictionJobsResponse'
+    { batchPredictions =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array containing the details of each batch prediction job.
+getBatchPredictionJobsResponse_batchPredictions :: Lens.Lens' GetBatchPredictionJobsResponse (Prelude.Maybe [BatchPrediction])
+getBatchPredictionJobsResponse_batchPredictions = Lens.lens (\GetBatchPredictionJobsResponse' {batchPredictions} -> batchPredictions) (\s@GetBatchPredictionJobsResponse' {} a -> s {batchPredictions = a} :: GetBatchPredictionJobsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next token for the subsequent request.
+getBatchPredictionJobsResponse_nextToken :: Lens.Lens' GetBatchPredictionJobsResponse (Prelude.Maybe Prelude.Text)
+getBatchPredictionJobsResponse_nextToken = Lens.lens (\GetBatchPredictionJobsResponse' {nextToken} -> nextToken) (\s@GetBatchPredictionJobsResponse' {} a -> s {nextToken = a} :: GetBatchPredictionJobsResponse)
+
+-- | The response's http status code.
+getBatchPredictionJobsResponse_httpStatus :: Lens.Lens' GetBatchPredictionJobsResponse Prelude.Int
+getBatchPredictionJobsResponse_httpStatus = Lens.lens (\GetBatchPredictionJobsResponse' {httpStatus} -> httpStatus) (\s@GetBatchPredictionJobsResponse' {} a -> s {httpStatus = a} :: GetBatchPredictionJobsResponse)
+
+instance
+  Prelude.NFData
+    GetBatchPredictionJobsResponse
+  where
+  rnf GetBatchPredictionJobsResponse' {..} =
+    Prelude.rnf batchPredictions
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/GetDeleteEventsByEventTypeStatus.hs b/gen/Amazonka/FraudDetector/GetDeleteEventsByEventTypeStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/GetDeleteEventsByEventTypeStatus.hs
@@ -0,0 +1,208 @@
+{-# 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.FraudDetector.GetDeleteEventsByEventTypeStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the status of a @DeleteEventsByEventType@ action.
+module Amazonka.FraudDetector.GetDeleteEventsByEventTypeStatus
+  ( -- * Creating a Request
+    GetDeleteEventsByEventTypeStatus (..),
+    newGetDeleteEventsByEventTypeStatus,
+
+    -- * Request Lenses
+    getDeleteEventsByEventTypeStatus_eventTypeName,
+
+    -- * Destructuring the Response
+    GetDeleteEventsByEventTypeStatusResponse (..),
+    newGetDeleteEventsByEventTypeStatusResponse,
+
+    -- * Response Lenses
+    getDeleteEventsByEventTypeStatusResponse_eventTypeName,
+    getDeleteEventsByEventTypeStatusResponse_eventsDeletionStatus,
+    getDeleteEventsByEventTypeStatusResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDeleteEventsByEventTypeStatus' smart constructor.
+data GetDeleteEventsByEventTypeStatus = GetDeleteEventsByEventTypeStatus'
+  { -- | Name of event type for which to get the deletion status.
+    eventTypeName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDeleteEventsByEventTypeStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eventTypeName', 'getDeleteEventsByEventTypeStatus_eventTypeName' - Name of event type for which to get the deletion status.
+newGetDeleteEventsByEventTypeStatus ::
+  -- | 'eventTypeName'
+  Prelude.Text ->
+  GetDeleteEventsByEventTypeStatus
+newGetDeleteEventsByEventTypeStatus pEventTypeName_ =
+  GetDeleteEventsByEventTypeStatus'
+    { eventTypeName =
+        pEventTypeName_
+    }
+
+-- | Name of event type for which to get the deletion status.
+getDeleteEventsByEventTypeStatus_eventTypeName :: Lens.Lens' GetDeleteEventsByEventTypeStatus Prelude.Text
+getDeleteEventsByEventTypeStatus_eventTypeName = Lens.lens (\GetDeleteEventsByEventTypeStatus' {eventTypeName} -> eventTypeName) (\s@GetDeleteEventsByEventTypeStatus' {} a -> s {eventTypeName = a} :: GetDeleteEventsByEventTypeStatus)
+
+instance
+  Core.AWSRequest
+    GetDeleteEventsByEventTypeStatus
+  where
+  type
+    AWSResponse GetDeleteEventsByEventTypeStatus =
+      GetDeleteEventsByEventTypeStatusResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDeleteEventsByEventTypeStatusResponse'
+            Prelude.<$> (x Data..?> "eventTypeName")
+            Prelude.<*> (x Data..?> "eventsDeletionStatus")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetDeleteEventsByEventTypeStatus
+  where
+  hashWithSalt
+    _salt
+    GetDeleteEventsByEventTypeStatus' {..} =
+      _salt `Prelude.hashWithSalt` eventTypeName
+
+instance
+  Prelude.NFData
+    GetDeleteEventsByEventTypeStatus
+  where
+  rnf GetDeleteEventsByEventTypeStatus' {..} =
+    Prelude.rnf eventTypeName
+
+instance
+  Data.ToHeaders
+    GetDeleteEventsByEventTypeStatus
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.GetDeleteEventsByEventTypeStatus" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetDeleteEventsByEventTypeStatus where
+  toJSON GetDeleteEventsByEventTypeStatus' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("eventTypeName" Data..= eventTypeName)
+          ]
+      )
+
+instance Data.ToPath GetDeleteEventsByEventTypeStatus where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    GetDeleteEventsByEventTypeStatus
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetDeleteEventsByEventTypeStatusResponse' smart constructor.
+data GetDeleteEventsByEventTypeStatusResponse = GetDeleteEventsByEventTypeStatusResponse'
+  { -- | The event type name.
+    eventTypeName :: Prelude.Maybe Prelude.Text,
+    -- | The deletion status.
+    eventsDeletionStatus :: Prelude.Maybe AsyncJobStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDeleteEventsByEventTypeStatusResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eventTypeName', 'getDeleteEventsByEventTypeStatusResponse_eventTypeName' - The event type name.
+--
+-- 'eventsDeletionStatus', 'getDeleteEventsByEventTypeStatusResponse_eventsDeletionStatus' - The deletion status.
+--
+-- 'httpStatus', 'getDeleteEventsByEventTypeStatusResponse_httpStatus' - The response's http status code.
+newGetDeleteEventsByEventTypeStatusResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetDeleteEventsByEventTypeStatusResponse
+newGetDeleteEventsByEventTypeStatusResponse
+  pHttpStatus_ =
+    GetDeleteEventsByEventTypeStatusResponse'
+      { eventTypeName =
+          Prelude.Nothing,
+        eventsDeletionStatus =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The event type name.
+getDeleteEventsByEventTypeStatusResponse_eventTypeName :: Lens.Lens' GetDeleteEventsByEventTypeStatusResponse (Prelude.Maybe Prelude.Text)
+getDeleteEventsByEventTypeStatusResponse_eventTypeName = Lens.lens (\GetDeleteEventsByEventTypeStatusResponse' {eventTypeName} -> eventTypeName) (\s@GetDeleteEventsByEventTypeStatusResponse' {} a -> s {eventTypeName = a} :: GetDeleteEventsByEventTypeStatusResponse)
+
+-- | The deletion status.
+getDeleteEventsByEventTypeStatusResponse_eventsDeletionStatus :: Lens.Lens' GetDeleteEventsByEventTypeStatusResponse (Prelude.Maybe AsyncJobStatus)
+getDeleteEventsByEventTypeStatusResponse_eventsDeletionStatus = Lens.lens (\GetDeleteEventsByEventTypeStatusResponse' {eventsDeletionStatus} -> eventsDeletionStatus) (\s@GetDeleteEventsByEventTypeStatusResponse' {} a -> s {eventsDeletionStatus = a} :: GetDeleteEventsByEventTypeStatusResponse)
+
+-- | The response's http status code.
+getDeleteEventsByEventTypeStatusResponse_httpStatus :: Lens.Lens' GetDeleteEventsByEventTypeStatusResponse Prelude.Int
+getDeleteEventsByEventTypeStatusResponse_httpStatus = Lens.lens (\GetDeleteEventsByEventTypeStatusResponse' {httpStatus} -> httpStatus) (\s@GetDeleteEventsByEventTypeStatusResponse' {} a -> s {httpStatus = a} :: GetDeleteEventsByEventTypeStatusResponse)
+
+instance
+  Prelude.NFData
+    GetDeleteEventsByEventTypeStatusResponse
+  where
+  rnf GetDeleteEventsByEventTypeStatusResponse' {..} =
+    Prelude.rnf eventTypeName
+      `Prelude.seq` Prelude.rnf eventsDeletionStatus
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/GetDetectorVersion.hs b/gen/Amazonka/FraudDetector/GetDetectorVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/GetDetectorVersion.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.FraudDetector.GetDetectorVersion
+-- 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 particular detector version.
+module Amazonka.FraudDetector.GetDetectorVersion
+  ( -- * Creating a Request
+    GetDetectorVersion (..),
+    newGetDetectorVersion,
+
+    -- * Request Lenses
+    getDetectorVersion_detectorId,
+    getDetectorVersion_detectorVersionId,
+
+    -- * Destructuring the Response
+    GetDetectorVersionResponse (..),
+    newGetDetectorVersionResponse,
+
+    -- * Response Lenses
+    getDetectorVersionResponse_arn,
+    getDetectorVersionResponse_createdTime,
+    getDetectorVersionResponse_description,
+    getDetectorVersionResponse_detectorId,
+    getDetectorVersionResponse_detectorVersionId,
+    getDetectorVersionResponse_externalModelEndpoints,
+    getDetectorVersionResponse_lastUpdatedTime,
+    getDetectorVersionResponse_modelVersions,
+    getDetectorVersionResponse_ruleExecutionMode,
+    getDetectorVersionResponse_rules,
+    getDetectorVersionResponse_status,
+    getDetectorVersionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDetectorVersion' smart constructor.
+data GetDetectorVersion = GetDetectorVersion'
+  { -- | The detector ID.
+    detectorId :: Prelude.Text,
+    -- | The detector version ID.
+    detectorVersionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDetectorVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detectorId', 'getDetectorVersion_detectorId' - The detector ID.
+--
+-- 'detectorVersionId', 'getDetectorVersion_detectorVersionId' - The detector version ID.
+newGetDetectorVersion ::
+  -- | 'detectorId'
+  Prelude.Text ->
+  -- | 'detectorVersionId'
+  Prelude.Text ->
+  GetDetectorVersion
+newGetDetectorVersion
+  pDetectorId_
+  pDetectorVersionId_ =
+    GetDetectorVersion'
+      { detectorId = pDetectorId_,
+        detectorVersionId = pDetectorVersionId_
+      }
+
+-- | The detector ID.
+getDetectorVersion_detectorId :: Lens.Lens' GetDetectorVersion Prelude.Text
+getDetectorVersion_detectorId = Lens.lens (\GetDetectorVersion' {detectorId} -> detectorId) (\s@GetDetectorVersion' {} a -> s {detectorId = a} :: GetDetectorVersion)
+
+-- | The detector version ID.
+getDetectorVersion_detectorVersionId :: Lens.Lens' GetDetectorVersion Prelude.Text
+getDetectorVersion_detectorVersionId = Lens.lens (\GetDetectorVersion' {detectorVersionId} -> detectorVersionId) (\s@GetDetectorVersion' {} a -> s {detectorVersionId = a} :: GetDetectorVersion)
+
+instance Core.AWSRequest GetDetectorVersion where
+  type
+    AWSResponse GetDetectorVersion =
+      GetDetectorVersionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDetectorVersionResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "createdTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "detectorId")
+            Prelude.<*> (x Data..?> "detectorVersionId")
+            Prelude.<*> ( x
+                            Data..?> "externalModelEndpoints"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "lastUpdatedTime")
+            Prelude.<*> (x Data..?> "modelVersions" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "ruleExecutionMode")
+            Prelude.<*> (x Data..?> "rules" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetDetectorVersion where
+  hashWithSalt _salt GetDetectorVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` detectorId
+      `Prelude.hashWithSalt` detectorVersionId
+
+instance Prelude.NFData GetDetectorVersion where
+  rnf GetDetectorVersion' {..} =
+    Prelude.rnf detectorId
+      `Prelude.seq` Prelude.rnf detectorVersionId
+
+instance Data.ToHeaders GetDetectorVersion where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.GetDetectorVersion" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetDetectorVersion where
+  toJSON GetDetectorVersion' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("detectorId" Data..= detectorId),
+            Prelude.Just
+              ("detectorVersionId" Data..= detectorVersionId)
+          ]
+      )
+
+instance Data.ToPath GetDetectorVersion where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetDetectorVersion where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetDetectorVersionResponse' smart constructor.
+data GetDetectorVersionResponse = GetDetectorVersionResponse'
+  { -- | The detector version ARN.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp when the detector version was created.
+    createdTime :: Prelude.Maybe Prelude.Text,
+    -- | The detector version description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The detector ID.
+    detectorId :: Prelude.Maybe Prelude.Text,
+    -- | The detector version ID.
+    detectorVersionId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon SageMaker model endpoints included in the detector version.
+    externalModelEndpoints :: Prelude.Maybe [Prelude.Text],
+    -- | The timestamp when the detector version was last updated.
+    lastUpdatedTime :: Prelude.Maybe Prelude.Text,
+    -- | The model versions included in the detector version.
+    modelVersions :: Prelude.Maybe [ModelVersion],
+    -- | The execution mode of the rule in the dectector
+    --
+    -- @FIRST_MATCHED@ indicates that Amazon Fraud Detector evaluates rules
+    -- sequentially, first to last, stopping at the first matched rule. Amazon
+    -- Fraud dectector then provides the outcomes for that single rule.
+    --
+    -- @ALL_MATCHED@ indicates that Amazon Fraud Detector evaluates all rules
+    -- and returns the outcomes for all matched rules. You can define and edit
+    -- the rule mode at the detector version level, when it is in draft status.
+    ruleExecutionMode :: Prelude.Maybe RuleExecutionMode,
+    -- | The rules included in the detector version.
+    rules :: Prelude.Maybe [Rule],
+    -- | The status of the detector version.
+    status :: Prelude.Maybe DetectorVersionStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDetectorVersionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'getDetectorVersionResponse_arn' - The detector version ARN.
+--
+-- 'createdTime', 'getDetectorVersionResponse_createdTime' - The timestamp when the detector version was created.
+--
+-- 'description', 'getDetectorVersionResponse_description' - The detector version description.
+--
+-- 'detectorId', 'getDetectorVersionResponse_detectorId' - The detector ID.
+--
+-- 'detectorVersionId', 'getDetectorVersionResponse_detectorVersionId' - The detector version ID.
+--
+-- 'externalModelEndpoints', 'getDetectorVersionResponse_externalModelEndpoints' - The Amazon SageMaker model endpoints included in the detector version.
+--
+-- 'lastUpdatedTime', 'getDetectorVersionResponse_lastUpdatedTime' - The timestamp when the detector version was last updated.
+--
+-- 'modelVersions', 'getDetectorVersionResponse_modelVersions' - The model versions included in the detector version.
+--
+-- 'ruleExecutionMode', 'getDetectorVersionResponse_ruleExecutionMode' - The execution mode of the rule in the dectector
+--
+-- @FIRST_MATCHED@ indicates that Amazon Fraud Detector evaluates rules
+-- sequentially, first to last, stopping at the first matched rule. Amazon
+-- Fraud dectector then provides the outcomes for that single rule.
+--
+-- @ALL_MATCHED@ indicates that Amazon Fraud Detector evaluates all rules
+-- and returns the outcomes for all matched rules. You can define and edit
+-- the rule mode at the detector version level, when it is in draft status.
+--
+-- 'rules', 'getDetectorVersionResponse_rules' - The rules included in the detector version.
+--
+-- 'status', 'getDetectorVersionResponse_status' - The status of the detector version.
+--
+-- 'httpStatus', 'getDetectorVersionResponse_httpStatus' - The response's http status code.
+newGetDetectorVersionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetDetectorVersionResponse
+newGetDetectorVersionResponse pHttpStatus_ =
+  GetDetectorVersionResponse'
+    { arn = Prelude.Nothing,
+      createdTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      detectorId = Prelude.Nothing,
+      detectorVersionId = Prelude.Nothing,
+      externalModelEndpoints = Prelude.Nothing,
+      lastUpdatedTime = Prelude.Nothing,
+      modelVersions = Prelude.Nothing,
+      ruleExecutionMode = Prelude.Nothing,
+      rules = Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The detector version ARN.
+getDetectorVersionResponse_arn :: Lens.Lens' GetDetectorVersionResponse (Prelude.Maybe Prelude.Text)
+getDetectorVersionResponse_arn = Lens.lens (\GetDetectorVersionResponse' {arn} -> arn) (\s@GetDetectorVersionResponse' {} a -> s {arn = a} :: GetDetectorVersionResponse)
+
+-- | The timestamp when the detector version was created.
+getDetectorVersionResponse_createdTime :: Lens.Lens' GetDetectorVersionResponse (Prelude.Maybe Prelude.Text)
+getDetectorVersionResponse_createdTime = Lens.lens (\GetDetectorVersionResponse' {createdTime} -> createdTime) (\s@GetDetectorVersionResponse' {} a -> s {createdTime = a} :: GetDetectorVersionResponse)
+
+-- | The detector version description.
+getDetectorVersionResponse_description :: Lens.Lens' GetDetectorVersionResponse (Prelude.Maybe Prelude.Text)
+getDetectorVersionResponse_description = Lens.lens (\GetDetectorVersionResponse' {description} -> description) (\s@GetDetectorVersionResponse' {} a -> s {description = a} :: GetDetectorVersionResponse)
+
+-- | The detector ID.
+getDetectorVersionResponse_detectorId :: Lens.Lens' GetDetectorVersionResponse (Prelude.Maybe Prelude.Text)
+getDetectorVersionResponse_detectorId = Lens.lens (\GetDetectorVersionResponse' {detectorId} -> detectorId) (\s@GetDetectorVersionResponse' {} a -> s {detectorId = a} :: GetDetectorVersionResponse)
+
+-- | The detector version ID.
+getDetectorVersionResponse_detectorVersionId :: Lens.Lens' GetDetectorVersionResponse (Prelude.Maybe Prelude.Text)
+getDetectorVersionResponse_detectorVersionId = Lens.lens (\GetDetectorVersionResponse' {detectorVersionId} -> detectorVersionId) (\s@GetDetectorVersionResponse' {} a -> s {detectorVersionId = a} :: GetDetectorVersionResponse)
+
+-- | The Amazon SageMaker model endpoints included in the detector version.
+getDetectorVersionResponse_externalModelEndpoints :: Lens.Lens' GetDetectorVersionResponse (Prelude.Maybe [Prelude.Text])
+getDetectorVersionResponse_externalModelEndpoints = Lens.lens (\GetDetectorVersionResponse' {externalModelEndpoints} -> externalModelEndpoints) (\s@GetDetectorVersionResponse' {} a -> s {externalModelEndpoints = a} :: GetDetectorVersionResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The timestamp when the detector version was last updated.
+getDetectorVersionResponse_lastUpdatedTime :: Lens.Lens' GetDetectorVersionResponse (Prelude.Maybe Prelude.Text)
+getDetectorVersionResponse_lastUpdatedTime = Lens.lens (\GetDetectorVersionResponse' {lastUpdatedTime} -> lastUpdatedTime) (\s@GetDetectorVersionResponse' {} a -> s {lastUpdatedTime = a} :: GetDetectorVersionResponse)
+
+-- | The model versions included in the detector version.
+getDetectorVersionResponse_modelVersions :: Lens.Lens' GetDetectorVersionResponse (Prelude.Maybe [ModelVersion])
+getDetectorVersionResponse_modelVersions = Lens.lens (\GetDetectorVersionResponse' {modelVersions} -> modelVersions) (\s@GetDetectorVersionResponse' {} a -> s {modelVersions = a} :: GetDetectorVersionResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The execution mode of the rule in the dectector
+--
+-- @FIRST_MATCHED@ indicates that Amazon Fraud Detector evaluates rules
+-- sequentially, first to last, stopping at the first matched rule. Amazon
+-- Fraud dectector then provides the outcomes for that single rule.
+--
+-- @ALL_MATCHED@ indicates that Amazon Fraud Detector evaluates all rules
+-- and returns the outcomes for all matched rules. You can define and edit
+-- the rule mode at the detector version level, when it is in draft status.
+getDetectorVersionResponse_ruleExecutionMode :: Lens.Lens' GetDetectorVersionResponse (Prelude.Maybe RuleExecutionMode)
+getDetectorVersionResponse_ruleExecutionMode = Lens.lens (\GetDetectorVersionResponse' {ruleExecutionMode} -> ruleExecutionMode) (\s@GetDetectorVersionResponse' {} a -> s {ruleExecutionMode = a} :: GetDetectorVersionResponse)
+
+-- | The rules included in the detector version.
+getDetectorVersionResponse_rules :: Lens.Lens' GetDetectorVersionResponse (Prelude.Maybe [Rule])
+getDetectorVersionResponse_rules = Lens.lens (\GetDetectorVersionResponse' {rules} -> rules) (\s@GetDetectorVersionResponse' {} a -> s {rules = a} :: GetDetectorVersionResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The status of the detector version.
+getDetectorVersionResponse_status :: Lens.Lens' GetDetectorVersionResponse (Prelude.Maybe DetectorVersionStatus)
+getDetectorVersionResponse_status = Lens.lens (\GetDetectorVersionResponse' {status} -> status) (\s@GetDetectorVersionResponse' {} a -> s {status = a} :: GetDetectorVersionResponse)
+
+-- | The response's http status code.
+getDetectorVersionResponse_httpStatus :: Lens.Lens' GetDetectorVersionResponse Prelude.Int
+getDetectorVersionResponse_httpStatus = Lens.lens (\GetDetectorVersionResponse' {httpStatus} -> httpStatus) (\s@GetDetectorVersionResponse' {} a -> s {httpStatus = a} :: GetDetectorVersionResponse)
+
+instance Prelude.NFData GetDetectorVersionResponse where
+  rnf GetDetectorVersionResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf detectorId
+      `Prelude.seq` Prelude.rnf detectorVersionId
+      `Prelude.seq` Prelude.rnf externalModelEndpoints
+      `Prelude.seq` Prelude.rnf lastUpdatedTime
+      `Prelude.seq` Prelude.rnf modelVersions
+      `Prelude.seq` Prelude.rnf ruleExecutionMode
+      `Prelude.seq` Prelude.rnf rules
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/GetDetectors.hs b/gen/Amazonka/FraudDetector/GetDetectors.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/GetDetectors.hs
@@ -0,0 +1,212 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.GetDetectors
+-- 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 all detectors or a single detector if a @detectorId@ is specified.
+-- This is a paginated API. If you provide a null @maxResults@, this action
+-- retrieves a maximum of 10 records per page. If you provide a
+-- @maxResults@, the value must be between 5 and 10. To get the next page
+-- results, provide the pagination token from the @GetDetectorsResponse@ as
+-- part of your request. A null pagination token fetches the records from
+-- the beginning.
+module Amazonka.FraudDetector.GetDetectors
+  ( -- * Creating a Request
+    GetDetectors (..),
+    newGetDetectors,
+
+    -- * Request Lenses
+    getDetectors_detectorId,
+    getDetectors_maxResults,
+    getDetectors_nextToken,
+
+    -- * Destructuring the Response
+    GetDetectorsResponse (..),
+    newGetDetectorsResponse,
+
+    -- * Response Lenses
+    getDetectorsResponse_detectors,
+    getDetectorsResponse_nextToken,
+    getDetectorsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDetectors' smart constructor.
+data GetDetectors = GetDetectors'
+  { -- | The detector ID.
+    detectorId :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of objects to return for the request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The next token for the subsequent request.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDetectors' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detectorId', 'getDetectors_detectorId' - The detector ID.
+--
+-- 'maxResults', 'getDetectors_maxResults' - The maximum number of objects to return for the request.
+--
+-- 'nextToken', 'getDetectors_nextToken' - The next token for the subsequent request.
+newGetDetectors ::
+  GetDetectors
+newGetDetectors =
+  GetDetectors'
+    { detectorId = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The detector ID.
+getDetectors_detectorId :: Lens.Lens' GetDetectors (Prelude.Maybe Prelude.Text)
+getDetectors_detectorId = Lens.lens (\GetDetectors' {detectorId} -> detectorId) (\s@GetDetectors' {} a -> s {detectorId = a} :: GetDetectors)
+
+-- | The maximum number of objects to return for the request.
+getDetectors_maxResults :: Lens.Lens' GetDetectors (Prelude.Maybe Prelude.Natural)
+getDetectors_maxResults = Lens.lens (\GetDetectors' {maxResults} -> maxResults) (\s@GetDetectors' {} a -> s {maxResults = a} :: GetDetectors)
+
+-- | The next token for the subsequent request.
+getDetectors_nextToken :: Lens.Lens' GetDetectors (Prelude.Maybe Prelude.Text)
+getDetectors_nextToken = Lens.lens (\GetDetectors' {nextToken} -> nextToken) (\s@GetDetectors' {} a -> s {nextToken = a} :: GetDetectors)
+
+instance Core.AWSRequest GetDetectors where
+  type AWSResponse GetDetectors = GetDetectorsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDetectorsResponse'
+            Prelude.<$> (x Data..?> "detectors" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetDetectors where
+  hashWithSalt _salt GetDetectors' {..} =
+    _salt
+      `Prelude.hashWithSalt` detectorId
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData GetDetectors where
+  rnf GetDetectors' {..} =
+    Prelude.rnf detectorId
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders GetDetectors where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.GetDetectors" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetDetectors where
+  toJSON GetDetectors' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("detectorId" Data..=) Prelude.<$> detectorId,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath GetDetectors where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetDetectors where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetDetectorsResponse' smart constructor.
+data GetDetectorsResponse = GetDetectorsResponse'
+  { -- | The detectors.
+    detectors :: Prelude.Maybe [Detector],
+    -- | The next page token.
+    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 'GetDetectorsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detectors', 'getDetectorsResponse_detectors' - The detectors.
+--
+-- 'nextToken', 'getDetectorsResponse_nextToken' - The next page token.
+--
+-- 'httpStatus', 'getDetectorsResponse_httpStatus' - The response's http status code.
+newGetDetectorsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetDetectorsResponse
+newGetDetectorsResponse pHttpStatus_ =
+  GetDetectorsResponse'
+    { detectors = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The detectors.
+getDetectorsResponse_detectors :: Lens.Lens' GetDetectorsResponse (Prelude.Maybe [Detector])
+getDetectorsResponse_detectors = Lens.lens (\GetDetectorsResponse' {detectors} -> detectors) (\s@GetDetectorsResponse' {} a -> s {detectors = a} :: GetDetectorsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next page token.
+getDetectorsResponse_nextToken :: Lens.Lens' GetDetectorsResponse (Prelude.Maybe Prelude.Text)
+getDetectorsResponse_nextToken = Lens.lens (\GetDetectorsResponse' {nextToken} -> nextToken) (\s@GetDetectorsResponse' {} a -> s {nextToken = a} :: GetDetectorsResponse)
+
+-- | The response's http status code.
+getDetectorsResponse_httpStatus :: Lens.Lens' GetDetectorsResponse Prelude.Int
+getDetectorsResponse_httpStatus = Lens.lens (\GetDetectorsResponse' {httpStatus} -> httpStatus) (\s@GetDetectorsResponse' {} a -> s {httpStatus = a} :: GetDetectorsResponse)
+
+instance Prelude.NFData GetDetectorsResponse where
+  rnf GetDetectorsResponse' {..} =
+    Prelude.rnf detectors
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/GetEntityTypes.hs b/gen/Amazonka/FraudDetector/GetEntityTypes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/GetEntityTypes.hs
@@ -0,0 +1,215 @@
+{-# 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.FraudDetector.GetEntityTypes
+-- 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 all entity types or a specific entity type if a name is specified.
+-- This is a paginated API. If you provide a null @maxResults@, this action
+-- retrieves a maximum of 10 records per page. If you provide a
+-- @maxResults@, the value must be between 5 and 10. To get the next page
+-- results, provide the pagination token from the @GetEntityTypesResponse@
+-- as part of your request. A null pagination token fetches the records
+-- from the beginning.
+module Amazonka.FraudDetector.GetEntityTypes
+  ( -- * Creating a Request
+    GetEntityTypes (..),
+    newGetEntityTypes,
+
+    -- * Request Lenses
+    getEntityTypes_maxResults,
+    getEntityTypes_name,
+    getEntityTypes_nextToken,
+
+    -- * Destructuring the Response
+    GetEntityTypesResponse (..),
+    newGetEntityTypesResponse,
+
+    -- * Response Lenses
+    getEntityTypesResponse_entityTypes,
+    getEntityTypesResponse_nextToken,
+    getEntityTypesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetEntityTypes' smart constructor.
+data GetEntityTypes = GetEntityTypes'
+  { -- | The maximum number of objects to return for the request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The name.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The next token for the subsequent request.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetEntityTypes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getEntityTypes_maxResults' - The maximum number of objects to return for the request.
+--
+-- 'name', 'getEntityTypes_name' - The name.
+--
+-- 'nextToken', 'getEntityTypes_nextToken' - The next token for the subsequent request.
+newGetEntityTypes ::
+  GetEntityTypes
+newGetEntityTypes =
+  GetEntityTypes'
+    { maxResults = Prelude.Nothing,
+      name = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of objects to return for the request.
+getEntityTypes_maxResults :: Lens.Lens' GetEntityTypes (Prelude.Maybe Prelude.Natural)
+getEntityTypes_maxResults = Lens.lens (\GetEntityTypes' {maxResults} -> maxResults) (\s@GetEntityTypes' {} a -> s {maxResults = a} :: GetEntityTypes)
+
+-- | The name.
+getEntityTypes_name :: Lens.Lens' GetEntityTypes (Prelude.Maybe Prelude.Text)
+getEntityTypes_name = Lens.lens (\GetEntityTypes' {name} -> name) (\s@GetEntityTypes' {} a -> s {name = a} :: GetEntityTypes)
+
+-- | The next token for the subsequent request.
+getEntityTypes_nextToken :: Lens.Lens' GetEntityTypes (Prelude.Maybe Prelude.Text)
+getEntityTypes_nextToken = Lens.lens (\GetEntityTypes' {nextToken} -> nextToken) (\s@GetEntityTypes' {} a -> s {nextToken = a} :: GetEntityTypes)
+
+instance Core.AWSRequest GetEntityTypes where
+  type
+    AWSResponse GetEntityTypes =
+      GetEntityTypesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetEntityTypesResponse'
+            Prelude.<$> (x Data..?> "entityTypes" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetEntityTypes where
+  hashWithSalt _salt GetEntityTypes' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData GetEntityTypes where
+  rnf GetEntityTypes' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders GetEntityTypes where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.GetEntityTypes" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetEntityTypes where
+  toJSON GetEntityTypes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("name" Data..=) Prelude.<$> name,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath GetEntityTypes where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetEntityTypes where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetEntityTypesResponse' smart constructor.
+data GetEntityTypesResponse = GetEntityTypesResponse'
+  { -- | An array of entity types.
+    entityTypes :: Prelude.Maybe [EntityType],
+    -- | The next page token.
+    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 'GetEntityTypesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'entityTypes', 'getEntityTypesResponse_entityTypes' - An array of entity types.
+--
+-- 'nextToken', 'getEntityTypesResponse_nextToken' - The next page token.
+--
+-- 'httpStatus', 'getEntityTypesResponse_httpStatus' - The response's http status code.
+newGetEntityTypesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetEntityTypesResponse
+newGetEntityTypesResponse pHttpStatus_ =
+  GetEntityTypesResponse'
+    { entityTypes =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of entity types.
+getEntityTypesResponse_entityTypes :: Lens.Lens' GetEntityTypesResponse (Prelude.Maybe [EntityType])
+getEntityTypesResponse_entityTypes = Lens.lens (\GetEntityTypesResponse' {entityTypes} -> entityTypes) (\s@GetEntityTypesResponse' {} a -> s {entityTypes = a} :: GetEntityTypesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next page token.
+getEntityTypesResponse_nextToken :: Lens.Lens' GetEntityTypesResponse (Prelude.Maybe Prelude.Text)
+getEntityTypesResponse_nextToken = Lens.lens (\GetEntityTypesResponse' {nextToken} -> nextToken) (\s@GetEntityTypesResponse' {} a -> s {nextToken = a} :: GetEntityTypesResponse)
+
+-- | The response's http status code.
+getEntityTypesResponse_httpStatus :: Lens.Lens' GetEntityTypesResponse Prelude.Int
+getEntityTypesResponse_httpStatus = Lens.lens (\GetEntityTypesResponse' {httpStatus} -> httpStatus) (\s@GetEntityTypesResponse' {} a -> s {httpStatus = a} :: GetEntityTypesResponse)
+
+instance Prelude.NFData GetEntityTypesResponse where
+  rnf GetEntityTypesResponse' {..} =
+    Prelude.rnf entityTypes
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/GetEvent.hs b/gen/Amazonka/FraudDetector/GetEvent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/GetEvent.hs
@@ -0,0 +1,187 @@
+{-# 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.FraudDetector.GetEvent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves details of events stored with Amazon Fraud Detector. This
+-- action does not retrieve prediction results.
+module Amazonka.FraudDetector.GetEvent
+  ( -- * Creating a Request
+    GetEvent (..),
+    newGetEvent,
+
+    -- * Request Lenses
+    getEvent_eventId,
+    getEvent_eventTypeName,
+
+    -- * Destructuring the Response
+    GetEventResponse (..),
+    newGetEventResponse,
+
+    -- * Response Lenses
+    getEventResponse_event,
+    getEventResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetEvent' smart constructor.
+data GetEvent = GetEvent'
+  { -- | The ID of the event to retrieve.
+    eventId :: Prelude.Text,
+    -- | The event type of the event to retrieve.
+    eventTypeName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetEvent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eventId', 'getEvent_eventId' - The ID of the event to retrieve.
+--
+-- 'eventTypeName', 'getEvent_eventTypeName' - The event type of the event to retrieve.
+newGetEvent ::
+  -- | 'eventId'
+  Prelude.Text ->
+  -- | 'eventTypeName'
+  Prelude.Text ->
+  GetEvent
+newGetEvent pEventId_ pEventTypeName_ =
+  GetEvent'
+    { eventId = pEventId_,
+      eventTypeName = pEventTypeName_
+    }
+
+-- | The ID of the event to retrieve.
+getEvent_eventId :: Lens.Lens' GetEvent Prelude.Text
+getEvent_eventId = Lens.lens (\GetEvent' {eventId} -> eventId) (\s@GetEvent' {} a -> s {eventId = a} :: GetEvent)
+
+-- | The event type of the event to retrieve.
+getEvent_eventTypeName :: Lens.Lens' GetEvent Prelude.Text
+getEvent_eventTypeName = Lens.lens (\GetEvent' {eventTypeName} -> eventTypeName) (\s@GetEvent' {} a -> s {eventTypeName = a} :: GetEvent)
+
+instance Core.AWSRequest GetEvent where
+  type AWSResponse GetEvent = GetEventResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetEventResponse'
+            Prelude.<$> (x Data..?> "event")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetEvent where
+  hashWithSalt _salt GetEvent' {..} =
+    _salt
+      `Prelude.hashWithSalt` eventId
+      `Prelude.hashWithSalt` eventTypeName
+
+instance Prelude.NFData GetEvent where
+  rnf GetEvent' {..} =
+    Prelude.rnf eventId
+      `Prelude.seq` Prelude.rnf eventTypeName
+
+instance Data.ToHeaders GetEvent where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.GetEvent" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetEvent where
+  toJSON GetEvent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("eventId" Data..= eventId),
+            Prelude.Just
+              ("eventTypeName" Data..= eventTypeName)
+          ]
+      )
+
+instance Data.ToPath GetEvent where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetEvent where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetEventResponse' smart constructor.
+data GetEventResponse = GetEventResponse'
+  { -- | The details of the event.
+    event :: Prelude.Maybe Event,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetEventResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'event', 'getEventResponse_event' - The details of the event.
+--
+-- 'httpStatus', 'getEventResponse_httpStatus' - The response's http status code.
+newGetEventResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetEventResponse
+newGetEventResponse pHttpStatus_ =
+  GetEventResponse'
+    { event = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The details of the event.
+getEventResponse_event :: Lens.Lens' GetEventResponse (Prelude.Maybe Event)
+getEventResponse_event = Lens.lens (\GetEventResponse' {event} -> event) (\s@GetEventResponse' {} a -> s {event = a} :: GetEventResponse)
+
+-- | The response's http status code.
+getEventResponse_httpStatus :: Lens.Lens' GetEventResponse Prelude.Int
+getEventResponse_httpStatus = Lens.lens (\GetEventResponse' {httpStatus} -> httpStatus) (\s@GetEventResponse' {} a -> s {httpStatus = a} :: GetEventResponse)
+
+instance Prelude.NFData GetEventResponse where
+  rnf GetEventResponse' {..} =
+    Prelude.rnf event
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/GetEventPrediction.hs b/gen/Amazonka/FraudDetector/GetEventPrediction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/GetEventPrediction.hs
@@ -0,0 +1,403 @@
+{-# 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.FraudDetector.GetEventPrediction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Evaluates an event against a detector version. If a version ID is not
+-- provided, the detector’s (@ACTIVE@) version is used.
+module Amazonka.FraudDetector.GetEventPrediction
+  ( -- * Creating a Request
+    GetEventPrediction (..),
+    newGetEventPrediction,
+
+    -- * Request Lenses
+    getEventPrediction_detectorVersionId,
+    getEventPrediction_externalModelEndpointDataBlobs,
+    getEventPrediction_detectorId,
+    getEventPrediction_eventId,
+    getEventPrediction_eventTypeName,
+    getEventPrediction_entities,
+    getEventPrediction_eventTimestamp,
+    getEventPrediction_eventVariables,
+
+    -- * Destructuring the Response
+    GetEventPredictionResponse (..),
+    newGetEventPredictionResponse,
+
+    -- * Response Lenses
+    getEventPredictionResponse_externalModelOutputs,
+    getEventPredictionResponse_modelScores,
+    getEventPredictionResponse_ruleResults,
+    getEventPredictionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetEventPrediction' smart constructor.
+data GetEventPrediction = GetEventPrediction'
+  { -- | The detector version ID.
+    detectorVersionId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon SageMaker model endpoint input data blobs.
+    externalModelEndpointDataBlobs :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text ModelEndpointDataBlob)),
+    -- | The detector ID.
+    detectorId :: Prelude.Text,
+    -- | The unique ID used to identify the event.
+    eventId :: Prelude.Text,
+    -- | The event type associated with the detector specified for the
+    -- prediction.
+    eventTypeName :: Prelude.Text,
+    -- | The entity type (associated with the detector\'s event type) and
+    -- specific entity ID representing who performed the event. If an entity id
+    -- is not available, use \"UNKNOWN.\"
+    entities :: [Data.Sensitive Entity],
+    -- | Timestamp that defines when the event under evaluation occurred. The
+    -- timestamp must be specified using ISO 8601 standard in UTC.
+    eventTimestamp :: Prelude.Text,
+    -- | Names of the event type\'s variables you defined in Amazon Fraud
+    -- Detector to represent data elements and their corresponding values for
+    -- the event you are sending for evaluation.
+    --
+    -- You must provide at least one eventVariable
+    --
+    -- To ensure most accurate fraud prediction and to simplify your data
+    -- preparation, Amazon Fraud Detector will replace all missing variables or
+    -- values as follows:
+    --
+    -- __For Amazon Fraud Detector trained models:__
+    --
+    -- If a null value is provided explicitly for a variable or if a variable
+    -- is missing, model will replace the null value or the missing variable
+    -- (no variable name in the eventVariables map) with calculated default
+    -- mean\/medians for numeric variables and with special values for
+    -- categorical variables.
+    --
+    -- __For imported SageMaker models:__
+    --
+    -- If a null value is provided explicitly for a variable, the model and
+    -- rules will use “null” as the value. If a variable is not provided (no
+    -- variable name in the eventVariables map), model and rules will use the
+    -- default value that is provided for the variable.
+    eventVariables :: Prelude.HashMap Prelude.Text (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetEventPrediction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detectorVersionId', 'getEventPrediction_detectorVersionId' - The detector version ID.
+--
+-- 'externalModelEndpointDataBlobs', 'getEventPrediction_externalModelEndpointDataBlobs' - The Amazon SageMaker model endpoint input data blobs.
+--
+-- 'detectorId', 'getEventPrediction_detectorId' - The detector ID.
+--
+-- 'eventId', 'getEventPrediction_eventId' - The unique ID used to identify the event.
+--
+-- 'eventTypeName', 'getEventPrediction_eventTypeName' - The event type associated with the detector specified for the
+-- prediction.
+--
+-- 'entities', 'getEventPrediction_entities' - The entity type (associated with the detector\'s event type) and
+-- specific entity ID representing who performed the event. If an entity id
+-- is not available, use \"UNKNOWN.\"
+--
+-- 'eventTimestamp', 'getEventPrediction_eventTimestamp' - Timestamp that defines when the event under evaluation occurred. The
+-- timestamp must be specified using ISO 8601 standard in UTC.
+--
+-- 'eventVariables', 'getEventPrediction_eventVariables' - Names of the event type\'s variables you defined in Amazon Fraud
+-- Detector to represent data elements and their corresponding values for
+-- the event you are sending for evaluation.
+--
+-- You must provide at least one eventVariable
+--
+-- To ensure most accurate fraud prediction and to simplify your data
+-- preparation, Amazon Fraud Detector will replace all missing variables or
+-- values as follows:
+--
+-- __For Amazon Fraud Detector trained models:__
+--
+-- If a null value is provided explicitly for a variable or if a variable
+-- is missing, model will replace the null value or the missing variable
+-- (no variable name in the eventVariables map) with calculated default
+-- mean\/medians for numeric variables and with special values for
+-- categorical variables.
+--
+-- __For imported SageMaker models:__
+--
+-- If a null value is provided explicitly for a variable, the model and
+-- rules will use “null” as the value. If a variable is not provided (no
+-- variable name in the eventVariables map), model and rules will use the
+-- default value that is provided for the variable.
+newGetEventPrediction ::
+  -- | 'detectorId'
+  Prelude.Text ->
+  -- | 'eventId'
+  Prelude.Text ->
+  -- | 'eventTypeName'
+  Prelude.Text ->
+  -- | 'eventTimestamp'
+  Prelude.Text ->
+  GetEventPrediction
+newGetEventPrediction
+  pDetectorId_
+  pEventId_
+  pEventTypeName_
+  pEventTimestamp_ =
+    GetEventPrediction'
+      { detectorVersionId =
+          Prelude.Nothing,
+        externalModelEndpointDataBlobs = Prelude.Nothing,
+        detectorId = pDetectorId_,
+        eventId = pEventId_,
+        eventTypeName = pEventTypeName_,
+        entities = Prelude.mempty,
+        eventTimestamp = pEventTimestamp_,
+        eventVariables = Prelude.mempty
+      }
+
+-- | The detector version ID.
+getEventPrediction_detectorVersionId :: Lens.Lens' GetEventPrediction (Prelude.Maybe Prelude.Text)
+getEventPrediction_detectorVersionId = Lens.lens (\GetEventPrediction' {detectorVersionId} -> detectorVersionId) (\s@GetEventPrediction' {} a -> s {detectorVersionId = a} :: GetEventPrediction)
+
+-- | The Amazon SageMaker model endpoint input data blobs.
+getEventPrediction_externalModelEndpointDataBlobs :: Lens.Lens' GetEventPrediction (Prelude.Maybe (Prelude.HashMap Prelude.Text ModelEndpointDataBlob))
+getEventPrediction_externalModelEndpointDataBlobs = Lens.lens (\GetEventPrediction' {externalModelEndpointDataBlobs} -> externalModelEndpointDataBlobs) (\s@GetEventPrediction' {} a -> s {externalModelEndpointDataBlobs = a} :: GetEventPrediction) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The detector ID.
+getEventPrediction_detectorId :: Lens.Lens' GetEventPrediction Prelude.Text
+getEventPrediction_detectorId = Lens.lens (\GetEventPrediction' {detectorId} -> detectorId) (\s@GetEventPrediction' {} a -> s {detectorId = a} :: GetEventPrediction)
+
+-- | The unique ID used to identify the event.
+getEventPrediction_eventId :: Lens.Lens' GetEventPrediction Prelude.Text
+getEventPrediction_eventId = Lens.lens (\GetEventPrediction' {eventId} -> eventId) (\s@GetEventPrediction' {} a -> s {eventId = a} :: GetEventPrediction)
+
+-- | The event type associated with the detector specified for the
+-- prediction.
+getEventPrediction_eventTypeName :: Lens.Lens' GetEventPrediction Prelude.Text
+getEventPrediction_eventTypeName = Lens.lens (\GetEventPrediction' {eventTypeName} -> eventTypeName) (\s@GetEventPrediction' {} a -> s {eventTypeName = a} :: GetEventPrediction)
+
+-- | The entity type (associated with the detector\'s event type) and
+-- specific entity ID representing who performed the event. If an entity id
+-- is not available, use \"UNKNOWN.\"
+getEventPrediction_entities :: Lens.Lens' GetEventPrediction [Entity]
+getEventPrediction_entities = Lens.lens (\GetEventPrediction' {entities} -> entities) (\s@GetEventPrediction' {} a -> s {entities = a} :: GetEventPrediction) Prelude.. Lens.coerced
+
+-- | Timestamp that defines when the event under evaluation occurred. The
+-- timestamp must be specified using ISO 8601 standard in UTC.
+getEventPrediction_eventTimestamp :: Lens.Lens' GetEventPrediction Prelude.Text
+getEventPrediction_eventTimestamp = Lens.lens (\GetEventPrediction' {eventTimestamp} -> eventTimestamp) (\s@GetEventPrediction' {} a -> s {eventTimestamp = a} :: GetEventPrediction)
+
+-- | Names of the event type\'s variables you defined in Amazon Fraud
+-- Detector to represent data elements and their corresponding values for
+-- the event you are sending for evaluation.
+--
+-- You must provide at least one eventVariable
+--
+-- To ensure most accurate fraud prediction and to simplify your data
+-- preparation, Amazon Fraud Detector will replace all missing variables or
+-- values as follows:
+--
+-- __For Amazon Fraud Detector trained models:__
+--
+-- If a null value is provided explicitly for a variable or if a variable
+-- is missing, model will replace the null value or the missing variable
+-- (no variable name in the eventVariables map) with calculated default
+-- mean\/medians for numeric variables and with special values for
+-- categorical variables.
+--
+-- __For imported SageMaker models:__
+--
+-- If a null value is provided explicitly for a variable, the model and
+-- rules will use “null” as the value. If a variable is not provided (no
+-- variable name in the eventVariables map), model and rules will use the
+-- default value that is provided for the variable.
+getEventPrediction_eventVariables :: Lens.Lens' GetEventPrediction (Prelude.HashMap Prelude.Text Prelude.Text)
+getEventPrediction_eventVariables = Lens.lens (\GetEventPrediction' {eventVariables} -> eventVariables) (\s@GetEventPrediction' {} a -> s {eventVariables = a} :: GetEventPrediction) Prelude.. Lens.coerced
+
+instance Core.AWSRequest GetEventPrediction where
+  type
+    AWSResponse GetEventPrediction =
+      GetEventPredictionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetEventPredictionResponse'
+            Prelude.<$> ( x
+                            Data..?> "externalModelOutputs"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "modelScores" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "ruleResults" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetEventPrediction where
+  hashWithSalt _salt GetEventPrediction' {..} =
+    _salt
+      `Prelude.hashWithSalt` detectorVersionId
+      `Prelude.hashWithSalt` externalModelEndpointDataBlobs
+      `Prelude.hashWithSalt` detectorId
+      `Prelude.hashWithSalt` eventId
+      `Prelude.hashWithSalt` eventTypeName
+      `Prelude.hashWithSalt` entities
+      `Prelude.hashWithSalt` eventTimestamp
+      `Prelude.hashWithSalt` eventVariables
+
+instance Prelude.NFData GetEventPrediction where
+  rnf GetEventPrediction' {..} =
+    Prelude.rnf detectorVersionId
+      `Prelude.seq` Prelude.rnf externalModelEndpointDataBlobs
+      `Prelude.seq` Prelude.rnf detectorId
+      `Prelude.seq` Prelude.rnf eventId
+      `Prelude.seq` Prelude.rnf eventTypeName
+      `Prelude.seq` Prelude.rnf entities
+      `Prelude.seq` Prelude.rnf eventTimestamp
+      `Prelude.seq` Prelude.rnf eventVariables
+
+instance Data.ToHeaders GetEventPrediction where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.GetEventPrediction" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetEventPrediction where
+  toJSON GetEventPrediction' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("detectorVersionId" Data..=)
+              Prelude.<$> detectorVersionId,
+            ("externalModelEndpointDataBlobs" Data..=)
+              Prelude.<$> externalModelEndpointDataBlobs,
+            Prelude.Just ("detectorId" Data..= detectorId),
+            Prelude.Just ("eventId" Data..= eventId),
+            Prelude.Just ("eventTypeName" Data..= eventTypeName),
+            Prelude.Just ("entities" Data..= entities),
+            Prelude.Just
+              ("eventTimestamp" Data..= eventTimestamp),
+            Prelude.Just
+              ("eventVariables" Data..= eventVariables)
+          ]
+      )
+
+instance Data.ToPath GetEventPrediction where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetEventPrediction where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetEventPredictionResponse' smart constructor.
+data GetEventPredictionResponse = GetEventPredictionResponse'
+  { -- | The model scores for Amazon SageMaker models.
+    externalModelOutputs :: Prelude.Maybe [ExternalModelOutputs],
+    -- | The model scores. Amazon Fraud Detector generates model scores between 0
+    -- and 1000, where 0 is low fraud risk and 1000 is high fraud risk. Model
+    -- scores are directly related to the false positive rate (FPR). For
+    -- example, a score of 600 corresponds to an estimated 10% false positive
+    -- rate whereas a score of 900 corresponds to an estimated 2% false
+    -- positive rate.
+    modelScores :: Prelude.Maybe [ModelScores],
+    -- | The results from the rules.
+    ruleResults :: Prelude.Maybe [RuleResult],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetEventPredictionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'externalModelOutputs', 'getEventPredictionResponse_externalModelOutputs' - The model scores for Amazon SageMaker models.
+--
+-- 'modelScores', 'getEventPredictionResponse_modelScores' - The model scores. Amazon Fraud Detector generates model scores between 0
+-- and 1000, where 0 is low fraud risk and 1000 is high fraud risk. Model
+-- scores are directly related to the false positive rate (FPR). For
+-- example, a score of 600 corresponds to an estimated 10% false positive
+-- rate whereas a score of 900 corresponds to an estimated 2% false
+-- positive rate.
+--
+-- 'ruleResults', 'getEventPredictionResponse_ruleResults' - The results from the rules.
+--
+-- 'httpStatus', 'getEventPredictionResponse_httpStatus' - The response's http status code.
+newGetEventPredictionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetEventPredictionResponse
+newGetEventPredictionResponse pHttpStatus_ =
+  GetEventPredictionResponse'
+    { externalModelOutputs =
+        Prelude.Nothing,
+      modelScores = Prelude.Nothing,
+      ruleResults = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The model scores for Amazon SageMaker models.
+getEventPredictionResponse_externalModelOutputs :: Lens.Lens' GetEventPredictionResponse (Prelude.Maybe [ExternalModelOutputs])
+getEventPredictionResponse_externalModelOutputs = Lens.lens (\GetEventPredictionResponse' {externalModelOutputs} -> externalModelOutputs) (\s@GetEventPredictionResponse' {} a -> s {externalModelOutputs = a} :: GetEventPredictionResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The model scores. Amazon Fraud Detector generates model scores between 0
+-- and 1000, where 0 is low fraud risk and 1000 is high fraud risk. Model
+-- scores are directly related to the false positive rate (FPR). For
+-- example, a score of 600 corresponds to an estimated 10% false positive
+-- rate whereas a score of 900 corresponds to an estimated 2% false
+-- positive rate.
+getEventPredictionResponse_modelScores :: Lens.Lens' GetEventPredictionResponse (Prelude.Maybe [ModelScores])
+getEventPredictionResponse_modelScores = Lens.lens (\GetEventPredictionResponse' {modelScores} -> modelScores) (\s@GetEventPredictionResponse' {} a -> s {modelScores = a} :: GetEventPredictionResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The results from the rules.
+getEventPredictionResponse_ruleResults :: Lens.Lens' GetEventPredictionResponse (Prelude.Maybe [RuleResult])
+getEventPredictionResponse_ruleResults = Lens.lens (\GetEventPredictionResponse' {ruleResults} -> ruleResults) (\s@GetEventPredictionResponse' {} a -> s {ruleResults = a} :: GetEventPredictionResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getEventPredictionResponse_httpStatus :: Lens.Lens' GetEventPredictionResponse Prelude.Int
+getEventPredictionResponse_httpStatus = Lens.lens (\GetEventPredictionResponse' {httpStatus} -> httpStatus) (\s@GetEventPredictionResponse' {} a -> s {httpStatus = a} :: GetEventPredictionResponse)
+
+instance Prelude.NFData GetEventPredictionResponse where
+  rnf GetEventPredictionResponse' {..} =
+    Prelude.rnf externalModelOutputs
+      `Prelude.seq` Prelude.rnf modelScores
+      `Prelude.seq` Prelude.rnf ruleResults
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/GetEventPredictionMetadata.hs b/gen/Amazonka/FraudDetector/GetEventPredictionMetadata.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/GetEventPredictionMetadata.hs
@@ -0,0 +1,454 @@
+{-# 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.FraudDetector.GetEventPredictionMetadata
+-- 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 details of the past fraud predictions for the specified event ID,
+-- event type, detector ID, and detector version ID that was generated in
+-- the specified time period.
+module Amazonka.FraudDetector.GetEventPredictionMetadata
+  ( -- * Creating a Request
+    GetEventPredictionMetadata (..),
+    newGetEventPredictionMetadata,
+
+    -- * Request Lenses
+    getEventPredictionMetadata_eventId,
+    getEventPredictionMetadata_eventTypeName,
+    getEventPredictionMetadata_detectorId,
+    getEventPredictionMetadata_detectorVersionId,
+    getEventPredictionMetadata_predictionTimestamp,
+
+    -- * Destructuring the Response
+    GetEventPredictionMetadataResponse (..),
+    newGetEventPredictionMetadataResponse,
+
+    -- * Response Lenses
+    getEventPredictionMetadataResponse_detectorId,
+    getEventPredictionMetadataResponse_detectorVersionId,
+    getEventPredictionMetadataResponse_detectorVersionStatus,
+    getEventPredictionMetadataResponse_entityId,
+    getEventPredictionMetadataResponse_entityType,
+    getEventPredictionMetadataResponse_evaluatedExternalModels,
+    getEventPredictionMetadataResponse_evaluatedModelVersions,
+    getEventPredictionMetadataResponse_eventId,
+    getEventPredictionMetadataResponse_eventTimestamp,
+    getEventPredictionMetadataResponse_eventTypeName,
+    getEventPredictionMetadataResponse_eventVariables,
+    getEventPredictionMetadataResponse_outcomes,
+    getEventPredictionMetadataResponse_predictionTimestamp,
+    getEventPredictionMetadataResponse_ruleExecutionMode,
+    getEventPredictionMetadataResponse_rules,
+    getEventPredictionMetadataResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetEventPredictionMetadata' smart constructor.
+data GetEventPredictionMetadata = GetEventPredictionMetadata'
+  { -- | The event ID.
+    eventId :: Prelude.Text,
+    -- | The event type associated with the detector specified for the
+    -- prediction.
+    eventTypeName :: Prelude.Text,
+    -- | The detector ID.
+    detectorId :: Prelude.Text,
+    -- | The detector version ID.
+    detectorVersionId :: Prelude.Text,
+    -- | The timestamp that defines when the prediction was generated. The
+    -- timestamp must be specified using ISO 8601 standard in UTC.
+    --
+    -- We recommend calling
+    -- <https://docs.aws.amazon.com/frauddetector/latest/api/API_ListEventPredictions.html ListEventPredictions>
+    -- first, and using the @predictionTimestamp@ value in the response to
+    -- provide an accurate prediction timestamp value.
+    predictionTimestamp :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetEventPredictionMetadata' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eventId', 'getEventPredictionMetadata_eventId' - The event ID.
+--
+-- 'eventTypeName', 'getEventPredictionMetadata_eventTypeName' - The event type associated with the detector specified for the
+-- prediction.
+--
+-- 'detectorId', 'getEventPredictionMetadata_detectorId' - The detector ID.
+--
+-- 'detectorVersionId', 'getEventPredictionMetadata_detectorVersionId' - The detector version ID.
+--
+-- 'predictionTimestamp', 'getEventPredictionMetadata_predictionTimestamp' - The timestamp that defines when the prediction was generated. The
+-- timestamp must be specified using ISO 8601 standard in UTC.
+--
+-- We recommend calling
+-- <https://docs.aws.amazon.com/frauddetector/latest/api/API_ListEventPredictions.html ListEventPredictions>
+-- first, and using the @predictionTimestamp@ value in the response to
+-- provide an accurate prediction timestamp value.
+newGetEventPredictionMetadata ::
+  -- | 'eventId'
+  Prelude.Text ->
+  -- | 'eventTypeName'
+  Prelude.Text ->
+  -- | 'detectorId'
+  Prelude.Text ->
+  -- | 'detectorVersionId'
+  Prelude.Text ->
+  -- | 'predictionTimestamp'
+  Prelude.Text ->
+  GetEventPredictionMetadata
+newGetEventPredictionMetadata
+  pEventId_
+  pEventTypeName_
+  pDetectorId_
+  pDetectorVersionId_
+  pPredictionTimestamp_ =
+    GetEventPredictionMetadata'
+      { eventId = pEventId_,
+        eventTypeName = pEventTypeName_,
+        detectorId = pDetectorId_,
+        detectorVersionId = pDetectorVersionId_,
+        predictionTimestamp = pPredictionTimestamp_
+      }
+
+-- | The event ID.
+getEventPredictionMetadata_eventId :: Lens.Lens' GetEventPredictionMetadata Prelude.Text
+getEventPredictionMetadata_eventId = Lens.lens (\GetEventPredictionMetadata' {eventId} -> eventId) (\s@GetEventPredictionMetadata' {} a -> s {eventId = a} :: GetEventPredictionMetadata)
+
+-- | The event type associated with the detector specified for the
+-- prediction.
+getEventPredictionMetadata_eventTypeName :: Lens.Lens' GetEventPredictionMetadata Prelude.Text
+getEventPredictionMetadata_eventTypeName = Lens.lens (\GetEventPredictionMetadata' {eventTypeName} -> eventTypeName) (\s@GetEventPredictionMetadata' {} a -> s {eventTypeName = a} :: GetEventPredictionMetadata)
+
+-- | The detector ID.
+getEventPredictionMetadata_detectorId :: Lens.Lens' GetEventPredictionMetadata Prelude.Text
+getEventPredictionMetadata_detectorId = Lens.lens (\GetEventPredictionMetadata' {detectorId} -> detectorId) (\s@GetEventPredictionMetadata' {} a -> s {detectorId = a} :: GetEventPredictionMetadata)
+
+-- | The detector version ID.
+getEventPredictionMetadata_detectorVersionId :: Lens.Lens' GetEventPredictionMetadata Prelude.Text
+getEventPredictionMetadata_detectorVersionId = Lens.lens (\GetEventPredictionMetadata' {detectorVersionId} -> detectorVersionId) (\s@GetEventPredictionMetadata' {} a -> s {detectorVersionId = a} :: GetEventPredictionMetadata)
+
+-- | The timestamp that defines when the prediction was generated. The
+-- timestamp must be specified using ISO 8601 standard in UTC.
+--
+-- We recommend calling
+-- <https://docs.aws.amazon.com/frauddetector/latest/api/API_ListEventPredictions.html ListEventPredictions>
+-- first, and using the @predictionTimestamp@ value in the response to
+-- provide an accurate prediction timestamp value.
+getEventPredictionMetadata_predictionTimestamp :: Lens.Lens' GetEventPredictionMetadata Prelude.Text
+getEventPredictionMetadata_predictionTimestamp = Lens.lens (\GetEventPredictionMetadata' {predictionTimestamp} -> predictionTimestamp) (\s@GetEventPredictionMetadata' {} a -> s {predictionTimestamp = a} :: GetEventPredictionMetadata)
+
+instance Core.AWSRequest GetEventPredictionMetadata where
+  type
+    AWSResponse GetEventPredictionMetadata =
+      GetEventPredictionMetadataResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetEventPredictionMetadataResponse'
+            Prelude.<$> (x Data..?> "detectorId")
+            Prelude.<*> (x Data..?> "detectorVersionId")
+            Prelude.<*> (x Data..?> "detectorVersionStatus")
+            Prelude.<*> (x Data..?> "entityId")
+            Prelude.<*> (x Data..?> "entityType")
+            Prelude.<*> ( x
+                            Data..?> "evaluatedExternalModels"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..?> "evaluatedModelVersions"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "eventId")
+            Prelude.<*> (x Data..?> "eventTimestamp")
+            Prelude.<*> (x Data..?> "eventTypeName")
+            Prelude.<*> (x Data..?> "eventVariables" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "outcomes" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "predictionTimestamp")
+            Prelude.<*> (x Data..?> "ruleExecutionMode")
+            Prelude.<*> (x Data..?> "rules" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetEventPredictionMetadata where
+  hashWithSalt _salt GetEventPredictionMetadata' {..} =
+    _salt
+      `Prelude.hashWithSalt` eventId
+      `Prelude.hashWithSalt` eventTypeName
+      `Prelude.hashWithSalt` detectorId
+      `Prelude.hashWithSalt` detectorVersionId
+      `Prelude.hashWithSalt` predictionTimestamp
+
+instance Prelude.NFData GetEventPredictionMetadata where
+  rnf GetEventPredictionMetadata' {..} =
+    Prelude.rnf eventId
+      `Prelude.seq` Prelude.rnf eventTypeName
+      `Prelude.seq` Prelude.rnf detectorId
+      `Prelude.seq` Prelude.rnf detectorVersionId
+      `Prelude.seq` Prelude.rnf predictionTimestamp
+
+instance Data.ToHeaders GetEventPredictionMetadata where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.GetEventPredictionMetadata" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetEventPredictionMetadata where
+  toJSON GetEventPredictionMetadata' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("eventId" Data..= eventId),
+            Prelude.Just ("eventTypeName" Data..= eventTypeName),
+            Prelude.Just ("detectorId" Data..= detectorId),
+            Prelude.Just
+              ("detectorVersionId" Data..= detectorVersionId),
+            Prelude.Just
+              ("predictionTimestamp" Data..= predictionTimestamp)
+          ]
+      )
+
+instance Data.ToPath GetEventPredictionMetadata where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetEventPredictionMetadata where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetEventPredictionMetadataResponse' smart constructor.
+data GetEventPredictionMetadataResponse = GetEventPredictionMetadataResponse'
+  { -- | The detector ID.
+    detectorId :: Prelude.Maybe Prelude.Text,
+    -- | The detector version ID.
+    detectorVersionId :: Prelude.Maybe Prelude.Text,
+    -- | The status of the detector version.
+    detectorVersionStatus :: Prelude.Maybe Prelude.Text,
+    -- | The entity ID.
+    entityId :: Prelude.Maybe Prelude.Text,
+    -- | The entity type.
+    entityType :: Prelude.Maybe Prelude.Text,
+    -- | External (Amazon SageMaker) models that were evaluated for generating
+    -- predictions.
+    evaluatedExternalModels :: Prelude.Maybe [EvaluatedExternalModel],
+    -- | Model versions that were evaluated for generating predictions.
+    evaluatedModelVersions :: Prelude.Maybe [EvaluatedModelVersion],
+    -- | The event ID.
+    eventId :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp for when the prediction was generated for the associated
+    -- event ID.
+    eventTimestamp :: Prelude.Maybe Prelude.Text,
+    -- | The event type associated with the detector specified for this
+    -- prediction.
+    eventTypeName :: Prelude.Maybe Prelude.Text,
+    -- | A list of event variables that influenced the prediction scores.
+    eventVariables :: Prelude.Maybe [EventVariableSummary],
+    -- | The outcomes of the matched rule, based on the rule execution mode.
+    outcomes :: Prelude.Maybe [Prelude.Text],
+    -- | The timestamp that defines when the prediction was generated.
+    predictionTimestamp :: Prelude.Maybe Prelude.Text,
+    -- | The execution mode of the rule used for evaluating variable values.
+    ruleExecutionMode :: Prelude.Maybe RuleExecutionMode,
+    -- | List of rules associated with the detector version that were used for
+    -- evaluating variable values.
+    rules :: Prelude.Maybe [EvaluatedRule],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetEventPredictionMetadataResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detectorId', 'getEventPredictionMetadataResponse_detectorId' - The detector ID.
+--
+-- 'detectorVersionId', 'getEventPredictionMetadataResponse_detectorVersionId' - The detector version ID.
+--
+-- 'detectorVersionStatus', 'getEventPredictionMetadataResponse_detectorVersionStatus' - The status of the detector version.
+--
+-- 'entityId', 'getEventPredictionMetadataResponse_entityId' - The entity ID.
+--
+-- 'entityType', 'getEventPredictionMetadataResponse_entityType' - The entity type.
+--
+-- 'evaluatedExternalModels', 'getEventPredictionMetadataResponse_evaluatedExternalModels' - External (Amazon SageMaker) models that were evaluated for generating
+-- predictions.
+--
+-- 'evaluatedModelVersions', 'getEventPredictionMetadataResponse_evaluatedModelVersions' - Model versions that were evaluated for generating predictions.
+--
+-- 'eventId', 'getEventPredictionMetadataResponse_eventId' - The event ID.
+--
+-- 'eventTimestamp', 'getEventPredictionMetadataResponse_eventTimestamp' - The timestamp for when the prediction was generated for the associated
+-- event ID.
+--
+-- 'eventTypeName', 'getEventPredictionMetadataResponse_eventTypeName' - The event type associated with the detector specified for this
+-- prediction.
+--
+-- 'eventVariables', 'getEventPredictionMetadataResponse_eventVariables' - A list of event variables that influenced the prediction scores.
+--
+-- 'outcomes', 'getEventPredictionMetadataResponse_outcomes' - The outcomes of the matched rule, based on the rule execution mode.
+--
+-- 'predictionTimestamp', 'getEventPredictionMetadataResponse_predictionTimestamp' - The timestamp that defines when the prediction was generated.
+--
+-- 'ruleExecutionMode', 'getEventPredictionMetadataResponse_ruleExecutionMode' - The execution mode of the rule used for evaluating variable values.
+--
+-- 'rules', 'getEventPredictionMetadataResponse_rules' - List of rules associated with the detector version that were used for
+-- evaluating variable values.
+--
+-- 'httpStatus', 'getEventPredictionMetadataResponse_httpStatus' - The response's http status code.
+newGetEventPredictionMetadataResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetEventPredictionMetadataResponse
+newGetEventPredictionMetadataResponse pHttpStatus_ =
+  GetEventPredictionMetadataResponse'
+    { detectorId =
+        Prelude.Nothing,
+      detectorVersionId = Prelude.Nothing,
+      detectorVersionStatus = Prelude.Nothing,
+      entityId = Prelude.Nothing,
+      entityType = Prelude.Nothing,
+      evaluatedExternalModels =
+        Prelude.Nothing,
+      evaluatedModelVersions =
+        Prelude.Nothing,
+      eventId = Prelude.Nothing,
+      eventTimestamp = Prelude.Nothing,
+      eventTypeName = Prelude.Nothing,
+      eventVariables = Prelude.Nothing,
+      outcomes = Prelude.Nothing,
+      predictionTimestamp = Prelude.Nothing,
+      ruleExecutionMode = Prelude.Nothing,
+      rules = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The detector ID.
+getEventPredictionMetadataResponse_detectorId :: Lens.Lens' GetEventPredictionMetadataResponse (Prelude.Maybe Prelude.Text)
+getEventPredictionMetadataResponse_detectorId = Lens.lens (\GetEventPredictionMetadataResponse' {detectorId} -> detectorId) (\s@GetEventPredictionMetadataResponse' {} a -> s {detectorId = a} :: GetEventPredictionMetadataResponse)
+
+-- | The detector version ID.
+getEventPredictionMetadataResponse_detectorVersionId :: Lens.Lens' GetEventPredictionMetadataResponse (Prelude.Maybe Prelude.Text)
+getEventPredictionMetadataResponse_detectorVersionId = Lens.lens (\GetEventPredictionMetadataResponse' {detectorVersionId} -> detectorVersionId) (\s@GetEventPredictionMetadataResponse' {} a -> s {detectorVersionId = a} :: GetEventPredictionMetadataResponse)
+
+-- | The status of the detector version.
+getEventPredictionMetadataResponse_detectorVersionStatus :: Lens.Lens' GetEventPredictionMetadataResponse (Prelude.Maybe Prelude.Text)
+getEventPredictionMetadataResponse_detectorVersionStatus = Lens.lens (\GetEventPredictionMetadataResponse' {detectorVersionStatus} -> detectorVersionStatus) (\s@GetEventPredictionMetadataResponse' {} a -> s {detectorVersionStatus = a} :: GetEventPredictionMetadataResponse)
+
+-- | The entity ID.
+getEventPredictionMetadataResponse_entityId :: Lens.Lens' GetEventPredictionMetadataResponse (Prelude.Maybe Prelude.Text)
+getEventPredictionMetadataResponse_entityId = Lens.lens (\GetEventPredictionMetadataResponse' {entityId} -> entityId) (\s@GetEventPredictionMetadataResponse' {} a -> s {entityId = a} :: GetEventPredictionMetadataResponse)
+
+-- | The entity type.
+getEventPredictionMetadataResponse_entityType :: Lens.Lens' GetEventPredictionMetadataResponse (Prelude.Maybe Prelude.Text)
+getEventPredictionMetadataResponse_entityType = Lens.lens (\GetEventPredictionMetadataResponse' {entityType} -> entityType) (\s@GetEventPredictionMetadataResponse' {} a -> s {entityType = a} :: GetEventPredictionMetadataResponse)
+
+-- | External (Amazon SageMaker) models that were evaluated for generating
+-- predictions.
+getEventPredictionMetadataResponse_evaluatedExternalModels :: Lens.Lens' GetEventPredictionMetadataResponse (Prelude.Maybe [EvaluatedExternalModel])
+getEventPredictionMetadataResponse_evaluatedExternalModels = Lens.lens (\GetEventPredictionMetadataResponse' {evaluatedExternalModels} -> evaluatedExternalModels) (\s@GetEventPredictionMetadataResponse' {} a -> s {evaluatedExternalModels = a} :: GetEventPredictionMetadataResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Model versions that were evaluated for generating predictions.
+getEventPredictionMetadataResponse_evaluatedModelVersions :: Lens.Lens' GetEventPredictionMetadataResponse (Prelude.Maybe [EvaluatedModelVersion])
+getEventPredictionMetadataResponse_evaluatedModelVersions = Lens.lens (\GetEventPredictionMetadataResponse' {evaluatedModelVersions} -> evaluatedModelVersions) (\s@GetEventPredictionMetadataResponse' {} a -> s {evaluatedModelVersions = a} :: GetEventPredictionMetadataResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The event ID.
+getEventPredictionMetadataResponse_eventId :: Lens.Lens' GetEventPredictionMetadataResponse (Prelude.Maybe Prelude.Text)
+getEventPredictionMetadataResponse_eventId = Lens.lens (\GetEventPredictionMetadataResponse' {eventId} -> eventId) (\s@GetEventPredictionMetadataResponse' {} a -> s {eventId = a} :: GetEventPredictionMetadataResponse)
+
+-- | The timestamp for when the prediction was generated for the associated
+-- event ID.
+getEventPredictionMetadataResponse_eventTimestamp :: Lens.Lens' GetEventPredictionMetadataResponse (Prelude.Maybe Prelude.Text)
+getEventPredictionMetadataResponse_eventTimestamp = Lens.lens (\GetEventPredictionMetadataResponse' {eventTimestamp} -> eventTimestamp) (\s@GetEventPredictionMetadataResponse' {} a -> s {eventTimestamp = a} :: GetEventPredictionMetadataResponse)
+
+-- | The event type associated with the detector specified for this
+-- prediction.
+getEventPredictionMetadataResponse_eventTypeName :: Lens.Lens' GetEventPredictionMetadataResponse (Prelude.Maybe Prelude.Text)
+getEventPredictionMetadataResponse_eventTypeName = Lens.lens (\GetEventPredictionMetadataResponse' {eventTypeName} -> eventTypeName) (\s@GetEventPredictionMetadataResponse' {} a -> s {eventTypeName = a} :: GetEventPredictionMetadataResponse)
+
+-- | A list of event variables that influenced the prediction scores.
+getEventPredictionMetadataResponse_eventVariables :: Lens.Lens' GetEventPredictionMetadataResponse (Prelude.Maybe [EventVariableSummary])
+getEventPredictionMetadataResponse_eventVariables = Lens.lens (\GetEventPredictionMetadataResponse' {eventVariables} -> eventVariables) (\s@GetEventPredictionMetadataResponse' {} a -> s {eventVariables = a} :: GetEventPredictionMetadataResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The outcomes of the matched rule, based on the rule execution mode.
+getEventPredictionMetadataResponse_outcomes :: Lens.Lens' GetEventPredictionMetadataResponse (Prelude.Maybe [Prelude.Text])
+getEventPredictionMetadataResponse_outcomes = Lens.lens (\GetEventPredictionMetadataResponse' {outcomes} -> outcomes) (\s@GetEventPredictionMetadataResponse' {} a -> s {outcomes = a} :: GetEventPredictionMetadataResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The timestamp that defines when the prediction was generated.
+getEventPredictionMetadataResponse_predictionTimestamp :: Lens.Lens' GetEventPredictionMetadataResponse (Prelude.Maybe Prelude.Text)
+getEventPredictionMetadataResponse_predictionTimestamp = Lens.lens (\GetEventPredictionMetadataResponse' {predictionTimestamp} -> predictionTimestamp) (\s@GetEventPredictionMetadataResponse' {} a -> s {predictionTimestamp = a} :: GetEventPredictionMetadataResponse)
+
+-- | The execution mode of the rule used for evaluating variable values.
+getEventPredictionMetadataResponse_ruleExecutionMode :: Lens.Lens' GetEventPredictionMetadataResponse (Prelude.Maybe RuleExecutionMode)
+getEventPredictionMetadataResponse_ruleExecutionMode = Lens.lens (\GetEventPredictionMetadataResponse' {ruleExecutionMode} -> ruleExecutionMode) (\s@GetEventPredictionMetadataResponse' {} a -> s {ruleExecutionMode = a} :: GetEventPredictionMetadataResponse)
+
+-- | List of rules associated with the detector version that were used for
+-- evaluating variable values.
+getEventPredictionMetadataResponse_rules :: Lens.Lens' GetEventPredictionMetadataResponse (Prelude.Maybe [EvaluatedRule])
+getEventPredictionMetadataResponse_rules = Lens.lens (\GetEventPredictionMetadataResponse' {rules} -> rules) (\s@GetEventPredictionMetadataResponse' {} a -> s {rules = a} :: GetEventPredictionMetadataResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getEventPredictionMetadataResponse_httpStatus :: Lens.Lens' GetEventPredictionMetadataResponse Prelude.Int
+getEventPredictionMetadataResponse_httpStatus = Lens.lens (\GetEventPredictionMetadataResponse' {httpStatus} -> httpStatus) (\s@GetEventPredictionMetadataResponse' {} a -> s {httpStatus = a} :: GetEventPredictionMetadataResponse)
+
+instance
+  Prelude.NFData
+    GetEventPredictionMetadataResponse
+  where
+  rnf GetEventPredictionMetadataResponse' {..} =
+    Prelude.rnf detectorId
+      `Prelude.seq` Prelude.rnf detectorVersionId
+      `Prelude.seq` Prelude.rnf detectorVersionStatus
+      `Prelude.seq` Prelude.rnf entityId
+      `Prelude.seq` Prelude.rnf entityType
+      `Prelude.seq` Prelude.rnf evaluatedExternalModels
+      `Prelude.seq` Prelude.rnf evaluatedModelVersions
+      `Prelude.seq` Prelude.rnf eventId
+      `Prelude.seq` Prelude.rnf eventTimestamp
+      `Prelude.seq` Prelude.rnf eventTypeName
+      `Prelude.seq` Prelude.rnf eventVariables
+      `Prelude.seq` Prelude.rnf outcomes
+      `Prelude.seq` Prelude.rnf predictionTimestamp
+      `Prelude.seq` Prelude.rnf ruleExecutionMode
+      `Prelude.seq` Prelude.rnf rules
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/GetEventTypes.hs b/gen/Amazonka/FraudDetector/GetEventTypes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/GetEventTypes.hs
@@ -0,0 +1,215 @@
+{-# 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.FraudDetector.GetEventTypes
+-- 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 all event types or a specific event type if name is provided. This
+-- is a paginated API. If you provide a null @maxResults@, this action
+-- retrieves a maximum of 10 records per page. If you provide a
+-- @maxResults@, the value must be between 5 and 10. To get the next page
+-- results, provide the pagination token from the @GetEventTypesResponse@
+-- as part of your request. A null pagination token fetches the records
+-- from the beginning.
+module Amazonka.FraudDetector.GetEventTypes
+  ( -- * Creating a Request
+    GetEventTypes (..),
+    newGetEventTypes,
+
+    -- * Request Lenses
+    getEventTypes_maxResults,
+    getEventTypes_name,
+    getEventTypes_nextToken,
+
+    -- * Destructuring the Response
+    GetEventTypesResponse (..),
+    newGetEventTypesResponse,
+
+    -- * Response Lenses
+    getEventTypesResponse_eventTypes,
+    getEventTypesResponse_nextToken,
+    getEventTypesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetEventTypes' smart constructor.
+data GetEventTypes = GetEventTypes'
+  { -- | The maximum number of objects to return for the request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The name.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The next token for the subsequent request.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetEventTypes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getEventTypes_maxResults' - The maximum number of objects to return for the request.
+--
+-- 'name', 'getEventTypes_name' - The name.
+--
+-- 'nextToken', 'getEventTypes_nextToken' - The next token for the subsequent request.
+newGetEventTypes ::
+  GetEventTypes
+newGetEventTypes =
+  GetEventTypes'
+    { maxResults = Prelude.Nothing,
+      name = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of objects to return for the request.
+getEventTypes_maxResults :: Lens.Lens' GetEventTypes (Prelude.Maybe Prelude.Natural)
+getEventTypes_maxResults = Lens.lens (\GetEventTypes' {maxResults} -> maxResults) (\s@GetEventTypes' {} a -> s {maxResults = a} :: GetEventTypes)
+
+-- | The name.
+getEventTypes_name :: Lens.Lens' GetEventTypes (Prelude.Maybe Prelude.Text)
+getEventTypes_name = Lens.lens (\GetEventTypes' {name} -> name) (\s@GetEventTypes' {} a -> s {name = a} :: GetEventTypes)
+
+-- | The next token for the subsequent request.
+getEventTypes_nextToken :: Lens.Lens' GetEventTypes (Prelude.Maybe Prelude.Text)
+getEventTypes_nextToken = Lens.lens (\GetEventTypes' {nextToken} -> nextToken) (\s@GetEventTypes' {} a -> s {nextToken = a} :: GetEventTypes)
+
+instance Core.AWSRequest GetEventTypes where
+  type
+    AWSResponse GetEventTypes =
+      GetEventTypesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetEventTypesResponse'
+            Prelude.<$> (x Data..?> "eventTypes" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetEventTypes where
+  hashWithSalt _salt GetEventTypes' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData GetEventTypes where
+  rnf GetEventTypes' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders GetEventTypes where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.GetEventTypes" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetEventTypes where
+  toJSON GetEventTypes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("name" Data..=) Prelude.<$> name,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath GetEventTypes where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetEventTypes where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetEventTypesResponse' smart constructor.
+data GetEventTypesResponse = GetEventTypesResponse'
+  { -- | An array of event types.
+    eventTypes :: Prelude.Maybe [Data.Sensitive EventType],
+    -- | The next page token.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetEventTypesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eventTypes', 'getEventTypesResponse_eventTypes' - An array of event types.
+--
+-- 'nextToken', 'getEventTypesResponse_nextToken' - The next page token.
+--
+-- 'httpStatus', 'getEventTypesResponse_httpStatus' - The response's http status code.
+newGetEventTypesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetEventTypesResponse
+newGetEventTypesResponse pHttpStatus_ =
+  GetEventTypesResponse'
+    { eventTypes =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of event types.
+getEventTypesResponse_eventTypes :: Lens.Lens' GetEventTypesResponse (Prelude.Maybe [EventType])
+getEventTypesResponse_eventTypes = Lens.lens (\GetEventTypesResponse' {eventTypes} -> eventTypes) (\s@GetEventTypesResponse' {} a -> s {eventTypes = a} :: GetEventTypesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next page token.
+getEventTypesResponse_nextToken :: Lens.Lens' GetEventTypesResponse (Prelude.Maybe Prelude.Text)
+getEventTypesResponse_nextToken = Lens.lens (\GetEventTypesResponse' {nextToken} -> nextToken) (\s@GetEventTypesResponse' {} a -> s {nextToken = a} :: GetEventTypesResponse)
+
+-- | The response's http status code.
+getEventTypesResponse_httpStatus :: Lens.Lens' GetEventTypesResponse Prelude.Int
+getEventTypesResponse_httpStatus = Lens.lens (\GetEventTypesResponse' {httpStatus} -> httpStatus) (\s@GetEventTypesResponse' {} a -> s {httpStatus = a} :: GetEventTypesResponse)
+
+instance Prelude.NFData GetEventTypesResponse where
+  rnf GetEventTypesResponse' {..} =
+    Prelude.rnf eventTypes
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/GetExternalModels.hs b/gen/Amazonka/FraudDetector/GetExternalModels.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/GetExternalModels.hs
@@ -0,0 +1,215 @@
+{-# 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.FraudDetector.GetExternalModels
+-- 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 the details for one or more Amazon SageMaker models that have been
+-- imported into the service. This is a paginated API. If you provide a
+-- null @maxResults@, this actions retrieves a maximum of 10 records per
+-- page. If you provide a @maxResults@, the value must be between 5 and 10.
+-- To get the next page results, provide the pagination token from the
+-- @GetExternalModelsResult@ as part of your request. A null pagination
+-- token fetches the records from the beginning.
+module Amazonka.FraudDetector.GetExternalModels
+  ( -- * Creating a Request
+    GetExternalModels (..),
+    newGetExternalModels,
+
+    -- * Request Lenses
+    getExternalModels_maxResults,
+    getExternalModels_modelEndpoint,
+    getExternalModels_nextToken,
+
+    -- * Destructuring the Response
+    GetExternalModelsResponse (..),
+    newGetExternalModelsResponse,
+
+    -- * Response Lenses
+    getExternalModelsResponse_externalModels,
+    getExternalModelsResponse_nextToken,
+    getExternalModelsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetExternalModels' smart constructor.
+data GetExternalModels = GetExternalModels'
+  { -- | The maximum number of objects to return for the request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The Amazon SageMaker model endpoint.
+    modelEndpoint :: Prelude.Maybe Prelude.Text,
+    -- | The next page token for the request.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetExternalModels' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getExternalModels_maxResults' - The maximum number of objects to return for the request.
+--
+-- 'modelEndpoint', 'getExternalModels_modelEndpoint' - The Amazon SageMaker model endpoint.
+--
+-- 'nextToken', 'getExternalModels_nextToken' - The next page token for the request.
+newGetExternalModels ::
+  GetExternalModels
+newGetExternalModels =
+  GetExternalModels'
+    { maxResults = Prelude.Nothing,
+      modelEndpoint = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of objects to return for the request.
+getExternalModels_maxResults :: Lens.Lens' GetExternalModels (Prelude.Maybe Prelude.Natural)
+getExternalModels_maxResults = Lens.lens (\GetExternalModels' {maxResults} -> maxResults) (\s@GetExternalModels' {} a -> s {maxResults = a} :: GetExternalModels)
+
+-- | The Amazon SageMaker model endpoint.
+getExternalModels_modelEndpoint :: Lens.Lens' GetExternalModels (Prelude.Maybe Prelude.Text)
+getExternalModels_modelEndpoint = Lens.lens (\GetExternalModels' {modelEndpoint} -> modelEndpoint) (\s@GetExternalModels' {} a -> s {modelEndpoint = a} :: GetExternalModels)
+
+-- | The next page token for the request.
+getExternalModels_nextToken :: Lens.Lens' GetExternalModels (Prelude.Maybe Prelude.Text)
+getExternalModels_nextToken = Lens.lens (\GetExternalModels' {nextToken} -> nextToken) (\s@GetExternalModels' {} a -> s {nextToken = a} :: GetExternalModels)
+
+instance Core.AWSRequest GetExternalModels where
+  type
+    AWSResponse GetExternalModels =
+      GetExternalModelsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetExternalModelsResponse'
+            Prelude.<$> (x Data..?> "externalModels" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetExternalModels where
+  hashWithSalt _salt GetExternalModels' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` modelEndpoint
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData GetExternalModels where
+  rnf GetExternalModels' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf modelEndpoint
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders GetExternalModels where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.GetExternalModels" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetExternalModels where
+  toJSON GetExternalModels' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("modelEndpoint" Data..=) Prelude.<$> modelEndpoint,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath GetExternalModels where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetExternalModels where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetExternalModelsResponse' smart constructor.
+data GetExternalModelsResponse = GetExternalModelsResponse'
+  { -- | Gets the Amazon SageMaker models.
+    externalModels :: Prelude.Maybe [ExternalModel],
+    -- | The next page token to be used in subsequent requests.
+    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 'GetExternalModelsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'externalModels', 'getExternalModelsResponse_externalModels' - Gets the Amazon SageMaker models.
+--
+-- 'nextToken', 'getExternalModelsResponse_nextToken' - The next page token to be used in subsequent requests.
+--
+-- 'httpStatus', 'getExternalModelsResponse_httpStatus' - The response's http status code.
+newGetExternalModelsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetExternalModelsResponse
+newGetExternalModelsResponse pHttpStatus_ =
+  GetExternalModelsResponse'
+    { externalModels =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Gets the Amazon SageMaker models.
+getExternalModelsResponse_externalModels :: Lens.Lens' GetExternalModelsResponse (Prelude.Maybe [ExternalModel])
+getExternalModelsResponse_externalModels = Lens.lens (\GetExternalModelsResponse' {externalModels} -> externalModels) (\s@GetExternalModelsResponse' {} a -> s {externalModels = a} :: GetExternalModelsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next page token to be used in subsequent requests.
+getExternalModelsResponse_nextToken :: Lens.Lens' GetExternalModelsResponse (Prelude.Maybe Prelude.Text)
+getExternalModelsResponse_nextToken = Lens.lens (\GetExternalModelsResponse' {nextToken} -> nextToken) (\s@GetExternalModelsResponse' {} a -> s {nextToken = a} :: GetExternalModelsResponse)
+
+-- | The response's http status code.
+getExternalModelsResponse_httpStatus :: Lens.Lens' GetExternalModelsResponse Prelude.Int
+getExternalModelsResponse_httpStatus = Lens.lens (\GetExternalModelsResponse' {httpStatus} -> httpStatus) (\s@GetExternalModelsResponse' {} a -> s {httpStatus = a} :: GetExternalModelsResponse)
+
+instance Prelude.NFData GetExternalModelsResponse where
+  rnf GetExternalModelsResponse' {..} =
+    Prelude.rnf externalModels
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/GetKMSEncryptionKey.hs b/gen/Amazonka/FraudDetector/GetKMSEncryptionKey.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/GetKMSEncryptionKey.hs
@@ -0,0 +1,149 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.GetKMSEncryptionKey
+-- 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 the encryption key if a KMS key has been specified to be used to
+-- encrypt content in Amazon Fraud Detector.
+module Amazonka.FraudDetector.GetKMSEncryptionKey
+  ( -- * Creating a Request
+    GetKMSEncryptionKey (..),
+    newGetKMSEncryptionKey,
+
+    -- * Destructuring the Response
+    GetKMSEncryptionKeyResponse (..),
+    newGetKMSEncryptionKeyResponse,
+
+    -- * Response Lenses
+    getKMSEncryptionKeyResponse_kmsKey,
+    getKMSEncryptionKeyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetKMSEncryptionKey' smart constructor.
+data GetKMSEncryptionKey = GetKMSEncryptionKey'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetKMSEncryptionKey' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newGetKMSEncryptionKey ::
+  GetKMSEncryptionKey
+newGetKMSEncryptionKey = GetKMSEncryptionKey'
+
+instance Core.AWSRequest GetKMSEncryptionKey where
+  type
+    AWSResponse GetKMSEncryptionKey =
+      GetKMSEncryptionKeyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetKMSEncryptionKeyResponse'
+            Prelude.<$> (x Data..?> "kmsKey")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetKMSEncryptionKey where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData GetKMSEncryptionKey where
+  rnf _ = ()
+
+instance Data.ToHeaders GetKMSEncryptionKey where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.GetKMSEncryptionKey" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetKMSEncryptionKey where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath GetKMSEncryptionKey where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetKMSEncryptionKey where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetKMSEncryptionKeyResponse' smart constructor.
+data GetKMSEncryptionKeyResponse = GetKMSEncryptionKeyResponse'
+  { -- | The KMS encryption key.
+    kmsKey :: Prelude.Maybe KMSKey,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetKMSEncryptionKeyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'kmsKey', 'getKMSEncryptionKeyResponse_kmsKey' - The KMS encryption key.
+--
+-- 'httpStatus', 'getKMSEncryptionKeyResponse_httpStatus' - The response's http status code.
+newGetKMSEncryptionKeyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetKMSEncryptionKeyResponse
+newGetKMSEncryptionKeyResponse pHttpStatus_ =
+  GetKMSEncryptionKeyResponse'
+    { kmsKey =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The KMS encryption key.
+getKMSEncryptionKeyResponse_kmsKey :: Lens.Lens' GetKMSEncryptionKeyResponse (Prelude.Maybe KMSKey)
+getKMSEncryptionKeyResponse_kmsKey = Lens.lens (\GetKMSEncryptionKeyResponse' {kmsKey} -> kmsKey) (\s@GetKMSEncryptionKeyResponse' {} a -> s {kmsKey = a} :: GetKMSEncryptionKeyResponse)
+
+-- | The response's http status code.
+getKMSEncryptionKeyResponse_httpStatus :: Lens.Lens' GetKMSEncryptionKeyResponse Prelude.Int
+getKMSEncryptionKeyResponse_httpStatus = Lens.lens (\GetKMSEncryptionKeyResponse' {httpStatus} -> httpStatus) (\s@GetKMSEncryptionKeyResponse' {} a -> s {httpStatus = a} :: GetKMSEncryptionKeyResponse)
+
+instance Prelude.NFData GetKMSEncryptionKeyResponse where
+  rnf GetKMSEncryptionKeyResponse' {..} =
+    Prelude.rnf kmsKey
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/GetLabels.hs b/gen/Amazonka/FraudDetector/GetLabels.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/GetLabels.hs
@@ -0,0 +1,211 @@
+{-# 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.FraudDetector.GetLabels
+-- 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 all labels or a specific label if name is provided. This is a
+-- paginated API. If you provide a null @maxResults@, this action retrieves
+-- a maximum of 50 records per page. If you provide a @maxResults@, the
+-- value must be between 10 and 50. To get the next page results, provide
+-- the pagination token from the @GetGetLabelsResponse@ as part of your
+-- request. A null pagination token fetches the records from the beginning.
+module Amazonka.FraudDetector.GetLabels
+  ( -- * Creating a Request
+    GetLabels (..),
+    newGetLabels,
+
+    -- * Request Lenses
+    getLabels_maxResults,
+    getLabels_name,
+    getLabels_nextToken,
+
+    -- * Destructuring the Response
+    GetLabelsResponse (..),
+    newGetLabelsResponse,
+
+    -- * Response Lenses
+    getLabelsResponse_labels,
+    getLabelsResponse_nextToken,
+    getLabelsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetLabels' smart constructor.
+data GetLabels = GetLabels'
+  { -- | The maximum number of objects to return for the request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The name of the label or labels to get.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The next token for the subsequent request.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetLabels' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getLabels_maxResults' - The maximum number of objects to return for the request.
+--
+-- 'name', 'getLabels_name' - The name of the label or labels to get.
+--
+-- 'nextToken', 'getLabels_nextToken' - The next token for the subsequent request.
+newGetLabels ::
+  GetLabels
+newGetLabels =
+  GetLabels'
+    { maxResults = Prelude.Nothing,
+      name = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of objects to return for the request.
+getLabels_maxResults :: Lens.Lens' GetLabels (Prelude.Maybe Prelude.Natural)
+getLabels_maxResults = Lens.lens (\GetLabels' {maxResults} -> maxResults) (\s@GetLabels' {} a -> s {maxResults = a} :: GetLabels)
+
+-- | The name of the label or labels to get.
+getLabels_name :: Lens.Lens' GetLabels (Prelude.Maybe Prelude.Text)
+getLabels_name = Lens.lens (\GetLabels' {name} -> name) (\s@GetLabels' {} a -> s {name = a} :: GetLabels)
+
+-- | The next token for the subsequent request.
+getLabels_nextToken :: Lens.Lens' GetLabels (Prelude.Maybe Prelude.Text)
+getLabels_nextToken = Lens.lens (\GetLabels' {nextToken} -> nextToken) (\s@GetLabels' {} a -> s {nextToken = a} :: GetLabels)
+
+instance Core.AWSRequest GetLabels where
+  type AWSResponse GetLabels = GetLabelsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetLabelsResponse'
+            Prelude.<$> (x Data..?> "labels" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetLabels where
+  hashWithSalt _salt GetLabels' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData GetLabels where
+  rnf GetLabels' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders GetLabels where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.GetLabels" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetLabels where
+  toJSON GetLabels' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("name" Data..=) Prelude.<$> name,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath GetLabels where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetLabels where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetLabelsResponse' smart constructor.
+data GetLabelsResponse = GetLabelsResponse'
+  { -- | An array of labels.
+    labels :: Prelude.Maybe [Label],
+    -- | The next page token.
+    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 'GetLabelsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'labels', 'getLabelsResponse_labels' - An array of labels.
+--
+-- 'nextToken', 'getLabelsResponse_nextToken' - The next page token.
+--
+-- 'httpStatus', 'getLabelsResponse_httpStatus' - The response's http status code.
+newGetLabelsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetLabelsResponse
+newGetLabelsResponse pHttpStatus_ =
+  GetLabelsResponse'
+    { labels = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of labels.
+getLabelsResponse_labels :: Lens.Lens' GetLabelsResponse (Prelude.Maybe [Label])
+getLabelsResponse_labels = Lens.lens (\GetLabelsResponse' {labels} -> labels) (\s@GetLabelsResponse' {} a -> s {labels = a} :: GetLabelsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next page token.
+getLabelsResponse_nextToken :: Lens.Lens' GetLabelsResponse (Prelude.Maybe Prelude.Text)
+getLabelsResponse_nextToken = Lens.lens (\GetLabelsResponse' {nextToken} -> nextToken) (\s@GetLabelsResponse' {} a -> s {nextToken = a} :: GetLabelsResponse)
+
+-- | The response's http status code.
+getLabelsResponse_httpStatus :: Lens.Lens' GetLabelsResponse Prelude.Int
+getLabelsResponse_httpStatus = Lens.lens (\GetLabelsResponse' {httpStatus} -> httpStatus) (\s@GetLabelsResponse' {} a -> s {httpStatus = a} :: GetLabelsResponse)
+
+instance Prelude.NFData GetLabelsResponse where
+  rnf GetLabelsResponse' {..} =
+    Prelude.rnf labels
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/GetModelVersion.hs b/gen/Amazonka/FraudDetector/GetModelVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/GetModelVersion.hs
@@ -0,0 +1,374 @@
+{-# 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.FraudDetector.GetModelVersion
+-- 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 the details of the specified model version.
+module Amazonka.FraudDetector.GetModelVersion
+  ( -- * Creating a Request
+    GetModelVersion (..),
+    newGetModelVersion,
+
+    -- * Request Lenses
+    getModelVersion_modelId,
+    getModelVersion_modelType,
+    getModelVersion_modelVersionNumber,
+
+    -- * Destructuring the Response
+    GetModelVersionResponse (..),
+    newGetModelVersionResponse,
+
+    -- * Response Lenses
+    getModelVersionResponse_arn,
+    getModelVersionResponse_externalEventsDetail,
+    getModelVersionResponse_ingestedEventsDetail,
+    getModelVersionResponse_modelId,
+    getModelVersionResponse_modelType,
+    getModelVersionResponse_modelVersionNumber,
+    getModelVersionResponse_status,
+    getModelVersionResponse_trainingDataSchema,
+    getModelVersionResponse_trainingDataSource,
+    getModelVersionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetModelVersion' smart constructor.
+data GetModelVersion = GetModelVersion'
+  { -- | The model ID.
+    modelId :: Prelude.Text,
+    -- | The model type.
+    modelType :: ModelTypeEnum,
+    -- | The model version number.
+    modelVersionNumber :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetModelVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'modelId', 'getModelVersion_modelId' - The model ID.
+--
+-- 'modelType', 'getModelVersion_modelType' - The model type.
+--
+-- 'modelVersionNumber', 'getModelVersion_modelVersionNumber' - The model version number.
+newGetModelVersion ::
+  -- | 'modelId'
+  Prelude.Text ->
+  -- | 'modelType'
+  ModelTypeEnum ->
+  -- | 'modelVersionNumber'
+  Prelude.Text ->
+  GetModelVersion
+newGetModelVersion
+  pModelId_
+  pModelType_
+  pModelVersionNumber_ =
+    GetModelVersion'
+      { modelId = pModelId_,
+        modelType = pModelType_,
+        modelVersionNumber = pModelVersionNumber_
+      }
+
+-- | The model ID.
+getModelVersion_modelId :: Lens.Lens' GetModelVersion Prelude.Text
+getModelVersion_modelId = Lens.lens (\GetModelVersion' {modelId} -> modelId) (\s@GetModelVersion' {} a -> s {modelId = a} :: GetModelVersion)
+
+-- | The model type.
+getModelVersion_modelType :: Lens.Lens' GetModelVersion ModelTypeEnum
+getModelVersion_modelType = Lens.lens (\GetModelVersion' {modelType} -> modelType) (\s@GetModelVersion' {} a -> s {modelType = a} :: GetModelVersion)
+
+-- | The model version number.
+getModelVersion_modelVersionNumber :: Lens.Lens' GetModelVersion Prelude.Text
+getModelVersion_modelVersionNumber = Lens.lens (\GetModelVersion' {modelVersionNumber} -> modelVersionNumber) (\s@GetModelVersion' {} a -> s {modelVersionNumber = a} :: GetModelVersion)
+
+instance Core.AWSRequest GetModelVersion where
+  type
+    AWSResponse GetModelVersion =
+      GetModelVersionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetModelVersionResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "externalEventsDetail")
+            Prelude.<*> (x Data..?> "ingestedEventsDetail")
+            Prelude.<*> (x Data..?> "modelId")
+            Prelude.<*> (x Data..?> "modelType")
+            Prelude.<*> (x Data..?> "modelVersionNumber")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (x Data..?> "trainingDataSchema")
+            Prelude.<*> (x Data..?> "trainingDataSource")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetModelVersion where
+  hashWithSalt _salt GetModelVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` modelId
+      `Prelude.hashWithSalt` modelType
+      `Prelude.hashWithSalt` modelVersionNumber
+
+instance Prelude.NFData GetModelVersion where
+  rnf GetModelVersion' {..} =
+    Prelude.rnf modelId
+      `Prelude.seq` Prelude.rnf modelType
+      `Prelude.seq` Prelude.rnf modelVersionNumber
+
+instance Data.ToHeaders GetModelVersion where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.GetModelVersion" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetModelVersion where
+  toJSON GetModelVersion' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("modelId" Data..= modelId),
+            Prelude.Just ("modelType" Data..= modelType),
+            Prelude.Just
+              ("modelVersionNumber" Data..= modelVersionNumber)
+          ]
+      )
+
+instance Data.ToPath GetModelVersion where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetModelVersion where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetModelVersionResponse' smart constructor.
+data GetModelVersionResponse = GetModelVersionResponse'
+  { -- | The model version ARN.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The details of the external events data used for training the model
+    -- version. This will be populated if the @trainingDataSource@ is
+    -- @EXTERNAL_EVENTS@
+    externalEventsDetail :: Prelude.Maybe ExternalEventsDetail,
+    -- | The details of the ingested events data used for training the model
+    -- version. This will be populated if the @trainingDataSource@ is
+    -- @INGESTED_EVENTS@.
+    ingestedEventsDetail :: Prelude.Maybe IngestedEventsDetail,
+    -- | The model ID.
+    modelId :: Prelude.Maybe Prelude.Text,
+    -- | The model type.
+    modelType :: Prelude.Maybe ModelTypeEnum,
+    -- | The model version number.
+    modelVersionNumber :: Prelude.Maybe Prelude.Text,
+    -- | The model version status.
+    --
+    -- Possible values are:
+    --
+    -- -   @TRAINING_IN_PROGRESS@
+    --
+    -- -   @TRAINING_COMPLETE@
+    --
+    -- -   @ACTIVATE_REQUESTED@
+    --
+    -- -   @ACTIVATE_IN_PROGRESS@
+    --
+    -- -   @ACTIVE@
+    --
+    -- -   @INACTIVATE_REQUESTED@
+    --
+    -- -   @INACTIVATE_IN_PROGRESS@
+    --
+    -- -   @INACTIVE@
+    --
+    -- -   @ERROR@
+    status :: Prelude.Maybe Prelude.Text,
+    -- | The training data schema.
+    trainingDataSchema :: Prelude.Maybe TrainingDataSchema,
+    -- | The training data source.
+    trainingDataSource :: Prelude.Maybe TrainingDataSourceEnum,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetModelVersionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'getModelVersionResponse_arn' - The model version ARN.
+--
+-- 'externalEventsDetail', 'getModelVersionResponse_externalEventsDetail' - The details of the external events data used for training the model
+-- version. This will be populated if the @trainingDataSource@ is
+-- @EXTERNAL_EVENTS@
+--
+-- 'ingestedEventsDetail', 'getModelVersionResponse_ingestedEventsDetail' - The details of the ingested events data used for training the model
+-- version. This will be populated if the @trainingDataSource@ is
+-- @INGESTED_EVENTS@.
+--
+-- 'modelId', 'getModelVersionResponse_modelId' - The model ID.
+--
+-- 'modelType', 'getModelVersionResponse_modelType' - The model type.
+--
+-- 'modelVersionNumber', 'getModelVersionResponse_modelVersionNumber' - The model version number.
+--
+-- 'status', 'getModelVersionResponse_status' - The model version status.
+--
+-- Possible values are:
+--
+-- -   @TRAINING_IN_PROGRESS@
+--
+-- -   @TRAINING_COMPLETE@
+--
+-- -   @ACTIVATE_REQUESTED@
+--
+-- -   @ACTIVATE_IN_PROGRESS@
+--
+-- -   @ACTIVE@
+--
+-- -   @INACTIVATE_REQUESTED@
+--
+-- -   @INACTIVATE_IN_PROGRESS@
+--
+-- -   @INACTIVE@
+--
+-- -   @ERROR@
+--
+-- 'trainingDataSchema', 'getModelVersionResponse_trainingDataSchema' - The training data schema.
+--
+-- 'trainingDataSource', 'getModelVersionResponse_trainingDataSource' - The training data source.
+--
+-- 'httpStatus', 'getModelVersionResponse_httpStatus' - The response's http status code.
+newGetModelVersionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetModelVersionResponse
+newGetModelVersionResponse pHttpStatus_ =
+  GetModelVersionResponse'
+    { arn = Prelude.Nothing,
+      externalEventsDetail = Prelude.Nothing,
+      ingestedEventsDetail = Prelude.Nothing,
+      modelId = Prelude.Nothing,
+      modelType = Prelude.Nothing,
+      modelVersionNumber = Prelude.Nothing,
+      status = Prelude.Nothing,
+      trainingDataSchema = Prelude.Nothing,
+      trainingDataSource = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The model version ARN.
+getModelVersionResponse_arn :: Lens.Lens' GetModelVersionResponse (Prelude.Maybe Prelude.Text)
+getModelVersionResponse_arn = Lens.lens (\GetModelVersionResponse' {arn} -> arn) (\s@GetModelVersionResponse' {} a -> s {arn = a} :: GetModelVersionResponse)
+
+-- | The details of the external events data used for training the model
+-- version. This will be populated if the @trainingDataSource@ is
+-- @EXTERNAL_EVENTS@
+getModelVersionResponse_externalEventsDetail :: Lens.Lens' GetModelVersionResponse (Prelude.Maybe ExternalEventsDetail)
+getModelVersionResponse_externalEventsDetail = Lens.lens (\GetModelVersionResponse' {externalEventsDetail} -> externalEventsDetail) (\s@GetModelVersionResponse' {} a -> s {externalEventsDetail = a} :: GetModelVersionResponse)
+
+-- | The details of the ingested events data used for training the model
+-- version. This will be populated if the @trainingDataSource@ is
+-- @INGESTED_EVENTS@.
+getModelVersionResponse_ingestedEventsDetail :: Lens.Lens' GetModelVersionResponse (Prelude.Maybe IngestedEventsDetail)
+getModelVersionResponse_ingestedEventsDetail = Lens.lens (\GetModelVersionResponse' {ingestedEventsDetail} -> ingestedEventsDetail) (\s@GetModelVersionResponse' {} a -> s {ingestedEventsDetail = a} :: GetModelVersionResponse)
+
+-- | The model ID.
+getModelVersionResponse_modelId :: Lens.Lens' GetModelVersionResponse (Prelude.Maybe Prelude.Text)
+getModelVersionResponse_modelId = Lens.lens (\GetModelVersionResponse' {modelId} -> modelId) (\s@GetModelVersionResponse' {} a -> s {modelId = a} :: GetModelVersionResponse)
+
+-- | The model type.
+getModelVersionResponse_modelType :: Lens.Lens' GetModelVersionResponse (Prelude.Maybe ModelTypeEnum)
+getModelVersionResponse_modelType = Lens.lens (\GetModelVersionResponse' {modelType} -> modelType) (\s@GetModelVersionResponse' {} a -> s {modelType = a} :: GetModelVersionResponse)
+
+-- | The model version number.
+getModelVersionResponse_modelVersionNumber :: Lens.Lens' GetModelVersionResponse (Prelude.Maybe Prelude.Text)
+getModelVersionResponse_modelVersionNumber = Lens.lens (\GetModelVersionResponse' {modelVersionNumber} -> modelVersionNumber) (\s@GetModelVersionResponse' {} a -> s {modelVersionNumber = a} :: GetModelVersionResponse)
+
+-- | The model version status.
+--
+-- Possible values are:
+--
+-- -   @TRAINING_IN_PROGRESS@
+--
+-- -   @TRAINING_COMPLETE@
+--
+-- -   @ACTIVATE_REQUESTED@
+--
+-- -   @ACTIVATE_IN_PROGRESS@
+--
+-- -   @ACTIVE@
+--
+-- -   @INACTIVATE_REQUESTED@
+--
+-- -   @INACTIVATE_IN_PROGRESS@
+--
+-- -   @INACTIVE@
+--
+-- -   @ERROR@
+getModelVersionResponse_status :: Lens.Lens' GetModelVersionResponse (Prelude.Maybe Prelude.Text)
+getModelVersionResponse_status = Lens.lens (\GetModelVersionResponse' {status} -> status) (\s@GetModelVersionResponse' {} a -> s {status = a} :: GetModelVersionResponse)
+
+-- | The training data schema.
+getModelVersionResponse_trainingDataSchema :: Lens.Lens' GetModelVersionResponse (Prelude.Maybe TrainingDataSchema)
+getModelVersionResponse_trainingDataSchema = Lens.lens (\GetModelVersionResponse' {trainingDataSchema} -> trainingDataSchema) (\s@GetModelVersionResponse' {} a -> s {trainingDataSchema = a} :: GetModelVersionResponse)
+
+-- | The training data source.
+getModelVersionResponse_trainingDataSource :: Lens.Lens' GetModelVersionResponse (Prelude.Maybe TrainingDataSourceEnum)
+getModelVersionResponse_trainingDataSource = Lens.lens (\GetModelVersionResponse' {trainingDataSource} -> trainingDataSource) (\s@GetModelVersionResponse' {} a -> s {trainingDataSource = a} :: GetModelVersionResponse)
+
+-- | The response's http status code.
+getModelVersionResponse_httpStatus :: Lens.Lens' GetModelVersionResponse Prelude.Int
+getModelVersionResponse_httpStatus = Lens.lens (\GetModelVersionResponse' {httpStatus} -> httpStatus) (\s@GetModelVersionResponse' {} a -> s {httpStatus = a} :: GetModelVersionResponse)
+
+instance Prelude.NFData GetModelVersionResponse where
+  rnf GetModelVersionResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf externalEventsDetail
+      `Prelude.seq` Prelude.rnf ingestedEventsDetail
+      `Prelude.seq` Prelude.rnf modelId
+      `Prelude.seq` Prelude.rnf modelType
+      `Prelude.seq` Prelude.rnf modelVersionNumber
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf trainingDataSchema
+      `Prelude.seq` Prelude.rnf trainingDataSource
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/GetModels.hs b/gen/Amazonka/FraudDetector/GetModels.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/GetModels.hs
@@ -0,0 +1,229 @@
+{-# 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.FraudDetector.GetModels
+-- 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 one or more models. Gets all models for the Amazon Web Services
+-- account if no model type and no model id provided. Gets all models for
+-- the Amazon Web Services account and model type, if the model type is
+-- specified but model id is not provided. Gets a specific model if (model
+-- type, model id) tuple is specified.
+--
+-- This is a paginated API. If you provide a null @maxResults@, this action
+-- retrieves a maximum of 10 records per page. If you provide a
+-- @maxResults@, the value must be between 1 and 10. To get the next page
+-- results, provide the pagination token from the response as part of your
+-- request. A null pagination token fetches the records from the beginning.
+module Amazonka.FraudDetector.GetModels
+  ( -- * Creating a Request
+    GetModels (..),
+    newGetModels,
+
+    -- * Request Lenses
+    getModels_maxResults,
+    getModels_modelId,
+    getModels_modelType,
+    getModels_nextToken,
+
+    -- * Destructuring the Response
+    GetModelsResponse (..),
+    newGetModelsResponse,
+
+    -- * Response Lenses
+    getModelsResponse_models,
+    getModelsResponse_nextToken,
+    getModelsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetModels' smart constructor.
+data GetModels = GetModels'
+  { -- | The maximum number of objects to return for the request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The model ID.
+    modelId :: Prelude.Maybe Prelude.Text,
+    -- | The model type.
+    modelType :: Prelude.Maybe ModelTypeEnum,
+    -- | The next token for the subsequent request.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetModels' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getModels_maxResults' - The maximum number of objects to return for the request.
+--
+-- 'modelId', 'getModels_modelId' - The model ID.
+--
+-- 'modelType', 'getModels_modelType' - The model type.
+--
+-- 'nextToken', 'getModels_nextToken' - The next token for the subsequent request.
+newGetModels ::
+  GetModels
+newGetModels =
+  GetModels'
+    { maxResults = Prelude.Nothing,
+      modelId = Prelude.Nothing,
+      modelType = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of objects to return for the request.
+getModels_maxResults :: Lens.Lens' GetModels (Prelude.Maybe Prelude.Natural)
+getModels_maxResults = Lens.lens (\GetModels' {maxResults} -> maxResults) (\s@GetModels' {} a -> s {maxResults = a} :: GetModels)
+
+-- | The model ID.
+getModels_modelId :: Lens.Lens' GetModels (Prelude.Maybe Prelude.Text)
+getModels_modelId = Lens.lens (\GetModels' {modelId} -> modelId) (\s@GetModels' {} a -> s {modelId = a} :: GetModels)
+
+-- | The model type.
+getModels_modelType :: Lens.Lens' GetModels (Prelude.Maybe ModelTypeEnum)
+getModels_modelType = Lens.lens (\GetModels' {modelType} -> modelType) (\s@GetModels' {} a -> s {modelType = a} :: GetModels)
+
+-- | The next token for the subsequent request.
+getModels_nextToken :: Lens.Lens' GetModels (Prelude.Maybe Prelude.Text)
+getModels_nextToken = Lens.lens (\GetModels' {nextToken} -> nextToken) (\s@GetModels' {} a -> s {nextToken = a} :: GetModels)
+
+instance Core.AWSRequest GetModels where
+  type AWSResponse GetModels = GetModelsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetModelsResponse'
+            Prelude.<$> (x Data..?> "models" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetModels where
+  hashWithSalt _salt GetModels' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` modelId
+      `Prelude.hashWithSalt` modelType
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData GetModels where
+  rnf GetModels' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf modelId
+      `Prelude.seq` Prelude.rnf modelType
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders GetModels where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.GetModels" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetModels where
+  toJSON GetModels' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("modelId" Data..=) Prelude.<$> modelId,
+            ("modelType" Data..=) Prelude.<$> modelType,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath GetModels where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetModels where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetModelsResponse' smart constructor.
+data GetModelsResponse = GetModelsResponse'
+  { -- | The array of models.
+    models :: Prelude.Maybe [Model],
+    -- | The next page token to be used in subsequent requests.
+    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 'GetModelsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'models', 'getModelsResponse_models' - The array of models.
+--
+-- 'nextToken', 'getModelsResponse_nextToken' - The next page token to be used in subsequent requests.
+--
+-- 'httpStatus', 'getModelsResponse_httpStatus' - The response's http status code.
+newGetModelsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetModelsResponse
+newGetModelsResponse pHttpStatus_ =
+  GetModelsResponse'
+    { models = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The array of models.
+getModelsResponse_models :: Lens.Lens' GetModelsResponse (Prelude.Maybe [Model])
+getModelsResponse_models = Lens.lens (\GetModelsResponse' {models} -> models) (\s@GetModelsResponse' {} a -> s {models = a} :: GetModelsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The next page token to be used in subsequent requests.
+getModelsResponse_nextToken :: Lens.Lens' GetModelsResponse (Prelude.Maybe Prelude.Text)
+getModelsResponse_nextToken = Lens.lens (\GetModelsResponse' {nextToken} -> nextToken) (\s@GetModelsResponse' {} a -> s {nextToken = a} :: GetModelsResponse)
+
+-- | The response's http status code.
+getModelsResponse_httpStatus :: Lens.Lens' GetModelsResponse Prelude.Int
+getModelsResponse_httpStatus = Lens.lens (\GetModelsResponse' {httpStatus} -> httpStatus) (\s@GetModelsResponse' {} a -> s {httpStatus = a} :: GetModelsResponse)
+
+instance Prelude.NFData GetModelsResponse where
+  rnf GetModelsResponse' {..} =
+    Prelude.rnf models
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/GetOutcomes.hs b/gen/Amazonka/FraudDetector/GetOutcomes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/GetOutcomes.hs
@@ -0,0 +1,211 @@
+{-# 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.FraudDetector.GetOutcomes
+-- 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 one or more outcomes. This is a paginated API. If you provide a
+-- null @maxResults@, this actions retrieves a maximum of 100 records per
+-- page. If you provide a @maxResults@, the value must be between 50 and
+-- 100. To get the next page results, provide the pagination token from the
+-- @GetOutcomesResult@ as part of your request. A null pagination token
+-- fetches the records from the beginning.
+module Amazonka.FraudDetector.GetOutcomes
+  ( -- * Creating a Request
+    GetOutcomes (..),
+    newGetOutcomes,
+
+    -- * Request Lenses
+    getOutcomes_maxResults,
+    getOutcomes_name,
+    getOutcomes_nextToken,
+
+    -- * Destructuring the Response
+    GetOutcomesResponse (..),
+    newGetOutcomesResponse,
+
+    -- * Response Lenses
+    getOutcomesResponse_nextToken,
+    getOutcomesResponse_outcomes,
+    getOutcomesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetOutcomes' smart constructor.
+data GetOutcomes = GetOutcomes'
+  { -- | The maximum number of objects to return for the request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The name of the outcome or outcomes to get.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The next page token for the request.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetOutcomes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getOutcomes_maxResults' - The maximum number of objects to return for the request.
+--
+-- 'name', 'getOutcomes_name' - The name of the outcome or outcomes to get.
+--
+-- 'nextToken', 'getOutcomes_nextToken' - The next page token for the request.
+newGetOutcomes ::
+  GetOutcomes
+newGetOutcomes =
+  GetOutcomes'
+    { maxResults = Prelude.Nothing,
+      name = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of objects to return for the request.
+getOutcomes_maxResults :: Lens.Lens' GetOutcomes (Prelude.Maybe Prelude.Natural)
+getOutcomes_maxResults = Lens.lens (\GetOutcomes' {maxResults} -> maxResults) (\s@GetOutcomes' {} a -> s {maxResults = a} :: GetOutcomes)
+
+-- | The name of the outcome or outcomes to get.
+getOutcomes_name :: Lens.Lens' GetOutcomes (Prelude.Maybe Prelude.Text)
+getOutcomes_name = Lens.lens (\GetOutcomes' {name} -> name) (\s@GetOutcomes' {} a -> s {name = a} :: GetOutcomes)
+
+-- | The next page token for the request.
+getOutcomes_nextToken :: Lens.Lens' GetOutcomes (Prelude.Maybe Prelude.Text)
+getOutcomes_nextToken = Lens.lens (\GetOutcomes' {nextToken} -> nextToken) (\s@GetOutcomes' {} a -> s {nextToken = a} :: GetOutcomes)
+
+instance Core.AWSRequest GetOutcomes where
+  type AWSResponse GetOutcomes = GetOutcomesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetOutcomesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "outcomes" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetOutcomes where
+  hashWithSalt _salt GetOutcomes' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData GetOutcomes where
+  rnf GetOutcomes' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders GetOutcomes where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.GetOutcomes" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetOutcomes where
+  toJSON GetOutcomes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("name" Data..=) Prelude.<$> name,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath GetOutcomes where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetOutcomes where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetOutcomesResponse' smart constructor.
+data GetOutcomesResponse = GetOutcomesResponse'
+  { -- | The next page token for subsequent requests.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The outcomes.
+    outcomes :: Prelude.Maybe [Outcome],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetOutcomesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'getOutcomesResponse_nextToken' - The next page token for subsequent requests.
+--
+-- 'outcomes', 'getOutcomesResponse_outcomes' - The outcomes.
+--
+-- 'httpStatus', 'getOutcomesResponse_httpStatus' - The response's http status code.
+newGetOutcomesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetOutcomesResponse
+newGetOutcomesResponse pHttpStatus_ =
+  GetOutcomesResponse'
+    { nextToken = Prelude.Nothing,
+      outcomes = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The next page token for subsequent requests.
+getOutcomesResponse_nextToken :: Lens.Lens' GetOutcomesResponse (Prelude.Maybe Prelude.Text)
+getOutcomesResponse_nextToken = Lens.lens (\GetOutcomesResponse' {nextToken} -> nextToken) (\s@GetOutcomesResponse' {} a -> s {nextToken = a} :: GetOutcomesResponse)
+
+-- | The outcomes.
+getOutcomesResponse_outcomes :: Lens.Lens' GetOutcomesResponse (Prelude.Maybe [Outcome])
+getOutcomesResponse_outcomes = Lens.lens (\GetOutcomesResponse' {outcomes} -> outcomes) (\s@GetOutcomesResponse' {} a -> s {outcomes = a} :: GetOutcomesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getOutcomesResponse_httpStatus :: Lens.Lens' GetOutcomesResponse Prelude.Int
+getOutcomesResponse_httpStatus = Lens.lens (\GetOutcomesResponse' {httpStatus} -> httpStatus) (\s@GetOutcomesResponse' {} a -> s {httpStatus = a} :: GetOutcomesResponse)
+
+instance Prelude.NFData GetOutcomesResponse where
+  rnf GetOutcomesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf outcomes
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/GetRules.hs b/gen/Amazonka/FraudDetector/GetRules.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/GetRules.hs
@@ -0,0 +1,243 @@
+{-# 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.FraudDetector.GetRules
+-- 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 all rules for a detector (paginated) if @ruleId@ and @ruleVersion@
+-- are not specified. Gets all rules for the detector and the @ruleId@ if
+-- present (paginated). Gets a specific rule if both the @ruleId@ and the
+-- @ruleVersion@ are specified.
+--
+-- This is a paginated API. Providing null maxResults results in retrieving
+-- maximum of 100 records per page. If you provide maxResults the value
+-- must be between 50 and 100. To get the next page result, a provide a
+-- pagination token from GetRulesResult as part of your request. Null
+-- pagination token fetches the records from the beginning.
+module Amazonka.FraudDetector.GetRules
+  ( -- * Creating a Request
+    GetRules (..),
+    newGetRules,
+
+    -- * Request Lenses
+    getRules_maxResults,
+    getRules_nextToken,
+    getRules_ruleId,
+    getRules_ruleVersion,
+    getRules_detectorId,
+
+    -- * Destructuring the Response
+    GetRulesResponse (..),
+    newGetRulesResponse,
+
+    -- * Response Lenses
+    getRulesResponse_nextToken,
+    getRulesResponse_ruleDetails,
+    getRulesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetRules' smart constructor.
+data GetRules = GetRules'
+  { -- | The maximum number of rules to return for the request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The next page token.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The rule ID.
+    ruleId :: Prelude.Maybe Prelude.Text,
+    -- | The rule version.
+    ruleVersion :: Prelude.Maybe Prelude.Text,
+    -- | The detector ID.
+    detectorId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetRules' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getRules_maxResults' - The maximum number of rules to return for the request.
+--
+-- 'nextToken', 'getRules_nextToken' - The next page token.
+--
+-- 'ruleId', 'getRules_ruleId' - The rule ID.
+--
+-- 'ruleVersion', 'getRules_ruleVersion' - The rule version.
+--
+-- 'detectorId', 'getRules_detectorId' - The detector ID.
+newGetRules ::
+  -- | 'detectorId'
+  Prelude.Text ->
+  GetRules
+newGetRules pDetectorId_ =
+  GetRules'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      ruleId = Prelude.Nothing,
+      ruleVersion = Prelude.Nothing,
+      detectorId = pDetectorId_
+    }
+
+-- | The maximum number of rules to return for the request.
+getRules_maxResults :: Lens.Lens' GetRules (Prelude.Maybe Prelude.Natural)
+getRules_maxResults = Lens.lens (\GetRules' {maxResults} -> maxResults) (\s@GetRules' {} a -> s {maxResults = a} :: GetRules)
+
+-- | The next page token.
+getRules_nextToken :: Lens.Lens' GetRules (Prelude.Maybe Prelude.Text)
+getRules_nextToken = Lens.lens (\GetRules' {nextToken} -> nextToken) (\s@GetRules' {} a -> s {nextToken = a} :: GetRules)
+
+-- | The rule ID.
+getRules_ruleId :: Lens.Lens' GetRules (Prelude.Maybe Prelude.Text)
+getRules_ruleId = Lens.lens (\GetRules' {ruleId} -> ruleId) (\s@GetRules' {} a -> s {ruleId = a} :: GetRules)
+
+-- | The rule version.
+getRules_ruleVersion :: Lens.Lens' GetRules (Prelude.Maybe Prelude.Text)
+getRules_ruleVersion = Lens.lens (\GetRules' {ruleVersion} -> ruleVersion) (\s@GetRules' {} a -> s {ruleVersion = a} :: GetRules)
+
+-- | The detector ID.
+getRules_detectorId :: Lens.Lens' GetRules Prelude.Text
+getRules_detectorId = Lens.lens (\GetRules' {detectorId} -> detectorId) (\s@GetRules' {} a -> s {detectorId = a} :: GetRules)
+
+instance Core.AWSRequest GetRules where
+  type AWSResponse GetRules = GetRulesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetRulesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "ruleDetails" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetRules where
+  hashWithSalt _salt GetRules' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` ruleId
+      `Prelude.hashWithSalt` ruleVersion
+      `Prelude.hashWithSalt` detectorId
+
+instance Prelude.NFData GetRules where
+  rnf GetRules' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf ruleId
+      `Prelude.seq` Prelude.rnf ruleVersion
+      `Prelude.seq` Prelude.rnf detectorId
+
+instance Data.ToHeaders GetRules where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.GetRules" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetRules where
+  toJSON GetRules' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("ruleId" Data..=) Prelude.<$> ruleId,
+            ("ruleVersion" Data..=) Prelude.<$> ruleVersion,
+            Prelude.Just ("detectorId" Data..= detectorId)
+          ]
+      )
+
+instance Data.ToPath GetRules where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetRules where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetRulesResponse' smart constructor.
+data GetRulesResponse = GetRulesResponse'
+  { -- | The next page token to be used in subsequent requests.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The details of the requested rule.
+    ruleDetails :: Prelude.Maybe [RuleDetail],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetRulesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'getRulesResponse_nextToken' - The next page token to be used in subsequent requests.
+--
+-- 'ruleDetails', 'getRulesResponse_ruleDetails' - The details of the requested rule.
+--
+-- 'httpStatus', 'getRulesResponse_httpStatus' - The response's http status code.
+newGetRulesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetRulesResponse
+newGetRulesResponse pHttpStatus_ =
+  GetRulesResponse'
+    { nextToken = Prelude.Nothing,
+      ruleDetails = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The next page token to be used in subsequent requests.
+getRulesResponse_nextToken :: Lens.Lens' GetRulesResponse (Prelude.Maybe Prelude.Text)
+getRulesResponse_nextToken = Lens.lens (\GetRulesResponse' {nextToken} -> nextToken) (\s@GetRulesResponse' {} a -> s {nextToken = a} :: GetRulesResponse)
+
+-- | The details of the requested rule.
+getRulesResponse_ruleDetails :: Lens.Lens' GetRulesResponse (Prelude.Maybe [RuleDetail])
+getRulesResponse_ruleDetails = Lens.lens (\GetRulesResponse' {ruleDetails} -> ruleDetails) (\s@GetRulesResponse' {} a -> s {ruleDetails = a} :: GetRulesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getRulesResponse_httpStatus :: Lens.Lens' GetRulesResponse Prelude.Int
+getRulesResponse_httpStatus = Lens.lens (\GetRulesResponse' {httpStatus} -> httpStatus) (\s@GetRulesResponse' {} a -> s {httpStatus = a} :: GetRulesResponse)
+
+instance Prelude.NFData GetRulesResponse where
+  rnf GetRulesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf ruleDetails
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/GetVariables.hs b/gen/Amazonka/FraudDetector/GetVariables.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/GetVariables.hs
@@ -0,0 +1,211 @@
+{-# 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.FraudDetector.GetVariables
+-- 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 all of the variables or the specific variable. This is a paginated
+-- API. Providing null @maxSizePerPage@ results in retrieving maximum of
+-- 100 records per page. If you provide @maxSizePerPage@ the value must be
+-- between 50 and 100. To get the next page result, a provide a pagination
+-- token from @GetVariablesResult@ as part of your request. Null pagination
+-- token fetches the records from the beginning.
+module Amazonka.FraudDetector.GetVariables
+  ( -- * Creating a Request
+    GetVariables (..),
+    newGetVariables,
+
+    -- * Request Lenses
+    getVariables_maxResults,
+    getVariables_name,
+    getVariables_nextToken,
+
+    -- * Destructuring the Response
+    GetVariablesResponse (..),
+    newGetVariablesResponse,
+
+    -- * Response Lenses
+    getVariablesResponse_nextToken,
+    getVariablesResponse_variables,
+    getVariablesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetVariables' smart constructor.
+data GetVariables = GetVariables'
+  { -- | The max size per page determined for the get variable request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The name of the variable.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The next page token of the get variable request.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetVariables' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getVariables_maxResults' - The max size per page determined for the get variable request.
+--
+-- 'name', 'getVariables_name' - The name of the variable.
+--
+-- 'nextToken', 'getVariables_nextToken' - The next page token of the get variable request.
+newGetVariables ::
+  GetVariables
+newGetVariables =
+  GetVariables'
+    { maxResults = Prelude.Nothing,
+      name = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The max size per page determined for the get variable request.
+getVariables_maxResults :: Lens.Lens' GetVariables (Prelude.Maybe Prelude.Natural)
+getVariables_maxResults = Lens.lens (\GetVariables' {maxResults} -> maxResults) (\s@GetVariables' {} a -> s {maxResults = a} :: GetVariables)
+
+-- | The name of the variable.
+getVariables_name :: Lens.Lens' GetVariables (Prelude.Maybe Prelude.Text)
+getVariables_name = Lens.lens (\GetVariables' {name} -> name) (\s@GetVariables' {} a -> s {name = a} :: GetVariables)
+
+-- | The next page token of the get variable request.
+getVariables_nextToken :: Lens.Lens' GetVariables (Prelude.Maybe Prelude.Text)
+getVariables_nextToken = Lens.lens (\GetVariables' {nextToken} -> nextToken) (\s@GetVariables' {} a -> s {nextToken = a} :: GetVariables)
+
+instance Core.AWSRequest GetVariables where
+  type AWSResponse GetVariables = GetVariablesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetVariablesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "variables" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetVariables where
+  hashWithSalt _salt GetVariables' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData GetVariables where
+  rnf GetVariables' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders GetVariables where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.GetVariables" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetVariables where
+  toJSON GetVariables' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("name" Data..=) Prelude.<$> name,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath GetVariables where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetVariables where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetVariablesResponse' smart constructor.
+data GetVariablesResponse = GetVariablesResponse'
+  { -- | The next page token to be used in subsequent requests.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The names of the variables returned.
+    variables :: Prelude.Maybe [Variable],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetVariablesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'getVariablesResponse_nextToken' - The next page token to be used in subsequent requests.
+--
+-- 'variables', 'getVariablesResponse_variables' - The names of the variables returned.
+--
+-- 'httpStatus', 'getVariablesResponse_httpStatus' - The response's http status code.
+newGetVariablesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetVariablesResponse
+newGetVariablesResponse pHttpStatus_ =
+  GetVariablesResponse'
+    { nextToken = Prelude.Nothing,
+      variables = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The next page token to be used in subsequent requests.
+getVariablesResponse_nextToken :: Lens.Lens' GetVariablesResponse (Prelude.Maybe Prelude.Text)
+getVariablesResponse_nextToken = Lens.lens (\GetVariablesResponse' {nextToken} -> nextToken) (\s@GetVariablesResponse' {} a -> s {nextToken = a} :: GetVariablesResponse)
+
+-- | The names of the variables returned.
+getVariablesResponse_variables :: Lens.Lens' GetVariablesResponse (Prelude.Maybe [Variable])
+getVariablesResponse_variables = Lens.lens (\GetVariablesResponse' {variables} -> variables) (\s@GetVariablesResponse' {} a -> s {variables = a} :: GetVariablesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getVariablesResponse_httpStatus :: Lens.Lens' GetVariablesResponse Prelude.Int
+getVariablesResponse_httpStatus = Lens.lens (\GetVariablesResponse' {httpStatus} -> httpStatus) (\s@GetVariablesResponse' {} a -> s {httpStatus = a} :: GetVariablesResponse)
+
+instance Prelude.NFData GetVariablesResponse where
+  rnf GetVariablesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf variables
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/Lens.hs b/gen/Amazonka/FraudDetector/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Lens.hs
@@ -0,0 +1,1080 @@
+{-# 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.FraudDetector.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.FraudDetector.Lens
+  ( -- * Operations
+
+    -- ** BatchCreateVariable
+    batchCreateVariable_tags,
+    batchCreateVariable_variableEntries,
+    batchCreateVariableResponse_errors,
+    batchCreateVariableResponse_httpStatus,
+
+    -- ** BatchGetVariable
+    batchGetVariable_names,
+    batchGetVariableResponse_errors,
+    batchGetVariableResponse_variables,
+    batchGetVariableResponse_httpStatus,
+
+    -- ** CancelBatchImportJob
+    cancelBatchImportJob_jobId,
+    cancelBatchImportJobResponse_httpStatus,
+
+    -- ** CancelBatchPredictionJob
+    cancelBatchPredictionJob_jobId,
+    cancelBatchPredictionJobResponse_httpStatus,
+
+    -- ** CreateBatchImportJob
+    createBatchImportJob_tags,
+    createBatchImportJob_jobId,
+    createBatchImportJob_inputPath,
+    createBatchImportJob_outputPath,
+    createBatchImportJob_eventTypeName,
+    createBatchImportJob_iamRoleArn,
+    createBatchImportJobResponse_httpStatus,
+
+    -- ** CreateBatchPredictionJob
+    createBatchPredictionJob_detectorVersion,
+    createBatchPredictionJob_tags,
+    createBatchPredictionJob_jobId,
+    createBatchPredictionJob_inputPath,
+    createBatchPredictionJob_outputPath,
+    createBatchPredictionJob_eventTypeName,
+    createBatchPredictionJob_detectorName,
+    createBatchPredictionJob_iamRoleArn,
+    createBatchPredictionJobResponse_httpStatus,
+
+    -- ** CreateDetectorVersion
+    createDetectorVersion_description,
+    createDetectorVersion_externalModelEndpoints,
+    createDetectorVersion_modelVersions,
+    createDetectorVersion_ruleExecutionMode,
+    createDetectorVersion_tags,
+    createDetectorVersion_detectorId,
+    createDetectorVersion_rules,
+    createDetectorVersionResponse_detectorId,
+    createDetectorVersionResponse_detectorVersionId,
+    createDetectorVersionResponse_status,
+    createDetectorVersionResponse_httpStatus,
+
+    -- ** CreateModel
+    createModel_description,
+    createModel_tags,
+    createModel_modelId,
+    createModel_modelType,
+    createModel_eventTypeName,
+    createModelResponse_httpStatus,
+
+    -- ** CreateModelVersion
+    createModelVersion_externalEventsDetail,
+    createModelVersion_ingestedEventsDetail,
+    createModelVersion_tags,
+    createModelVersion_modelId,
+    createModelVersion_modelType,
+    createModelVersion_trainingDataSource,
+    createModelVersion_trainingDataSchema,
+    createModelVersionResponse_modelId,
+    createModelVersionResponse_modelType,
+    createModelVersionResponse_modelVersionNumber,
+    createModelVersionResponse_status,
+    createModelVersionResponse_httpStatus,
+
+    -- ** CreateRule
+    createRule_description,
+    createRule_tags,
+    createRule_ruleId,
+    createRule_detectorId,
+    createRule_expression,
+    createRule_language,
+    createRule_outcomes,
+    createRuleResponse_rule,
+    createRuleResponse_httpStatus,
+
+    -- ** CreateVariable
+    createVariable_description,
+    createVariable_tags,
+    createVariable_variableType,
+    createVariable_name,
+    createVariable_dataType,
+    createVariable_dataSource,
+    createVariable_defaultValue,
+    createVariableResponse_httpStatus,
+
+    -- ** DeleteBatchImportJob
+    deleteBatchImportJob_jobId,
+    deleteBatchImportJobResponse_httpStatus,
+
+    -- ** DeleteBatchPredictionJob
+    deleteBatchPredictionJob_jobId,
+    deleteBatchPredictionJobResponse_httpStatus,
+
+    -- ** DeleteDetector
+    deleteDetector_detectorId,
+    deleteDetectorResponse_httpStatus,
+
+    -- ** DeleteDetectorVersion
+    deleteDetectorVersion_detectorId,
+    deleteDetectorVersion_detectorVersionId,
+    deleteDetectorVersionResponse_httpStatus,
+
+    -- ** DeleteEntityType
+    deleteEntityType_name,
+    deleteEntityTypeResponse_httpStatus,
+
+    -- ** DeleteEvent
+    deleteEvent_deleteAuditHistory,
+    deleteEvent_eventId,
+    deleteEvent_eventTypeName,
+    deleteEventResponse_httpStatus,
+
+    -- ** DeleteEventType
+    deleteEventType_name,
+    deleteEventTypeResponse_httpStatus,
+
+    -- ** DeleteEventsByEventType
+    deleteEventsByEventType_eventTypeName,
+    deleteEventsByEventTypeResponse_eventTypeName,
+    deleteEventsByEventTypeResponse_eventsDeletionStatus,
+    deleteEventsByEventTypeResponse_httpStatus,
+
+    -- ** DeleteExternalModel
+    deleteExternalModel_modelEndpoint,
+    deleteExternalModelResponse_httpStatus,
+
+    -- ** DeleteLabel
+    deleteLabel_name,
+    deleteLabelResponse_httpStatus,
+
+    -- ** DeleteModel
+    deleteModel_modelId,
+    deleteModel_modelType,
+    deleteModelResponse_httpStatus,
+
+    -- ** DeleteModelVersion
+    deleteModelVersion_modelId,
+    deleteModelVersion_modelType,
+    deleteModelVersion_modelVersionNumber,
+    deleteModelVersionResponse_httpStatus,
+
+    -- ** DeleteOutcome
+    deleteOutcome_name,
+    deleteOutcomeResponse_httpStatus,
+
+    -- ** DeleteRule
+    deleteRule_rule,
+    deleteRuleResponse_httpStatus,
+
+    -- ** DeleteVariable
+    deleteVariable_name,
+    deleteVariableResponse_httpStatus,
+
+    -- ** DescribeDetector
+    describeDetector_maxResults,
+    describeDetector_nextToken,
+    describeDetector_detectorId,
+    describeDetectorResponse_arn,
+    describeDetectorResponse_detectorId,
+    describeDetectorResponse_detectorVersionSummaries,
+    describeDetectorResponse_nextToken,
+    describeDetectorResponse_httpStatus,
+
+    -- ** DescribeModelVersions
+    describeModelVersions_maxResults,
+    describeModelVersions_modelId,
+    describeModelVersions_modelType,
+    describeModelVersions_modelVersionNumber,
+    describeModelVersions_nextToken,
+    describeModelVersionsResponse_modelVersionDetails,
+    describeModelVersionsResponse_nextToken,
+    describeModelVersionsResponse_httpStatus,
+
+    -- ** GetBatchImportJobs
+    getBatchImportJobs_jobId,
+    getBatchImportJobs_maxResults,
+    getBatchImportJobs_nextToken,
+    getBatchImportJobsResponse_batchImports,
+    getBatchImportJobsResponse_nextToken,
+    getBatchImportJobsResponse_httpStatus,
+
+    -- ** GetBatchPredictionJobs
+    getBatchPredictionJobs_jobId,
+    getBatchPredictionJobs_maxResults,
+    getBatchPredictionJobs_nextToken,
+    getBatchPredictionJobsResponse_batchPredictions,
+    getBatchPredictionJobsResponse_nextToken,
+    getBatchPredictionJobsResponse_httpStatus,
+
+    -- ** GetDeleteEventsByEventTypeStatus
+    getDeleteEventsByEventTypeStatus_eventTypeName,
+    getDeleteEventsByEventTypeStatusResponse_eventTypeName,
+    getDeleteEventsByEventTypeStatusResponse_eventsDeletionStatus,
+    getDeleteEventsByEventTypeStatusResponse_httpStatus,
+
+    -- ** GetDetectorVersion
+    getDetectorVersion_detectorId,
+    getDetectorVersion_detectorVersionId,
+    getDetectorVersionResponse_arn,
+    getDetectorVersionResponse_createdTime,
+    getDetectorVersionResponse_description,
+    getDetectorVersionResponse_detectorId,
+    getDetectorVersionResponse_detectorVersionId,
+    getDetectorVersionResponse_externalModelEndpoints,
+    getDetectorVersionResponse_lastUpdatedTime,
+    getDetectorVersionResponse_modelVersions,
+    getDetectorVersionResponse_ruleExecutionMode,
+    getDetectorVersionResponse_rules,
+    getDetectorVersionResponse_status,
+    getDetectorVersionResponse_httpStatus,
+
+    -- ** GetDetectors
+    getDetectors_detectorId,
+    getDetectors_maxResults,
+    getDetectors_nextToken,
+    getDetectorsResponse_detectors,
+    getDetectorsResponse_nextToken,
+    getDetectorsResponse_httpStatus,
+
+    -- ** GetEntityTypes
+    getEntityTypes_maxResults,
+    getEntityTypes_name,
+    getEntityTypes_nextToken,
+    getEntityTypesResponse_entityTypes,
+    getEntityTypesResponse_nextToken,
+    getEntityTypesResponse_httpStatus,
+
+    -- ** GetEvent
+    getEvent_eventId,
+    getEvent_eventTypeName,
+    getEventResponse_event,
+    getEventResponse_httpStatus,
+
+    -- ** GetEventPrediction
+    getEventPrediction_detectorVersionId,
+    getEventPrediction_externalModelEndpointDataBlobs,
+    getEventPrediction_detectorId,
+    getEventPrediction_eventId,
+    getEventPrediction_eventTypeName,
+    getEventPrediction_entities,
+    getEventPrediction_eventTimestamp,
+    getEventPrediction_eventVariables,
+    getEventPredictionResponse_externalModelOutputs,
+    getEventPredictionResponse_modelScores,
+    getEventPredictionResponse_ruleResults,
+    getEventPredictionResponse_httpStatus,
+
+    -- ** GetEventPredictionMetadata
+    getEventPredictionMetadata_eventId,
+    getEventPredictionMetadata_eventTypeName,
+    getEventPredictionMetadata_detectorId,
+    getEventPredictionMetadata_detectorVersionId,
+    getEventPredictionMetadata_predictionTimestamp,
+    getEventPredictionMetadataResponse_detectorId,
+    getEventPredictionMetadataResponse_detectorVersionId,
+    getEventPredictionMetadataResponse_detectorVersionStatus,
+    getEventPredictionMetadataResponse_entityId,
+    getEventPredictionMetadataResponse_entityType,
+    getEventPredictionMetadataResponse_evaluatedExternalModels,
+    getEventPredictionMetadataResponse_evaluatedModelVersions,
+    getEventPredictionMetadataResponse_eventId,
+    getEventPredictionMetadataResponse_eventTimestamp,
+    getEventPredictionMetadataResponse_eventTypeName,
+    getEventPredictionMetadataResponse_eventVariables,
+    getEventPredictionMetadataResponse_outcomes,
+    getEventPredictionMetadataResponse_predictionTimestamp,
+    getEventPredictionMetadataResponse_ruleExecutionMode,
+    getEventPredictionMetadataResponse_rules,
+    getEventPredictionMetadataResponse_httpStatus,
+
+    -- ** GetEventTypes
+    getEventTypes_maxResults,
+    getEventTypes_name,
+    getEventTypes_nextToken,
+    getEventTypesResponse_eventTypes,
+    getEventTypesResponse_nextToken,
+    getEventTypesResponse_httpStatus,
+
+    -- ** GetExternalModels
+    getExternalModels_maxResults,
+    getExternalModels_modelEndpoint,
+    getExternalModels_nextToken,
+    getExternalModelsResponse_externalModels,
+    getExternalModelsResponse_nextToken,
+    getExternalModelsResponse_httpStatus,
+
+    -- ** GetKMSEncryptionKey
+    getKMSEncryptionKeyResponse_kmsKey,
+    getKMSEncryptionKeyResponse_httpStatus,
+
+    -- ** GetLabels
+    getLabels_maxResults,
+    getLabels_name,
+    getLabels_nextToken,
+    getLabelsResponse_labels,
+    getLabelsResponse_nextToken,
+    getLabelsResponse_httpStatus,
+
+    -- ** GetModelVersion
+    getModelVersion_modelId,
+    getModelVersion_modelType,
+    getModelVersion_modelVersionNumber,
+    getModelVersionResponse_arn,
+    getModelVersionResponse_externalEventsDetail,
+    getModelVersionResponse_ingestedEventsDetail,
+    getModelVersionResponse_modelId,
+    getModelVersionResponse_modelType,
+    getModelVersionResponse_modelVersionNumber,
+    getModelVersionResponse_status,
+    getModelVersionResponse_trainingDataSchema,
+    getModelVersionResponse_trainingDataSource,
+    getModelVersionResponse_httpStatus,
+
+    -- ** GetModels
+    getModels_maxResults,
+    getModels_modelId,
+    getModels_modelType,
+    getModels_nextToken,
+    getModelsResponse_models,
+    getModelsResponse_nextToken,
+    getModelsResponse_httpStatus,
+
+    -- ** GetOutcomes
+    getOutcomes_maxResults,
+    getOutcomes_name,
+    getOutcomes_nextToken,
+    getOutcomesResponse_nextToken,
+    getOutcomesResponse_outcomes,
+    getOutcomesResponse_httpStatus,
+
+    -- ** GetRules
+    getRules_maxResults,
+    getRules_nextToken,
+    getRules_ruleId,
+    getRules_ruleVersion,
+    getRules_detectorId,
+    getRulesResponse_nextToken,
+    getRulesResponse_ruleDetails,
+    getRulesResponse_httpStatus,
+
+    -- ** GetVariables
+    getVariables_maxResults,
+    getVariables_name,
+    getVariables_nextToken,
+    getVariablesResponse_nextToken,
+    getVariablesResponse_variables,
+    getVariablesResponse_httpStatus,
+
+    -- ** ListEventPredictions
+    listEventPredictions_detectorId,
+    listEventPredictions_detectorVersionId,
+    listEventPredictions_eventId,
+    listEventPredictions_eventType,
+    listEventPredictions_maxResults,
+    listEventPredictions_nextToken,
+    listEventPredictions_predictionTimeRange,
+    listEventPredictionsResponse_eventPredictionSummaries,
+    listEventPredictionsResponse_nextToken,
+    listEventPredictionsResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_maxResults,
+    listTagsForResource_nextToken,
+    listTagsForResource_resourceARN,
+    listTagsForResourceResponse_nextToken,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** PutDetector
+    putDetector_description,
+    putDetector_tags,
+    putDetector_detectorId,
+    putDetector_eventTypeName,
+    putDetectorResponse_httpStatus,
+
+    -- ** PutEntityType
+    putEntityType_description,
+    putEntityType_tags,
+    putEntityType_name,
+    putEntityTypeResponse_httpStatus,
+
+    -- ** PutEventType
+    putEventType_description,
+    putEventType_eventIngestion,
+    putEventType_labels,
+    putEventType_tags,
+    putEventType_name,
+    putEventType_eventVariables,
+    putEventType_entityTypes,
+    putEventTypeResponse_httpStatus,
+
+    -- ** PutExternalModel
+    putExternalModel_tags,
+    putExternalModel_modelEndpoint,
+    putExternalModel_modelSource,
+    putExternalModel_invokeModelEndpointRoleArn,
+    putExternalModel_inputConfiguration,
+    putExternalModel_outputConfiguration,
+    putExternalModel_modelEndpointStatus,
+    putExternalModelResponse_httpStatus,
+
+    -- ** PutKMSEncryptionKey
+    putKMSEncryptionKey_kmsEncryptionKeyArn,
+    putKMSEncryptionKeyResponse_httpStatus,
+
+    -- ** PutLabel
+    putLabel_description,
+    putLabel_tags,
+    putLabel_name,
+    putLabelResponse_httpStatus,
+
+    -- ** PutOutcome
+    putOutcome_description,
+    putOutcome_tags,
+    putOutcome_name,
+    putOutcomeResponse_httpStatus,
+
+    -- ** SendEvent
+    sendEvent_assignedLabel,
+    sendEvent_labelTimestamp,
+    sendEvent_eventId,
+    sendEvent_eventTypeName,
+    sendEvent_eventTimestamp,
+    sendEvent_eventVariables,
+    sendEvent_entities,
+    sendEventResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceARN,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceARN,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateDetectorVersion
+    updateDetectorVersion_description,
+    updateDetectorVersion_modelVersions,
+    updateDetectorVersion_ruleExecutionMode,
+    updateDetectorVersion_detectorId,
+    updateDetectorVersion_detectorVersionId,
+    updateDetectorVersion_externalModelEndpoints,
+    updateDetectorVersion_rules,
+    updateDetectorVersionResponse_httpStatus,
+
+    -- ** UpdateDetectorVersionMetadata
+    updateDetectorVersionMetadata_detectorId,
+    updateDetectorVersionMetadata_detectorVersionId,
+    updateDetectorVersionMetadata_description,
+    updateDetectorVersionMetadataResponse_httpStatus,
+
+    -- ** UpdateDetectorVersionStatus
+    updateDetectorVersionStatus_detectorId,
+    updateDetectorVersionStatus_detectorVersionId,
+    updateDetectorVersionStatus_status,
+    updateDetectorVersionStatusResponse_httpStatus,
+
+    -- ** UpdateEventLabel
+    updateEventLabel_eventId,
+    updateEventLabel_eventTypeName,
+    updateEventLabel_assignedLabel,
+    updateEventLabel_labelTimestamp,
+    updateEventLabelResponse_httpStatus,
+
+    -- ** UpdateModel
+    updateModel_description,
+    updateModel_modelId,
+    updateModel_modelType,
+    updateModelResponse_httpStatus,
+
+    -- ** UpdateModelVersion
+    updateModelVersion_externalEventsDetail,
+    updateModelVersion_ingestedEventsDetail,
+    updateModelVersion_tags,
+    updateModelVersion_modelId,
+    updateModelVersion_modelType,
+    updateModelVersion_majorVersionNumber,
+    updateModelVersionResponse_modelId,
+    updateModelVersionResponse_modelType,
+    updateModelVersionResponse_modelVersionNumber,
+    updateModelVersionResponse_status,
+    updateModelVersionResponse_httpStatus,
+
+    -- ** UpdateModelVersionStatus
+    updateModelVersionStatus_modelId,
+    updateModelVersionStatus_modelType,
+    updateModelVersionStatus_modelVersionNumber,
+    updateModelVersionStatus_status,
+    updateModelVersionStatusResponse_httpStatus,
+
+    -- ** UpdateRuleMetadata
+    updateRuleMetadata_rule,
+    updateRuleMetadata_description,
+    updateRuleMetadataResponse_httpStatus,
+
+    -- ** UpdateRuleVersion
+    updateRuleVersion_description,
+    updateRuleVersion_tags,
+    updateRuleVersion_rule,
+    updateRuleVersion_expression,
+    updateRuleVersion_language,
+    updateRuleVersion_outcomes,
+    updateRuleVersionResponse_rule,
+    updateRuleVersionResponse_httpStatus,
+
+    -- ** UpdateVariable
+    updateVariable_defaultValue,
+    updateVariable_description,
+    updateVariable_variableType,
+    updateVariable_name,
+    updateVariableResponse_httpStatus,
+
+    -- * Types
+
+    -- ** ATIMetricDataPoint
+    aTIMetricDataPoint_adr,
+    aTIMetricDataPoint_atodr,
+    aTIMetricDataPoint_cr,
+    aTIMetricDataPoint_threshold,
+
+    -- ** ATIModelPerformance
+    aTIModelPerformance_asi,
+
+    -- ** ATITrainingMetricsValue
+    aTITrainingMetricsValue_metricDataPoints,
+    aTITrainingMetricsValue_modelPerformance,
+
+    -- ** AggregatedLogOddsMetric
+    aggregatedLogOddsMetric_variableNames,
+    aggregatedLogOddsMetric_aggregatedVariablesImportance,
+
+    -- ** AggregatedVariablesImpactExplanation
+    aggregatedVariablesImpactExplanation_eventVariableNames,
+    aggregatedVariablesImpactExplanation_logOddsImpact,
+    aggregatedVariablesImpactExplanation_relativeImpact,
+
+    -- ** AggregatedVariablesImportanceMetrics
+    aggregatedVariablesImportanceMetrics_logOddsMetrics,
+
+    -- ** BatchCreateVariableError
+    batchCreateVariableError_code,
+    batchCreateVariableError_message,
+    batchCreateVariableError_name,
+
+    -- ** BatchGetVariableError
+    batchGetVariableError_code,
+    batchGetVariableError_message,
+    batchGetVariableError_name,
+
+    -- ** BatchImport
+    batchImport_arn,
+    batchImport_completionTime,
+    batchImport_eventTypeName,
+    batchImport_failedRecordsCount,
+    batchImport_failureReason,
+    batchImport_iamRoleArn,
+    batchImport_inputPath,
+    batchImport_jobId,
+    batchImport_outputPath,
+    batchImport_processedRecordsCount,
+    batchImport_startTime,
+    batchImport_status,
+    batchImport_totalRecordsCount,
+
+    -- ** BatchPrediction
+    batchPrediction_arn,
+    batchPrediction_completionTime,
+    batchPrediction_detectorName,
+    batchPrediction_detectorVersion,
+    batchPrediction_eventTypeName,
+    batchPrediction_failureReason,
+    batchPrediction_iamRoleArn,
+    batchPrediction_inputPath,
+    batchPrediction_jobId,
+    batchPrediction_lastHeartbeatTime,
+    batchPrediction_outputPath,
+    batchPrediction_processedRecordsCount,
+    batchPrediction_startTime,
+    batchPrediction_status,
+    batchPrediction_totalRecordsCount,
+
+    -- ** DataValidationMetrics
+    dataValidationMetrics_fieldLevelMessages,
+    dataValidationMetrics_fileLevelMessages,
+
+    -- ** Detector
+    detector_arn,
+    detector_createdTime,
+    detector_description,
+    detector_detectorId,
+    detector_eventTypeName,
+    detector_lastUpdatedTime,
+
+    -- ** DetectorVersionSummary
+    detectorVersionSummary_description,
+    detectorVersionSummary_detectorVersionId,
+    detectorVersionSummary_lastUpdatedTime,
+    detectorVersionSummary_status,
+
+    -- ** Entity
+    entity_entityType,
+    entity_entityId,
+
+    -- ** EntityType
+    entityType_arn,
+    entityType_createdTime,
+    entityType_description,
+    entityType_lastUpdatedTime,
+    entityType_name,
+
+    -- ** EvaluatedExternalModel
+    evaluatedExternalModel_inputVariables,
+    evaluatedExternalModel_modelEndpoint,
+    evaluatedExternalModel_outputVariables,
+    evaluatedExternalModel_useEventVariables,
+
+    -- ** EvaluatedModelVersion
+    evaluatedModelVersion_evaluations,
+    evaluatedModelVersion_modelId,
+    evaluatedModelVersion_modelType,
+    evaluatedModelVersion_modelVersion,
+
+    -- ** EvaluatedRule
+    evaluatedRule_evaluated,
+    evaluatedRule_expression,
+    evaluatedRule_expressionWithValues,
+    evaluatedRule_matched,
+    evaluatedRule_outcomes,
+    evaluatedRule_ruleId,
+    evaluatedRule_ruleVersion,
+
+    -- ** Event
+    event_currentLabel,
+    event_entities,
+    event_eventId,
+    event_eventTimestamp,
+    event_eventTypeName,
+    event_eventVariables,
+    event_labelTimestamp,
+
+    -- ** EventPredictionSummary
+    eventPredictionSummary_detectorId,
+    eventPredictionSummary_detectorVersionId,
+    eventPredictionSummary_eventId,
+    eventPredictionSummary_eventTimestamp,
+    eventPredictionSummary_eventTypeName,
+    eventPredictionSummary_predictionTimestamp,
+
+    -- ** EventType
+    eventType_arn,
+    eventType_createdTime,
+    eventType_description,
+    eventType_entityTypes,
+    eventType_eventIngestion,
+    eventType_eventVariables,
+    eventType_ingestedEventStatistics,
+    eventType_labels,
+    eventType_lastUpdatedTime,
+    eventType_name,
+
+    -- ** EventVariableSummary
+    eventVariableSummary_name,
+    eventVariableSummary_source,
+    eventVariableSummary_value,
+
+    -- ** ExternalEventsDetail
+    externalEventsDetail_dataLocation,
+    externalEventsDetail_dataAccessRoleArn,
+
+    -- ** ExternalModel
+    externalModel_arn,
+    externalModel_createdTime,
+    externalModel_inputConfiguration,
+    externalModel_invokeModelEndpointRoleArn,
+    externalModel_lastUpdatedTime,
+    externalModel_modelEndpoint,
+    externalModel_modelEndpointStatus,
+    externalModel_modelSource,
+    externalModel_outputConfiguration,
+
+    -- ** ExternalModelOutputs
+    externalModelOutputs_externalModel,
+    externalModelOutputs_outputs,
+
+    -- ** ExternalModelSummary
+    externalModelSummary_modelEndpoint,
+    externalModelSummary_modelSource,
+
+    -- ** FieldValidationMessage
+    fieldValidationMessage_content,
+    fieldValidationMessage_fieldName,
+    fieldValidationMessage_identifier,
+    fieldValidationMessage_title,
+    fieldValidationMessage_type,
+
+    -- ** FileValidationMessage
+    fileValidationMessage_content,
+    fileValidationMessage_title,
+    fileValidationMessage_type,
+
+    -- ** FilterCondition
+    filterCondition_value,
+
+    -- ** IngestedEventStatistics
+    ingestedEventStatistics_eventDataSizeInBytes,
+    ingestedEventStatistics_lastUpdatedTime,
+    ingestedEventStatistics_leastRecentEvent,
+    ingestedEventStatistics_mostRecentEvent,
+    ingestedEventStatistics_numberOfEvents,
+
+    -- ** IngestedEventsDetail
+    ingestedEventsDetail_ingestedEventsTimeWindow,
+
+    -- ** IngestedEventsTimeWindow
+    ingestedEventsTimeWindow_startTime,
+    ingestedEventsTimeWindow_endTime,
+
+    -- ** KMSKey
+    kmsKey_kmsEncryptionKeyArn,
+
+    -- ** Label
+    label_arn,
+    label_createdTime,
+    label_description,
+    label_lastUpdatedTime,
+    label_name,
+
+    -- ** LabelSchema
+    labelSchema_labelMapper,
+    labelSchema_unlabeledEventsTreatment,
+
+    -- ** LogOddsMetric
+    logOddsMetric_variableName,
+    logOddsMetric_variableType,
+    logOddsMetric_variableImportance,
+
+    -- ** MetricDataPoint
+    metricDataPoint_fpr,
+    metricDataPoint_precision,
+    metricDataPoint_threshold,
+    metricDataPoint_tpr,
+
+    -- ** Model
+    model_arn,
+    model_createdTime,
+    model_description,
+    model_eventTypeName,
+    model_lastUpdatedTime,
+    model_modelId,
+    model_modelType,
+
+    -- ** ModelEndpointDataBlob
+    modelEndpointDataBlob_byteBuffer,
+    modelEndpointDataBlob_contentType,
+
+    -- ** ModelInputConfiguration
+    modelInputConfiguration_csvInputTemplate,
+    modelInputConfiguration_eventTypeName,
+    modelInputConfiguration_format,
+    modelInputConfiguration_jsonInputTemplate,
+    modelInputConfiguration_useEventVariables,
+
+    -- ** ModelOutputConfiguration
+    modelOutputConfiguration_csvIndexToVariableMap,
+    modelOutputConfiguration_jsonKeyToVariableMap,
+    modelOutputConfiguration_format,
+
+    -- ** ModelScores
+    modelScores_modelVersion,
+    modelScores_scores,
+
+    -- ** ModelVersion
+    modelVersion_arn,
+    modelVersion_modelId,
+    modelVersion_modelType,
+    modelVersion_modelVersionNumber,
+
+    -- ** ModelVersionDetail
+    modelVersionDetail_arn,
+    modelVersionDetail_createdTime,
+    modelVersionDetail_externalEventsDetail,
+    modelVersionDetail_ingestedEventsDetail,
+    modelVersionDetail_lastUpdatedTime,
+    modelVersionDetail_modelId,
+    modelVersionDetail_modelType,
+    modelVersionDetail_modelVersionNumber,
+    modelVersionDetail_status,
+    modelVersionDetail_trainingDataSchema,
+    modelVersionDetail_trainingDataSource,
+    modelVersionDetail_trainingResult,
+    modelVersionDetail_trainingResultV2,
+
+    -- ** ModelVersionEvaluation
+    modelVersionEvaluation_evaluationScore,
+    modelVersionEvaluation_outputVariableName,
+    modelVersionEvaluation_predictionExplanations,
+
+    -- ** OFIMetricDataPoint
+    oFIMetricDataPoint_fpr,
+    oFIMetricDataPoint_precision,
+    oFIMetricDataPoint_threshold,
+    oFIMetricDataPoint_tpr,
+
+    -- ** OFIModelPerformance
+    oFIModelPerformance_auc,
+
+    -- ** OFITrainingMetricsValue
+    oFITrainingMetricsValue_metricDataPoints,
+    oFITrainingMetricsValue_modelPerformance,
+
+    -- ** Outcome
+    outcome_arn,
+    outcome_createdTime,
+    outcome_description,
+    outcome_lastUpdatedTime,
+    outcome_name,
+
+    -- ** PredictionExplanations
+    predictionExplanations_aggregatedVariablesImpactExplanations,
+    predictionExplanations_variableImpactExplanations,
+
+    -- ** PredictionTimeRange
+    predictionTimeRange_startTime,
+    predictionTimeRange_endTime,
+
+    -- ** Rule
+    rule_detectorId,
+    rule_ruleId,
+    rule_ruleVersion,
+
+    -- ** RuleDetail
+    ruleDetail_arn,
+    ruleDetail_createdTime,
+    ruleDetail_description,
+    ruleDetail_detectorId,
+    ruleDetail_expression,
+    ruleDetail_language,
+    ruleDetail_lastUpdatedTime,
+    ruleDetail_outcomes,
+    ruleDetail_ruleId,
+    ruleDetail_ruleVersion,
+
+    -- ** RuleResult
+    ruleResult_outcomes,
+    ruleResult_ruleId,
+
+    -- ** TFIMetricDataPoint
+    tFIMetricDataPoint_fpr,
+    tFIMetricDataPoint_precision,
+    tFIMetricDataPoint_threshold,
+    tFIMetricDataPoint_tpr,
+
+    -- ** TFIModelPerformance
+    tFIModelPerformance_auc,
+
+    -- ** TFITrainingMetricsValue
+    tFITrainingMetricsValue_metricDataPoints,
+    tFITrainingMetricsValue_modelPerformance,
+
+    -- ** Tag
+    tag_key,
+    tag_value,
+
+    -- ** TrainingDataSchema
+    trainingDataSchema_labelSchema,
+    trainingDataSchema_modelVariables,
+
+    -- ** TrainingMetrics
+    trainingMetrics_auc,
+    trainingMetrics_metricDataPoints,
+
+    -- ** TrainingMetricsV2
+    trainingMetricsV2_ati,
+    trainingMetricsV2_ofi,
+    trainingMetricsV2_tfi,
+
+    -- ** TrainingResult
+    trainingResult_dataValidationMetrics,
+    trainingResult_trainingMetrics,
+    trainingResult_variableImportanceMetrics,
+
+    -- ** TrainingResultV2
+    trainingResultV2_aggregatedVariablesImportanceMetrics,
+    trainingResultV2_dataValidationMetrics,
+    trainingResultV2_trainingMetricsV2,
+    trainingResultV2_variableImportanceMetrics,
+
+    -- ** Variable
+    variable_arn,
+    variable_createdTime,
+    variable_dataSource,
+    variable_dataType,
+    variable_defaultValue,
+    variable_description,
+    variable_lastUpdatedTime,
+    variable_name,
+    variable_variableType,
+
+    -- ** VariableEntry
+    variableEntry_dataSource,
+    variableEntry_dataType,
+    variableEntry_defaultValue,
+    variableEntry_description,
+    variableEntry_name,
+    variableEntry_variableType,
+
+    -- ** VariableImpactExplanation
+    variableImpactExplanation_eventVariableName,
+    variableImpactExplanation_logOddsImpact,
+    variableImpactExplanation_relativeImpact,
+
+    -- ** VariableImportanceMetrics
+    variableImportanceMetrics_logOddsMetrics,
+  )
+where
+
+import Amazonka.FraudDetector.BatchCreateVariable
+import Amazonka.FraudDetector.BatchGetVariable
+import Amazonka.FraudDetector.CancelBatchImportJob
+import Amazonka.FraudDetector.CancelBatchPredictionJob
+import Amazonka.FraudDetector.CreateBatchImportJob
+import Amazonka.FraudDetector.CreateBatchPredictionJob
+import Amazonka.FraudDetector.CreateDetectorVersion
+import Amazonka.FraudDetector.CreateModel
+import Amazonka.FraudDetector.CreateModelVersion
+import Amazonka.FraudDetector.CreateRule
+import Amazonka.FraudDetector.CreateVariable
+import Amazonka.FraudDetector.DeleteBatchImportJob
+import Amazonka.FraudDetector.DeleteBatchPredictionJob
+import Amazonka.FraudDetector.DeleteDetector
+import Amazonka.FraudDetector.DeleteDetectorVersion
+import Amazonka.FraudDetector.DeleteEntityType
+import Amazonka.FraudDetector.DeleteEvent
+import Amazonka.FraudDetector.DeleteEventType
+import Amazonka.FraudDetector.DeleteEventsByEventType
+import Amazonka.FraudDetector.DeleteExternalModel
+import Amazonka.FraudDetector.DeleteLabel
+import Amazonka.FraudDetector.DeleteModel
+import Amazonka.FraudDetector.DeleteModelVersion
+import Amazonka.FraudDetector.DeleteOutcome
+import Amazonka.FraudDetector.DeleteRule
+import Amazonka.FraudDetector.DeleteVariable
+import Amazonka.FraudDetector.DescribeDetector
+import Amazonka.FraudDetector.DescribeModelVersions
+import Amazonka.FraudDetector.GetBatchImportJobs
+import Amazonka.FraudDetector.GetBatchPredictionJobs
+import Amazonka.FraudDetector.GetDeleteEventsByEventTypeStatus
+import Amazonka.FraudDetector.GetDetectorVersion
+import Amazonka.FraudDetector.GetDetectors
+import Amazonka.FraudDetector.GetEntityTypes
+import Amazonka.FraudDetector.GetEvent
+import Amazonka.FraudDetector.GetEventPrediction
+import Amazonka.FraudDetector.GetEventPredictionMetadata
+import Amazonka.FraudDetector.GetEventTypes
+import Amazonka.FraudDetector.GetExternalModels
+import Amazonka.FraudDetector.GetKMSEncryptionKey
+import Amazonka.FraudDetector.GetLabels
+import Amazonka.FraudDetector.GetModelVersion
+import Amazonka.FraudDetector.GetModels
+import Amazonka.FraudDetector.GetOutcomes
+import Amazonka.FraudDetector.GetRules
+import Amazonka.FraudDetector.GetVariables
+import Amazonka.FraudDetector.ListEventPredictions
+import Amazonka.FraudDetector.ListTagsForResource
+import Amazonka.FraudDetector.PutDetector
+import Amazonka.FraudDetector.PutEntityType
+import Amazonka.FraudDetector.PutEventType
+import Amazonka.FraudDetector.PutExternalModel
+import Amazonka.FraudDetector.PutKMSEncryptionKey
+import Amazonka.FraudDetector.PutLabel
+import Amazonka.FraudDetector.PutOutcome
+import Amazonka.FraudDetector.SendEvent
+import Amazonka.FraudDetector.TagResource
+import Amazonka.FraudDetector.Types.ATIMetricDataPoint
+import Amazonka.FraudDetector.Types.ATIModelPerformance
+import Amazonka.FraudDetector.Types.ATITrainingMetricsValue
+import Amazonka.FraudDetector.Types.AggregatedLogOddsMetric
+import Amazonka.FraudDetector.Types.AggregatedVariablesImpactExplanation
+import Amazonka.FraudDetector.Types.AggregatedVariablesImportanceMetrics
+import Amazonka.FraudDetector.Types.BatchCreateVariableError
+import Amazonka.FraudDetector.Types.BatchGetVariableError
+import Amazonka.FraudDetector.Types.BatchImport
+import Amazonka.FraudDetector.Types.BatchPrediction
+import Amazonka.FraudDetector.Types.DataValidationMetrics
+import Amazonka.FraudDetector.Types.Detector
+import Amazonka.FraudDetector.Types.DetectorVersionSummary
+import Amazonka.FraudDetector.Types.Entity
+import Amazonka.FraudDetector.Types.EntityType
+import Amazonka.FraudDetector.Types.EvaluatedExternalModel
+import Amazonka.FraudDetector.Types.EvaluatedModelVersion
+import Amazonka.FraudDetector.Types.EvaluatedRule
+import Amazonka.FraudDetector.Types.Event
+import Amazonka.FraudDetector.Types.EventPredictionSummary
+import Amazonka.FraudDetector.Types.EventType
+import Amazonka.FraudDetector.Types.EventVariableSummary
+import Amazonka.FraudDetector.Types.ExternalEventsDetail
+import Amazonka.FraudDetector.Types.ExternalModel
+import Amazonka.FraudDetector.Types.ExternalModelOutputs
+import Amazonka.FraudDetector.Types.ExternalModelSummary
+import Amazonka.FraudDetector.Types.FieldValidationMessage
+import Amazonka.FraudDetector.Types.FileValidationMessage
+import Amazonka.FraudDetector.Types.FilterCondition
+import Amazonka.FraudDetector.Types.IngestedEventStatistics
+import Amazonka.FraudDetector.Types.IngestedEventsDetail
+import Amazonka.FraudDetector.Types.IngestedEventsTimeWindow
+import Amazonka.FraudDetector.Types.KMSKey
+import Amazonka.FraudDetector.Types.Label
+import Amazonka.FraudDetector.Types.LabelSchema
+import Amazonka.FraudDetector.Types.LogOddsMetric
+import Amazonka.FraudDetector.Types.MetricDataPoint
+import Amazonka.FraudDetector.Types.Model
+import Amazonka.FraudDetector.Types.ModelEndpointDataBlob
+import Amazonka.FraudDetector.Types.ModelInputConfiguration
+import Amazonka.FraudDetector.Types.ModelOutputConfiguration
+import Amazonka.FraudDetector.Types.ModelScores
+import Amazonka.FraudDetector.Types.ModelVersion
+import Amazonka.FraudDetector.Types.ModelVersionDetail
+import Amazonka.FraudDetector.Types.ModelVersionEvaluation
+import Amazonka.FraudDetector.Types.OFIMetricDataPoint
+import Amazonka.FraudDetector.Types.OFIModelPerformance
+import Amazonka.FraudDetector.Types.OFITrainingMetricsValue
+import Amazonka.FraudDetector.Types.Outcome
+import Amazonka.FraudDetector.Types.PredictionExplanations
+import Amazonka.FraudDetector.Types.PredictionTimeRange
+import Amazonka.FraudDetector.Types.Rule
+import Amazonka.FraudDetector.Types.RuleDetail
+import Amazonka.FraudDetector.Types.RuleResult
+import Amazonka.FraudDetector.Types.TFIMetricDataPoint
+import Amazonka.FraudDetector.Types.TFIModelPerformance
+import Amazonka.FraudDetector.Types.TFITrainingMetricsValue
+import Amazonka.FraudDetector.Types.Tag
+import Amazonka.FraudDetector.Types.TrainingDataSchema
+import Amazonka.FraudDetector.Types.TrainingMetrics
+import Amazonka.FraudDetector.Types.TrainingMetricsV2
+import Amazonka.FraudDetector.Types.TrainingResult
+import Amazonka.FraudDetector.Types.TrainingResultV2
+import Amazonka.FraudDetector.Types.Variable
+import Amazonka.FraudDetector.Types.VariableEntry
+import Amazonka.FraudDetector.Types.VariableImpactExplanation
+import Amazonka.FraudDetector.Types.VariableImportanceMetrics
+import Amazonka.FraudDetector.UntagResource
+import Amazonka.FraudDetector.UpdateDetectorVersion
+import Amazonka.FraudDetector.UpdateDetectorVersionMetadata
+import Amazonka.FraudDetector.UpdateDetectorVersionStatus
+import Amazonka.FraudDetector.UpdateEventLabel
+import Amazonka.FraudDetector.UpdateModel
+import Amazonka.FraudDetector.UpdateModelVersion
+import Amazonka.FraudDetector.UpdateModelVersionStatus
+import Amazonka.FraudDetector.UpdateRuleMetadata
+import Amazonka.FraudDetector.UpdateRuleVersion
+import Amazonka.FraudDetector.UpdateVariable
diff --git a/gen/Amazonka/FraudDetector/ListEventPredictions.hs b/gen/Amazonka/FraudDetector/ListEventPredictions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/ListEventPredictions.hs
@@ -0,0 +1,290 @@
+{-# 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.FraudDetector.ListEventPredictions
+-- 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 past predictions. The list can be filtered by detector
+-- ID, detector version ID, event ID, event type, or by specifying a time
+-- period. If filter is not specified, the most recent prediction is
+-- returned.
+--
+-- For example, the following filter lists all past predictions for @xyz@
+-- event type - @{ \"eventType\":{ \"value\": \"xyz\" }” } @
+--
+-- This is a paginated API. If you provide a null @maxResults@, this action
+-- will retrieve a maximum of 10 records per page. If you provide a
+-- @maxResults@, the value must be between 50 and 100. To get the next page
+-- results, provide the @nextToken@ from the response as part of your
+-- request. A null @nextToken@ fetches the records from the beginning.
+module Amazonka.FraudDetector.ListEventPredictions
+  ( -- * Creating a Request
+    ListEventPredictions (..),
+    newListEventPredictions,
+
+    -- * Request Lenses
+    listEventPredictions_detectorId,
+    listEventPredictions_detectorVersionId,
+    listEventPredictions_eventId,
+    listEventPredictions_eventType,
+    listEventPredictions_maxResults,
+    listEventPredictions_nextToken,
+    listEventPredictions_predictionTimeRange,
+
+    -- * Destructuring the Response
+    ListEventPredictionsResponse (..),
+    newListEventPredictionsResponse,
+
+    -- * Response Lenses
+    listEventPredictionsResponse_eventPredictionSummaries,
+    listEventPredictionsResponse_nextToken,
+    listEventPredictionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListEventPredictions' smart constructor.
+data ListEventPredictions = ListEventPredictions'
+  { -- | The detector ID.
+    detectorId :: Prelude.Maybe FilterCondition,
+    -- | The detector version ID.
+    detectorVersionId :: Prelude.Maybe FilterCondition,
+    -- | The event ID.
+    eventId :: Prelude.Maybe FilterCondition,
+    -- | The event type associated with the detector.
+    eventType :: Prelude.Maybe FilterCondition,
+    -- | The maximum number of predictions to return for the request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Identifies the next page of results to return. Use the token to make the
+    -- call again to retrieve the next page. Keep all other arguments
+    -- unchanged. Each pagination token expires after 24 hours.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The time period for when the predictions were generated.
+    predictionTimeRange :: Prelude.Maybe PredictionTimeRange
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEventPredictions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detectorId', 'listEventPredictions_detectorId' - The detector ID.
+--
+-- 'detectorVersionId', 'listEventPredictions_detectorVersionId' - The detector version ID.
+--
+-- 'eventId', 'listEventPredictions_eventId' - The event ID.
+--
+-- 'eventType', 'listEventPredictions_eventType' - The event type associated with the detector.
+--
+-- 'maxResults', 'listEventPredictions_maxResults' - The maximum number of predictions to return for the request.
+--
+-- 'nextToken', 'listEventPredictions_nextToken' - Identifies the next page of results to return. Use the token to make the
+-- call again to retrieve the next page. Keep all other arguments
+-- unchanged. Each pagination token expires after 24 hours.
+--
+-- 'predictionTimeRange', 'listEventPredictions_predictionTimeRange' - The time period for when the predictions were generated.
+newListEventPredictions ::
+  ListEventPredictions
+newListEventPredictions =
+  ListEventPredictions'
+    { detectorId = Prelude.Nothing,
+      detectorVersionId = Prelude.Nothing,
+      eventId = Prelude.Nothing,
+      eventType = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      predictionTimeRange = Prelude.Nothing
+    }
+
+-- | The detector ID.
+listEventPredictions_detectorId :: Lens.Lens' ListEventPredictions (Prelude.Maybe FilterCondition)
+listEventPredictions_detectorId = Lens.lens (\ListEventPredictions' {detectorId} -> detectorId) (\s@ListEventPredictions' {} a -> s {detectorId = a} :: ListEventPredictions)
+
+-- | The detector version ID.
+listEventPredictions_detectorVersionId :: Lens.Lens' ListEventPredictions (Prelude.Maybe FilterCondition)
+listEventPredictions_detectorVersionId = Lens.lens (\ListEventPredictions' {detectorVersionId} -> detectorVersionId) (\s@ListEventPredictions' {} a -> s {detectorVersionId = a} :: ListEventPredictions)
+
+-- | The event ID.
+listEventPredictions_eventId :: Lens.Lens' ListEventPredictions (Prelude.Maybe FilterCondition)
+listEventPredictions_eventId = Lens.lens (\ListEventPredictions' {eventId} -> eventId) (\s@ListEventPredictions' {} a -> s {eventId = a} :: ListEventPredictions)
+
+-- | The event type associated with the detector.
+listEventPredictions_eventType :: Lens.Lens' ListEventPredictions (Prelude.Maybe FilterCondition)
+listEventPredictions_eventType = Lens.lens (\ListEventPredictions' {eventType} -> eventType) (\s@ListEventPredictions' {} a -> s {eventType = a} :: ListEventPredictions)
+
+-- | The maximum number of predictions to return for the request.
+listEventPredictions_maxResults :: Lens.Lens' ListEventPredictions (Prelude.Maybe Prelude.Natural)
+listEventPredictions_maxResults = Lens.lens (\ListEventPredictions' {maxResults} -> maxResults) (\s@ListEventPredictions' {} a -> s {maxResults = a} :: ListEventPredictions)
+
+-- | Identifies the next page of results to return. Use the token to make the
+-- call again to retrieve the next page. Keep all other arguments
+-- unchanged. Each pagination token expires after 24 hours.
+listEventPredictions_nextToken :: Lens.Lens' ListEventPredictions (Prelude.Maybe Prelude.Text)
+listEventPredictions_nextToken = Lens.lens (\ListEventPredictions' {nextToken} -> nextToken) (\s@ListEventPredictions' {} a -> s {nextToken = a} :: ListEventPredictions)
+
+-- | The time period for when the predictions were generated.
+listEventPredictions_predictionTimeRange :: Lens.Lens' ListEventPredictions (Prelude.Maybe PredictionTimeRange)
+listEventPredictions_predictionTimeRange = Lens.lens (\ListEventPredictions' {predictionTimeRange} -> predictionTimeRange) (\s@ListEventPredictions' {} a -> s {predictionTimeRange = a} :: ListEventPredictions)
+
+instance Core.AWSRequest ListEventPredictions where
+  type
+    AWSResponse ListEventPredictions =
+      ListEventPredictionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListEventPredictionsResponse'
+            Prelude.<$> ( x
+                            Data..?> "eventPredictionSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListEventPredictions where
+  hashWithSalt _salt ListEventPredictions' {..} =
+    _salt
+      `Prelude.hashWithSalt` detectorId
+      `Prelude.hashWithSalt` detectorVersionId
+      `Prelude.hashWithSalt` eventId
+      `Prelude.hashWithSalt` eventType
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` predictionTimeRange
+
+instance Prelude.NFData ListEventPredictions where
+  rnf ListEventPredictions' {..} =
+    Prelude.rnf detectorId
+      `Prelude.seq` Prelude.rnf detectorVersionId
+      `Prelude.seq` Prelude.rnf eventId
+      `Prelude.seq` Prelude.rnf eventType
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf predictionTimeRange
+
+instance Data.ToHeaders ListEventPredictions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.ListEventPredictions" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListEventPredictions where
+  toJSON ListEventPredictions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("detectorId" Data..=) Prelude.<$> detectorId,
+            ("detectorVersionId" Data..=)
+              Prelude.<$> detectorVersionId,
+            ("eventId" Data..=) Prelude.<$> eventId,
+            ("eventType" Data..=) Prelude.<$> eventType,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("predictionTimeRange" Data..=)
+              Prelude.<$> predictionTimeRange
+          ]
+      )
+
+instance Data.ToPath ListEventPredictions where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListEventPredictions where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListEventPredictionsResponse' smart constructor.
+data ListEventPredictionsResponse = ListEventPredictionsResponse'
+  { -- | The summary of the past predictions.
+    eventPredictionSummaries :: Prelude.Maybe [EventPredictionSummary],
+    -- | Identifies the next page of results to return. Use the token to make the
+    -- call again to retrieve the next page. Keep all other arguments
+    -- unchanged. Each pagination token expires after 24 hours.
+    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 'ListEventPredictionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eventPredictionSummaries', 'listEventPredictionsResponse_eventPredictionSummaries' - The summary of the past predictions.
+--
+-- 'nextToken', 'listEventPredictionsResponse_nextToken' - Identifies the next page of results to return. Use the token to make the
+-- call again to retrieve the next page. Keep all other arguments
+-- unchanged. Each pagination token expires after 24 hours.
+--
+-- 'httpStatus', 'listEventPredictionsResponse_httpStatus' - The response's http status code.
+newListEventPredictionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListEventPredictionsResponse
+newListEventPredictionsResponse pHttpStatus_ =
+  ListEventPredictionsResponse'
+    { eventPredictionSummaries =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The summary of the past predictions.
+listEventPredictionsResponse_eventPredictionSummaries :: Lens.Lens' ListEventPredictionsResponse (Prelude.Maybe [EventPredictionSummary])
+listEventPredictionsResponse_eventPredictionSummaries = Lens.lens (\ListEventPredictionsResponse' {eventPredictionSummaries} -> eventPredictionSummaries) (\s@ListEventPredictionsResponse' {} a -> s {eventPredictionSummaries = a} :: ListEventPredictionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Identifies the next page of results to return. Use the token to make the
+-- call again to retrieve the next page. Keep all other arguments
+-- unchanged. Each pagination token expires after 24 hours.
+listEventPredictionsResponse_nextToken :: Lens.Lens' ListEventPredictionsResponse (Prelude.Maybe Prelude.Text)
+listEventPredictionsResponse_nextToken = Lens.lens (\ListEventPredictionsResponse' {nextToken} -> nextToken) (\s@ListEventPredictionsResponse' {} a -> s {nextToken = a} :: ListEventPredictionsResponse)
+
+-- | The response's http status code.
+listEventPredictionsResponse_httpStatus :: Lens.Lens' ListEventPredictionsResponse Prelude.Int
+listEventPredictionsResponse_httpStatus = Lens.lens (\ListEventPredictionsResponse' {httpStatus} -> httpStatus) (\s@ListEventPredictionsResponse' {} a -> s {httpStatus = a} :: ListEventPredictionsResponse)
+
+instance Prelude.NFData ListEventPredictionsResponse where
+  rnf ListEventPredictionsResponse' {..} =
+    Prelude.rnf eventPredictionSummaries
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/ListTagsForResource.hs b/gen/Amazonka/FraudDetector/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/ListTagsForResource.hs
@@ -0,0 +1,214 @@
+{-# 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.FraudDetector.ListTagsForResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all tags associated with the resource. This is a paginated API. To
+-- get the next page results, provide the pagination token from the
+-- response as part of your request. A null pagination token fetches the
+-- records from the beginning.
+module Amazonka.FraudDetector.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_maxResults,
+    listTagsForResource_nextToken,
+    listTagsForResource_resourceARN,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_nextToken,
+    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.FraudDetector.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 maximum number of objects to return for the request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The next token from the previous results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ARN that specifies the resource whose tags you want to list.
+    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:
+--
+-- 'maxResults', 'listTagsForResource_maxResults' - The maximum number of objects to return for the request.
+--
+-- 'nextToken', 'listTagsForResource_nextToken' - The next token from the previous results.
+--
+-- 'resourceARN', 'listTagsForResource_resourceARN' - The ARN that specifies the resource whose tags you want to list.
+newListTagsForResource ::
+  -- | 'resourceARN'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceARN_ =
+  ListTagsForResource'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      resourceARN = pResourceARN_
+    }
+
+-- | The maximum number of objects to return for the request.
+listTagsForResource_maxResults :: Lens.Lens' ListTagsForResource (Prelude.Maybe Prelude.Natural)
+listTagsForResource_maxResults = Lens.lens (\ListTagsForResource' {maxResults} -> maxResults) (\s@ListTagsForResource' {} a -> s {maxResults = a} :: ListTagsForResource)
+
+-- | The next token from the previous results.
+listTagsForResource_nextToken :: Lens.Lens' ListTagsForResource (Prelude.Maybe Prelude.Text)
+listTagsForResource_nextToken = Lens.lens (\ListTagsForResource' {nextToken} -> nextToken) (\s@ListTagsForResource' {} a -> s {nextToken = a} :: ListTagsForResource)
+
+-- | The ARN that specifies the resource whose tags you want to list.
+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.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` resourceARN
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf resourceARN
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.ListTagsForResource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListTagsForResource where
+  toJSON ListTagsForResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("resourceARN" Data..= resourceARN)
+          ]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | The next token for subsequent requests.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A collection of key and value pairs.
+    tags :: Prelude.Maybe [Tag],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listTagsForResourceResponse_nextToken' - The next token for subsequent requests.
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - A collection of key and value pairs.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { nextToken =
+        Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The next token for subsequent requests.
+listTagsForResourceResponse_nextToken :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe Prelude.Text)
+listTagsForResourceResponse_nextToken = Lens.lens (\ListTagsForResourceResponse' {nextToken} -> nextToken) (\s@ListTagsForResourceResponse' {} a -> s {nextToken = a} :: ListTagsForResourceResponse)
+
+-- | A collection of key and value pairs.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe [Tag])
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/PutDetector.hs b/gen/Amazonka/FraudDetector/PutDetector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/PutDetector.hs
@@ -0,0 +1,197 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.PutDetector
+-- 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 or updates a detector.
+module Amazonka.FraudDetector.PutDetector
+  ( -- * Creating a Request
+    PutDetector (..),
+    newPutDetector,
+
+    -- * Request Lenses
+    putDetector_description,
+    putDetector_tags,
+    putDetector_detectorId,
+    putDetector_eventTypeName,
+
+    -- * Destructuring the Response
+    PutDetectorResponse (..),
+    newPutDetectorResponse,
+
+    -- * Response Lenses
+    putDetectorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutDetector' smart constructor.
+data PutDetector = PutDetector'
+  { -- | The description of the detector.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A collection of key and value pairs.
+    tags :: Prelude.Maybe [Tag],
+    -- | The detector ID.
+    detectorId :: Prelude.Text,
+    -- | The name of the event type.
+    eventTypeName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutDetector' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'putDetector_description' - The description of the detector.
+--
+-- 'tags', 'putDetector_tags' - A collection of key and value pairs.
+--
+-- 'detectorId', 'putDetector_detectorId' - The detector ID.
+--
+-- 'eventTypeName', 'putDetector_eventTypeName' - The name of the event type.
+newPutDetector ::
+  -- | 'detectorId'
+  Prelude.Text ->
+  -- | 'eventTypeName'
+  Prelude.Text ->
+  PutDetector
+newPutDetector pDetectorId_ pEventTypeName_ =
+  PutDetector'
+    { description = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      detectorId = pDetectorId_,
+      eventTypeName = pEventTypeName_
+    }
+
+-- | The description of the detector.
+putDetector_description :: Lens.Lens' PutDetector (Prelude.Maybe Prelude.Text)
+putDetector_description = Lens.lens (\PutDetector' {description} -> description) (\s@PutDetector' {} a -> s {description = a} :: PutDetector)
+
+-- | A collection of key and value pairs.
+putDetector_tags :: Lens.Lens' PutDetector (Prelude.Maybe [Tag])
+putDetector_tags = Lens.lens (\PutDetector' {tags} -> tags) (\s@PutDetector' {} a -> s {tags = a} :: PutDetector) Prelude.. Lens.mapping Lens.coerced
+
+-- | The detector ID.
+putDetector_detectorId :: Lens.Lens' PutDetector Prelude.Text
+putDetector_detectorId = Lens.lens (\PutDetector' {detectorId} -> detectorId) (\s@PutDetector' {} a -> s {detectorId = a} :: PutDetector)
+
+-- | The name of the event type.
+putDetector_eventTypeName :: Lens.Lens' PutDetector Prelude.Text
+putDetector_eventTypeName = Lens.lens (\PutDetector' {eventTypeName} -> eventTypeName) (\s@PutDetector' {} a -> s {eventTypeName = a} :: PutDetector)
+
+instance Core.AWSRequest PutDetector where
+  type AWSResponse PutDetector = PutDetectorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutDetectorResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutDetector where
+  hashWithSalt _salt PutDetector' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` detectorId
+      `Prelude.hashWithSalt` eventTypeName
+
+instance Prelude.NFData PutDetector where
+  rnf PutDetector' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf detectorId
+      `Prelude.seq` Prelude.rnf eventTypeName
+
+instance Data.ToHeaders PutDetector where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.PutDetector" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutDetector where
+  toJSON PutDetector' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("detectorId" Data..= detectorId),
+            Prelude.Just
+              ("eventTypeName" Data..= eventTypeName)
+          ]
+      )
+
+instance Data.ToPath PutDetector where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PutDetector where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutDetectorResponse' smart constructor.
+data PutDetectorResponse = PutDetectorResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutDetectorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putDetectorResponse_httpStatus' - The response's http status code.
+newPutDetectorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutDetectorResponse
+newPutDetectorResponse pHttpStatus_ =
+  PutDetectorResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+putDetectorResponse_httpStatus :: Lens.Lens' PutDetectorResponse Prelude.Int
+putDetectorResponse_httpStatus = Lens.lens (\PutDetectorResponse' {httpStatus} -> httpStatus) (\s@PutDetectorResponse' {} a -> s {httpStatus = a} :: PutDetectorResponse)
+
+instance Prelude.NFData PutDetectorResponse where
+  rnf PutDetectorResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/PutEntityType.hs b/gen/Amazonka/FraudDetector/PutEntityType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/PutEntityType.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.FraudDetector.PutEntityType
+-- 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 or updates an entity type. An entity represents who is
+-- performing the event. As part of a fraud prediction, you pass the entity
+-- ID to indicate the specific entity who performed the event. An entity
+-- type classifies the entity. Example classifications include customer,
+-- merchant, or account.
+module Amazonka.FraudDetector.PutEntityType
+  ( -- * Creating a Request
+    PutEntityType (..),
+    newPutEntityType,
+
+    -- * Request Lenses
+    putEntityType_description,
+    putEntityType_tags,
+    putEntityType_name,
+
+    -- * Destructuring the Response
+    PutEntityTypeResponse (..),
+    newPutEntityTypeResponse,
+
+    -- * Response Lenses
+    putEntityTypeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutEntityType' smart constructor.
+data PutEntityType = PutEntityType'
+  { -- | The description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A collection of key and value pairs.
+    tags :: Prelude.Maybe [Tag],
+    -- | The name of the entity type.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutEntityType' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'putEntityType_description' - The description.
+--
+-- 'tags', 'putEntityType_tags' - A collection of key and value pairs.
+--
+-- 'name', 'putEntityType_name' - The name of the entity type.
+newPutEntityType ::
+  -- | 'name'
+  Prelude.Text ->
+  PutEntityType
+newPutEntityType pName_ =
+  PutEntityType'
+    { description = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The description.
+putEntityType_description :: Lens.Lens' PutEntityType (Prelude.Maybe Prelude.Text)
+putEntityType_description = Lens.lens (\PutEntityType' {description} -> description) (\s@PutEntityType' {} a -> s {description = a} :: PutEntityType)
+
+-- | A collection of key and value pairs.
+putEntityType_tags :: Lens.Lens' PutEntityType (Prelude.Maybe [Tag])
+putEntityType_tags = Lens.lens (\PutEntityType' {tags} -> tags) (\s@PutEntityType' {} a -> s {tags = a} :: PutEntityType) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the entity type.
+putEntityType_name :: Lens.Lens' PutEntityType Prelude.Text
+putEntityType_name = Lens.lens (\PutEntityType' {name} -> name) (\s@PutEntityType' {} a -> s {name = a} :: PutEntityType)
+
+instance Core.AWSRequest PutEntityType where
+  type
+    AWSResponse PutEntityType =
+      PutEntityTypeResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutEntityTypeResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutEntityType where
+  hashWithSalt _salt PutEntityType' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData PutEntityType where
+  rnf PutEntityType' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders PutEntityType where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.PutEntityType" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutEntityType where
+  toJSON PutEntityType' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath PutEntityType where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PutEntityType where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutEntityTypeResponse' smart constructor.
+data PutEntityTypeResponse = PutEntityTypeResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutEntityTypeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putEntityTypeResponse_httpStatus' - The response's http status code.
+newPutEntityTypeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutEntityTypeResponse
+newPutEntityTypeResponse pHttpStatus_ =
+  PutEntityTypeResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+putEntityTypeResponse_httpStatus :: Lens.Lens' PutEntityTypeResponse Prelude.Int
+putEntityTypeResponse_httpStatus = Lens.lens (\PutEntityTypeResponse' {httpStatus} -> httpStatus) (\s@PutEntityTypeResponse' {} a -> s {httpStatus = a} :: PutEntityTypeResponse)
+
+instance Prelude.NFData PutEntityTypeResponse where
+  rnf PutEntityTypeResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/PutEventType.hs b/gen/Amazonka/FraudDetector/PutEventType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/PutEventType.hs
@@ -0,0 +1,250 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.PutEventType
+-- 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 or updates an event type. An event is a business activity that
+-- is evaluated for fraud risk. With Amazon Fraud Detector, you generate
+-- fraud predictions for events. An event type defines the structure for an
+-- event sent to Amazon Fraud Detector. This includes the variables sent as
+-- part of the event, the entity performing the event (such as a customer),
+-- and the labels that classify the event. Example event types include
+-- online payment transactions, account registrations, and authentications.
+module Amazonka.FraudDetector.PutEventType
+  ( -- * Creating a Request
+    PutEventType (..),
+    newPutEventType,
+
+    -- * Request Lenses
+    putEventType_description,
+    putEventType_eventIngestion,
+    putEventType_labels,
+    putEventType_tags,
+    putEventType_name,
+    putEventType_eventVariables,
+    putEventType_entityTypes,
+
+    -- * Destructuring the Response
+    PutEventTypeResponse (..),
+    newPutEventTypeResponse,
+
+    -- * Response Lenses
+    putEventTypeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutEventType' smart constructor.
+data PutEventType = PutEventType'
+  { -- | The description of the event type.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Specifies if ingenstion is enabled or disabled.
+    eventIngestion :: Prelude.Maybe EventIngestion,
+    -- | The event type labels.
+    labels :: Prelude.Maybe [Prelude.Text],
+    -- | A collection of key and value pairs.
+    tags :: Prelude.Maybe [Tag],
+    -- | The name.
+    name :: Prelude.Text,
+    -- | The event type variables.
+    eventVariables :: Prelude.NonEmpty Prelude.Text,
+    -- | The entity type for the event type. Example entity types: customer,
+    -- merchant, account.
+    entityTypes :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutEventType' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'putEventType_description' - The description of the event type.
+--
+-- 'eventIngestion', 'putEventType_eventIngestion' - Specifies if ingenstion is enabled or disabled.
+--
+-- 'labels', 'putEventType_labels' - The event type labels.
+--
+-- 'tags', 'putEventType_tags' - A collection of key and value pairs.
+--
+-- 'name', 'putEventType_name' - The name.
+--
+-- 'eventVariables', 'putEventType_eventVariables' - The event type variables.
+--
+-- 'entityTypes', 'putEventType_entityTypes' - The entity type for the event type. Example entity types: customer,
+-- merchant, account.
+newPutEventType ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'eventVariables'
+  Prelude.NonEmpty Prelude.Text ->
+  -- | 'entityTypes'
+  Prelude.NonEmpty Prelude.Text ->
+  PutEventType
+newPutEventType pName_ pEventVariables_ pEntityTypes_ =
+  PutEventType'
+    { description = Prelude.Nothing,
+      eventIngestion = Prelude.Nothing,
+      labels = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_,
+      eventVariables =
+        Lens.coerced Lens.# pEventVariables_,
+      entityTypes = Lens.coerced Lens.# pEntityTypes_
+    }
+
+-- | The description of the event type.
+putEventType_description :: Lens.Lens' PutEventType (Prelude.Maybe Prelude.Text)
+putEventType_description = Lens.lens (\PutEventType' {description} -> description) (\s@PutEventType' {} a -> s {description = a} :: PutEventType)
+
+-- | Specifies if ingenstion is enabled or disabled.
+putEventType_eventIngestion :: Lens.Lens' PutEventType (Prelude.Maybe EventIngestion)
+putEventType_eventIngestion = Lens.lens (\PutEventType' {eventIngestion} -> eventIngestion) (\s@PutEventType' {} a -> s {eventIngestion = a} :: PutEventType)
+
+-- | The event type labels.
+putEventType_labels :: Lens.Lens' PutEventType (Prelude.Maybe [Prelude.Text])
+putEventType_labels = Lens.lens (\PutEventType' {labels} -> labels) (\s@PutEventType' {} a -> s {labels = a} :: PutEventType) Prelude.. Lens.mapping Lens.coerced
+
+-- | A collection of key and value pairs.
+putEventType_tags :: Lens.Lens' PutEventType (Prelude.Maybe [Tag])
+putEventType_tags = Lens.lens (\PutEventType' {tags} -> tags) (\s@PutEventType' {} a -> s {tags = a} :: PutEventType) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name.
+putEventType_name :: Lens.Lens' PutEventType Prelude.Text
+putEventType_name = Lens.lens (\PutEventType' {name} -> name) (\s@PutEventType' {} a -> s {name = a} :: PutEventType)
+
+-- | The event type variables.
+putEventType_eventVariables :: Lens.Lens' PutEventType (Prelude.NonEmpty Prelude.Text)
+putEventType_eventVariables = Lens.lens (\PutEventType' {eventVariables} -> eventVariables) (\s@PutEventType' {} a -> s {eventVariables = a} :: PutEventType) Prelude.. Lens.coerced
+
+-- | The entity type for the event type. Example entity types: customer,
+-- merchant, account.
+putEventType_entityTypes :: Lens.Lens' PutEventType (Prelude.NonEmpty Prelude.Text)
+putEventType_entityTypes = Lens.lens (\PutEventType' {entityTypes} -> entityTypes) (\s@PutEventType' {} a -> s {entityTypes = a} :: PutEventType) Prelude.. Lens.coerced
+
+instance Core.AWSRequest PutEventType where
+  type AWSResponse PutEventType = PutEventTypeResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutEventTypeResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutEventType where
+  hashWithSalt _salt PutEventType' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` eventIngestion
+      `Prelude.hashWithSalt` labels
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` eventVariables
+      `Prelude.hashWithSalt` entityTypes
+
+instance Prelude.NFData PutEventType where
+  rnf PutEventType' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf eventIngestion
+      `Prelude.seq` Prelude.rnf labels
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf eventVariables
+      `Prelude.seq` Prelude.rnf entityTypes
+
+instance Data.ToHeaders PutEventType where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.PutEventType" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutEventType where
+  toJSON PutEventType' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("eventIngestion" Data..=)
+              Prelude.<$> eventIngestion,
+            ("labels" Data..=) Prelude.<$> labels,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just
+              ("eventVariables" Data..= eventVariables),
+            Prelude.Just ("entityTypes" Data..= entityTypes)
+          ]
+      )
+
+instance Data.ToPath PutEventType where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PutEventType where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutEventTypeResponse' smart constructor.
+data PutEventTypeResponse = PutEventTypeResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutEventTypeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putEventTypeResponse_httpStatus' - The response's http status code.
+newPutEventTypeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutEventTypeResponse
+newPutEventTypeResponse pHttpStatus_ =
+  PutEventTypeResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+putEventTypeResponse_httpStatus :: Lens.Lens' PutEventTypeResponse Prelude.Int
+putEventTypeResponse_httpStatus = Lens.lens (\PutEventTypeResponse' {httpStatus} -> httpStatus) (\s@PutEventTypeResponse' {} a -> s {httpStatus = a} :: PutEventTypeResponse)
+
+instance Prelude.NFData PutEventTypeResponse where
+  rnf PutEventTypeResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/PutExternalModel.hs b/gen/Amazonka/FraudDetector/PutExternalModel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/PutExternalModel.hs
@@ -0,0 +1,264 @@
+{-# 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.FraudDetector.PutExternalModel
+-- 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 or updates an Amazon SageMaker model endpoint. You can also use
+-- this action to update the configuration of the model endpoint, including
+-- the IAM role and\/or the mapped variables.
+module Amazonka.FraudDetector.PutExternalModel
+  ( -- * Creating a Request
+    PutExternalModel (..),
+    newPutExternalModel,
+
+    -- * Request Lenses
+    putExternalModel_tags,
+    putExternalModel_modelEndpoint,
+    putExternalModel_modelSource,
+    putExternalModel_invokeModelEndpointRoleArn,
+    putExternalModel_inputConfiguration,
+    putExternalModel_outputConfiguration,
+    putExternalModel_modelEndpointStatus,
+
+    -- * Destructuring the Response
+    PutExternalModelResponse (..),
+    newPutExternalModelResponse,
+
+    -- * Response Lenses
+    putExternalModelResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutExternalModel' smart constructor.
+data PutExternalModel = PutExternalModel'
+  { -- | A collection of key and value pairs.
+    tags :: Prelude.Maybe [Tag],
+    -- | The model endpoints name.
+    modelEndpoint :: Prelude.Text,
+    -- | The source of the model.
+    modelSource :: ModelSource,
+    -- | The IAM role used to invoke the model endpoint.
+    invokeModelEndpointRoleArn :: Prelude.Text,
+    -- | The model endpoint input configuration.
+    inputConfiguration :: ModelInputConfiguration,
+    -- | The model endpoint output configuration.
+    outputConfiguration :: ModelOutputConfiguration,
+    -- | The model endpoint’s status in Amazon Fraud Detector.
+    modelEndpointStatus :: ModelEndpointStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutExternalModel' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putExternalModel_tags' - A collection of key and value pairs.
+--
+-- 'modelEndpoint', 'putExternalModel_modelEndpoint' - The model endpoints name.
+--
+-- 'modelSource', 'putExternalModel_modelSource' - The source of the model.
+--
+-- 'invokeModelEndpointRoleArn', 'putExternalModel_invokeModelEndpointRoleArn' - The IAM role used to invoke the model endpoint.
+--
+-- 'inputConfiguration', 'putExternalModel_inputConfiguration' - The model endpoint input configuration.
+--
+-- 'outputConfiguration', 'putExternalModel_outputConfiguration' - The model endpoint output configuration.
+--
+-- 'modelEndpointStatus', 'putExternalModel_modelEndpointStatus' - The model endpoint’s status in Amazon Fraud Detector.
+newPutExternalModel ::
+  -- | 'modelEndpoint'
+  Prelude.Text ->
+  -- | 'modelSource'
+  ModelSource ->
+  -- | 'invokeModelEndpointRoleArn'
+  Prelude.Text ->
+  -- | 'inputConfiguration'
+  ModelInputConfiguration ->
+  -- | 'outputConfiguration'
+  ModelOutputConfiguration ->
+  -- | 'modelEndpointStatus'
+  ModelEndpointStatus ->
+  PutExternalModel
+newPutExternalModel
+  pModelEndpoint_
+  pModelSource_
+  pInvokeModelEndpointRoleArn_
+  pInputConfiguration_
+  pOutputConfiguration_
+  pModelEndpointStatus_ =
+    PutExternalModel'
+      { tags = Prelude.Nothing,
+        modelEndpoint = pModelEndpoint_,
+        modelSource = pModelSource_,
+        invokeModelEndpointRoleArn =
+          pInvokeModelEndpointRoleArn_,
+        inputConfiguration = pInputConfiguration_,
+        outputConfiguration = pOutputConfiguration_,
+        modelEndpointStatus = pModelEndpointStatus_
+      }
+
+-- | A collection of key and value pairs.
+putExternalModel_tags :: Lens.Lens' PutExternalModel (Prelude.Maybe [Tag])
+putExternalModel_tags = Lens.lens (\PutExternalModel' {tags} -> tags) (\s@PutExternalModel' {} a -> s {tags = a} :: PutExternalModel) Prelude.. Lens.mapping Lens.coerced
+
+-- | The model endpoints name.
+putExternalModel_modelEndpoint :: Lens.Lens' PutExternalModel Prelude.Text
+putExternalModel_modelEndpoint = Lens.lens (\PutExternalModel' {modelEndpoint} -> modelEndpoint) (\s@PutExternalModel' {} a -> s {modelEndpoint = a} :: PutExternalModel)
+
+-- | The source of the model.
+putExternalModel_modelSource :: Lens.Lens' PutExternalModel ModelSource
+putExternalModel_modelSource = Lens.lens (\PutExternalModel' {modelSource} -> modelSource) (\s@PutExternalModel' {} a -> s {modelSource = a} :: PutExternalModel)
+
+-- | The IAM role used to invoke the model endpoint.
+putExternalModel_invokeModelEndpointRoleArn :: Lens.Lens' PutExternalModel Prelude.Text
+putExternalModel_invokeModelEndpointRoleArn = Lens.lens (\PutExternalModel' {invokeModelEndpointRoleArn} -> invokeModelEndpointRoleArn) (\s@PutExternalModel' {} a -> s {invokeModelEndpointRoleArn = a} :: PutExternalModel)
+
+-- | The model endpoint input configuration.
+putExternalModel_inputConfiguration :: Lens.Lens' PutExternalModel ModelInputConfiguration
+putExternalModel_inputConfiguration = Lens.lens (\PutExternalModel' {inputConfiguration} -> inputConfiguration) (\s@PutExternalModel' {} a -> s {inputConfiguration = a} :: PutExternalModel)
+
+-- | The model endpoint output configuration.
+putExternalModel_outputConfiguration :: Lens.Lens' PutExternalModel ModelOutputConfiguration
+putExternalModel_outputConfiguration = Lens.lens (\PutExternalModel' {outputConfiguration} -> outputConfiguration) (\s@PutExternalModel' {} a -> s {outputConfiguration = a} :: PutExternalModel)
+
+-- | The model endpoint’s status in Amazon Fraud Detector.
+putExternalModel_modelEndpointStatus :: Lens.Lens' PutExternalModel ModelEndpointStatus
+putExternalModel_modelEndpointStatus = Lens.lens (\PutExternalModel' {modelEndpointStatus} -> modelEndpointStatus) (\s@PutExternalModel' {} a -> s {modelEndpointStatus = a} :: PutExternalModel)
+
+instance Core.AWSRequest PutExternalModel where
+  type
+    AWSResponse PutExternalModel =
+      PutExternalModelResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutExternalModelResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutExternalModel where
+  hashWithSalt _salt PutExternalModel' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` modelEndpoint
+      `Prelude.hashWithSalt` modelSource
+      `Prelude.hashWithSalt` invokeModelEndpointRoleArn
+      `Prelude.hashWithSalt` inputConfiguration
+      `Prelude.hashWithSalt` outputConfiguration
+      `Prelude.hashWithSalt` modelEndpointStatus
+
+instance Prelude.NFData PutExternalModel where
+  rnf PutExternalModel' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf modelEndpoint
+      `Prelude.seq` Prelude.rnf modelSource
+      `Prelude.seq` Prelude.rnf invokeModelEndpointRoleArn
+      `Prelude.seq` Prelude.rnf inputConfiguration
+      `Prelude.seq` Prelude.rnf outputConfiguration
+      `Prelude.seq` Prelude.rnf modelEndpointStatus
+
+instance Data.ToHeaders PutExternalModel where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.PutExternalModel" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutExternalModel where
+  toJSON PutExternalModel' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("modelEndpoint" Data..= modelEndpoint),
+            Prelude.Just ("modelSource" Data..= modelSource),
+            Prelude.Just
+              ( "invokeModelEndpointRoleArn"
+                  Data..= invokeModelEndpointRoleArn
+              ),
+            Prelude.Just
+              ("inputConfiguration" Data..= inputConfiguration),
+            Prelude.Just
+              ("outputConfiguration" Data..= outputConfiguration),
+            Prelude.Just
+              ("modelEndpointStatus" Data..= modelEndpointStatus)
+          ]
+      )
+
+instance Data.ToPath PutExternalModel where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PutExternalModel where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutExternalModelResponse' smart constructor.
+data PutExternalModelResponse = PutExternalModelResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutExternalModelResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putExternalModelResponse_httpStatus' - The response's http status code.
+newPutExternalModelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutExternalModelResponse
+newPutExternalModelResponse pHttpStatus_ =
+  PutExternalModelResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+putExternalModelResponse_httpStatus :: Lens.Lens' PutExternalModelResponse Prelude.Int
+putExternalModelResponse_httpStatus = Lens.lens (\PutExternalModelResponse' {httpStatus} -> httpStatus) (\s@PutExternalModelResponse' {} a -> s {httpStatus = a} :: PutExternalModelResponse)
+
+instance Prelude.NFData PutExternalModelResponse where
+  rnf PutExternalModelResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/PutKMSEncryptionKey.hs b/gen/Amazonka/FraudDetector/PutKMSEncryptionKey.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/PutKMSEncryptionKey.hs
@@ -0,0 +1,172 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.PutKMSEncryptionKey
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Specifies the KMS key to be used to encrypt content in Amazon Fraud
+-- Detector.
+module Amazonka.FraudDetector.PutKMSEncryptionKey
+  ( -- * Creating a Request
+    PutKMSEncryptionKey (..),
+    newPutKMSEncryptionKey,
+
+    -- * Request Lenses
+    putKMSEncryptionKey_kmsEncryptionKeyArn,
+
+    -- * Destructuring the Response
+    PutKMSEncryptionKeyResponse (..),
+    newPutKMSEncryptionKeyResponse,
+
+    -- * Response Lenses
+    putKMSEncryptionKeyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutKMSEncryptionKey' smart constructor.
+data PutKMSEncryptionKey = PutKMSEncryptionKey'
+  { -- | The KMS encryption key ARN.
+    --
+    -- The KMS key must be single-Region key. Amazon Fraud Detector does not
+    -- support multi-Region KMS key.
+    kmsEncryptionKeyArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutKMSEncryptionKey' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'kmsEncryptionKeyArn', 'putKMSEncryptionKey_kmsEncryptionKeyArn' - The KMS encryption key ARN.
+--
+-- The KMS key must be single-Region key. Amazon Fraud Detector does not
+-- support multi-Region KMS key.
+newPutKMSEncryptionKey ::
+  -- | 'kmsEncryptionKeyArn'
+  Prelude.Text ->
+  PutKMSEncryptionKey
+newPutKMSEncryptionKey pKmsEncryptionKeyArn_ =
+  PutKMSEncryptionKey'
+    { kmsEncryptionKeyArn =
+        pKmsEncryptionKeyArn_
+    }
+
+-- | The KMS encryption key ARN.
+--
+-- The KMS key must be single-Region key. Amazon Fraud Detector does not
+-- support multi-Region KMS key.
+putKMSEncryptionKey_kmsEncryptionKeyArn :: Lens.Lens' PutKMSEncryptionKey Prelude.Text
+putKMSEncryptionKey_kmsEncryptionKeyArn = Lens.lens (\PutKMSEncryptionKey' {kmsEncryptionKeyArn} -> kmsEncryptionKeyArn) (\s@PutKMSEncryptionKey' {} a -> s {kmsEncryptionKeyArn = a} :: PutKMSEncryptionKey)
+
+instance Core.AWSRequest PutKMSEncryptionKey where
+  type
+    AWSResponse PutKMSEncryptionKey =
+      PutKMSEncryptionKeyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutKMSEncryptionKeyResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutKMSEncryptionKey where
+  hashWithSalt _salt PutKMSEncryptionKey' {..} =
+    _salt `Prelude.hashWithSalt` kmsEncryptionKeyArn
+
+instance Prelude.NFData PutKMSEncryptionKey where
+  rnf PutKMSEncryptionKey' {..} =
+    Prelude.rnf kmsEncryptionKeyArn
+
+instance Data.ToHeaders PutKMSEncryptionKey where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.PutKMSEncryptionKey" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutKMSEncryptionKey where
+  toJSON PutKMSEncryptionKey' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("kmsEncryptionKeyArn" Data..= kmsEncryptionKeyArn)
+          ]
+      )
+
+instance Data.ToPath PutKMSEncryptionKey where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PutKMSEncryptionKey where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutKMSEncryptionKeyResponse' smart constructor.
+data PutKMSEncryptionKeyResponse = PutKMSEncryptionKeyResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutKMSEncryptionKeyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putKMSEncryptionKeyResponse_httpStatus' - The response's http status code.
+newPutKMSEncryptionKeyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutKMSEncryptionKeyResponse
+newPutKMSEncryptionKeyResponse pHttpStatus_ =
+  PutKMSEncryptionKeyResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+putKMSEncryptionKeyResponse_httpStatus :: Lens.Lens' PutKMSEncryptionKeyResponse Prelude.Int
+putKMSEncryptionKeyResponse_httpStatus = Lens.lens (\PutKMSEncryptionKeyResponse' {httpStatus} -> httpStatus) (\s@PutKMSEncryptionKeyResponse' {} a -> s {httpStatus = a} :: PutKMSEncryptionKeyResponse)
+
+instance Prelude.NFData PutKMSEncryptionKeyResponse where
+  rnf PutKMSEncryptionKeyResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/PutLabel.hs b/gen/Amazonka/FraudDetector/PutLabel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/PutLabel.hs
@@ -0,0 +1,181 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.PutLabel
+-- 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 or updates label. A label classifies an event as fraudulent or
+-- legitimate. Labels are associated with event types and used to train
+-- supervised machine learning models in Amazon Fraud Detector.
+module Amazonka.FraudDetector.PutLabel
+  ( -- * Creating a Request
+    PutLabel (..),
+    newPutLabel,
+
+    -- * Request Lenses
+    putLabel_description,
+    putLabel_tags,
+    putLabel_name,
+
+    -- * Destructuring the Response
+    PutLabelResponse (..),
+    newPutLabelResponse,
+
+    -- * Response Lenses
+    putLabelResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutLabel' smart constructor.
+data PutLabel = PutLabel'
+  { -- | The label description.
+    description :: Prelude.Maybe Prelude.Text,
+    tags :: Prelude.Maybe [Tag],
+    -- | The label name.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutLabel' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'putLabel_description' - The label description.
+--
+-- 'tags', 'putLabel_tags' -
+--
+-- 'name', 'putLabel_name' - The label name.
+newPutLabel ::
+  -- | 'name'
+  Prelude.Text ->
+  PutLabel
+newPutLabel pName_ =
+  PutLabel'
+    { description = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The label description.
+putLabel_description :: Lens.Lens' PutLabel (Prelude.Maybe Prelude.Text)
+putLabel_description = Lens.lens (\PutLabel' {description} -> description) (\s@PutLabel' {} a -> s {description = a} :: PutLabel)
+
+putLabel_tags :: Lens.Lens' PutLabel (Prelude.Maybe [Tag])
+putLabel_tags = Lens.lens (\PutLabel' {tags} -> tags) (\s@PutLabel' {} a -> s {tags = a} :: PutLabel) Prelude.. Lens.mapping Lens.coerced
+
+-- | The label name.
+putLabel_name :: Lens.Lens' PutLabel Prelude.Text
+putLabel_name = Lens.lens (\PutLabel' {name} -> name) (\s@PutLabel' {} a -> s {name = a} :: PutLabel)
+
+instance Core.AWSRequest PutLabel where
+  type AWSResponse PutLabel = PutLabelResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutLabelResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutLabel where
+  hashWithSalt _salt PutLabel' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData PutLabel where
+  rnf PutLabel' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders PutLabel where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.PutLabel" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutLabel where
+  toJSON PutLabel' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath PutLabel where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PutLabel where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutLabelResponse' smart constructor.
+data PutLabelResponse = PutLabelResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutLabelResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putLabelResponse_httpStatus' - The response's http status code.
+newPutLabelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutLabelResponse
+newPutLabelResponse pHttpStatus_ =
+  PutLabelResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+putLabelResponse_httpStatus :: Lens.Lens' PutLabelResponse Prelude.Int
+putLabelResponse_httpStatus = Lens.lens (\PutLabelResponse' {httpStatus} -> httpStatus) (\s@PutLabelResponse' {} a -> s {httpStatus = a} :: PutLabelResponse)
+
+instance Prelude.NFData PutLabelResponse where
+  rnf PutLabelResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/PutOutcome.hs b/gen/Amazonka/FraudDetector/PutOutcome.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/PutOutcome.hs
@@ -0,0 +1,181 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.PutOutcome
+-- 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 or updates an outcome.
+module Amazonka.FraudDetector.PutOutcome
+  ( -- * Creating a Request
+    PutOutcome (..),
+    newPutOutcome,
+
+    -- * Request Lenses
+    putOutcome_description,
+    putOutcome_tags,
+    putOutcome_name,
+
+    -- * Destructuring the Response
+    PutOutcomeResponse (..),
+    newPutOutcomeResponse,
+
+    -- * Response Lenses
+    putOutcomeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutOutcome' smart constructor.
+data PutOutcome = PutOutcome'
+  { -- | The outcome description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A collection of key and value pairs.
+    tags :: Prelude.Maybe [Tag],
+    -- | The name of the outcome.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutOutcome' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'putOutcome_description' - The outcome description.
+--
+-- 'tags', 'putOutcome_tags' - A collection of key and value pairs.
+--
+-- 'name', 'putOutcome_name' - The name of the outcome.
+newPutOutcome ::
+  -- | 'name'
+  Prelude.Text ->
+  PutOutcome
+newPutOutcome pName_ =
+  PutOutcome'
+    { description = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The outcome description.
+putOutcome_description :: Lens.Lens' PutOutcome (Prelude.Maybe Prelude.Text)
+putOutcome_description = Lens.lens (\PutOutcome' {description} -> description) (\s@PutOutcome' {} a -> s {description = a} :: PutOutcome)
+
+-- | A collection of key and value pairs.
+putOutcome_tags :: Lens.Lens' PutOutcome (Prelude.Maybe [Tag])
+putOutcome_tags = Lens.lens (\PutOutcome' {tags} -> tags) (\s@PutOutcome' {} a -> s {tags = a} :: PutOutcome) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the outcome.
+putOutcome_name :: Lens.Lens' PutOutcome Prelude.Text
+putOutcome_name = Lens.lens (\PutOutcome' {name} -> name) (\s@PutOutcome' {} a -> s {name = a} :: PutOutcome)
+
+instance Core.AWSRequest PutOutcome where
+  type AWSResponse PutOutcome = PutOutcomeResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutOutcomeResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutOutcome where
+  hashWithSalt _salt PutOutcome' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData PutOutcome where
+  rnf PutOutcome' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders PutOutcome where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.PutOutcome" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutOutcome where
+  toJSON PutOutcome' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath PutOutcome where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PutOutcome where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutOutcomeResponse' smart constructor.
+data PutOutcomeResponse = PutOutcomeResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutOutcomeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putOutcomeResponse_httpStatus' - The response's http status code.
+newPutOutcomeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutOutcomeResponse
+newPutOutcomeResponse pHttpStatus_ =
+  PutOutcomeResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+putOutcomeResponse_httpStatus :: Lens.Lens' PutOutcomeResponse Prelude.Int
+putOutcomeResponse_httpStatus = Lens.lens (\PutOutcomeResponse' {httpStatus} -> httpStatus) (\s@PutOutcomeResponse' {} a -> s {httpStatus = a} :: PutOutcomeResponse)
+
+instance Prelude.NFData PutOutcomeResponse where
+  rnf PutOutcomeResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/SendEvent.hs b/gen/Amazonka/FraudDetector/SendEvent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/SendEvent.hs
@@ -0,0 +1,261 @@
+{-# 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.FraudDetector.SendEvent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stores events in Amazon Fraud Detector without generating fraud
+-- predictions for those events. For example, you can use @SendEvent@ to
+-- upload a historical dataset, which you can then later use to train a
+-- model.
+module Amazonka.FraudDetector.SendEvent
+  ( -- * Creating a Request
+    SendEvent (..),
+    newSendEvent,
+
+    -- * Request Lenses
+    sendEvent_assignedLabel,
+    sendEvent_labelTimestamp,
+    sendEvent_eventId,
+    sendEvent_eventTypeName,
+    sendEvent_eventTimestamp,
+    sendEvent_eventVariables,
+    sendEvent_entities,
+
+    -- * Destructuring the Response
+    SendEventResponse (..),
+    newSendEventResponse,
+
+    -- * Response Lenses
+    sendEventResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSendEvent' smart constructor.
+data SendEvent = SendEvent'
+  { -- | The label to associate with the event. Required if specifying
+    -- @labelTimestamp@.
+    assignedLabel :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp associated with the label. Required if specifying
+    -- @assignedLabel@.
+    labelTimestamp :: Prelude.Maybe Prelude.Text,
+    -- | The event ID to upload.
+    eventId :: Prelude.Text,
+    -- | The event type name of the event.
+    eventTypeName :: Prelude.Text,
+    -- | The timestamp that defines when the event under evaluation occurred. The
+    -- timestamp must be specified using ISO 8601 standard in UTC.
+    eventTimestamp :: Prelude.Text,
+    -- | Names of the event type\'s variables you defined in Amazon Fraud
+    -- Detector to represent data elements and their corresponding values for
+    -- the event you are sending for evaluation.
+    eventVariables :: Prelude.HashMap Prelude.Text (Data.Sensitive Prelude.Text),
+    -- | An array of entities.
+    entities :: [Data.Sensitive Entity]
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SendEvent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assignedLabel', 'sendEvent_assignedLabel' - The label to associate with the event. Required if specifying
+-- @labelTimestamp@.
+--
+-- 'labelTimestamp', 'sendEvent_labelTimestamp' - The timestamp associated with the label. Required if specifying
+-- @assignedLabel@.
+--
+-- 'eventId', 'sendEvent_eventId' - The event ID to upload.
+--
+-- 'eventTypeName', 'sendEvent_eventTypeName' - The event type name of the event.
+--
+-- 'eventTimestamp', 'sendEvent_eventTimestamp' - The timestamp that defines when the event under evaluation occurred. The
+-- timestamp must be specified using ISO 8601 standard in UTC.
+--
+-- 'eventVariables', 'sendEvent_eventVariables' - Names of the event type\'s variables you defined in Amazon Fraud
+-- Detector to represent data elements and their corresponding values for
+-- the event you are sending for evaluation.
+--
+-- 'entities', 'sendEvent_entities' - An array of entities.
+newSendEvent ::
+  -- | 'eventId'
+  Prelude.Text ->
+  -- | 'eventTypeName'
+  Prelude.Text ->
+  -- | 'eventTimestamp'
+  Prelude.Text ->
+  SendEvent
+newSendEvent
+  pEventId_
+  pEventTypeName_
+  pEventTimestamp_ =
+    SendEvent'
+      { assignedLabel = Prelude.Nothing,
+        labelTimestamp = Prelude.Nothing,
+        eventId = pEventId_,
+        eventTypeName = pEventTypeName_,
+        eventTimestamp = pEventTimestamp_,
+        eventVariables = Prelude.mempty,
+        entities = Prelude.mempty
+      }
+
+-- | The label to associate with the event. Required if specifying
+-- @labelTimestamp@.
+sendEvent_assignedLabel :: Lens.Lens' SendEvent (Prelude.Maybe Prelude.Text)
+sendEvent_assignedLabel = Lens.lens (\SendEvent' {assignedLabel} -> assignedLabel) (\s@SendEvent' {} a -> s {assignedLabel = a} :: SendEvent)
+
+-- | The timestamp associated with the label. Required if specifying
+-- @assignedLabel@.
+sendEvent_labelTimestamp :: Lens.Lens' SendEvent (Prelude.Maybe Prelude.Text)
+sendEvent_labelTimestamp = Lens.lens (\SendEvent' {labelTimestamp} -> labelTimestamp) (\s@SendEvent' {} a -> s {labelTimestamp = a} :: SendEvent)
+
+-- | The event ID to upload.
+sendEvent_eventId :: Lens.Lens' SendEvent Prelude.Text
+sendEvent_eventId = Lens.lens (\SendEvent' {eventId} -> eventId) (\s@SendEvent' {} a -> s {eventId = a} :: SendEvent)
+
+-- | The event type name of the event.
+sendEvent_eventTypeName :: Lens.Lens' SendEvent Prelude.Text
+sendEvent_eventTypeName = Lens.lens (\SendEvent' {eventTypeName} -> eventTypeName) (\s@SendEvent' {} a -> s {eventTypeName = a} :: SendEvent)
+
+-- | The timestamp that defines when the event under evaluation occurred. The
+-- timestamp must be specified using ISO 8601 standard in UTC.
+sendEvent_eventTimestamp :: Lens.Lens' SendEvent Prelude.Text
+sendEvent_eventTimestamp = Lens.lens (\SendEvent' {eventTimestamp} -> eventTimestamp) (\s@SendEvent' {} a -> s {eventTimestamp = a} :: SendEvent)
+
+-- | Names of the event type\'s variables you defined in Amazon Fraud
+-- Detector to represent data elements and their corresponding values for
+-- the event you are sending for evaluation.
+sendEvent_eventVariables :: Lens.Lens' SendEvent (Prelude.HashMap Prelude.Text Prelude.Text)
+sendEvent_eventVariables = Lens.lens (\SendEvent' {eventVariables} -> eventVariables) (\s@SendEvent' {} a -> s {eventVariables = a} :: SendEvent) Prelude.. Lens.coerced
+
+-- | An array of entities.
+sendEvent_entities :: Lens.Lens' SendEvent [Entity]
+sendEvent_entities = Lens.lens (\SendEvent' {entities} -> entities) (\s@SendEvent' {} a -> s {entities = a} :: SendEvent) Prelude.. Lens.coerced
+
+instance Core.AWSRequest SendEvent where
+  type AWSResponse SendEvent = SendEventResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          SendEventResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable SendEvent where
+  hashWithSalt _salt SendEvent' {..} =
+    _salt
+      `Prelude.hashWithSalt` assignedLabel
+      `Prelude.hashWithSalt` labelTimestamp
+      `Prelude.hashWithSalt` eventId
+      `Prelude.hashWithSalt` eventTypeName
+      `Prelude.hashWithSalt` eventTimestamp
+      `Prelude.hashWithSalt` eventVariables
+      `Prelude.hashWithSalt` entities
+
+instance Prelude.NFData SendEvent where
+  rnf SendEvent' {..} =
+    Prelude.rnf assignedLabel
+      `Prelude.seq` Prelude.rnf labelTimestamp
+      `Prelude.seq` Prelude.rnf eventId
+      `Prelude.seq` Prelude.rnf eventTypeName
+      `Prelude.seq` Prelude.rnf eventTimestamp
+      `Prelude.seq` Prelude.rnf eventVariables
+      `Prelude.seq` Prelude.rnf entities
+
+instance Data.ToHeaders SendEvent where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.SendEvent" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SendEvent where
+  toJSON SendEvent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("assignedLabel" Data..=) Prelude.<$> assignedLabel,
+            ("labelTimestamp" Data..=)
+              Prelude.<$> labelTimestamp,
+            Prelude.Just ("eventId" Data..= eventId),
+            Prelude.Just ("eventTypeName" Data..= eventTypeName),
+            Prelude.Just
+              ("eventTimestamp" Data..= eventTimestamp),
+            Prelude.Just
+              ("eventVariables" Data..= eventVariables),
+            Prelude.Just ("entities" Data..= entities)
+          ]
+      )
+
+instance Data.ToPath SendEvent where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery SendEvent where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newSendEventResponse' smart constructor.
+data SendEventResponse = SendEventResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SendEventResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'sendEventResponse_httpStatus' - The response's http status code.
+newSendEventResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SendEventResponse
+newSendEventResponse pHttpStatus_ =
+  SendEventResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+sendEventResponse_httpStatus :: Lens.Lens' SendEventResponse Prelude.Int
+sendEventResponse_httpStatus = Lens.lens (\SendEventResponse' {httpStatus} -> httpStatus) (\s@SendEventResponse' {} a -> s {httpStatus = a} :: SendEventResponse)
+
+instance Prelude.NFData SendEventResponse where
+  rnf SendEventResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/TagResource.hs b/gen/Amazonka/FraudDetector/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/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.FraudDetector.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)
+--
+-- Assigns tags to a resource.
+module Amazonka.FraudDetector.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.FraudDetector.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 ARN.
+    resourceARN :: Prelude.Text,
+    -- | The tags to assign to the resource.
+    tags :: [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceARN', 'tagResource_resourceARN' - The resource ARN.
+--
+-- 'tags', 'tagResource_tags' - The tags to assign to the resource.
+newTagResource ::
+  -- | 'resourceARN'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceARN_ =
+  TagResource'
+    { resourceARN = pResourceARN_,
+      tags = Prelude.mempty
+    }
+
+-- | The resource ARN.
+tagResource_resourceARN :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceARN = Lens.lens (\TagResource' {resourceARN} -> resourceARN) (\s@TagResource' {} a -> s {resourceARN = a} :: TagResource)
+
+-- | The tags to assign to the resource.
+tagResource_tags :: Lens.Lens' TagResource [Tag]
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceARN
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceARN
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.TagResource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("resourceARN" Data..= resourceARN),
+            Prelude.Just ("tags" Data..= tags)
+          ]
+      )
+
+instance Data.ToPath TagResource where
+  toPath = Prelude.const "/"
+
+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/FraudDetector/Types.hs b/gen/Amazonka/FraudDetector/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types.hs
@@ -0,0 +1,817 @@
+{-# 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.FraudDetector.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.FraudDetector.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _ConflictException,
+    _InternalServerException,
+    _ResourceNotFoundException,
+    _ResourceUnavailableException,
+    _ThrottlingException,
+    _ValidationException,
+
+    -- * AsyncJobStatus
+    AsyncJobStatus (..),
+
+    -- * DataSource
+    DataSource (..),
+
+    -- * DataType
+    DataType (..),
+
+    -- * DetectorVersionStatus
+    DetectorVersionStatus (..),
+
+    -- * EventIngestion
+    EventIngestion (..),
+
+    -- * Language
+    Language (..),
+
+    -- * ModelEndpointStatus
+    ModelEndpointStatus (..),
+
+    -- * ModelInputDataFormat
+    ModelInputDataFormat (..),
+
+    -- * ModelOutputDataFormat
+    ModelOutputDataFormat (..),
+
+    -- * ModelSource
+    ModelSource (..),
+
+    -- * ModelTypeEnum
+    ModelTypeEnum (..),
+
+    -- * ModelVersionStatus
+    ModelVersionStatus (..),
+
+    -- * RuleExecutionMode
+    RuleExecutionMode (..),
+
+    -- * TrainingDataSourceEnum
+    TrainingDataSourceEnum (..),
+
+    -- * UnlabeledEventsTreatment
+    UnlabeledEventsTreatment (..),
+
+    -- * ATIMetricDataPoint
+    ATIMetricDataPoint (..),
+    newATIMetricDataPoint,
+    aTIMetricDataPoint_adr,
+    aTIMetricDataPoint_atodr,
+    aTIMetricDataPoint_cr,
+    aTIMetricDataPoint_threshold,
+
+    -- * ATIModelPerformance
+    ATIModelPerformance (..),
+    newATIModelPerformance,
+    aTIModelPerformance_asi,
+
+    -- * ATITrainingMetricsValue
+    ATITrainingMetricsValue (..),
+    newATITrainingMetricsValue,
+    aTITrainingMetricsValue_metricDataPoints,
+    aTITrainingMetricsValue_modelPerformance,
+
+    -- * AggregatedLogOddsMetric
+    AggregatedLogOddsMetric (..),
+    newAggregatedLogOddsMetric,
+    aggregatedLogOddsMetric_variableNames,
+    aggregatedLogOddsMetric_aggregatedVariablesImportance,
+
+    -- * AggregatedVariablesImpactExplanation
+    AggregatedVariablesImpactExplanation (..),
+    newAggregatedVariablesImpactExplanation,
+    aggregatedVariablesImpactExplanation_eventVariableNames,
+    aggregatedVariablesImpactExplanation_logOddsImpact,
+    aggregatedVariablesImpactExplanation_relativeImpact,
+
+    -- * AggregatedVariablesImportanceMetrics
+    AggregatedVariablesImportanceMetrics (..),
+    newAggregatedVariablesImportanceMetrics,
+    aggregatedVariablesImportanceMetrics_logOddsMetrics,
+
+    -- * BatchCreateVariableError
+    BatchCreateVariableError (..),
+    newBatchCreateVariableError,
+    batchCreateVariableError_code,
+    batchCreateVariableError_message,
+    batchCreateVariableError_name,
+
+    -- * BatchGetVariableError
+    BatchGetVariableError (..),
+    newBatchGetVariableError,
+    batchGetVariableError_code,
+    batchGetVariableError_message,
+    batchGetVariableError_name,
+
+    -- * BatchImport
+    BatchImport (..),
+    newBatchImport,
+    batchImport_arn,
+    batchImport_completionTime,
+    batchImport_eventTypeName,
+    batchImport_failedRecordsCount,
+    batchImport_failureReason,
+    batchImport_iamRoleArn,
+    batchImport_inputPath,
+    batchImport_jobId,
+    batchImport_outputPath,
+    batchImport_processedRecordsCount,
+    batchImport_startTime,
+    batchImport_status,
+    batchImport_totalRecordsCount,
+
+    -- * BatchPrediction
+    BatchPrediction (..),
+    newBatchPrediction,
+    batchPrediction_arn,
+    batchPrediction_completionTime,
+    batchPrediction_detectorName,
+    batchPrediction_detectorVersion,
+    batchPrediction_eventTypeName,
+    batchPrediction_failureReason,
+    batchPrediction_iamRoleArn,
+    batchPrediction_inputPath,
+    batchPrediction_jobId,
+    batchPrediction_lastHeartbeatTime,
+    batchPrediction_outputPath,
+    batchPrediction_processedRecordsCount,
+    batchPrediction_startTime,
+    batchPrediction_status,
+    batchPrediction_totalRecordsCount,
+
+    -- * DataValidationMetrics
+    DataValidationMetrics (..),
+    newDataValidationMetrics,
+    dataValidationMetrics_fieldLevelMessages,
+    dataValidationMetrics_fileLevelMessages,
+
+    -- * Detector
+    Detector (..),
+    newDetector,
+    detector_arn,
+    detector_createdTime,
+    detector_description,
+    detector_detectorId,
+    detector_eventTypeName,
+    detector_lastUpdatedTime,
+
+    -- * DetectorVersionSummary
+    DetectorVersionSummary (..),
+    newDetectorVersionSummary,
+    detectorVersionSummary_description,
+    detectorVersionSummary_detectorVersionId,
+    detectorVersionSummary_lastUpdatedTime,
+    detectorVersionSummary_status,
+
+    -- * Entity
+    Entity (..),
+    newEntity,
+    entity_entityType,
+    entity_entityId,
+
+    -- * EntityType
+    EntityType (..),
+    newEntityType,
+    entityType_arn,
+    entityType_createdTime,
+    entityType_description,
+    entityType_lastUpdatedTime,
+    entityType_name,
+
+    -- * EvaluatedExternalModel
+    EvaluatedExternalModel (..),
+    newEvaluatedExternalModel,
+    evaluatedExternalModel_inputVariables,
+    evaluatedExternalModel_modelEndpoint,
+    evaluatedExternalModel_outputVariables,
+    evaluatedExternalModel_useEventVariables,
+
+    -- * EvaluatedModelVersion
+    EvaluatedModelVersion (..),
+    newEvaluatedModelVersion,
+    evaluatedModelVersion_evaluations,
+    evaluatedModelVersion_modelId,
+    evaluatedModelVersion_modelType,
+    evaluatedModelVersion_modelVersion,
+
+    -- * EvaluatedRule
+    EvaluatedRule (..),
+    newEvaluatedRule,
+    evaluatedRule_evaluated,
+    evaluatedRule_expression,
+    evaluatedRule_expressionWithValues,
+    evaluatedRule_matched,
+    evaluatedRule_outcomes,
+    evaluatedRule_ruleId,
+    evaluatedRule_ruleVersion,
+
+    -- * Event
+    Event (..),
+    newEvent,
+    event_currentLabel,
+    event_entities,
+    event_eventId,
+    event_eventTimestamp,
+    event_eventTypeName,
+    event_eventVariables,
+    event_labelTimestamp,
+
+    -- * EventPredictionSummary
+    EventPredictionSummary (..),
+    newEventPredictionSummary,
+    eventPredictionSummary_detectorId,
+    eventPredictionSummary_detectorVersionId,
+    eventPredictionSummary_eventId,
+    eventPredictionSummary_eventTimestamp,
+    eventPredictionSummary_eventTypeName,
+    eventPredictionSummary_predictionTimestamp,
+
+    -- * EventType
+    EventType (..),
+    newEventType,
+    eventType_arn,
+    eventType_createdTime,
+    eventType_description,
+    eventType_entityTypes,
+    eventType_eventIngestion,
+    eventType_eventVariables,
+    eventType_ingestedEventStatistics,
+    eventType_labels,
+    eventType_lastUpdatedTime,
+    eventType_name,
+
+    -- * EventVariableSummary
+    EventVariableSummary (..),
+    newEventVariableSummary,
+    eventVariableSummary_name,
+    eventVariableSummary_source,
+    eventVariableSummary_value,
+
+    -- * ExternalEventsDetail
+    ExternalEventsDetail (..),
+    newExternalEventsDetail,
+    externalEventsDetail_dataLocation,
+    externalEventsDetail_dataAccessRoleArn,
+
+    -- * ExternalModel
+    ExternalModel (..),
+    newExternalModel,
+    externalModel_arn,
+    externalModel_createdTime,
+    externalModel_inputConfiguration,
+    externalModel_invokeModelEndpointRoleArn,
+    externalModel_lastUpdatedTime,
+    externalModel_modelEndpoint,
+    externalModel_modelEndpointStatus,
+    externalModel_modelSource,
+    externalModel_outputConfiguration,
+
+    -- * ExternalModelOutputs
+    ExternalModelOutputs (..),
+    newExternalModelOutputs,
+    externalModelOutputs_externalModel,
+    externalModelOutputs_outputs,
+
+    -- * ExternalModelSummary
+    ExternalModelSummary (..),
+    newExternalModelSummary,
+    externalModelSummary_modelEndpoint,
+    externalModelSummary_modelSource,
+
+    -- * FieldValidationMessage
+    FieldValidationMessage (..),
+    newFieldValidationMessage,
+    fieldValidationMessage_content,
+    fieldValidationMessage_fieldName,
+    fieldValidationMessage_identifier,
+    fieldValidationMessage_title,
+    fieldValidationMessage_type,
+
+    -- * FileValidationMessage
+    FileValidationMessage (..),
+    newFileValidationMessage,
+    fileValidationMessage_content,
+    fileValidationMessage_title,
+    fileValidationMessage_type,
+
+    -- * FilterCondition
+    FilterCondition (..),
+    newFilterCondition,
+    filterCondition_value,
+
+    -- * IngestedEventStatistics
+    IngestedEventStatistics (..),
+    newIngestedEventStatistics,
+    ingestedEventStatistics_eventDataSizeInBytes,
+    ingestedEventStatistics_lastUpdatedTime,
+    ingestedEventStatistics_leastRecentEvent,
+    ingestedEventStatistics_mostRecentEvent,
+    ingestedEventStatistics_numberOfEvents,
+
+    -- * IngestedEventsDetail
+    IngestedEventsDetail (..),
+    newIngestedEventsDetail,
+    ingestedEventsDetail_ingestedEventsTimeWindow,
+
+    -- * IngestedEventsTimeWindow
+    IngestedEventsTimeWindow (..),
+    newIngestedEventsTimeWindow,
+    ingestedEventsTimeWindow_startTime,
+    ingestedEventsTimeWindow_endTime,
+
+    -- * KMSKey
+    KMSKey (..),
+    newKMSKey,
+    kmsKey_kmsEncryptionKeyArn,
+
+    -- * Label
+    Label (..),
+    newLabel,
+    label_arn,
+    label_createdTime,
+    label_description,
+    label_lastUpdatedTime,
+    label_name,
+
+    -- * LabelSchema
+    LabelSchema (..),
+    newLabelSchema,
+    labelSchema_labelMapper,
+    labelSchema_unlabeledEventsTreatment,
+
+    -- * LogOddsMetric
+    LogOddsMetric (..),
+    newLogOddsMetric,
+    logOddsMetric_variableName,
+    logOddsMetric_variableType,
+    logOddsMetric_variableImportance,
+
+    -- * MetricDataPoint
+    MetricDataPoint (..),
+    newMetricDataPoint,
+    metricDataPoint_fpr,
+    metricDataPoint_precision,
+    metricDataPoint_threshold,
+    metricDataPoint_tpr,
+
+    -- * Model
+    Model (..),
+    newModel,
+    model_arn,
+    model_createdTime,
+    model_description,
+    model_eventTypeName,
+    model_lastUpdatedTime,
+    model_modelId,
+    model_modelType,
+
+    -- * ModelEndpointDataBlob
+    ModelEndpointDataBlob (..),
+    newModelEndpointDataBlob,
+    modelEndpointDataBlob_byteBuffer,
+    modelEndpointDataBlob_contentType,
+
+    -- * ModelInputConfiguration
+    ModelInputConfiguration (..),
+    newModelInputConfiguration,
+    modelInputConfiguration_csvInputTemplate,
+    modelInputConfiguration_eventTypeName,
+    modelInputConfiguration_format,
+    modelInputConfiguration_jsonInputTemplate,
+    modelInputConfiguration_useEventVariables,
+
+    -- * ModelOutputConfiguration
+    ModelOutputConfiguration (..),
+    newModelOutputConfiguration,
+    modelOutputConfiguration_csvIndexToVariableMap,
+    modelOutputConfiguration_jsonKeyToVariableMap,
+    modelOutputConfiguration_format,
+
+    -- * ModelScores
+    ModelScores (..),
+    newModelScores,
+    modelScores_modelVersion,
+    modelScores_scores,
+
+    -- * ModelVersion
+    ModelVersion (..),
+    newModelVersion,
+    modelVersion_arn,
+    modelVersion_modelId,
+    modelVersion_modelType,
+    modelVersion_modelVersionNumber,
+
+    -- * ModelVersionDetail
+    ModelVersionDetail (..),
+    newModelVersionDetail,
+    modelVersionDetail_arn,
+    modelVersionDetail_createdTime,
+    modelVersionDetail_externalEventsDetail,
+    modelVersionDetail_ingestedEventsDetail,
+    modelVersionDetail_lastUpdatedTime,
+    modelVersionDetail_modelId,
+    modelVersionDetail_modelType,
+    modelVersionDetail_modelVersionNumber,
+    modelVersionDetail_status,
+    modelVersionDetail_trainingDataSchema,
+    modelVersionDetail_trainingDataSource,
+    modelVersionDetail_trainingResult,
+    modelVersionDetail_trainingResultV2,
+
+    -- * ModelVersionEvaluation
+    ModelVersionEvaluation (..),
+    newModelVersionEvaluation,
+    modelVersionEvaluation_evaluationScore,
+    modelVersionEvaluation_outputVariableName,
+    modelVersionEvaluation_predictionExplanations,
+
+    -- * OFIMetricDataPoint
+    OFIMetricDataPoint (..),
+    newOFIMetricDataPoint,
+    oFIMetricDataPoint_fpr,
+    oFIMetricDataPoint_precision,
+    oFIMetricDataPoint_threshold,
+    oFIMetricDataPoint_tpr,
+
+    -- * OFIModelPerformance
+    OFIModelPerformance (..),
+    newOFIModelPerformance,
+    oFIModelPerformance_auc,
+
+    -- * OFITrainingMetricsValue
+    OFITrainingMetricsValue (..),
+    newOFITrainingMetricsValue,
+    oFITrainingMetricsValue_metricDataPoints,
+    oFITrainingMetricsValue_modelPerformance,
+
+    -- * Outcome
+    Outcome (..),
+    newOutcome,
+    outcome_arn,
+    outcome_createdTime,
+    outcome_description,
+    outcome_lastUpdatedTime,
+    outcome_name,
+
+    -- * PredictionExplanations
+    PredictionExplanations (..),
+    newPredictionExplanations,
+    predictionExplanations_aggregatedVariablesImpactExplanations,
+    predictionExplanations_variableImpactExplanations,
+
+    -- * PredictionTimeRange
+    PredictionTimeRange (..),
+    newPredictionTimeRange,
+    predictionTimeRange_startTime,
+    predictionTimeRange_endTime,
+
+    -- * Rule
+    Rule (..),
+    newRule,
+    rule_detectorId,
+    rule_ruleId,
+    rule_ruleVersion,
+
+    -- * RuleDetail
+    RuleDetail (..),
+    newRuleDetail,
+    ruleDetail_arn,
+    ruleDetail_createdTime,
+    ruleDetail_description,
+    ruleDetail_detectorId,
+    ruleDetail_expression,
+    ruleDetail_language,
+    ruleDetail_lastUpdatedTime,
+    ruleDetail_outcomes,
+    ruleDetail_ruleId,
+    ruleDetail_ruleVersion,
+
+    -- * RuleResult
+    RuleResult (..),
+    newRuleResult,
+    ruleResult_outcomes,
+    ruleResult_ruleId,
+
+    -- * TFIMetricDataPoint
+    TFIMetricDataPoint (..),
+    newTFIMetricDataPoint,
+    tFIMetricDataPoint_fpr,
+    tFIMetricDataPoint_precision,
+    tFIMetricDataPoint_threshold,
+    tFIMetricDataPoint_tpr,
+
+    -- * TFIModelPerformance
+    TFIModelPerformance (..),
+    newTFIModelPerformance,
+    tFIModelPerformance_auc,
+
+    -- * TFITrainingMetricsValue
+    TFITrainingMetricsValue (..),
+    newTFITrainingMetricsValue,
+    tFITrainingMetricsValue_metricDataPoints,
+    tFITrainingMetricsValue_modelPerformance,
+
+    -- * Tag
+    Tag (..),
+    newTag,
+    tag_key,
+    tag_value,
+
+    -- * TrainingDataSchema
+    TrainingDataSchema (..),
+    newTrainingDataSchema,
+    trainingDataSchema_labelSchema,
+    trainingDataSchema_modelVariables,
+
+    -- * TrainingMetrics
+    TrainingMetrics (..),
+    newTrainingMetrics,
+    trainingMetrics_auc,
+    trainingMetrics_metricDataPoints,
+
+    -- * TrainingMetricsV2
+    TrainingMetricsV2 (..),
+    newTrainingMetricsV2,
+    trainingMetricsV2_ati,
+    trainingMetricsV2_ofi,
+    trainingMetricsV2_tfi,
+
+    -- * TrainingResult
+    TrainingResult (..),
+    newTrainingResult,
+    trainingResult_dataValidationMetrics,
+    trainingResult_trainingMetrics,
+    trainingResult_variableImportanceMetrics,
+
+    -- * TrainingResultV2
+    TrainingResultV2 (..),
+    newTrainingResultV2,
+    trainingResultV2_aggregatedVariablesImportanceMetrics,
+    trainingResultV2_dataValidationMetrics,
+    trainingResultV2_trainingMetricsV2,
+    trainingResultV2_variableImportanceMetrics,
+
+    -- * Variable
+    Variable (..),
+    newVariable,
+    variable_arn,
+    variable_createdTime,
+    variable_dataSource,
+    variable_dataType,
+    variable_defaultValue,
+    variable_description,
+    variable_lastUpdatedTime,
+    variable_name,
+    variable_variableType,
+
+    -- * VariableEntry
+    VariableEntry (..),
+    newVariableEntry,
+    variableEntry_dataSource,
+    variableEntry_dataType,
+    variableEntry_defaultValue,
+    variableEntry_description,
+    variableEntry_name,
+    variableEntry_variableType,
+
+    -- * VariableImpactExplanation
+    VariableImpactExplanation (..),
+    newVariableImpactExplanation,
+    variableImpactExplanation_eventVariableName,
+    variableImpactExplanation_logOddsImpact,
+    variableImpactExplanation_relativeImpact,
+
+    -- * VariableImportanceMetrics
+    VariableImportanceMetrics (..),
+    newVariableImportanceMetrics,
+    variableImportanceMetrics_logOddsMetrics,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.FraudDetector.Types.ATIMetricDataPoint
+import Amazonka.FraudDetector.Types.ATIModelPerformance
+import Amazonka.FraudDetector.Types.ATITrainingMetricsValue
+import Amazonka.FraudDetector.Types.AggregatedLogOddsMetric
+import Amazonka.FraudDetector.Types.AggregatedVariablesImpactExplanation
+import Amazonka.FraudDetector.Types.AggregatedVariablesImportanceMetrics
+import Amazonka.FraudDetector.Types.AsyncJobStatus
+import Amazonka.FraudDetector.Types.BatchCreateVariableError
+import Amazonka.FraudDetector.Types.BatchGetVariableError
+import Amazonka.FraudDetector.Types.BatchImport
+import Amazonka.FraudDetector.Types.BatchPrediction
+import Amazonka.FraudDetector.Types.DataSource
+import Amazonka.FraudDetector.Types.DataType
+import Amazonka.FraudDetector.Types.DataValidationMetrics
+import Amazonka.FraudDetector.Types.Detector
+import Amazonka.FraudDetector.Types.DetectorVersionStatus
+import Amazonka.FraudDetector.Types.DetectorVersionSummary
+import Amazonka.FraudDetector.Types.Entity
+import Amazonka.FraudDetector.Types.EntityType
+import Amazonka.FraudDetector.Types.EvaluatedExternalModel
+import Amazonka.FraudDetector.Types.EvaluatedModelVersion
+import Amazonka.FraudDetector.Types.EvaluatedRule
+import Amazonka.FraudDetector.Types.Event
+import Amazonka.FraudDetector.Types.EventIngestion
+import Amazonka.FraudDetector.Types.EventPredictionSummary
+import Amazonka.FraudDetector.Types.EventType
+import Amazonka.FraudDetector.Types.EventVariableSummary
+import Amazonka.FraudDetector.Types.ExternalEventsDetail
+import Amazonka.FraudDetector.Types.ExternalModel
+import Amazonka.FraudDetector.Types.ExternalModelOutputs
+import Amazonka.FraudDetector.Types.ExternalModelSummary
+import Amazonka.FraudDetector.Types.FieldValidationMessage
+import Amazonka.FraudDetector.Types.FileValidationMessage
+import Amazonka.FraudDetector.Types.FilterCondition
+import Amazonka.FraudDetector.Types.IngestedEventStatistics
+import Amazonka.FraudDetector.Types.IngestedEventsDetail
+import Amazonka.FraudDetector.Types.IngestedEventsTimeWindow
+import Amazonka.FraudDetector.Types.KMSKey
+import Amazonka.FraudDetector.Types.Label
+import Amazonka.FraudDetector.Types.LabelSchema
+import Amazonka.FraudDetector.Types.Language
+import Amazonka.FraudDetector.Types.LogOddsMetric
+import Amazonka.FraudDetector.Types.MetricDataPoint
+import Amazonka.FraudDetector.Types.Model
+import Amazonka.FraudDetector.Types.ModelEndpointDataBlob
+import Amazonka.FraudDetector.Types.ModelEndpointStatus
+import Amazonka.FraudDetector.Types.ModelInputConfiguration
+import Amazonka.FraudDetector.Types.ModelInputDataFormat
+import Amazonka.FraudDetector.Types.ModelOutputConfiguration
+import Amazonka.FraudDetector.Types.ModelOutputDataFormat
+import Amazonka.FraudDetector.Types.ModelScores
+import Amazonka.FraudDetector.Types.ModelSource
+import Amazonka.FraudDetector.Types.ModelTypeEnum
+import Amazonka.FraudDetector.Types.ModelVersion
+import Amazonka.FraudDetector.Types.ModelVersionDetail
+import Amazonka.FraudDetector.Types.ModelVersionEvaluation
+import Amazonka.FraudDetector.Types.ModelVersionStatus
+import Amazonka.FraudDetector.Types.OFIMetricDataPoint
+import Amazonka.FraudDetector.Types.OFIModelPerformance
+import Amazonka.FraudDetector.Types.OFITrainingMetricsValue
+import Amazonka.FraudDetector.Types.Outcome
+import Amazonka.FraudDetector.Types.PredictionExplanations
+import Amazonka.FraudDetector.Types.PredictionTimeRange
+import Amazonka.FraudDetector.Types.Rule
+import Amazonka.FraudDetector.Types.RuleDetail
+import Amazonka.FraudDetector.Types.RuleExecutionMode
+import Amazonka.FraudDetector.Types.RuleResult
+import Amazonka.FraudDetector.Types.TFIMetricDataPoint
+import Amazonka.FraudDetector.Types.TFIModelPerformance
+import Amazonka.FraudDetector.Types.TFITrainingMetricsValue
+import Amazonka.FraudDetector.Types.Tag
+import Amazonka.FraudDetector.Types.TrainingDataSchema
+import Amazonka.FraudDetector.Types.TrainingDataSourceEnum
+import Amazonka.FraudDetector.Types.TrainingMetrics
+import Amazonka.FraudDetector.Types.TrainingMetricsV2
+import Amazonka.FraudDetector.Types.TrainingResult
+import Amazonka.FraudDetector.Types.TrainingResultV2
+import Amazonka.FraudDetector.Types.UnlabeledEventsTreatment
+import Amazonka.FraudDetector.Types.Variable
+import Amazonka.FraudDetector.Types.VariableEntry
+import Amazonka.FraudDetector.Types.VariableImpactExplanation
+import Amazonka.FraudDetector.Types.VariableImportanceMetrics
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2019-11-15@ of the Amazon Fraud Detector SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "FraudDetector",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "frauddetector",
+      Core.signingName = "frauddetector",
+      Core.version = "2019-11-15",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "FraudDetector",
+      Core.retry = retry
+    }
+  where
+    retry =
+      Core.Exponential
+        { Core.base = 5.0e-2,
+          Core.growth = 2,
+          Core.attempts = 5,
+          Core.check = check
+        }
+    check e
+      | Lens.has (Core.hasStatus 502) e =
+          Prelude.Just "bad_gateway"
+      | Lens.has (Core.hasStatus 504) e =
+          Prelude.Just "gateway_timeout"
+      | Lens.has (Core.hasStatus 500) e =
+          Prelude.Just "general_server_error"
+      | Lens.has (Core.hasStatus 509) e =
+          Prelude.Just "limit_exceeded"
+      | Lens.has
+          ( Core.hasCode "RequestThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "request_throttled_exception"
+      | Lens.has (Core.hasStatus 503) e =
+          Prelude.Just "service_unavailable"
+      | Lens.has
+          ( Core.hasCode "ThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttled_exception"
+      | Lens.has
+          ( Core.hasCode "Throttling"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling"
+      | Lens.has
+          ( Core.hasCode "ThrottlingException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling_exception"
+      | Lens.has
+          ( Core.hasCode
+              "ProvisionedThroughputExceededException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throughput_exceeded"
+      | Lens.has (Core.hasStatus 429) e =
+          Prelude.Just "too_many_requests"
+      | Prelude.otherwise = Prelude.Nothing
+
+-- | An exception indicating Amazon Fraud Detector does not have the needed
+-- permissions. This can occur if you submit a request, such as
+-- @PutExternalModel@, that specifies a role that is not in your account.
+_AccessDeniedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccessDeniedException =
+  Core._MatchServiceError
+    defaultService
+    "AccessDeniedException"
+
+-- | An exception indicating there was a conflict during a delete operation.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+
+-- | An exception indicating an internal server error.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+
+-- | An exception indicating the specified resource was not found.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+
+-- | An exception indicating that the attached customer-owned (external)
+-- model threw an exception when Amazon Fraud Detector invoked the model.
+_ResourceUnavailableException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceUnavailableException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceUnavailableException"
+
+-- | An exception indicating a throttling error.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+
+-- | An exception indicating a specified value is not allowed.
+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ValidationException =
+  Core._MatchServiceError
+    defaultService
+    "ValidationException"
diff --git a/gen/Amazonka/FraudDetector/Types/ATIMetricDataPoint.hs b/gen/Amazonka/FraudDetector/Types/ATIMetricDataPoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/ATIMetricDataPoint.hs
@@ -0,0 +1,145 @@
+{-# 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.FraudDetector.Types.ATIMetricDataPoint
+-- Copyright   : (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.FraudDetector.Types.ATIMetricDataPoint 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 Account Takeover Insights (ATI) model performance metrics data
+-- points.
+--
+-- /See:/ 'newATIMetricDataPoint' smart constructor.
+data ATIMetricDataPoint = ATIMetricDataPoint'
+  { -- | The anomaly discovery rate. This metric quantifies the percentage of
+    -- anomalies that can be detected by the model at the selected score
+    -- threshold. A lower score threshold increases the percentage of anomalies
+    -- captured by the model, but would also require challenging a larger
+    -- percentage of login events, leading to a higher customer friction.
+    adr :: Prelude.Maybe Prelude.Double,
+    -- | The account takeover discovery rate. This metric quantifies the
+    -- percentage of account compromise events that can be detected by the
+    -- model at the selected score threshold. This metric is only available if
+    -- 50 or more entities with at-least one labeled account takeover event is
+    -- present in the ingested dataset.
+    atodr :: Prelude.Maybe Prelude.Double,
+    -- | The challenge rate. This indicates the percentage of login events that
+    -- the model recommends to challenge such as one-time password,
+    -- multi-factor authentication, and investigations.
+    cr :: Prelude.Maybe Prelude.Double,
+    -- | The model\'s threshold that specifies an acceptable fraud capture rate.
+    -- For example, a threshold of 500 means any model score 500 or above is
+    -- labeled as fraud.
+    threshold :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ATIMetricDataPoint' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'adr', 'aTIMetricDataPoint_adr' - The anomaly discovery rate. This metric quantifies the percentage of
+-- anomalies that can be detected by the model at the selected score
+-- threshold. A lower score threshold increases the percentage of anomalies
+-- captured by the model, but would also require challenging a larger
+-- percentage of login events, leading to a higher customer friction.
+--
+-- 'atodr', 'aTIMetricDataPoint_atodr' - The account takeover discovery rate. This metric quantifies the
+-- percentage of account compromise events that can be detected by the
+-- model at the selected score threshold. This metric is only available if
+-- 50 or more entities with at-least one labeled account takeover event is
+-- present in the ingested dataset.
+--
+-- 'cr', 'aTIMetricDataPoint_cr' - The challenge rate. This indicates the percentage of login events that
+-- the model recommends to challenge such as one-time password,
+-- multi-factor authentication, and investigations.
+--
+-- 'threshold', 'aTIMetricDataPoint_threshold' - The model\'s threshold that specifies an acceptable fraud capture rate.
+-- For example, a threshold of 500 means any model score 500 or above is
+-- labeled as fraud.
+newATIMetricDataPoint ::
+  ATIMetricDataPoint
+newATIMetricDataPoint =
+  ATIMetricDataPoint'
+    { adr = Prelude.Nothing,
+      atodr = Prelude.Nothing,
+      cr = Prelude.Nothing,
+      threshold = Prelude.Nothing
+    }
+
+-- | The anomaly discovery rate. This metric quantifies the percentage of
+-- anomalies that can be detected by the model at the selected score
+-- threshold. A lower score threshold increases the percentage of anomalies
+-- captured by the model, but would also require challenging a larger
+-- percentage of login events, leading to a higher customer friction.
+aTIMetricDataPoint_adr :: Lens.Lens' ATIMetricDataPoint (Prelude.Maybe Prelude.Double)
+aTIMetricDataPoint_adr = Lens.lens (\ATIMetricDataPoint' {adr} -> adr) (\s@ATIMetricDataPoint' {} a -> s {adr = a} :: ATIMetricDataPoint)
+
+-- | The account takeover discovery rate. This metric quantifies the
+-- percentage of account compromise events that can be detected by the
+-- model at the selected score threshold. This metric is only available if
+-- 50 or more entities with at-least one labeled account takeover event is
+-- present in the ingested dataset.
+aTIMetricDataPoint_atodr :: Lens.Lens' ATIMetricDataPoint (Prelude.Maybe Prelude.Double)
+aTIMetricDataPoint_atodr = Lens.lens (\ATIMetricDataPoint' {atodr} -> atodr) (\s@ATIMetricDataPoint' {} a -> s {atodr = a} :: ATIMetricDataPoint)
+
+-- | The challenge rate. This indicates the percentage of login events that
+-- the model recommends to challenge such as one-time password,
+-- multi-factor authentication, and investigations.
+aTIMetricDataPoint_cr :: Lens.Lens' ATIMetricDataPoint (Prelude.Maybe Prelude.Double)
+aTIMetricDataPoint_cr = Lens.lens (\ATIMetricDataPoint' {cr} -> cr) (\s@ATIMetricDataPoint' {} a -> s {cr = a} :: ATIMetricDataPoint)
+
+-- | The model\'s threshold that specifies an acceptable fraud capture rate.
+-- For example, a threshold of 500 means any model score 500 or above is
+-- labeled as fraud.
+aTIMetricDataPoint_threshold :: Lens.Lens' ATIMetricDataPoint (Prelude.Maybe Prelude.Double)
+aTIMetricDataPoint_threshold = Lens.lens (\ATIMetricDataPoint' {threshold} -> threshold) (\s@ATIMetricDataPoint' {} a -> s {threshold = a} :: ATIMetricDataPoint)
+
+instance Data.FromJSON ATIMetricDataPoint where
+  parseJSON =
+    Data.withObject
+      "ATIMetricDataPoint"
+      ( \x ->
+          ATIMetricDataPoint'
+            Prelude.<$> (x Data..:? "adr")
+            Prelude.<*> (x Data..:? "atodr")
+            Prelude.<*> (x Data..:? "cr")
+            Prelude.<*> (x Data..:? "threshold")
+      )
+
+instance Prelude.Hashable ATIMetricDataPoint where
+  hashWithSalt _salt ATIMetricDataPoint' {..} =
+    _salt
+      `Prelude.hashWithSalt` adr
+      `Prelude.hashWithSalt` atodr
+      `Prelude.hashWithSalt` cr
+      `Prelude.hashWithSalt` threshold
+
+instance Prelude.NFData ATIMetricDataPoint where
+  rnf ATIMetricDataPoint' {..} =
+    Prelude.rnf adr
+      `Prelude.seq` Prelude.rnf atodr
+      `Prelude.seq` Prelude.rnf cr
+      `Prelude.seq` Prelude.rnf threshold
diff --git a/gen/Amazonka/FraudDetector/Types/ATIModelPerformance.hs b/gen/Amazonka/FraudDetector/Types/ATIModelPerformance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/ATIModelPerformance.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.FraudDetector.Types.ATIModelPerformance
+-- Copyright   : (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.FraudDetector.Types.ATIModelPerformance 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 Account Takeover Insights (ATI) model performance score.
+--
+-- /See:/ 'newATIModelPerformance' smart constructor.
+data ATIModelPerformance = ATIModelPerformance'
+  { -- | The anomaly separation index (ASI) score. This metric summarizes the
+    -- overall ability of the model to separate anomalous activities from the
+    -- normal behavior. Depending on the business, a large fraction of these
+    -- anomalous activities can be malicious and correspond to the account
+    -- takeover attacks. A model with no separability power will have the
+    -- lowest possible ASI score of 0.5, whereas the a model with a high
+    -- separability power will have the highest possible ASI score of 1.0
+    asi :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ATIModelPerformance' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'asi', 'aTIModelPerformance_asi' - The anomaly separation index (ASI) score. This metric summarizes the
+-- overall ability of the model to separate anomalous activities from the
+-- normal behavior. Depending on the business, a large fraction of these
+-- anomalous activities can be malicious and correspond to the account
+-- takeover attacks. A model with no separability power will have the
+-- lowest possible ASI score of 0.5, whereas the a model with a high
+-- separability power will have the highest possible ASI score of 1.0
+newATIModelPerformance ::
+  ATIModelPerformance
+newATIModelPerformance =
+  ATIModelPerformance' {asi = Prelude.Nothing}
+
+-- | The anomaly separation index (ASI) score. This metric summarizes the
+-- overall ability of the model to separate anomalous activities from the
+-- normal behavior. Depending on the business, a large fraction of these
+-- anomalous activities can be malicious and correspond to the account
+-- takeover attacks. A model with no separability power will have the
+-- lowest possible ASI score of 0.5, whereas the a model with a high
+-- separability power will have the highest possible ASI score of 1.0
+aTIModelPerformance_asi :: Lens.Lens' ATIModelPerformance (Prelude.Maybe Prelude.Double)
+aTIModelPerformance_asi = Lens.lens (\ATIModelPerformance' {asi} -> asi) (\s@ATIModelPerformance' {} a -> s {asi = a} :: ATIModelPerformance)
+
+instance Data.FromJSON ATIModelPerformance where
+  parseJSON =
+    Data.withObject
+      "ATIModelPerformance"
+      ( \x ->
+          ATIModelPerformance' Prelude.<$> (x Data..:? "asi")
+      )
+
+instance Prelude.Hashable ATIModelPerformance where
+  hashWithSalt _salt ATIModelPerformance' {..} =
+    _salt `Prelude.hashWithSalt` asi
+
+instance Prelude.NFData ATIModelPerformance where
+  rnf ATIModelPerformance' {..} = Prelude.rnf asi
diff --git a/gen/Amazonka/FraudDetector/Types/ATITrainingMetricsValue.hs b/gen/Amazonka/FraudDetector/Types/ATITrainingMetricsValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/ATITrainingMetricsValue.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.FraudDetector.Types.ATITrainingMetricsValue
+-- Copyright   : (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.FraudDetector.Types.ATITrainingMetricsValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.ATIMetricDataPoint
+import Amazonka.FraudDetector.Types.ATIModelPerformance
+import qualified Amazonka.Prelude as Prelude
+
+-- | The Account Takeover Insights (ATI) model training metric details.
+--
+-- /See:/ 'newATITrainingMetricsValue' smart constructor.
+data ATITrainingMetricsValue = ATITrainingMetricsValue'
+  { -- | The model\'s performance metrics data points.
+    metricDataPoints :: Prelude.Maybe [ATIMetricDataPoint],
+    -- | The model\'s overall performance scores.
+    modelPerformance :: Prelude.Maybe ATIModelPerformance
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ATITrainingMetricsValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'metricDataPoints', 'aTITrainingMetricsValue_metricDataPoints' - The model\'s performance metrics data points.
+--
+-- 'modelPerformance', 'aTITrainingMetricsValue_modelPerformance' - The model\'s overall performance scores.
+newATITrainingMetricsValue ::
+  ATITrainingMetricsValue
+newATITrainingMetricsValue =
+  ATITrainingMetricsValue'
+    { metricDataPoints =
+        Prelude.Nothing,
+      modelPerformance = Prelude.Nothing
+    }
+
+-- | The model\'s performance metrics data points.
+aTITrainingMetricsValue_metricDataPoints :: Lens.Lens' ATITrainingMetricsValue (Prelude.Maybe [ATIMetricDataPoint])
+aTITrainingMetricsValue_metricDataPoints = Lens.lens (\ATITrainingMetricsValue' {metricDataPoints} -> metricDataPoints) (\s@ATITrainingMetricsValue' {} a -> s {metricDataPoints = a} :: ATITrainingMetricsValue) Prelude.. Lens.mapping Lens.coerced
+
+-- | The model\'s overall performance scores.
+aTITrainingMetricsValue_modelPerformance :: Lens.Lens' ATITrainingMetricsValue (Prelude.Maybe ATIModelPerformance)
+aTITrainingMetricsValue_modelPerformance = Lens.lens (\ATITrainingMetricsValue' {modelPerformance} -> modelPerformance) (\s@ATITrainingMetricsValue' {} a -> s {modelPerformance = a} :: ATITrainingMetricsValue)
+
+instance Data.FromJSON ATITrainingMetricsValue where
+  parseJSON =
+    Data.withObject
+      "ATITrainingMetricsValue"
+      ( \x ->
+          ATITrainingMetricsValue'
+            Prelude.<$> ( x
+                            Data..:? "metricDataPoints"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "modelPerformance")
+      )
+
+instance Prelude.Hashable ATITrainingMetricsValue where
+  hashWithSalt _salt ATITrainingMetricsValue' {..} =
+    _salt
+      `Prelude.hashWithSalt` metricDataPoints
+      `Prelude.hashWithSalt` modelPerformance
+
+instance Prelude.NFData ATITrainingMetricsValue where
+  rnf ATITrainingMetricsValue' {..} =
+    Prelude.rnf metricDataPoints
+      `Prelude.seq` Prelude.rnf modelPerformance
diff --git a/gen/Amazonka/FraudDetector/Types/AggregatedLogOddsMetric.hs b/gen/Amazonka/FraudDetector/Types/AggregatedLogOddsMetric.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/AggregatedLogOddsMetric.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.FraudDetector.Types.AggregatedLogOddsMetric
+-- Copyright   : (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.FraudDetector.Types.AggregatedLogOddsMetric 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 log odds metric details.
+--
+-- Account Takeover Insights (ATI) model uses event variables from the
+-- login data you provide to continuously calculate a set of variables
+-- (aggregated variables) based on historical events. For example, your ATI
+-- model might calculate the number of times an user has logged in using
+-- the same IP address. In this case, event variables used to derive the
+-- aggregated variables are @IP address@ and @user@.
+--
+-- /See:/ 'newAggregatedLogOddsMetric' smart constructor.
+data AggregatedLogOddsMetric = AggregatedLogOddsMetric'
+  { -- | The names of all the variables.
+    variableNames :: [Prelude.Text],
+    -- | The relative importance of the variables in the list to the other event
+    -- variable.
+    aggregatedVariablesImportance :: Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AggregatedLogOddsMetric' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'variableNames', 'aggregatedLogOddsMetric_variableNames' - The names of all the variables.
+--
+-- 'aggregatedVariablesImportance', 'aggregatedLogOddsMetric_aggregatedVariablesImportance' - The relative importance of the variables in the list to the other event
+-- variable.
+newAggregatedLogOddsMetric ::
+  -- | 'aggregatedVariablesImportance'
+  Prelude.Double ->
+  AggregatedLogOddsMetric
+newAggregatedLogOddsMetric
+  pAggregatedVariablesImportance_ =
+    AggregatedLogOddsMetric'
+      { variableNames =
+          Prelude.mempty,
+        aggregatedVariablesImportance =
+          pAggregatedVariablesImportance_
+      }
+
+-- | The names of all the variables.
+aggregatedLogOddsMetric_variableNames :: Lens.Lens' AggregatedLogOddsMetric [Prelude.Text]
+aggregatedLogOddsMetric_variableNames = Lens.lens (\AggregatedLogOddsMetric' {variableNames} -> variableNames) (\s@AggregatedLogOddsMetric' {} a -> s {variableNames = a} :: AggregatedLogOddsMetric) Prelude.. Lens.coerced
+
+-- | The relative importance of the variables in the list to the other event
+-- variable.
+aggregatedLogOddsMetric_aggregatedVariablesImportance :: Lens.Lens' AggregatedLogOddsMetric Prelude.Double
+aggregatedLogOddsMetric_aggregatedVariablesImportance = Lens.lens (\AggregatedLogOddsMetric' {aggregatedVariablesImportance} -> aggregatedVariablesImportance) (\s@AggregatedLogOddsMetric' {} a -> s {aggregatedVariablesImportance = a} :: AggregatedLogOddsMetric)
+
+instance Data.FromJSON AggregatedLogOddsMetric where
+  parseJSON =
+    Data.withObject
+      "AggregatedLogOddsMetric"
+      ( \x ->
+          AggregatedLogOddsMetric'
+            Prelude.<$> (x Data..:? "variableNames" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "aggregatedVariablesImportance")
+      )
+
+instance Prelude.Hashable AggregatedLogOddsMetric where
+  hashWithSalt _salt AggregatedLogOddsMetric' {..} =
+    _salt
+      `Prelude.hashWithSalt` variableNames
+      `Prelude.hashWithSalt` aggregatedVariablesImportance
+
+instance Prelude.NFData AggregatedLogOddsMetric where
+  rnf AggregatedLogOddsMetric' {..} =
+    Prelude.rnf variableNames
+      `Prelude.seq` Prelude.rnf aggregatedVariablesImportance
diff --git a/gen/Amazonka/FraudDetector/Types/AggregatedVariablesImpactExplanation.hs b/gen/Amazonka/FraudDetector/Types/AggregatedVariablesImpactExplanation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/AggregatedVariablesImpactExplanation.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.FraudDetector.Types.AggregatedVariablesImpactExplanation
+-- Copyright   : (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.FraudDetector.Types.AggregatedVariablesImpactExplanation 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 details of the impact of aggregated variables on the prediction
+-- score.
+--
+-- Account Takeover Insights (ATI) model uses the login data you provide to
+-- continuously calculate a set of variables (aggregated variables) based
+-- on historical events. For example, the model might calculate the number
+-- of times an user has logged in using the same IP address. In this case,
+-- event variables used to derive the aggregated variables are @IP address@
+-- and @user@.
+--
+-- /See:/ 'newAggregatedVariablesImpactExplanation' smart constructor.
+data AggregatedVariablesImpactExplanation = AggregatedVariablesImpactExplanation'
+  { -- | The names of all the event variables that were used to derive the
+    -- aggregated variables.
+    eventVariableNames :: Prelude.Maybe [Prelude.Text],
+    -- | The raw, uninterpreted value represented as log-odds of the fraud. These
+    -- values are usually between -10 to +10, but range from -infinity to
+    -- +infinity.
+    --
+    -- -   A positive value indicates that the variables drove the risk score
+    --     up.
+    --
+    -- -   A negative value indicates that the variables drove the risk score
+    --     down.
+    logOddsImpact :: Prelude.Maybe Prelude.Double,
+    -- | The relative impact of the aggregated variables in terms of magnitude on
+    -- the prediction scores.
+    relativeImpact :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AggregatedVariablesImpactExplanation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eventVariableNames', 'aggregatedVariablesImpactExplanation_eventVariableNames' - The names of all the event variables that were used to derive the
+-- aggregated variables.
+--
+-- 'logOddsImpact', 'aggregatedVariablesImpactExplanation_logOddsImpact' - The raw, uninterpreted value represented as log-odds of the fraud. These
+-- values are usually between -10 to +10, but range from -infinity to
+-- +infinity.
+--
+-- -   A positive value indicates that the variables drove the risk score
+--     up.
+--
+-- -   A negative value indicates that the variables drove the risk score
+--     down.
+--
+-- 'relativeImpact', 'aggregatedVariablesImpactExplanation_relativeImpact' - The relative impact of the aggregated variables in terms of magnitude on
+-- the prediction scores.
+newAggregatedVariablesImpactExplanation ::
+  AggregatedVariablesImpactExplanation
+newAggregatedVariablesImpactExplanation =
+  AggregatedVariablesImpactExplanation'
+    { eventVariableNames =
+        Prelude.Nothing,
+      logOddsImpact = Prelude.Nothing,
+      relativeImpact = Prelude.Nothing
+    }
+
+-- | The names of all the event variables that were used to derive the
+-- aggregated variables.
+aggregatedVariablesImpactExplanation_eventVariableNames :: Lens.Lens' AggregatedVariablesImpactExplanation (Prelude.Maybe [Prelude.Text])
+aggregatedVariablesImpactExplanation_eventVariableNames = Lens.lens (\AggregatedVariablesImpactExplanation' {eventVariableNames} -> eventVariableNames) (\s@AggregatedVariablesImpactExplanation' {} a -> s {eventVariableNames = a} :: AggregatedVariablesImpactExplanation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The raw, uninterpreted value represented as log-odds of the fraud. These
+-- values are usually between -10 to +10, but range from -infinity to
+-- +infinity.
+--
+-- -   A positive value indicates that the variables drove the risk score
+--     up.
+--
+-- -   A negative value indicates that the variables drove the risk score
+--     down.
+aggregatedVariablesImpactExplanation_logOddsImpact :: Lens.Lens' AggregatedVariablesImpactExplanation (Prelude.Maybe Prelude.Double)
+aggregatedVariablesImpactExplanation_logOddsImpact = Lens.lens (\AggregatedVariablesImpactExplanation' {logOddsImpact} -> logOddsImpact) (\s@AggregatedVariablesImpactExplanation' {} a -> s {logOddsImpact = a} :: AggregatedVariablesImpactExplanation)
+
+-- | The relative impact of the aggregated variables in terms of magnitude on
+-- the prediction scores.
+aggregatedVariablesImpactExplanation_relativeImpact :: Lens.Lens' AggregatedVariablesImpactExplanation (Prelude.Maybe Prelude.Text)
+aggregatedVariablesImpactExplanation_relativeImpact = Lens.lens (\AggregatedVariablesImpactExplanation' {relativeImpact} -> relativeImpact) (\s@AggregatedVariablesImpactExplanation' {} a -> s {relativeImpact = a} :: AggregatedVariablesImpactExplanation)
+
+instance
+  Data.FromJSON
+    AggregatedVariablesImpactExplanation
+  where
+  parseJSON =
+    Data.withObject
+      "AggregatedVariablesImpactExplanation"
+      ( \x ->
+          AggregatedVariablesImpactExplanation'
+            Prelude.<$> ( x
+                            Data..:? "eventVariableNames"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "logOddsImpact")
+            Prelude.<*> (x Data..:? "relativeImpact")
+      )
+
+instance
+  Prelude.Hashable
+    AggregatedVariablesImpactExplanation
+  where
+  hashWithSalt
+    _salt
+    AggregatedVariablesImpactExplanation' {..} =
+      _salt
+        `Prelude.hashWithSalt` eventVariableNames
+        `Prelude.hashWithSalt` logOddsImpact
+        `Prelude.hashWithSalt` relativeImpact
+
+instance
+  Prelude.NFData
+    AggregatedVariablesImpactExplanation
+  where
+  rnf AggregatedVariablesImpactExplanation' {..} =
+    Prelude.rnf eventVariableNames
+      `Prelude.seq` Prelude.rnf logOddsImpact
+      `Prelude.seq` Prelude.rnf relativeImpact
diff --git a/gen/Amazonka/FraudDetector/Types/AggregatedVariablesImportanceMetrics.hs b/gen/Amazonka/FraudDetector/Types/AggregatedVariablesImportanceMetrics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/AggregatedVariablesImportanceMetrics.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.FraudDetector.Types.AggregatedVariablesImportanceMetrics
+-- Copyright   : (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.FraudDetector.Types.AggregatedVariablesImportanceMetrics where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.AggregatedLogOddsMetric
+import qualified Amazonka.Prelude as Prelude
+
+-- | The details of the relative importance of the aggregated variables.
+--
+-- Account Takeover Insights (ATI) model uses event variables from the
+-- login data you provide to continuously calculate a set of variables
+-- (aggregated variables) based on historical events. For example, your ATI
+-- model might calculate the number of times an user has logged in using
+-- the same IP address. In this case, event variables used to derive the
+-- aggregated variables are @IP address@ and @user@.
+--
+-- /See:/ 'newAggregatedVariablesImportanceMetrics' smart constructor.
+data AggregatedVariablesImportanceMetrics = AggregatedVariablesImportanceMetrics'
+  { -- | List of variables\' metrics.
+    logOddsMetrics :: Prelude.Maybe [AggregatedLogOddsMetric]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AggregatedVariablesImportanceMetrics' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logOddsMetrics', 'aggregatedVariablesImportanceMetrics_logOddsMetrics' - List of variables\' metrics.
+newAggregatedVariablesImportanceMetrics ::
+  AggregatedVariablesImportanceMetrics
+newAggregatedVariablesImportanceMetrics =
+  AggregatedVariablesImportanceMetrics'
+    { logOddsMetrics =
+        Prelude.Nothing
+    }
+
+-- | List of variables\' metrics.
+aggregatedVariablesImportanceMetrics_logOddsMetrics :: Lens.Lens' AggregatedVariablesImportanceMetrics (Prelude.Maybe [AggregatedLogOddsMetric])
+aggregatedVariablesImportanceMetrics_logOddsMetrics = Lens.lens (\AggregatedVariablesImportanceMetrics' {logOddsMetrics} -> logOddsMetrics) (\s@AggregatedVariablesImportanceMetrics' {} a -> s {logOddsMetrics = a} :: AggregatedVariablesImportanceMetrics) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Data.FromJSON
+    AggregatedVariablesImportanceMetrics
+  where
+  parseJSON =
+    Data.withObject
+      "AggregatedVariablesImportanceMetrics"
+      ( \x ->
+          AggregatedVariablesImportanceMetrics'
+            Prelude.<$> ( x
+                            Data..:? "logOddsMetrics"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance
+  Prelude.Hashable
+    AggregatedVariablesImportanceMetrics
+  where
+  hashWithSalt
+    _salt
+    AggregatedVariablesImportanceMetrics' {..} =
+      _salt `Prelude.hashWithSalt` logOddsMetrics
+
+instance
+  Prelude.NFData
+    AggregatedVariablesImportanceMetrics
+  where
+  rnf AggregatedVariablesImportanceMetrics' {..} =
+    Prelude.rnf logOddsMetrics
diff --git a/gen/Amazonka/FraudDetector/Types/AsyncJobStatus.hs b/gen/Amazonka/FraudDetector/Types/AsyncJobStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/AsyncJobStatus.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.Types.AsyncJobStatus
+-- Copyright   : (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.FraudDetector.Types.AsyncJobStatus
+  ( AsyncJobStatus
+      ( ..,
+        AsyncJobStatus_CANCELED,
+        AsyncJobStatus_CANCEL_IN_PROGRESS,
+        AsyncJobStatus_COMPLETE,
+        AsyncJobStatus_FAILED,
+        AsyncJobStatus_IN_PROGRESS,
+        AsyncJobStatus_IN_PROGRESS_INITIALIZING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AsyncJobStatus = AsyncJobStatus'
+  { fromAsyncJobStatus ::
+      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 AsyncJobStatus_CANCELED :: AsyncJobStatus
+pattern AsyncJobStatus_CANCELED = AsyncJobStatus' "CANCELED"
+
+pattern AsyncJobStatus_CANCEL_IN_PROGRESS :: AsyncJobStatus
+pattern AsyncJobStatus_CANCEL_IN_PROGRESS = AsyncJobStatus' "CANCEL_IN_PROGRESS"
+
+pattern AsyncJobStatus_COMPLETE :: AsyncJobStatus
+pattern AsyncJobStatus_COMPLETE = AsyncJobStatus' "COMPLETE"
+
+pattern AsyncJobStatus_FAILED :: AsyncJobStatus
+pattern AsyncJobStatus_FAILED = AsyncJobStatus' "FAILED"
+
+pattern AsyncJobStatus_IN_PROGRESS :: AsyncJobStatus
+pattern AsyncJobStatus_IN_PROGRESS = AsyncJobStatus' "IN_PROGRESS"
+
+pattern AsyncJobStatus_IN_PROGRESS_INITIALIZING :: AsyncJobStatus
+pattern AsyncJobStatus_IN_PROGRESS_INITIALIZING = AsyncJobStatus' "IN_PROGRESS_INITIALIZING"
+
+{-# COMPLETE
+  AsyncJobStatus_CANCELED,
+  AsyncJobStatus_CANCEL_IN_PROGRESS,
+  AsyncJobStatus_COMPLETE,
+  AsyncJobStatus_FAILED,
+  AsyncJobStatus_IN_PROGRESS,
+  AsyncJobStatus_IN_PROGRESS_INITIALIZING,
+  AsyncJobStatus'
+  #-}
diff --git a/gen/Amazonka/FraudDetector/Types/BatchCreateVariableError.hs b/gen/Amazonka/FraudDetector/Types/BatchCreateVariableError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/BatchCreateVariableError.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.FraudDetector.Types.BatchCreateVariableError
+-- Copyright   : (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.FraudDetector.Types.BatchCreateVariableError 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
+
+-- | Provides the error of the batch create variable API.
+--
+-- /See:/ 'newBatchCreateVariableError' smart constructor.
+data BatchCreateVariableError = BatchCreateVariableError'
+  { -- | The error code.
+    code :: Prelude.Maybe Prelude.Int,
+    -- | The error message.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The name.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchCreateVariableError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'batchCreateVariableError_code' - The error code.
+--
+-- 'message', 'batchCreateVariableError_message' - The error message.
+--
+-- 'name', 'batchCreateVariableError_name' - The name.
+newBatchCreateVariableError ::
+  BatchCreateVariableError
+newBatchCreateVariableError =
+  BatchCreateVariableError'
+    { code = Prelude.Nothing,
+      message = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The error code.
+batchCreateVariableError_code :: Lens.Lens' BatchCreateVariableError (Prelude.Maybe Prelude.Int)
+batchCreateVariableError_code = Lens.lens (\BatchCreateVariableError' {code} -> code) (\s@BatchCreateVariableError' {} a -> s {code = a} :: BatchCreateVariableError)
+
+-- | The error message.
+batchCreateVariableError_message :: Lens.Lens' BatchCreateVariableError (Prelude.Maybe Prelude.Text)
+batchCreateVariableError_message = Lens.lens (\BatchCreateVariableError' {message} -> message) (\s@BatchCreateVariableError' {} a -> s {message = a} :: BatchCreateVariableError)
+
+-- | The name.
+batchCreateVariableError_name :: Lens.Lens' BatchCreateVariableError (Prelude.Maybe Prelude.Text)
+batchCreateVariableError_name = Lens.lens (\BatchCreateVariableError' {name} -> name) (\s@BatchCreateVariableError' {} a -> s {name = a} :: BatchCreateVariableError)
+
+instance Data.FromJSON BatchCreateVariableError where
+  parseJSON =
+    Data.withObject
+      "BatchCreateVariableError"
+      ( \x ->
+          BatchCreateVariableError'
+            Prelude.<$> (x Data..:? "code")
+            Prelude.<*> (x Data..:? "message")
+            Prelude.<*> (x Data..:? "name")
+      )
+
+instance Prelude.Hashable BatchCreateVariableError where
+  hashWithSalt _salt BatchCreateVariableError' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData BatchCreateVariableError where
+  rnf BatchCreateVariableError' {..} =
+    Prelude.rnf code
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/FraudDetector/Types/BatchGetVariableError.hs b/gen/Amazonka/FraudDetector/Types/BatchGetVariableError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/BatchGetVariableError.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.FraudDetector.Types.BatchGetVariableError
+-- Copyright   : (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.FraudDetector.Types.BatchGetVariableError 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
+
+-- | Provides the error of the batch get variable API.
+--
+-- /See:/ 'newBatchGetVariableError' smart constructor.
+data BatchGetVariableError = BatchGetVariableError'
+  { -- | The error code.
+    code :: Prelude.Maybe Prelude.Int,
+    -- | The error message.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The error name.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchGetVariableError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'batchGetVariableError_code' - The error code.
+--
+-- 'message', 'batchGetVariableError_message' - The error message.
+--
+-- 'name', 'batchGetVariableError_name' - The error name.
+newBatchGetVariableError ::
+  BatchGetVariableError
+newBatchGetVariableError =
+  BatchGetVariableError'
+    { code = Prelude.Nothing,
+      message = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The error code.
+batchGetVariableError_code :: Lens.Lens' BatchGetVariableError (Prelude.Maybe Prelude.Int)
+batchGetVariableError_code = Lens.lens (\BatchGetVariableError' {code} -> code) (\s@BatchGetVariableError' {} a -> s {code = a} :: BatchGetVariableError)
+
+-- | The error message.
+batchGetVariableError_message :: Lens.Lens' BatchGetVariableError (Prelude.Maybe Prelude.Text)
+batchGetVariableError_message = Lens.lens (\BatchGetVariableError' {message} -> message) (\s@BatchGetVariableError' {} a -> s {message = a} :: BatchGetVariableError)
+
+-- | The error name.
+batchGetVariableError_name :: Lens.Lens' BatchGetVariableError (Prelude.Maybe Prelude.Text)
+batchGetVariableError_name = Lens.lens (\BatchGetVariableError' {name} -> name) (\s@BatchGetVariableError' {} a -> s {name = a} :: BatchGetVariableError)
+
+instance Data.FromJSON BatchGetVariableError where
+  parseJSON =
+    Data.withObject
+      "BatchGetVariableError"
+      ( \x ->
+          BatchGetVariableError'
+            Prelude.<$> (x Data..:? "code")
+            Prelude.<*> (x Data..:? "message")
+            Prelude.<*> (x Data..:? "name")
+      )
+
+instance Prelude.Hashable BatchGetVariableError where
+  hashWithSalt _salt BatchGetVariableError' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData BatchGetVariableError where
+  rnf BatchGetVariableError' {..} =
+    Prelude.rnf code
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/FraudDetector/Types/BatchImport.hs b/gen/Amazonka/FraudDetector/Types/BatchImport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/BatchImport.hs
@@ -0,0 +1,217 @@
+{-# 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.FraudDetector.Types.BatchImport
+-- Copyright   : (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.FraudDetector.Types.BatchImport where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.AsyncJobStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | The batch import job details.
+--
+-- /See:/ 'newBatchImport' smart constructor.
+data BatchImport = BatchImport'
+  { -- | The ARN of the batch import job.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Timestamp of when batch import job completed.
+    completionTime :: Prelude.Maybe Prelude.Text,
+    -- | The name of the event type.
+    eventTypeName :: Prelude.Maybe Prelude.Text,
+    -- | The number of records that failed to import.
+    failedRecordsCount :: Prelude.Maybe Prelude.Int,
+    -- | The reason batch import job failed.
+    failureReason :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the IAM role to use for this job request.
+    iamRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon S3 location of your data file for batch import.
+    inputPath :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the batch import job.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon S3 location of your output file.
+    outputPath :: Prelude.Maybe Prelude.Text,
+    -- | The number of records processed by batch import job.
+    processedRecordsCount :: Prelude.Maybe Prelude.Int,
+    -- | Timestamp of when the batch import job started.
+    startTime :: Prelude.Maybe Prelude.Text,
+    -- | The status of the batch import job.
+    status :: Prelude.Maybe AsyncJobStatus,
+    -- | The total number of records in the batch import job.
+    totalRecordsCount :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchImport' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'batchImport_arn' - The ARN of the batch import job.
+--
+-- 'completionTime', 'batchImport_completionTime' - Timestamp of when batch import job completed.
+--
+-- 'eventTypeName', 'batchImport_eventTypeName' - The name of the event type.
+--
+-- 'failedRecordsCount', 'batchImport_failedRecordsCount' - The number of records that failed to import.
+--
+-- 'failureReason', 'batchImport_failureReason' - The reason batch import job failed.
+--
+-- 'iamRoleArn', 'batchImport_iamRoleArn' - The ARN of the IAM role to use for this job request.
+--
+-- 'inputPath', 'batchImport_inputPath' - The Amazon S3 location of your data file for batch import.
+--
+-- 'jobId', 'batchImport_jobId' - The ID of the batch import job.
+--
+-- 'outputPath', 'batchImport_outputPath' - The Amazon S3 location of your output file.
+--
+-- 'processedRecordsCount', 'batchImport_processedRecordsCount' - The number of records processed by batch import job.
+--
+-- 'startTime', 'batchImport_startTime' - Timestamp of when the batch import job started.
+--
+-- 'status', 'batchImport_status' - The status of the batch import job.
+--
+-- 'totalRecordsCount', 'batchImport_totalRecordsCount' - The total number of records in the batch import job.
+newBatchImport ::
+  BatchImport
+newBatchImport =
+  BatchImport'
+    { arn = Prelude.Nothing,
+      completionTime = Prelude.Nothing,
+      eventTypeName = Prelude.Nothing,
+      failedRecordsCount = Prelude.Nothing,
+      failureReason = Prelude.Nothing,
+      iamRoleArn = Prelude.Nothing,
+      inputPath = Prelude.Nothing,
+      jobId = Prelude.Nothing,
+      outputPath = Prelude.Nothing,
+      processedRecordsCount = Prelude.Nothing,
+      startTime = Prelude.Nothing,
+      status = Prelude.Nothing,
+      totalRecordsCount = Prelude.Nothing
+    }
+
+-- | The ARN of the batch import job.
+batchImport_arn :: Lens.Lens' BatchImport (Prelude.Maybe Prelude.Text)
+batchImport_arn = Lens.lens (\BatchImport' {arn} -> arn) (\s@BatchImport' {} a -> s {arn = a} :: BatchImport)
+
+-- | Timestamp of when batch import job completed.
+batchImport_completionTime :: Lens.Lens' BatchImport (Prelude.Maybe Prelude.Text)
+batchImport_completionTime = Lens.lens (\BatchImport' {completionTime} -> completionTime) (\s@BatchImport' {} a -> s {completionTime = a} :: BatchImport)
+
+-- | The name of the event type.
+batchImport_eventTypeName :: Lens.Lens' BatchImport (Prelude.Maybe Prelude.Text)
+batchImport_eventTypeName = Lens.lens (\BatchImport' {eventTypeName} -> eventTypeName) (\s@BatchImport' {} a -> s {eventTypeName = a} :: BatchImport)
+
+-- | The number of records that failed to import.
+batchImport_failedRecordsCount :: Lens.Lens' BatchImport (Prelude.Maybe Prelude.Int)
+batchImport_failedRecordsCount = Lens.lens (\BatchImport' {failedRecordsCount} -> failedRecordsCount) (\s@BatchImport' {} a -> s {failedRecordsCount = a} :: BatchImport)
+
+-- | The reason batch import job failed.
+batchImport_failureReason :: Lens.Lens' BatchImport (Prelude.Maybe Prelude.Text)
+batchImport_failureReason = Lens.lens (\BatchImport' {failureReason} -> failureReason) (\s@BatchImport' {} a -> s {failureReason = a} :: BatchImport)
+
+-- | The ARN of the IAM role to use for this job request.
+batchImport_iamRoleArn :: Lens.Lens' BatchImport (Prelude.Maybe Prelude.Text)
+batchImport_iamRoleArn = Lens.lens (\BatchImport' {iamRoleArn} -> iamRoleArn) (\s@BatchImport' {} a -> s {iamRoleArn = a} :: BatchImport)
+
+-- | The Amazon S3 location of your data file for batch import.
+batchImport_inputPath :: Lens.Lens' BatchImport (Prelude.Maybe Prelude.Text)
+batchImport_inputPath = Lens.lens (\BatchImport' {inputPath} -> inputPath) (\s@BatchImport' {} a -> s {inputPath = a} :: BatchImport)
+
+-- | The ID of the batch import job.
+batchImport_jobId :: Lens.Lens' BatchImport (Prelude.Maybe Prelude.Text)
+batchImport_jobId = Lens.lens (\BatchImport' {jobId} -> jobId) (\s@BatchImport' {} a -> s {jobId = a} :: BatchImport)
+
+-- | The Amazon S3 location of your output file.
+batchImport_outputPath :: Lens.Lens' BatchImport (Prelude.Maybe Prelude.Text)
+batchImport_outputPath = Lens.lens (\BatchImport' {outputPath} -> outputPath) (\s@BatchImport' {} a -> s {outputPath = a} :: BatchImport)
+
+-- | The number of records processed by batch import job.
+batchImport_processedRecordsCount :: Lens.Lens' BatchImport (Prelude.Maybe Prelude.Int)
+batchImport_processedRecordsCount = Lens.lens (\BatchImport' {processedRecordsCount} -> processedRecordsCount) (\s@BatchImport' {} a -> s {processedRecordsCount = a} :: BatchImport)
+
+-- | Timestamp of when the batch import job started.
+batchImport_startTime :: Lens.Lens' BatchImport (Prelude.Maybe Prelude.Text)
+batchImport_startTime = Lens.lens (\BatchImport' {startTime} -> startTime) (\s@BatchImport' {} a -> s {startTime = a} :: BatchImport)
+
+-- | The status of the batch import job.
+batchImport_status :: Lens.Lens' BatchImport (Prelude.Maybe AsyncJobStatus)
+batchImport_status = Lens.lens (\BatchImport' {status} -> status) (\s@BatchImport' {} a -> s {status = a} :: BatchImport)
+
+-- | The total number of records in the batch import job.
+batchImport_totalRecordsCount :: Lens.Lens' BatchImport (Prelude.Maybe Prelude.Int)
+batchImport_totalRecordsCount = Lens.lens (\BatchImport' {totalRecordsCount} -> totalRecordsCount) (\s@BatchImport' {} a -> s {totalRecordsCount = a} :: BatchImport)
+
+instance Data.FromJSON BatchImport where
+  parseJSON =
+    Data.withObject
+      "BatchImport"
+      ( \x ->
+          BatchImport'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "completionTime")
+            Prelude.<*> (x Data..:? "eventTypeName")
+            Prelude.<*> (x Data..:? "failedRecordsCount")
+            Prelude.<*> (x Data..:? "failureReason")
+            Prelude.<*> (x Data..:? "iamRoleArn")
+            Prelude.<*> (x Data..:? "inputPath")
+            Prelude.<*> (x Data..:? "jobId")
+            Prelude.<*> (x Data..:? "outputPath")
+            Prelude.<*> (x Data..:? "processedRecordsCount")
+            Prelude.<*> (x Data..:? "startTime")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "totalRecordsCount")
+      )
+
+instance Prelude.Hashable BatchImport where
+  hashWithSalt _salt BatchImport' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` completionTime
+      `Prelude.hashWithSalt` eventTypeName
+      `Prelude.hashWithSalt` failedRecordsCount
+      `Prelude.hashWithSalt` failureReason
+      `Prelude.hashWithSalt` iamRoleArn
+      `Prelude.hashWithSalt` inputPath
+      `Prelude.hashWithSalt` jobId
+      `Prelude.hashWithSalt` outputPath
+      `Prelude.hashWithSalt` processedRecordsCount
+      `Prelude.hashWithSalt` startTime
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` totalRecordsCount
+
+instance Prelude.NFData BatchImport where
+  rnf BatchImport' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf completionTime
+      `Prelude.seq` Prelude.rnf eventTypeName
+      `Prelude.seq` Prelude.rnf failedRecordsCount
+      `Prelude.seq` Prelude.rnf failureReason
+      `Prelude.seq` Prelude.rnf iamRoleArn
+      `Prelude.seq` Prelude.rnf inputPath
+      `Prelude.seq` Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf outputPath
+      `Prelude.seq` Prelude.rnf processedRecordsCount
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf totalRecordsCount
diff --git a/gen/Amazonka/FraudDetector/Types/BatchPrediction.hs b/gen/Amazonka/FraudDetector/Types/BatchPrediction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/BatchPrediction.hs
@@ -0,0 +1,244 @@
+{-# 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.FraudDetector.Types.BatchPrediction
+-- Copyright   : (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.FraudDetector.Types.BatchPrediction where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.AsyncJobStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | The batch prediction details.
+--
+-- /See:/ 'newBatchPrediction' smart constructor.
+data BatchPrediction = BatchPrediction'
+  { -- | The ARN of batch prediction job.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Timestamp of when the batch prediction job completed.
+    completionTime :: Prelude.Maybe Prelude.Text,
+    -- | The name of the detector.
+    detectorName :: Prelude.Maybe Prelude.Text,
+    -- | The detector version.
+    detectorVersion :: Prelude.Maybe Prelude.Text,
+    -- | The name of the event type.
+    eventTypeName :: Prelude.Maybe Prelude.Text,
+    -- | The reason a batch prediction job failed.
+    failureReason :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the IAM role to use for this job request.
+    iamRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon S3 location of your training file.
+    inputPath :: Prelude.Maybe Prelude.Text,
+    -- | The job ID for the batch prediction.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | Timestamp of most recent heartbeat indicating the batch prediction job
+    -- was making progress.
+    lastHeartbeatTime :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon S3 location of your output file.
+    outputPath :: Prelude.Maybe Prelude.Text,
+    -- | The number of records processed by the batch prediction job.
+    processedRecordsCount :: Prelude.Maybe Prelude.Int,
+    -- | Timestamp of when the batch prediction job started.
+    startTime :: Prelude.Maybe Prelude.Text,
+    -- | The batch prediction status.
+    status :: Prelude.Maybe AsyncJobStatus,
+    -- | The total number of records in the batch prediction job.
+    totalRecordsCount :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchPrediction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'batchPrediction_arn' - The ARN of batch prediction job.
+--
+-- 'completionTime', 'batchPrediction_completionTime' - Timestamp of when the batch prediction job completed.
+--
+-- 'detectorName', 'batchPrediction_detectorName' - The name of the detector.
+--
+-- 'detectorVersion', 'batchPrediction_detectorVersion' - The detector version.
+--
+-- 'eventTypeName', 'batchPrediction_eventTypeName' - The name of the event type.
+--
+-- 'failureReason', 'batchPrediction_failureReason' - The reason a batch prediction job failed.
+--
+-- 'iamRoleArn', 'batchPrediction_iamRoleArn' - The ARN of the IAM role to use for this job request.
+--
+-- 'inputPath', 'batchPrediction_inputPath' - The Amazon S3 location of your training file.
+--
+-- 'jobId', 'batchPrediction_jobId' - The job ID for the batch prediction.
+--
+-- 'lastHeartbeatTime', 'batchPrediction_lastHeartbeatTime' - Timestamp of most recent heartbeat indicating the batch prediction job
+-- was making progress.
+--
+-- 'outputPath', 'batchPrediction_outputPath' - The Amazon S3 location of your output file.
+--
+-- 'processedRecordsCount', 'batchPrediction_processedRecordsCount' - The number of records processed by the batch prediction job.
+--
+-- 'startTime', 'batchPrediction_startTime' - Timestamp of when the batch prediction job started.
+--
+-- 'status', 'batchPrediction_status' - The batch prediction status.
+--
+-- 'totalRecordsCount', 'batchPrediction_totalRecordsCount' - The total number of records in the batch prediction job.
+newBatchPrediction ::
+  BatchPrediction
+newBatchPrediction =
+  BatchPrediction'
+    { arn = Prelude.Nothing,
+      completionTime = Prelude.Nothing,
+      detectorName = Prelude.Nothing,
+      detectorVersion = Prelude.Nothing,
+      eventTypeName = Prelude.Nothing,
+      failureReason = Prelude.Nothing,
+      iamRoleArn = Prelude.Nothing,
+      inputPath = Prelude.Nothing,
+      jobId = Prelude.Nothing,
+      lastHeartbeatTime = Prelude.Nothing,
+      outputPath = Prelude.Nothing,
+      processedRecordsCount = Prelude.Nothing,
+      startTime = Prelude.Nothing,
+      status = Prelude.Nothing,
+      totalRecordsCount = Prelude.Nothing
+    }
+
+-- | The ARN of batch prediction job.
+batchPrediction_arn :: Lens.Lens' BatchPrediction (Prelude.Maybe Prelude.Text)
+batchPrediction_arn = Lens.lens (\BatchPrediction' {arn} -> arn) (\s@BatchPrediction' {} a -> s {arn = a} :: BatchPrediction)
+
+-- | Timestamp of when the batch prediction job completed.
+batchPrediction_completionTime :: Lens.Lens' BatchPrediction (Prelude.Maybe Prelude.Text)
+batchPrediction_completionTime = Lens.lens (\BatchPrediction' {completionTime} -> completionTime) (\s@BatchPrediction' {} a -> s {completionTime = a} :: BatchPrediction)
+
+-- | The name of the detector.
+batchPrediction_detectorName :: Lens.Lens' BatchPrediction (Prelude.Maybe Prelude.Text)
+batchPrediction_detectorName = Lens.lens (\BatchPrediction' {detectorName} -> detectorName) (\s@BatchPrediction' {} a -> s {detectorName = a} :: BatchPrediction)
+
+-- | The detector version.
+batchPrediction_detectorVersion :: Lens.Lens' BatchPrediction (Prelude.Maybe Prelude.Text)
+batchPrediction_detectorVersion = Lens.lens (\BatchPrediction' {detectorVersion} -> detectorVersion) (\s@BatchPrediction' {} a -> s {detectorVersion = a} :: BatchPrediction)
+
+-- | The name of the event type.
+batchPrediction_eventTypeName :: Lens.Lens' BatchPrediction (Prelude.Maybe Prelude.Text)
+batchPrediction_eventTypeName = Lens.lens (\BatchPrediction' {eventTypeName} -> eventTypeName) (\s@BatchPrediction' {} a -> s {eventTypeName = a} :: BatchPrediction)
+
+-- | The reason a batch prediction job failed.
+batchPrediction_failureReason :: Lens.Lens' BatchPrediction (Prelude.Maybe Prelude.Text)
+batchPrediction_failureReason = Lens.lens (\BatchPrediction' {failureReason} -> failureReason) (\s@BatchPrediction' {} a -> s {failureReason = a} :: BatchPrediction)
+
+-- | The ARN of the IAM role to use for this job request.
+batchPrediction_iamRoleArn :: Lens.Lens' BatchPrediction (Prelude.Maybe Prelude.Text)
+batchPrediction_iamRoleArn = Lens.lens (\BatchPrediction' {iamRoleArn} -> iamRoleArn) (\s@BatchPrediction' {} a -> s {iamRoleArn = a} :: BatchPrediction)
+
+-- | The Amazon S3 location of your training file.
+batchPrediction_inputPath :: Lens.Lens' BatchPrediction (Prelude.Maybe Prelude.Text)
+batchPrediction_inputPath = Lens.lens (\BatchPrediction' {inputPath} -> inputPath) (\s@BatchPrediction' {} a -> s {inputPath = a} :: BatchPrediction)
+
+-- | The job ID for the batch prediction.
+batchPrediction_jobId :: Lens.Lens' BatchPrediction (Prelude.Maybe Prelude.Text)
+batchPrediction_jobId = Lens.lens (\BatchPrediction' {jobId} -> jobId) (\s@BatchPrediction' {} a -> s {jobId = a} :: BatchPrediction)
+
+-- | Timestamp of most recent heartbeat indicating the batch prediction job
+-- was making progress.
+batchPrediction_lastHeartbeatTime :: Lens.Lens' BatchPrediction (Prelude.Maybe Prelude.Text)
+batchPrediction_lastHeartbeatTime = Lens.lens (\BatchPrediction' {lastHeartbeatTime} -> lastHeartbeatTime) (\s@BatchPrediction' {} a -> s {lastHeartbeatTime = a} :: BatchPrediction)
+
+-- | The Amazon S3 location of your output file.
+batchPrediction_outputPath :: Lens.Lens' BatchPrediction (Prelude.Maybe Prelude.Text)
+batchPrediction_outputPath = Lens.lens (\BatchPrediction' {outputPath} -> outputPath) (\s@BatchPrediction' {} a -> s {outputPath = a} :: BatchPrediction)
+
+-- | The number of records processed by the batch prediction job.
+batchPrediction_processedRecordsCount :: Lens.Lens' BatchPrediction (Prelude.Maybe Prelude.Int)
+batchPrediction_processedRecordsCount = Lens.lens (\BatchPrediction' {processedRecordsCount} -> processedRecordsCount) (\s@BatchPrediction' {} a -> s {processedRecordsCount = a} :: BatchPrediction)
+
+-- | Timestamp of when the batch prediction job started.
+batchPrediction_startTime :: Lens.Lens' BatchPrediction (Prelude.Maybe Prelude.Text)
+batchPrediction_startTime = Lens.lens (\BatchPrediction' {startTime} -> startTime) (\s@BatchPrediction' {} a -> s {startTime = a} :: BatchPrediction)
+
+-- | The batch prediction status.
+batchPrediction_status :: Lens.Lens' BatchPrediction (Prelude.Maybe AsyncJobStatus)
+batchPrediction_status = Lens.lens (\BatchPrediction' {status} -> status) (\s@BatchPrediction' {} a -> s {status = a} :: BatchPrediction)
+
+-- | The total number of records in the batch prediction job.
+batchPrediction_totalRecordsCount :: Lens.Lens' BatchPrediction (Prelude.Maybe Prelude.Int)
+batchPrediction_totalRecordsCount = Lens.lens (\BatchPrediction' {totalRecordsCount} -> totalRecordsCount) (\s@BatchPrediction' {} a -> s {totalRecordsCount = a} :: BatchPrediction)
+
+instance Data.FromJSON BatchPrediction where
+  parseJSON =
+    Data.withObject
+      "BatchPrediction"
+      ( \x ->
+          BatchPrediction'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "completionTime")
+            Prelude.<*> (x Data..:? "detectorName")
+            Prelude.<*> (x Data..:? "detectorVersion")
+            Prelude.<*> (x Data..:? "eventTypeName")
+            Prelude.<*> (x Data..:? "failureReason")
+            Prelude.<*> (x Data..:? "iamRoleArn")
+            Prelude.<*> (x Data..:? "inputPath")
+            Prelude.<*> (x Data..:? "jobId")
+            Prelude.<*> (x Data..:? "lastHeartbeatTime")
+            Prelude.<*> (x Data..:? "outputPath")
+            Prelude.<*> (x Data..:? "processedRecordsCount")
+            Prelude.<*> (x Data..:? "startTime")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "totalRecordsCount")
+      )
+
+instance Prelude.Hashable BatchPrediction where
+  hashWithSalt _salt BatchPrediction' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` completionTime
+      `Prelude.hashWithSalt` detectorName
+      `Prelude.hashWithSalt` detectorVersion
+      `Prelude.hashWithSalt` eventTypeName
+      `Prelude.hashWithSalt` failureReason
+      `Prelude.hashWithSalt` iamRoleArn
+      `Prelude.hashWithSalt` inputPath
+      `Prelude.hashWithSalt` jobId
+      `Prelude.hashWithSalt` lastHeartbeatTime
+      `Prelude.hashWithSalt` outputPath
+      `Prelude.hashWithSalt` processedRecordsCount
+      `Prelude.hashWithSalt` startTime
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` totalRecordsCount
+
+instance Prelude.NFData BatchPrediction where
+  rnf BatchPrediction' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf completionTime
+      `Prelude.seq` Prelude.rnf detectorName
+      `Prelude.seq` Prelude.rnf detectorVersion
+      `Prelude.seq` Prelude.rnf eventTypeName
+      `Prelude.seq` Prelude.rnf failureReason
+      `Prelude.seq` Prelude.rnf iamRoleArn
+      `Prelude.seq` Prelude.rnf inputPath
+      `Prelude.seq` Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf lastHeartbeatTime
+      `Prelude.seq` Prelude.rnf outputPath
+      `Prelude.seq` Prelude.rnf processedRecordsCount
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf totalRecordsCount
diff --git a/gen/Amazonka/FraudDetector/Types/DataSource.hs b/gen/Amazonka/FraudDetector/Types/DataSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/DataSource.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.FraudDetector.Types.DataSource
+-- Copyright   : (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.FraudDetector.Types.DataSource
+  ( DataSource
+      ( ..,
+        DataSource_EVENT,
+        DataSource_EXTERNAL_MODEL_SCORE,
+        DataSource_MODEL_SCORE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DataSource = DataSource'
+  { fromDataSource ::
+      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 DataSource_EVENT :: DataSource
+pattern DataSource_EVENT = DataSource' "EVENT"
+
+pattern DataSource_EXTERNAL_MODEL_SCORE :: DataSource
+pattern DataSource_EXTERNAL_MODEL_SCORE = DataSource' "EXTERNAL_MODEL_SCORE"
+
+pattern DataSource_MODEL_SCORE :: DataSource
+pattern DataSource_MODEL_SCORE = DataSource' "MODEL_SCORE"
+
+{-# COMPLETE
+  DataSource_EVENT,
+  DataSource_EXTERNAL_MODEL_SCORE,
+  DataSource_MODEL_SCORE,
+  DataSource'
+  #-}
diff --git a/gen/Amazonka/FraudDetector/Types/DataType.hs b/gen/Amazonka/FraudDetector/Types/DataType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/DataType.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.FraudDetector.Types.DataType
+-- Copyright   : (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.FraudDetector.Types.DataType
+  ( DataType
+      ( ..,
+        DataType_BOOLEAN,
+        DataType_FLOAT,
+        DataType_INTEGER,
+        DataType_STRING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DataType = DataType'
+  { fromDataType ::
+      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 DataType_BOOLEAN :: DataType
+pattern DataType_BOOLEAN = DataType' "BOOLEAN"
+
+pattern DataType_FLOAT :: DataType
+pattern DataType_FLOAT = DataType' "FLOAT"
+
+pattern DataType_INTEGER :: DataType
+pattern DataType_INTEGER = DataType' "INTEGER"
+
+pattern DataType_STRING :: DataType
+pattern DataType_STRING = DataType' "STRING"
+
+{-# COMPLETE
+  DataType_BOOLEAN,
+  DataType_FLOAT,
+  DataType_INTEGER,
+  DataType_STRING,
+  DataType'
+  #-}
diff --git a/gen/Amazonka/FraudDetector/Types/DataValidationMetrics.hs b/gen/Amazonka/FraudDetector/Types/DataValidationMetrics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/DataValidationMetrics.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.FraudDetector.Types.DataValidationMetrics
+-- Copyright   : (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.FraudDetector.Types.DataValidationMetrics where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.FieldValidationMessage
+import Amazonka.FraudDetector.Types.FileValidationMessage
+import qualified Amazonka.Prelude as Prelude
+
+-- | The model training data validation metrics.
+--
+-- /See:/ 'newDataValidationMetrics' smart constructor.
+data DataValidationMetrics = DataValidationMetrics'
+  { -- | The field-specific model training validation messages.
+    fieldLevelMessages :: Prelude.Maybe [FieldValidationMessage],
+    -- | The file-specific model training data validation messages.
+    fileLevelMessages :: Prelude.Maybe [FileValidationMessage]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataValidationMetrics' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fieldLevelMessages', 'dataValidationMetrics_fieldLevelMessages' - The field-specific model training validation messages.
+--
+-- 'fileLevelMessages', 'dataValidationMetrics_fileLevelMessages' - The file-specific model training data validation messages.
+newDataValidationMetrics ::
+  DataValidationMetrics
+newDataValidationMetrics =
+  DataValidationMetrics'
+    { fieldLevelMessages =
+        Prelude.Nothing,
+      fileLevelMessages = Prelude.Nothing
+    }
+
+-- | The field-specific model training validation messages.
+dataValidationMetrics_fieldLevelMessages :: Lens.Lens' DataValidationMetrics (Prelude.Maybe [FieldValidationMessage])
+dataValidationMetrics_fieldLevelMessages = Lens.lens (\DataValidationMetrics' {fieldLevelMessages} -> fieldLevelMessages) (\s@DataValidationMetrics' {} a -> s {fieldLevelMessages = a} :: DataValidationMetrics) Prelude.. Lens.mapping Lens.coerced
+
+-- | The file-specific model training data validation messages.
+dataValidationMetrics_fileLevelMessages :: Lens.Lens' DataValidationMetrics (Prelude.Maybe [FileValidationMessage])
+dataValidationMetrics_fileLevelMessages = Lens.lens (\DataValidationMetrics' {fileLevelMessages} -> fileLevelMessages) (\s@DataValidationMetrics' {} a -> s {fileLevelMessages = a} :: DataValidationMetrics) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON DataValidationMetrics where
+  parseJSON =
+    Data.withObject
+      "DataValidationMetrics"
+      ( \x ->
+          DataValidationMetrics'
+            Prelude.<$> ( x
+                            Data..:? "fieldLevelMessages"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "fileLevelMessages"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable DataValidationMetrics where
+  hashWithSalt _salt DataValidationMetrics' {..} =
+    _salt
+      `Prelude.hashWithSalt` fieldLevelMessages
+      `Prelude.hashWithSalt` fileLevelMessages
+
+instance Prelude.NFData DataValidationMetrics where
+  rnf DataValidationMetrics' {..} =
+    Prelude.rnf fieldLevelMessages
+      `Prelude.seq` Prelude.rnf fileLevelMessages
diff --git a/gen/Amazonka/FraudDetector/Types/Detector.hs b/gen/Amazonka/FraudDetector/Types/Detector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/Detector.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.FraudDetector.Types.Detector
+-- Copyright   : (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.FraudDetector.Types.Detector where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The detector.
+--
+-- /See:/ 'newDetector' smart constructor.
+data Detector = Detector'
+  { -- | The detector ARN.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Timestamp of when the detector was created.
+    createdTime :: Prelude.Maybe Prelude.Text,
+    -- | The detector description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The detector ID.
+    detectorId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the event type.
+    eventTypeName :: Prelude.Maybe Prelude.Text,
+    -- | Timestamp of when the detector was last updated.
+    lastUpdatedTime :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Detector' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'detector_arn' - The detector ARN.
+--
+-- 'createdTime', 'detector_createdTime' - Timestamp of when the detector was created.
+--
+-- 'description', 'detector_description' - The detector description.
+--
+-- 'detectorId', 'detector_detectorId' - The detector ID.
+--
+-- 'eventTypeName', 'detector_eventTypeName' - The name of the event type.
+--
+-- 'lastUpdatedTime', 'detector_lastUpdatedTime' - Timestamp of when the detector was last updated.
+newDetector ::
+  Detector
+newDetector =
+  Detector'
+    { arn = Prelude.Nothing,
+      createdTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      detectorId = Prelude.Nothing,
+      eventTypeName = Prelude.Nothing,
+      lastUpdatedTime = Prelude.Nothing
+    }
+
+-- | The detector ARN.
+detector_arn :: Lens.Lens' Detector (Prelude.Maybe Prelude.Text)
+detector_arn = Lens.lens (\Detector' {arn} -> arn) (\s@Detector' {} a -> s {arn = a} :: Detector)
+
+-- | Timestamp of when the detector was created.
+detector_createdTime :: Lens.Lens' Detector (Prelude.Maybe Prelude.Text)
+detector_createdTime = Lens.lens (\Detector' {createdTime} -> createdTime) (\s@Detector' {} a -> s {createdTime = a} :: Detector)
+
+-- | The detector description.
+detector_description :: Lens.Lens' Detector (Prelude.Maybe Prelude.Text)
+detector_description = Lens.lens (\Detector' {description} -> description) (\s@Detector' {} a -> s {description = a} :: Detector)
+
+-- | The detector ID.
+detector_detectorId :: Lens.Lens' Detector (Prelude.Maybe Prelude.Text)
+detector_detectorId = Lens.lens (\Detector' {detectorId} -> detectorId) (\s@Detector' {} a -> s {detectorId = a} :: Detector)
+
+-- | The name of the event type.
+detector_eventTypeName :: Lens.Lens' Detector (Prelude.Maybe Prelude.Text)
+detector_eventTypeName = Lens.lens (\Detector' {eventTypeName} -> eventTypeName) (\s@Detector' {} a -> s {eventTypeName = a} :: Detector)
+
+-- | Timestamp of when the detector was last updated.
+detector_lastUpdatedTime :: Lens.Lens' Detector (Prelude.Maybe Prelude.Text)
+detector_lastUpdatedTime = Lens.lens (\Detector' {lastUpdatedTime} -> lastUpdatedTime) (\s@Detector' {} a -> s {lastUpdatedTime = a} :: Detector)
+
+instance Data.FromJSON Detector where
+  parseJSON =
+    Data.withObject
+      "Detector"
+      ( \x ->
+          Detector'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "createdTime")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "detectorId")
+            Prelude.<*> (x Data..:? "eventTypeName")
+            Prelude.<*> (x Data..:? "lastUpdatedTime")
+      )
+
+instance Prelude.Hashable Detector where
+  hashWithSalt _salt Detector' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` detectorId
+      `Prelude.hashWithSalt` eventTypeName
+      `Prelude.hashWithSalt` lastUpdatedTime
+
+instance Prelude.NFData Detector where
+  rnf Detector' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf detectorId
+      `Prelude.seq` Prelude.rnf eventTypeName
+      `Prelude.seq` Prelude.rnf lastUpdatedTime
diff --git a/gen/Amazonka/FraudDetector/Types/DetectorVersionStatus.hs b/gen/Amazonka/FraudDetector/Types/DetectorVersionStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/DetectorVersionStatus.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.FraudDetector.Types.DetectorVersionStatus
+-- Copyright   : (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.FraudDetector.Types.DetectorVersionStatus
+  ( DetectorVersionStatus
+      ( ..,
+        DetectorVersionStatus_ACTIVE,
+        DetectorVersionStatus_DRAFT,
+        DetectorVersionStatus_INACTIVE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DetectorVersionStatus = DetectorVersionStatus'
+  { fromDetectorVersionStatus ::
+      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 DetectorVersionStatus_ACTIVE :: DetectorVersionStatus
+pattern DetectorVersionStatus_ACTIVE = DetectorVersionStatus' "ACTIVE"
+
+pattern DetectorVersionStatus_DRAFT :: DetectorVersionStatus
+pattern DetectorVersionStatus_DRAFT = DetectorVersionStatus' "DRAFT"
+
+pattern DetectorVersionStatus_INACTIVE :: DetectorVersionStatus
+pattern DetectorVersionStatus_INACTIVE = DetectorVersionStatus' "INACTIVE"
+
+{-# COMPLETE
+  DetectorVersionStatus_ACTIVE,
+  DetectorVersionStatus_DRAFT,
+  DetectorVersionStatus_INACTIVE,
+  DetectorVersionStatus'
+  #-}
diff --git a/gen/Amazonka/FraudDetector/Types/DetectorVersionSummary.hs b/gen/Amazonka/FraudDetector/Types/DetectorVersionSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/DetectorVersionSummary.hs
@@ -0,0 +1,110 @@
+{-# 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.FraudDetector.Types.DetectorVersionSummary
+-- Copyright   : (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.FraudDetector.Types.DetectorVersionSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.DetectorVersionStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | The summary of the detector version.
+--
+-- /See:/ 'newDetectorVersionSummary' smart constructor.
+data DetectorVersionSummary = DetectorVersionSummary'
+  { -- | The detector version description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The detector version ID.
+    detectorVersionId :: Prelude.Maybe Prelude.Text,
+    -- | Timestamp of when the detector version was last updated.
+    lastUpdatedTime :: Prelude.Maybe Prelude.Text,
+    -- | The detector version status.
+    status :: Prelude.Maybe DetectorVersionStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetectorVersionSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'detectorVersionSummary_description' - The detector version description.
+--
+-- 'detectorVersionId', 'detectorVersionSummary_detectorVersionId' - The detector version ID.
+--
+-- 'lastUpdatedTime', 'detectorVersionSummary_lastUpdatedTime' - Timestamp of when the detector version was last updated.
+--
+-- 'status', 'detectorVersionSummary_status' - The detector version status.
+newDetectorVersionSummary ::
+  DetectorVersionSummary
+newDetectorVersionSummary =
+  DetectorVersionSummary'
+    { description =
+        Prelude.Nothing,
+      detectorVersionId = Prelude.Nothing,
+      lastUpdatedTime = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The detector version description.
+detectorVersionSummary_description :: Lens.Lens' DetectorVersionSummary (Prelude.Maybe Prelude.Text)
+detectorVersionSummary_description = Lens.lens (\DetectorVersionSummary' {description} -> description) (\s@DetectorVersionSummary' {} a -> s {description = a} :: DetectorVersionSummary)
+
+-- | The detector version ID.
+detectorVersionSummary_detectorVersionId :: Lens.Lens' DetectorVersionSummary (Prelude.Maybe Prelude.Text)
+detectorVersionSummary_detectorVersionId = Lens.lens (\DetectorVersionSummary' {detectorVersionId} -> detectorVersionId) (\s@DetectorVersionSummary' {} a -> s {detectorVersionId = a} :: DetectorVersionSummary)
+
+-- | Timestamp of when the detector version was last updated.
+detectorVersionSummary_lastUpdatedTime :: Lens.Lens' DetectorVersionSummary (Prelude.Maybe Prelude.Text)
+detectorVersionSummary_lastUpdatedTime = Lens.lens (\DetectorVersionSummary' {lastUpdatedTime} -> lastUpdatedTime) (\s@DetectorVersionSummary' {} a -> s {lastUpdatedTime = a} :: DetectorVersionSummary)
+
+-- | The detector version status.
+detectorVersionSummary_status :: Lens.Lens' DetectorVersionSummary (Prelude.Maybe DetectorVersionStatus)
+detectorVersionSummary_status = Lens.lens (\DetectorVersionSummary' {status} -> status) (\s@DetectorVersionSummary' {} a -> s {status = a} :: DetectorVersionSummary)
+
+instance Data.FromJSON DetectorVersionSummary where
+  parseJSON =
+    Data.withObject
+      "DetectorVersionSummary"
+      ( \x ->
+          DetectorVersionSummary'
+            Prelude.<$> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "detectorVersionId")
+            Prelude.<*> (x Data..:? "lastUpdatedTime")
+            Prelude.<*> (x Data..:? "status")
+      )
+
+instance Prelude.Hashable DetectorVersionSummary where
+  hashWithSalt _salt DetectorVersionSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` detectorVersionId
+      `Prelude.hashWithSalt` lastUpdatedTime
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData DetectorVersionSummary where
+  rnf DetectorVersionSummary' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf detectorVersionId
+      `Prelude.seq` Prelude.rnf lastUpdatedTime
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/FraudDetector/Types/Entity.hs b/gen/Amazonka/FraudDetector/Types/Entity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/Entity.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.FraudDetector.Types.Entity
+-- Copyright   : (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.FraudDetector.Types.Entity 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 entity details.
+--
+-- /See:/ 'newEntity' smart constructor.
+data Entity = Entity'
+  { -- | The entity type.
+    entityType :: Prelude.Text,
+    -- | The entity ID. If you do not know the @entityId@, you can pass
+    -- @unknown@, which is areserved string literal.
+    entityId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Entity' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'entityType', 'entity_entityType' - The entity type.
+--
+-- 'entityId', 'entity_entityId' - The entity ID. If you do not know the @entityId@, you can pass
+-- @unknown@, which is areserved string literal.
+newEntity ::
+  -- | 'entityType'
+  Prelude.Text ->
+  -- | 'entityId'
+  Prelude.Text ->
+  Entity
+newEntity pEntityType_ pEntityId_ =
+  Entity'
+    { entityType = pEntityType_,
+      entityId = pEntityId_
+    }
+
+-- | The entity type.
+entity_entityType :: Lens.Lens' Entity Prelude.Text
+entity_entityType = Lens.lens (\Entity' {entityType} -> entityType) (\s@Entity' {} a -> s {entityType = a} :: Entity)
+
+-- | The entity ID. If you do not know the @entityId@, you can pass
+-- @unknown@, which is areserved string literal.
+entity_entityId :: Lens.Lens' Entity Prelude.Text
+entity_entityId = Lens.lens (\Entity' {entityId} -> entityId) (\s@Entity' {} a -> s {entityId = a} :: Entity)
+
+instance Data.FromJSON Entity where
+  parseJSON =
+    Data.withObject
+      "Entity"
+      ( \x ->
+          Entity'
+            Prelude.<$> (x Data..: "entityType")
+            Prelude.<*> (x Data..: "entityId")
+      )
+
+instance Prelude.Hashable Entity where
+  hashWithSalt _salt Entity' {..} =
+    _salt
+      `Prelude.hashWithSalt` entityType
+      `Prelude.hashWithSalt` entityId
+
+instance Prelude.NFData Entity where
+  rnf Entity' {..} =
+    Prelude.rnf entityType
+      `Prelude.seq` Prelude.rnf entityId
+
+instance Data.ToJSON Entity where
+  toJSON Entity' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("entityType" Data..= entityType),
+            Prelude.Just ("entityId" Data..= entityId)
+          ]
+      )
diff --git a/gen/Amazonka/FraudDetector/Types/EntityType.hs b/gen/Amazonka/FraudDetector/Types/EntityType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/EntityType.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.FraudDetector.Types.EntityType
+-- Copyright   : (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.FraudDetector.Types.EntityType 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 entity type details.
+--
+-- /See:/ 'newEntityType' smart constructor.
+data EntityType = EntityType'
+  { -- | The entity type ARN.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Timestamp of when the entity type was created.
+    createdTime :: Prelude.Maybe Prelude.Text,
+    -- | The entity type description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Timestamp of when the entity type was last updated.
+    lastUpdatedTime :: Prelude.Maybe Prelude.Text,
+    -- | The entity type name.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EntityType' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'entityType_arn' - The entity type ARN.
+--
+-- 'createdTime', 'entityType_createdTime' - Timestamp of when the entity type was created.
+--
+-- 'description', 'entityType_description' - The entity type description.
+--
+-- 'lastUpdatedTime', 'entityType_lastUpdatedTime' - Timestamp of when the entity type was last updated.
+--
+-- 'name', 'entityType_name' - The entity type name.
+newEntityType ::
+  EntityType
+newEntityType =
+  EntityType'
+    { arn = Prelude.Nothing,
+      createdTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      lastUpdatedTime = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The entity type ARN.
+entityType_arn :: Lens.Lens' EntityType (Prelude.Maybe Prelude.Text)
+entityType_arn = Lens.lens (\EntityType' {arn} -> arn) (\s@EntityType' {} a -> s {arn = a} :: EntityType)
+
+-- | Timestamp of when the entity type was created.
+entityType_createdTime :: Lens.Lens' EntityType (Prelude.Maybe Prelude.Text)
+entityType_createdTime = Lens.lens (\EntityType' {createdTime} -> createdTime) (\s@EntityType' {} a -> s {createdTime = a} :: EntityType)
+
+-- | The entity type description.
+entityType_description :: Lens.Lens' EntityType (Prelude.Maybe Prelude.Text)
+entityType_description = Lens.lens (\EntityType' {description} -> description) (\s@EntityType' {} a -> s {description = a} :: EntityType)
+
+-- | Timestamp of when the entity type was last updated.
+entityType_lastUpdatedTime :: Lens.Lens' EntityType (Prelude.Maybe Prelude.Text)
+entityType_lastUpdatedTime = Lens.lens (\EntityType' {lastUpdatedTime} -> lastUpdatedTime) (\s@EntityType' {} a -> s {lastUpdatedTime = a} :: EntityType)
+
+-- | The entity type name.
+entityType_name :: Lens.Lens' EntityType (Prelude.Maybe Prelude.Text)
+entityType_name = Lens.lens (\EntityType' {name} -> name) (\s@EntityType' {} a -> s {name = a} :: EntityType)
+
+instance Data.FromJSON EntityType where
+  parseJSON =
+    Data.withObject
+      "EntityType"
+      ( \x ->
+          EntityType'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "createdTime")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "lastUpdatedTime")
+            Prelude.<*> (x Data..:? "name")
+      )
+
+instance Prelude.Hashable EntityType where
+  hashWithSalt _salt EntityType' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` lastUpdatedTime
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData EntityType where
+  rnf EntityType' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastUpdatedTime
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/FraudDetector/Types/EvaluatedExternalModel.hs b/gen/Amazonka/FraudDetector/Types/EvaluatedExternalModel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/EvaluatedExternalModel.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.FraudDetector.Types.EvaluatedExternalModel
+-- Copyright   : (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.FraudDetector.Types.EvaluatedExternalModel 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 details of the external (Amazon Sagemaker) model evaluated for
+-- generating predictions.
+--
+-- /See:/ 'newEvaluatedExternalModel' smart constructor.
+data EvaluatedExternalModel = EvaluatedExternalModel'
+  { -- | Input variables use for generating predictions.
+    inputVariables :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The endpoint of the external (Amazon Sagemaker) model.
+    modelEndpoint :: Prelude.Maybe Prelude.Text,
+    -- | Output variables.
+    outputVariables :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | Indicates whether event variables were used to generate predictions.
+    useEventVariables :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EvaluatedExternalModel' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'inputVariables', 'evaluatedExternalModel_inputVariables' - Input variables use for generating predictions.
+--
+-- 'modelEndpoint', 'evaluatedExternalModel_modelEndpoint' - The endpoint of the external (Amazon Sagemaker) model.
+--
+-- 'outputVariables', 'evaluatedExternalModel_outputVariables' - Output variables.
+--
+-- 'useEventVariables', 'evaluatedExternalModel_useEventVariables' - Indicates whether event variables were used to generate predictions.
+newEvaluatedExternalModel ::
+  EvaluatedExternalModel
+newEvaluatedExternalModel =
+  EvaluatedExternalModel'
+    { inputVariables =
+        Prelude.Nothing,
+      modelEndpoint = Prelude.Nothing,
+      outputVariables = Prelude.Nothing,
+      useEventVariables = Prelude.Nothing
+    }
+
+-- | Input variables use for generating predictions.
+evaluatedExternalModel_inputVariables :: Lens.Lens' EvaluatedExternalModel (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+evaluatedExternalModel_inputVariables = Lens.lens (\EvaluatedExternalModel' {inputVariables} -> inputVariables) (\s@EvaluatedExternalModel' {} a -> s {inputVariables = a} :: EvaluatedExternalModel) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The endpoint of the external (Amazon Sagemaker) model.
+evaluatedExternalModel_modelEndpoint :: Lens.Lens' EvaluatedExternalModel (Prelude.Maybe Prelude.Text)
+evaluatedExternalModel_modelEndpoint = Lens.lens (\EvaluatedExternalModel' {modelEndpoint} -> modelEndpoint) (\s@EvaluatedExternalModel' {} a -> s {modelEndpoint = a} :: EvaluatedExternalModel)
+
+-- | Output variables.
+evaluatedExternalModel_outputVariables :: Lens.Lens' EvaluatedExternalModel (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+evaluatedExternalModel_outputVariables = Lens.lens (\EvaluatedExternalModel' {outputVariables} -> outputVariables) (\s@EvaluatedExternalModel' {} a -> s {outputVariables = a} :: EvaluatedExternalModel) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | Indicates whether event variables were used to generate predictions.
+evaluatedExternalModel_useEventVariables :: Lens.Lens' EvaluatedExternalModel (Prelude.Maybe Prelude.Bool)
+evaluatedExternalModel_useEventVariables = Lens.lens (\EvaluatedExternalModel' {useEventVariables} -> useEventVariables) (\s@EvaluatedExternalModel' {} a -> s {useEventVariables = a} :: EvaluatedExternalModel)
+
+instance Data.FromJSON EvaluatedExternalModel where
+  parseJSON =
+    Data.withObject
+      "EvaluatedExternalModel"
+      ( \x ->
+          EvaluatedExternalModel'
+            Prelude.<$> (x Data..:? "inputVariables" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "modelEndpoint")
+            Prelude.<*> ( x
+                            Data..:? "outputVariables"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "useEventVariables")
+      )
+
+instance Prelude.Hashable EvaluatedExternalModel where
+  hashWithSalt _salt EvaluatedExternalModel' {..} =
+    _salt
+      `Prelude.hashWithSalt` inputVariables
+      `Prelude.hashWithSalt` modelEndpoint
+      `Prelude.hashWithSalt` outputVariables
+      `Prelude.hashWithSalt` useEventVariables
+
+instance Prelude.NFData EvaluatedExternalModel where
+  rnf EvaluatedExternalModel' {..} =
+    Prelude.rnf inputVariables
+      `Prelude.seq` Prelude.rnf modelEndpoint
+      `Prelude.seq` Prelude.rnf outputVariables
+      `Prelude.seq` Prelude.rnf useEventVariables
diff --git a/gen/Amazonka/FraudDetector/Types/EvaluatedModelVersion.hs b/gen/Amazonka/FraudDetector/Types/EvaluatedModelVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/EvaluatedModelVersion.hs
@@ -0,0 +1,116 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.Types.EvaluatedModelVersion
+-- Copyright   : (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.FraudDetector.Types.EvaluatedModelVersion where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.ModelVersionEvaluation
+import qualified Amazonka.Prelude as Prelude
+
+-- | The model version evaluated for generating prediction.
+--
+-- /See:/ 'newEvaluatedModelVersion' smart constructor.
+data EvaluatedModelVersion = EvaluatedModelVersion'
+  { -- | Evaluations generated for the model version.
+    evaluations :: Prelude.Maybe [ModelVersionEvaluation],
+    -- | The model ID.
+    modelId :: Prelude.Maybe Prelude.Text,
+    -- | The model type.
+    --
+    -- Valid values: @ONLINE_FRAUD_INSIGHTS@ | @TRANSACTION_FRAUD_INSIGHTS@
+    modelType :: Prelude.Maybe Prelude.Text,
+    -- | The model version.
+    modelVersion :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EvaluatedModelVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'evaluations', 'evaluatedModelVersion_evaluations' - Evaluations generated for the model version.
+--
+-- 'modelId', 'evaluatedModelVersion_modelId' - The model ID.
+--
+-- 'modelType', 'evaluatedModelVersion_modelType' - The model type.
+--
+-- Valid values: @ONLINE_FRAUD_INSIGHTS@ | @TRANSACTION_FRAUD_INSIGHTS@
+--
+-- 'modelVersion', 'evaluatedModelVersion_modelVersion' - The model version.
+newEvaluatedModelVersion ::
+  EvaluatedModelVersion
+newEvaluatedModelVersion =
+  EvaluatedModelVersion'
+    { evaluations =
+        Prelude.Nothing,
+      modelId = Prelude.Nothing,
+      modelType = Prelude.Nothing,
+      modelVersion = Prelude.Nothing
+    }
+
+-- | Evaluations generated for the model version.
+evaluatedModelVersion_evaluations :: Lens.Lens' EvaluatedModelVersion (Prelude.Maybe [ModelVersionEvaluation])
+evaluatedModelVersion_evaluations = Lens.lens (\EvaluatedModelVersion' {evaluations} -> evaluations) (\s@EvaluatedModelVersion' {} a -> s {evaluations = a} :: EvaluatedModelVersion) Prelude.. Lens.mapping Lens.coerced
+
+-- | The model ID.
+evaluatedModelVersion_modelId :: Lens.Lens' EvaluatedModelVersion (Prelude.Maybe Prelude.Text)
+evaluatedModelVersion_modelId = Lens.lens (\EvaluatedModelVersion' {modelId} -> modelId) (\s@EvaluatedModelVersion' {} a -> s {modelId = a} :: EvaluatedModelVersion)
+
+-- | The model type.
+--
+-- Valid values: @ONLINE_FRAUD_INSIGHTS@ | @TRANSACTION_FRAUD_INSIGHTS@
+evaluatedModelVersion_modelType :: Lens.Lens' EvaluatedModelVersion (Prelude.Maybe Prelude.Text)
+evaluatedModelVersion_modelType = Lens.lens (\EvaluatedModelVersion' {modelType} -> modelType) (\s@EvaluatedModelVersion' {} a -> s {modelType = a} :: EvaluatedModelVersion)
+
+-- | The model version.
+evaluatedModelVersion_modelVersion :: Lens.Lens' EvaluatedModelVersion (Prelude.Maybe Prelude.Text)
+evaluatedModelVersion_modelVersion = Lens.lens (\EvaluatedModelVersion' {modelVersion} -> modelVersion) (\s@EvaluatedModelVersion' {} a -> s {modelVersion = a} :: EvaluatedModelVersion)
+
+instance Data.FromJSON EvaluatedModelVersion where
+  parseJSON =
+    Data.withObject
+      "EvaluatedModelVersion"
+      ( \x ->
+          EvaluatedModelVersion'
+            Prelude.<$> (x Data..:? "evaluations" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "modelId")
+            Prelude.<*> (x Data..:? "modelType")
+            Prelude.<*> (x Data..:? "modelVersion")
+      )
+
+instance Prelude.Hashable EvaluatedModelVersion where
+  hashWithSalt _salt EvaluatedModelVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` evaluations
+      `Prelude.hashWithSalt` modelId
+      `Prelude.hashWithSalt` modelType
+      `Prelude.hashWithSalt` modelVersion
+
+instance Prelude.NFData EvaluatedModelVersion where
+  rnf EvaluatedModelVersion' {..} =
+    Prelude.rnf evaluations
+      `Prelude.seq` Prelude.rnf modelId
+      `Prelude.seq` Prelude.rnf modelType
+      `Prelude.seq` Prelude.rnf modelVersion
diff --git a/gen/Amazonka/FraudDetector/Types/EvaluatedRule.hs b/gen/Amazonka/FraudDetector/Types/EvaluatedRule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/EvaluatedRule.hs
@@ -0,0 +1,144 @@
+{-# 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.FraudDetector.Types.EvaluatedRule
+-- Copyright   : (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.FraudDetector.Types.EvaluatedRule 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 details of the rule used for evaluating variable values.
+--
+-- /See:/ 'newEvaluatedRule' smart constructor.
+data EvaluatedRule = EvaluatedRule'
+  { -- | Indicates whether the rule was evaluated.
+    evaluated :: Prelude.Maybe Prelude.Bool,
+    -- | The rule expression.
+    expression :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The rule expression value.
+    expressionWithValues :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | Indicates whether the rule matched.
+    matched :: Prelude.Maybe Prelude.Bool,
+    -- | The rule outcome.
+    outcomes :: Prelude.Maybe [Prelude.Text],
+    -- | The rule ID.
+    ruleId :: Prelude.Maybe Prelude.Text,
+    -- | The rule version.
+    ruleVersion :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EvaluatedRule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'evaluated', 'evaluatedRule_evaluated' - Indicates whether the rule was evaluated.
+--
+-- 'expression', 'evaluatedRule_expression' - The rule expression.
+--
+-- 'expressionWithValues', 'evaluatedRule_expressionWithValues' - The rule expression value.
+--
+-- 'matched', 'evaluatedRule_matched' - Indicates whether the rule matched.
+--
+-- 'outcomes', 'evaluatedRule_outcomes' - The rule outcome.
+--
+-- 'ruleId', 'evaluatedRule_ruleId' - The rule ID.
+--
+-- 'ruleVersion', 'evaluatedRule_ruleVersion' - The rule version.
+newEvaluatedRule ::
+  EvaluatedRule
+newEvaluatedRule =
+  EvaluatedRule'
+    { evaluated = Prelude.Nothing,
+      expression = Prelude.Nothing,
+      expressionWithValues = Prelude.Nothing,
+      matched = Prelude.Nothing,
+      outcomes = Prelude.Nothing,
+      ruleId = Prelude.Nothing,
+      ruleVersion = Prelude.Nothing
+    }
+
+-- | Indicates whether the rule was evaluated.
+evaluatedRule_evaluated :: Lens.Lens' EvaluatedRule (Prelude.Maybe Prelude.Bool)
+evaluatedRule_evaluated = Lens.lens (\EvaluatedRule' {evaluated} -> evaluated) (\s@EvaluatedRule' {} a -> s {evaluated = a} :: EvaluatedRule)
+
+-- | The rule expression.
+evaluatedRule_expression :: Lens.Lens' EvaluatedRule (Prelude.Maybe Prelude.Text)
+evaluatedRule_expression = Lens.lens (\EvaluatedRule' {expression} -> expression) (\s@EvaluatedRule' {} a -> s {expression = a} :: EvaluatedRule) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The rule expression value.
+evaluatedRule_expressionWithValues :: Lens.Lens' EvaluatedRule (Prelude.Maybe Prelude.Text)
+evaluatedRule_expressionWithValues = Lens.lens (\EvaluatedRule' {expressionWithValues} -> expressionWithValues) (\s@EvaluatedRule' {} a -> s {expressionWithValues = a} :: EvaluatedRule) Prelude.. Lens.mapping Data._Sensitive
+
+-- | Indicates whether the rule matched.
+evaluatedRule_matched :: Lens.Lens' EvaluatedRule (Prelude.Maybe Prelude.Bool)
+evaluatedRule_matched = Lens.lens (\EvaluatedRule' {matched} -> matched) (\s@EvaluatedRule' {} a -> s {matched = a} :: EvaluatedRule)
+
+-- | The rule outcome.
+evaluatedRule_outcomes :: Lens.Lens' EvaluatedRule (Prelude.Maybe [Prelude.Text])
+evaluatedRule_outcomes = Lens.lens (\EvaluatedRule' {outcomes} -> outcomes) (\s@EvaluatedRule' {} a -> s {outcomes = a} :: EvaluatedRule) Prelude.. Lens.mapping Lens.coerced
+
+-- | The rule ID.
+evaluatedRule_ruleId :: Lens.Lens' EvaluatedRule (Prelude.Maybe Prelude.Text)
+evaluatedRule_ruleId = Lens.lens (\EvaluatedRule' {ruleId} -> ruleId) (\s@EvaluatedRule' {} a -> s {ruleId = a} :: EvaluatedRule)
+
+-- | The rule version.
+evaluatedRule_ruleVersion :: Lens.Lens' EvaluatedRule (Prelude.Maybe Prelude.Text)
+evaluatedRule_ruleVersion = Lens.lens (\EvaluatedRule' {ruleVersion} -> ruleVersion) (\s@EvaluatedRule' {} a -> s {ruleVersion = a} :: EvaluatedRule)
+
+instance Data.FromJSON EvaluatedRule where
+  parseJSON =
+    Data.withObject
+      "EvaluatedRule"
+      ( \x ->
+          EvaluatedRule'
+            Prelude.<$> (x Data..:? "evaluated")
+            Prelude.<*> (x Data..:? "expression")
+            Prelude.<*> (x Data..:? "expressionWithValues")
+            Prelude.<*> (x Data..:? "matched")
+            Prelude.<*> (x Data..:? "outcomes" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "ruleId")
+            Prelude.<*> (x Data..:? "ruleVersion")
+      )
+
+instance Prelude.Hashable EvaluatedRule where
+  hashWithSalt _salt EvaluatedRule' {..} =
+    _salt
+      `Prelude.hashWithSalt` evaluated
+      `Prelude.hashWithSalt` expression
+      `Prelude.hashWithSalt` expressionWithValues
+      `Prelude.hashWithSalt` matched
+      `Prelude.hashWithSalt` outcomes
+      `Prelude.hashWithSalt` ruleId
+      `Prelude.hashWithSalt` ruleVersion
+
+instance Prelude.NFData EvaluatedRule where
+  rnf EvaluatedRule' {..} =
+    Prelude.rnf evaluated
+      `Prelude.seq` Prelude.rnf expression
+      `Prelude.seq` Prelude.rnf expressionWithValues
+      `Prelude.seq` Prelude.rnf matched
+      `Prelude.seq` Prelude.rnf outcomes
+      `Prelude.seq` Prelude.rnf ruleId
+      `Prelude.seq` Prelude.rnf ruleVersion
diff --git a/gen/Amazonka/FraudDetector/Types/Event.hs b/gen/Amazonka/FraudDetector/Types/Event.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/Event.hs
@@ -0,0 +1,157 @@
+{-# 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.FraudDetector.Types.Event
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.FraudDetector.Types.Event where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.Entity
+import qualified Amazonka.Prelude as Prelude
+
+-- | The event details.
+--
+-- /See:/ 'newEvent' smart constructor.
+data Event = Event'
+  { -- | The label associated with the event.
+    currentLabel :: Prelude.Maybe Prelude.Text,
+    -- | The event entities.
+    entities :: Prelude.Maybe [Data.Sensitive Entity],
+    -- | The event ID.
+    eventId :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp that defines when the event under evaluation occurred. The
+    -- timestamp must be specified using ISO 8601 standard in UTC.
+    eventTimestamp :: Prelude.Maybe Prelude.Text,
+    -- | The event type.
+    eventTypeName :: Prelude.Maybe Prelude.Text,
+    -- | Names of the event type\'s variables you defined in Amazon Fraud
+    -- Detector to represent data elements and their corresponding values for
+    -- the event you are sending for evaluation.
+    eventVariables :: Prelude.Maybe (Prelude.HashMap Prelude.Text (Data.Sensitive Prelude.Text)),
+    -- | The timestamp associated with the label to update. The timestamp must be
+    -- specified using ISO 8601 standard in UTC.
+    labelTimestamp :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Event' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'currentLabel', 'event_currentLabel' - The label associated with the event.
+--
+-- 'entities', 'event_entities' - The event entities.
+--
+-- 'eventId', 'event_eventId' - The event ID.
+--
+-- 'eventTimestamp', 'event_eventTimestamp' - The timestamp that defines when the event under evaluation occurred. The
+-- timestamp must be specified using ISO 8601 standard in UTC.
+--
+-- 'eventTypeName', 'event_eventTypeName' - The event type.
+--
+-- 'eventVariables', 'event_eventVariables' - Names of the event type\'s variables you defined in Amazon Fraud
+-- Detector to represent data elements and their corresponding values for
+-- the event you are sending for evaluation.
+--
+-- 'labelTimestamp', 'event_labelTimestamp' - The timestamp associated with the label to update. The timestamp must be
+-- specified using ISO 8601 standard in UTC.
+newEvent ::
+  Event
+newEvent =
+  Event'
+    { currentLabel = Prelude.Nothing,
+      entities = Prelude.Nothing,
+      eventId = Prelude.Nothing,
+      eventTimestamp = Prelude.Nothing,
+      eventTypeName = Prelude.Nothing,
+      eventVariables = Prelude.Nothing,
+      labelTimestamp = Prelude.Nothing
+    }
+
+-- | The label associated with the event.
+event_currentLabel :: Lens.Lens' Event (Prelude.Maybe Prelude.Text)
+event_currentLabel = Lens.lens (\Event' {currentLabel} -> currentLabel) (\s@Event' {} a -> s {currentLabel = a} :: Event)
+
+-- | The event entities.
+event_entities :: Lens.Lens' Event (Prelude.Maybe [Entity])
+event_entities = Lens.lens (\Event' {entities} -> entities) (\s@Event' {} a -> s {entities = a} :: Event) Prelude.. Lens.mapping Lens.coerced
+
+-- | The event ID.
+event_eventId :: Lens.Lens' Event (Prelude.Maybe Prelude.Text)
+event_eventId = Lens.lens (\Event' {eventId} -> eventId) (\s@Event' {} a -> s {eventId = a} :: Event)
+
+-- | The timestamp that defines when the event under evaluation occurred. The
+-- timestamp must be specified using ISO 8601 standard in UTC.
+event_eventTimestamp :: Lens.Lens' Event (Prelude.Maybe Prelude.Text)
+event_eventTimestamp = Lens.lens (\Event' {eventTimestamp} -> eventTimestamp) (\s@Event' {} a -> s {eventTimestamp = a} :: Event)
+
+-- | The event type.
+event_eventTypeName :: Lens.Lens' Event (Prelude.Maybe Prelude.Text)
+event_eventTypeName = Lens.lens (\Event' {eventTypeName} -> eventTypeName) (\s@Event' {} a -> s {eventTypeName = a} :: Event)
+
+-- | Names of the event type\'s variables you defined in Amazon Fraud
+-- Detector to represent data elements and their corresponding values for
+-- the event you are sending for evaluation.
+event_eventVariables :: Lens.Lens' Event (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+event_eventVariables = Lens.lens (\Event' {eventVariables} -> eventVariables) (\s@Event' {} a -> s {eventVariables = a} :: Event) Prelude.. Lens.mapping Lens.coerced
+
+-- | The timestamp associated with the label to update. The timestamp must be
+-- specified using ISO 8601 standard in UTC.
+event_labelTimestamp :: Lens.Lens' Event (Prelude.Maybe Prelude.Text)
+event_labelTimestamp = Lens.lens (\Event' {labelTimestamp} -> labelTimestamp) (\s@Event' {} a -> s {labelTimestamp = a} :: Event)
+
+instance Data.FromJSON Event where
+  parseJSON =
+    Data.withObject
+      "Event"
+      ( \x ->
+          Event'
+            Prelude.<$> (x Data..:? "currentLabel")
+            Prelude.<*> (x Data..:? "entities" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "eventId")
+            Prelude.<*> (x Data..:? "eventTimestamp")
+            Prelude.<*> (x Data..:? "eventTypeName")
+            Prelude.<*> (x Data..:? "eventVariables" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "labelTimestamp")
+      )
+
+instance Prelude.Hashable Event where
+  hashWithSalt _salt Event' {..} =
+    _salt
+      `Prelude.hashWithSalt` currentLabel
+      `Prelude.hashWithSalt` entities
+      `Prelude.hashWithSalt` eventId
+      `Prelude.hashWithSalt` eventTimestamp
+      `Prelude.hashWithSalt` eventTypeName
+      `Prelude.hashWithSalt` eventVariables
+      `Prelude.hashWithSalt` labelTimestamp
+
+instance Prelude.NFData Event where
+  rnf Event' {..} =
+    Prelude.rnf currentLabel
+      `Prelude.seq` Prelude.rnf entities
+      `Prelude.seq` Prelude.rnf eventId
+      `Prelude.seq` Prelude.rnf eventTimestamp
+      `Prelude.seq` Prelude.rnf eventTypeName
+      `Prelude.seq` Prelude.rnf eventVariables
+      `Prelude.seq` Prelude.rnf labelTimestamp
diff --git a/gen/Amazonka/FraudDetector/Types/EventIngestion.hs b/gen/Amazonka/FraudDetector/Types/EventIngestion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/EventIngestion.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.FraudDetector.Types.EventIngestion
+-- Copyright   : (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.FraudDetector.Types.EventIngestion
+  ( EventIngestion
+      ( ..,
+        EventIngestion_DISABLED,
+        EventIngestion_ENABLED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EventIngestion = EventIngestion'
+  { fromEventIngestion ::
+      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 EventIngestion_DISABLED :: EventIngestion
+pattern EventIngestion_DISABLED = EventIngestion' "DISABLED"
+
+pattern EventIngestion_ENABLED :: EventIngestion
+pattern EventIngestion_ENABLED = EventIngestion' "ENABLED"
+
+{-# COMPLETE
+  EventIngestion_DISABLED,
+  EventIngestion_ENABLED,
+  EventIngestion'
+  #-}
diff --git a/gen/Amazonka/FraudDetector/Types/EventPredictionSummary.hs b/gen/Amazonka/FraudDetector/Types/EventPredictionSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/EventPredictionSummary.hs
@@ -0,0 +1,133 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.Types.EventPredictionSummary
+-- Copyright   : (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.FraudDetector.Types.EventPredictionSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the summary of an event prediction.
+--
+-- /See:/ 'newEventPredictionSummary' smart constructor.
+data EventPredictionSummary = EventPredictionSummary'
+  { -- | The detector ID.
+    detectorId :: Prelude.Maybe Prelude.Text,
+    -- | The detector version ID.
+    detectorVersionId :: Prelude.Maybe Prelude.Text,
+    -- | The event ID.
+    eventId :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp of the event.
+    eventTimestamp :: Prelude.Maybe Prelude.Text,
+    -- | The event type.
+    eventTypeName :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp when the prediction was generated.
+    predictionTimestamp :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EventPredictionSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detectorId', 'eventPredictionSummary_detectorId' - The detector ID.
+--
+-- 'detectorVersionId', 'eventPredictionSummary_detectorVersionId' - The detector version ID.
+--
+-- 'eventId', 'eventPredictionSummary_eventId' - The event ID.
+--
+-- 'eventTimestamp', 'eventPredictionSummary_eventTimestamp' - The timestamp of the event.
+--
+-- 'eventTypeName', 'eventPredictionSummary_eventTypeName' - The event type.
+--
+-- 'predictionTimestamp', 'eventPredictionSummary_predictionTimestamp' - The timestamp when the prediction was generated.
+newEventPredictionSummary ::
+  EventPredictionSummary
+newEventPredictionSummary =
+  EventPredictionSummary'
+    { detectorId =
+        Prelude.Nothing,
+      detectorVersionId = Prelude.Nothing,
+      eventId = Prelude.Nothing,
+      eventTimestamp = Prelude.Nothing,
+      eventTypeName = Prelude.Nothing,
+      predictionTimestamp = Prelude.Nothing
+    }
+
+-- | The detector ID.
+eventPredictionSummary_detectorId :: Lens.Lens' EventPredictionSummary (Prelude.Maybe Prelude.Text)
+eventPredictionSummary_detectorId = Lens.lens (\EventPredictionSummary' {detectorId} -> detectorId) (\s@EventPredictionSummary' {} a -> s {detectorId = a} :: EventPredictionSummary)
+
+-- | The detector version ID.
+eventPredictionSummary_detectorVersionId :: Lens.Lens' EventPredictionSummary (Prelude.Maybe Prelude.Text)
+eventPredictionSummary_detectorVersionId = Lens.lens (\EventPredictionSummary' {detectorVersionId} -> detectorVersionId) (\s@EventPredictionSummary' {} a -> s {detectorVersionId = a} :: EventPredictionSummary)
+
+-- | The event ID.
+eventPredictionSummary_eventId :: Lens.Lens' EventPredictionSummary (Prelude.Maybe Prelude.Text)
+eventPredictionSummary_eventId = Lens.lens (\EventPredictionSummary' {eventId} -> eventId) (\s@EventPredictionSummary' {} a -> s {eventId = a} :: EventPredictionSummary)
+
+-- | The timestamp of the event.
+eventPredictionSummary_eventTimestamp :: Lens.Lens' EventPredictionSummary (Prelude.Maybe Prelude.Text)
+eventPredictionSummary_eventTimestamp = Lens.lens (\EventPredictionSummary' {eventTimestamp} -> eventTimestamp) (\s@EventPredictionSummary' {} a -> s {eventTimestamp = a} :: EventPredictionSummary)
+
+-- | The event type.
+eventPredictionSummary_eventTypeName :: Lens.Lens' EventPredictionSummary (Prelude.Maybe Prelude.Text)
+eventPredictionSummary_eventTypeName = Lens.lens (\EventPredictionSummary' {eventTypeName} -> eventTypeName) (\s@EventPredictionSummary' {} a -> s {eventTypeName = a} :: EventPredictionSummary)
+
+-- | The timestamp when the prediction was generated.
+eventPredictionSummary_predictionTimestamp :: Lens.Lens' EventPredictionSummary (Prelude.Maybe Prelude.Text)
+eventPredictionSummary_predictionTimestamp = Lens.lens (\EventPredictionSummary' {predictionTimestamp} -> predictionTimestamp) (\s@EventPredictionSummary' {} a -> s {predictionTimestamp = a} :: EventPredictionSummary)
+
+instance Data.FromJSON EventPredictionSummary where
+  parseJSON =
+    Data.withObject
+      "EventPredictionSummary"
+      ( \x ->
+          EventPredictionSummary'
+            Prelude.<$> (x Data..:? "detectorId")
+            Prelude.<*> (x Data..:? "detectorVersionId")
+            Prelude.<*> (x Data..:? "eventId")
+            Prelude.<*> (x Data..:? "eventTimestamp")
+            Prelude.<*> (x Data..:? "eventTypeName")
+            Prelude.<*> (x Data..:? "predictionTimestamp")
+      )
+
+instance Prelude.Hashable EventPredictionSummary where
+  hashWithSalt _salt EventPredictionSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` detectorId
+      `Prelude.hashWithSalt` detectorVersionId
+      `Prelude.hashWithSalt` eventId
+      `Prelude.hashWithSalt` eventTimestamp
+      `Prelude.hashWithSalt` eventTypeName
+      `Prelude.hashWithSalt` predictionTimestamp
+
+instance Prelude.NFData EventPredictionSummary where
+  rnf EventPredictionSummary' {..} =
+    Prelude.rnf detectorId
+      `Prelude.seq` Prelude.rnf detectorVersionId
+      `Prelude.seq` Prelude.rnf eventId
+      `Prelude.seq` Prelude.rnf eventTimestamp
+      `Prelude.seq` Prelude.rnf eventTypeName
+      `Prelude.seq` Prelude.rnf predictionTimestamp
diff --git a/gen/Amazonka/FraudDetector/Types/EventType.hs b/gen/Amazonka/FraudDetector/Types/EventType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/EventType.hs
@@ -0,0 +1,191 @@
+{-# 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.FraudDetector.Types.EventType
+-- Copyright   : (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.FraudDetector.Types.EventType where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.EventIngestion
+import Amazonka.FraudDetector.Types.IngestedEventStatistics
+import qualified Amazonka.Prelude as Prelude
+
+-- | The event type details.
+--
+-- /See:/ 'newEventType' smart constructor.
+data EventType = EventType'
+  { -- | The entity type ARN.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Timestamp of when the event type was created.
+    createdTime :: Prelude.Maybe Prelude.Text,
+    -- | The event type description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The event type entity types.
+    entityTypes :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | If @Enabled@, Amazon Fraud Detector stores event data when you generate
+    -- a prediction and uses that data to update calculated variables in near
+    -- real-time. Amazon Fraud Detector uses this data, known as
+    -- @INGESTED_EVENTS@, to train your model and improve fraud predictions.
+    eventIngestion :: Prelude.Maybe EventIngestion,
+    -- | The event type event variables.
+    eventVariables :: Prelude.Maybe [Prelude.Text],
+    -- | Data about the stored events.
+    ingestedEventStatistics :: Prelude.Maybe IngestedEventStatistics,
+    -- | The event type labels.
+    labels :: Prelude.Maybe [Prelude.Text],
+    -- | Timestamp of when the event type was last updated.
+    lastUpdatedTime :: Prelude.Maybe Prelude.Text,
+    -- | The event type name.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EventType' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'eventType_arn' - The entity type ARN.
+--
+-- 'createdTime', 'eventType_createdTime' - Timestamp of when the event type was created.
+--
+-- 'description', 'eventType_description' - The event type description.
+--
+-- 'entityTypes', 'eventType_entityTypes' - The event type entity types.
+--
+-- 'eventIngestion', 'eventType_eventIngestion' - If @Enabled@, Amazon Fraud Detector stores event data when you generate
+-- a prediction and uses that data to update calculated variables in near
+-- real-time. Amazon Fraud Detector uses this data, known as
+-- @INGESTED_EVENTS@, to train your model and improve fraud predictions.
+--
+-- 'eventVariables', 'eventType_eventVariables' - The event type event variables.
+--
+-- 'ingestedEventStatistics', 'eventType_ingestedEventStatistics' - Data about the stored events.
+--
+-- 'labels', 'eventType_labels' - The event type labels.
+--
+-- 'lastUpdatedTime', 'eventType_lastUpdatedTime' - Timestamp of when the event type was last updated.
+--
+-- 'name', 'eventType_name' - The event type name.
+newEventType ::
+  EventType
+newEventType =
+  EventType'
+    { arn = Prelude.Nothing,
+      createdTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      entityTypes = Prelude.Nothing,
+      eventIngestion = Prelude.Nothing,
+      eventVariables = Prelude.Nothing,
+      ingestedEventStatistics = Prelude.Nothing,
+      labels = Prelude.Nothing,
+      lastUpdatedTime = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The entity type ARN.
+eventType_arn :: Lens.Lens' EventType (Prelude.Maybe Prelude.Text)
+eventType_arn = Lens.lens (\EventType' {arn} -> arn) (\s@EventType' {} a -> s {arn = a} :: EventType)
+
+-- | Timestamp of when the event type was created.
+eventType_createdTime :: Lens.Lens' EventType (Prelude.Maybe Prelude.Text)
+eventType_createdTime = Lens.lens (\EventType' {createdTime} -> createdTime) (\s@EventType' {} a -> s {createdTime = a} :: EventType)
+
+-- | The event type description.
+eventType_description :: Lens.Lens' EventType (Prelude.Maybe Prelude.Text)
+eventType_description = Lens.lens (\EventType' {description} -> description) (\s@EventType' {} a -> s {description = a} :: EventType)
+
+-- | The event type entity types.
+eventType_entityTypes :: Lens.Lens' EventType (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+eventType_entityTypes = Lens.lens (\EventType' {entityTypes} -> entityTypes) (\s@EventType' {} a -> s {entityTypes = a} :: EventType) Prelude.. Lens.mapping Lens.coerced
+
+-- | If @Enabled@, Amazon Fraud Detector stores event data when you generate
+-- a prediction and uses that data to update calculated variables in near
+-- real-time. Amazon Fraud Detector uses this data, known as
+-- @INGESTED_EVENTS@, to train your model and improve fraud predictions.
+eventType_eventIngestion :: Lens.Lens' EventType (Prelude.Maybe EventIngestion)
+eventType_eventIngestion = Lens.lens (\EventType' {eventIngestion} -> eventIngestion) (\s@EventType' {} a -> s {eventIngestion = a} :: EventType)
+
+-- | The event type event variables.
+eventType_eventVariables :: Lens.Lens' EventType (Prelude.Maybe [Prelude.Text])
+eventType_eventVariables = Lens.lens (\EventType' {eventVariables} -> eventVariables) (\s@EventType' {} a -> s {eventVariables = a} :: EventType) Prelude.. Lens.mapping Lens.coerced
+
+-- | Data about the stored events.
+eventType_ingestedEventStatistics :: Lens.Lens' EventType (Prelude.Maybe IngestedEventStatistics)
+eventType_ingestedEventStatistics = Lens.lens (\EventType' {ingestedEventStatistics} -> ingestedEventStatistics) (\s@EventType' {} a -> s {ingestedEventStatistics = a} :: EventType)
+
+-- | The event type labels.
+eventType_labels :: Lens.Lens' EventType (Prelude.Maybe [Prelude.Text])
+eventType_labels = Lens.lens (\EventType' {labels} -> labels) (\s@EventType' {} a -> s {labels = a} :: EventType) Prelude.. Lens.mapping Lens.coerced
+
+-- | Timestamp of when the event type was last updated.
+eventType_lastUpdatedTime :: Lens.Lens' EventType (Prelude.Maybe Prelude.Text)
+eventType_lastUpdatedTime = Lens.lens (\EventType' {lastUpdatedTime} -> lastUpdatedTime) (\s@EventType' {} a -> s {lastUpdatedTime = a} :: EventType)
+
+-- | The event type name.
+eventType_name :: Lens.Lens' EventType (Prelude.Maybe Prelude.Text)
+eventType_name = Lens.lens (\EventType' {name} -> name) (\s@EventType' {} a -> s {name = a} :: EventType)
+
+instance Data.FromJSON EventType where
+  parseJSON =
+    Data.withObject
+      "EventType"
+      ( \x ->
+          EventType'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "createdTime")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "entityTypes")
+            Prelude.<*> (x Data..:? "eventIngestion")
+            Prelude.<*> (x Data..:? "eventVariables" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "ingestedEventStatistics")
+            Prelude.<*> (x Data..:? "labels" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "lastUpdatedTime")
+            Prelude.<*> (x Data..:? "name")
+      )
+
+instance Prelude.Hashable EventType where
+  hashWithSalt _salt EventType' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` entityTypes
+      `Prelude.hashWithSalt` eventIngestion
+      `Prelude.hashWithSalt` eventVariables
+      `Prelude.hashWithSalt` ingestedEventStatistics
+      `Prelude.hashWithSalt` labels
+      `Prelude.hashWithSalt` lastUpdatedTime
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData EventType where
+  rnf EventType' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf entityTypes
+      `Prelude.seq` Prelude.rnf eventIngestion
+      `Prelude.seq` Prelude.rnf eventVariables
+      `Prelude.seq` Prelude.rnf ingestedEventStatistics
+      `Prelude.seq` Prelude.rnf labels
+      `Prelude.seq` Prelude.rnf lastUpdatedTime
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/FraudDetector/Types/EventVariableSummary.hs b/gen/Amazonka/FraudDetector/Types/EventVariableSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/EventVariableSummary.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.FraudDetector.Types.EventVariableSummary
+-- Copyright   : (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.FraudDetector.Types.EventVariableSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the summary of an event variable that was evaluated
+-- for generating prediction.
+--
+-- /See:/ 'newEventVariableSummary' smart constructor.
+data EventVariableSummary = EventVariableSummary'
+  { -- | The event variable name.
+    name :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The event variable source.
+    source :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The value of the event variable.
+    value :: Prelude.Maybe (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EventVariableSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'eventVariableSummary_name' - The event variable name.
+--
+-- 'source', 'eventVariableSummary_source' - The event variable source.
+--
+-- 'value', 'eventVariableSummary_value' - The value of the event variable.
+newEventVariableSummary ::
+  EventVariableSummary
+newEventVariableSummary =
+  EventVariableSummary'
+    { name = Prelude.Nothing,
+      source = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | The event variable name.
+eventVariableSummary_name :: Lens.Lens' EventVariableSummary (Prelude.Maybe Prelude.Text)
+eventVariableSummary_name = Lens.lens (\EventVariableSummary' {name} -> name) (\s@EventVariableSummary' {} a -> s {name = a} :: EventVariableSummary) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The event variable source.
+eventVariableSummary_source :: Lens.Lens' EventVariableSummary (Prelude.Maybe Prelude.Text)
+eventVariableSummary_source = Lens.lens (\EventVariableSummary' {source} -> source) (\s@EventVariableSummary' {} a -> s {source = a} :: EventVariableSummary) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The value of the event variable.
+eventVariableSummary_value :: Lens.Lens' EventVariableSummary (Prelude.Maybe Prelude.Text)
+eventVariableSummary_value = Lens.lens (\EventVariableSummary' {value} -> value) (\s@EventVariableSummary' {} a -> s {value = a} :: EventVariableSummary) Prelude.. Lens.mapping Data._Sensitive
+
+instance Data.FromJSON EventVariableSummary where
+  parseJSON =
+    Data.withObject
+      "EventVariableSummary"
+      ( \x ->
+          EventVariableSummary'
+            Prelude.<$> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "source")
+            Prelude.<*> (x Data..:? "value")
+      )
+
+instance Prelude.Hashable EventVariableSummary where
+  hashWithSalt _salt EventVariableSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` source
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData EventVariableSummary where
+  rnf EventVariableSummary' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf source
+      `Prelude.seq` Prelude.rnf value
diff --git a/gen/Amazonka/FraudDetector/Types/ExternalEventsDetail.hs b/gen/Amazonka/FraudDetector/Types/ExternalEventsDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/ExternalEventsDetail.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.FraudDetector.Types.ExternalEventsDetail
+-- Copyright   : (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.FraudDetector.Types.ExternalEventsDetail 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 for the external events data used for model version training.
+--
+-- /See:/ 'newExternalEventsDetail' smart constructor.
+data ExternalEventsDetail = ExternalEventsDetail'
+  { -- | The Amazon S3 bucket location for the data.
+    dataLocation :: Prelude.Text,
+    -- | The ARN of the role that provides Amazon Fraud Detector access to the
+    -- data location.
+    dataAccessRoleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExternalEventsDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataLocation', 'externalEventsDetail_dataLocation' - The Amazon S3 bucket location for the data.
+--
+-- 'dataAccessRoleArn', 'externalEventsDetail_dataAccessRoleArn' - The ARN of the role that provides Amazon Fraud Detector access to the
+-- data location.
+newExternalEventsDetail ::
+  -- | 'dataLocation'
+  Prelude.Text ->
+  -- | 'dataAccessRoleArn'
+  Prelude.Text ->
+  ExternalEventsDetail
+newExternalEventsDetail
+  pDataLocation_
+  pDataAccessRoleArn_ =
+    ExternalEventsDetail'
+      { dataLocation =
+          pDataLocation_,
+        dataAccessRoleArn = pDataAccessRoleArn_
+      }
+
+-- | The Amazon S3 bucket location for the data.
+externalEventsDetail_dataLocation :: Lens.Lens' ExternalEventsDetail Prelude.Text
+externalEventsDetail_dataLocation = Lens.lens (\ExternalEventsDetail' {dataLocation} -> dataLocation) (\s@ExternalEventsDetail' {} a -> s {dataLocation = a} :: ExternalEventsDetail)
+
+-- | The ARN of the role that provides Amazon Fraud Detector access to the
+-- data location.
+externalEventsDetail_dataAccessRoleArn :: Lens.Lens' ExternalEventsDetail Prelude.Text
+externalEventsDetail_dataAccessRoleArn = Lens.lens (\ExternalEventsDetail' {dataAccessRoleArn} -> dataAccessRoleArn) (\s@ExternalEventsDetail' {} a -> s {dataAccessRoleArn = a} :: ExternalEventsDetail)
+
+instance Data.FromJSON ExternalEventsDetail where
+  parseJSON =
+    Data.withObject
+      "ExternalEventsDetail"
+      ( \x ->
+          ExternalEventsDetail'
+            Prelude.<$> (x Data..: "dataLocation")
+            Prelude.<*> (x Data..: "dataAccessRoleArn")
+      )
+
+instance Prelude.Hashable ExternalEventsDetail where
+  hashWithSalt _salt ExternalEventsDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataLocation
+      `Prelude.hashWithSalt` dataAccessRoleArn
+
+instance Prelude.NFData ExternalEventsDetail where
+  rnf ExternalEventsDetail' {..} =
+    Prelude.rnf dataLocation
+      `Prelude.seq` Prelude.rnf dataAccessRoleArn
+
+instance Data.ToJSON ExternalEventsDetail where
+  toJSON ExternalEventsDetail' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("dataLocation" Data..= dataLocation),
+            Prelude.Just
+              ("dataAccessRoleArn" Data..= dataAccessRoleArn)
+          ]
+      )
diff --git a/gen/Amazonka/FraudDetector/Types/ExternalModel.hs b/gen/Amazonka/FraudDetector/Types/ExternalModel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/ExternalModel.hs
@@ -0,0 +1,172 @@
+{-# 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.FraudDetector.Types.ExternalModel
+-- Copyright   : (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.FraudDetector.Types.ExternalModel where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.ModelEndpointStatus
+import Amazonka.FraudDetector.Types.ModelInputConfiguration
+import Amazonka.FraudDetector.Types.ModelOutputConfiguration
+import Amazonka.FraudDetector.Types.ModelSource
+import qualified Amazonka.Prelude as Prelude
+
+-- | The Amazon SageMaker model.
+--
+-- /See:/ 'newExternalModel' smart constructor.
+data ExternalModel = ExternalModel'
+  { -- | The model ARN.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Timestamp of when the model was last created.
+    createdTime :: Prelude.Maybe Prelude.Text,
+    -- | The input configuration.
+    inputConfiguration :: Prelude.Maybe ModelInputConfiguration,
+    -- | The role used to invoke the model.
+    invokeModelEndpointRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | Timestamp of when the model was last updated.
+    lastUpdatedTime :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon SageMaker model endpoints.
+    modelEndpoint :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Fraud Detector status for the external model endpoint
+    modelEndpointStatus :: Prelude.Maybe ModelEndpointStatus,
+    -- | The source of the model.
+    modelSource :: Prelude.Maybe ModelSource,
+    -- | The output configuration.
+    outputConfiguration :: Prelude.Maybe ModelOutputConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExternalModel' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'externalModel_arn' - The model ARN.
+--
+-- 'createdTime', 'externalModel_createdTime' - Timestamp of when the model was last created.
+--
+-- 'inputConfiguration', 'externalModel_inputConfiguration' - The input configuration.
+--
+-- 'invokeModelEndpointRoleArn', 'externalModel_invokeModelEndpointRoleArn' - The role used to invoke the model.
+--
+-- 'lastUpdatedTime', 'externalModel_lastUpdatedTime' - Timestamp of when the model was last updated.
+--
+-- 'modelEndpoint', 'externalModel_modelEndpoint' - The Amazon SageMaker model endpoints.
+--
+-- 'modelEndpointStatus', 'externalModel_modelEndpointStatus' - The Amazon Fraud Detector status for the external model endpoint
+--
+-- 'modelSource', 'externalModel_modelSource' - The source of the model.
+--
+-- 'outputConfiguration', 'externalModel_outputConfiguration' - The output configuration.
+newExternalModel ::
+  ExternalModel
+newExternalModel =
+  ExternalModel'
+    { arn = Prelude.Nothing,
+      createdTime = Prelude.Nothing,
+      inputConfiguration = Prelude.Nothing,
+      invokeModelEndpointRoleArn = Prelude.Nothing,
+      lastUpdatedTime = Prelude.Nothing,
+      modelEndpoint = Prelude.Nothing,
+      modelEndpointStatus = Prelude.Nothing,
+      modelSource = Prelude.Nothing,
+      outputConfiguration = Prelude.Nothing
+    }
+
+-- | The model ARN.
+externalModel_arn :: Lens.Lens' ExternalModel (Prelude.Maybe Prelude.Text)
+externalModel_arn = Lens.lens (\ExternalModel' {arn} -> arn) (\s@ExternalModel' {} a -> s {arn = a} :: ExternalModel)
+
+-- | Timestamp of when the model was last created.
+externalModel_createdTime :: Lens.Lens' ExternalModel (Prelude.Maybe Prelude.Text)
+externalModel_createdTime = Lens.lens (\ExternalModel' {createdTime} -> createdTime) (\s@ExternalModel' {} a -> s {createdTime = a} :: ExternalModel)
+
+-- | The input configuration.
+externalModel_inputConfiguration :: Lens.Lens' ExternalModel (Prelude.Maybe ModelInputConfiguration)
+externalModel_inputConfiguration = Lens.lens (\ExternalModel' {inputConfiguration} -> inputConfiguration) (\s@ExternalModel' {} a -> s {inputConfiguration = a} :: ExternalModel)
+
+-- | The role used to invoke the model.
+externalModel_invokeModelEndpointRoleArn :: Lens.Lens' ExternalModel (Prelude.Maybe Prelude.Text)
+externalModel_invokeModelEndpointRoleArn = Lens.lens (\ExternalModel' {invokeModelEndpointRoleArn} -> invokeModelEndpointRoleArn) (\s@ExternalModel' {} a -> s {invokeModelEndpointRoleArn = a} :: ExternalModel)
+
+-- | Timestamp of when the model was last updated.
+externalModel_lastUpdatedTime :: Lens.Lens' ExternalModel (Prelude.Maybe Prelude.Text)
+externalModel_lastUpdatedTime = Lens.lens (\ExternalModel' {lastUpdatedTime} -> lastUpdatedTime) (\s@ExternalModel' {} a -> s {lastUpdatedTime = a} :: ExternalModel)
+
+-- | The Amazon SageMaker model endpoints.
+externalModel_modelEndpoint :: Lens.Lens' ExternalModel (Prelude.Maybe Prelude.Text)
+externalModel_modelEndpoint = Lens.lens (\ExternalModel' {modelEndpoint} -> modelEndpoint) (\s@ExternalModel' {} a -> s {modelEndpoint = a} :: ExternalModel)
+
+-- | The Amazon Fraud Detector status for the external model endpoint
+externalModel_modelEndpointStatus :: Lens.Lens' ExternalModel (Prelude.Maybe ModelEndpointStatus)
+externalModel_modelEndpointStatus = Lens.lens (\ExternalModel' {modelEndpointStatus} -> modelEndpointStatus) (\s@ExternalModel' {} a -> s {modelEndpointStatus = a} :: ExternalModel)
+
+-- | The source of the model.
+externalModel_modelSource :: Lens.Lens' ExternalModel (Prelude.Maybe ModelSource)
+externalModel_modelSource = Lens.lens (\ExternalModel' {modelSource} -> modelSource) (\s@ExternalModel' {} a -> s {modelSource = a} :: ExternalModel)
+
+-- | The output configuration.
+externalModel_outputConfiguration :: Lens.Lens' ExternalModel (Prelude.Maybe ModelOutputConfiguration)
+externalModel_outputConfiguration = Lens.lens (\ExternalModel' {outputConfiguration} -> outputConfiguration) (\s@ExternalModel' {} a -> s {outputConfiguration = a} :: ExternalModel)
+
+instance Data.FromJSON ExternalModel where
+  parseJSON =
+    Data.withObject
+      "ExternalModel"
+      ( \x ->
+          ExternalModel'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "createdTime")
+            Prelude.<*> (x Data..:? "inputConfiguration")
+            Prelude.<*> (x Data..:? "invokeModelEndpointRoleArn")
+            Prelude.<*> (x Data..:? "lastUpdatedTime")
+            Prelude.<*> (x Data..:? "modelEndpoint")
+            Prelude.<*> (x Data..:? "modelEndpointStatus")
+            Prelude.<*> (x Data..:? "modelSource")
+            Prelude.<*> (x Data..:? "outputConfiguration")
+      )
+
+instance Prelude.Hashable ExternalModel where
+  hashWithSalt _salt ExternalModel' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdTime
+      `Prelude.hashWithSalt` inputConfiguration
+      `Prelude.hashWithSalt` invokeModelEndpointRoleArn
+      `Prelude.hashWithSalt` lastUpdatedTime
+      `Prelude.hashWithSalt` modelEndpoint
+      `Prelude.hashWithSalt` modelEndpointStatus
+      `Prelude.hashWithSalt` modelSource
+      `Prelude.hashWithSalt` outputConfiguration
+
+instance Prelude.NFData ExternalModel where
+  rnf ExternalModel' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdTime
+      `Prelude.seq` Prelude.rnf inputConfiguration
+      `Prelude.seq` Prelude.rnf invokeModelEndpointRoleArn
+      `Prelude.seq` Prelude.rnf lastUpdatedTime
+      `Prelude.seq` Prelude.rnf modelEndpoint
+      `Prelude.seq` Prelude.rnf modelEndpointStatus
+      `Prelude.seq` Prelude.rnf modelSource
+      `Prelude.seq` Prelude.rnf outputConfiguration
diff --git a/gen/Amazonka/FraudDetector/Types/ExternalModelOutputs.hs b/gen/Amazonka/FraudDetector/Types/ExternalModelOutputs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/ExternalModelOutputs.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.FraudDetector.Types.ExternalModelOutputs
+-- Copyright   : (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.FraudDetector.Types.ExternalModelOutputs where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.ExternalModelSummary
+import qualified Amazonka.Prelude as Prelude
+
+-- | The fraud prediction scores from Amazon SageMaker model.
+--
+-- /See:/ 'newExternalModelOutputs' smart constructor.
+data ExternalModelOutputs = ExternalModelOutputs'
+  { -- | The Amazon SageMaker model.
+    externalModel :: Prelude.Maybe ExternalModelSummary,
+    -- | The fraud prediction scores from Amazon SageMaker model.
+    outputs :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExternalModelOutputs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'externalModel', 'externalModelOutputs_externalModel' - The Amazon SageMaker model.
+--
+-- 'outputs', 'externalModelOutputs_outputs' - The fraud prediction scores from Amazon SageMaker model.
+newExternalModelOutputs ::
+  ExternalModelOutputs
+newExternalModelOutputs =
+  ExternalModelOutputs'
+    { externalModel =
+        Prelude.Nothing,
+      outputs = Prelude.Nothing
+    }
+
+-- | The Amazon SageMaker model.
+externalModelOutputs_externalModel :: Lens.Lens' ExternalModelOutputs (Prelude.Maybe ExternalModelSummary)
+externalModelOutputs_externalModel = Lens.lens (\ExternalModelOutputs' {externalModel} -> externalModel) (\s@ExternalModelOutputs' {} a -> s {externalModel = a} :: ExternalModelOutputs)
+
+-- | The fraud prediction scores from Amazon SageMaker model.
+externalModelOutputs_outputs :: Lens.Lens' ExternalModelOutputs (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+externalModelOutputs_outputs = Lens.lens (\ExternalModelOutputs' {outputs} -> outputs) (\s@ExternalModelOutputs' {} a -> s {outputs = a} :: ExternalModelOutputs) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ExternalModelOutputs where
+  parseJSON =
+    Data.withObject
+      "ExternalModelOutputs"
+      ( \x ->
+          ExternalModelOutputs'
+            Prelude.<$> (x Data..:? "externalModel")
+            Prelude.<*> (x Data..:? "outputs" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable ExternalModelOutputs where
+  hashWithSalt _salt ExternalModelOutputs' {..} =
+    _salt
+      `Prelude.hashWithSalt` externalModel
+      `Prelude.hashWithSalt` outputs
+
+instance Prelude.NFData ExternalModelOutputs where
+  rnf ExternalModelOutputs' {..} =
+    Prelude.rnf externalModel
+      `Prelude.seq` Prelude.rnf outputs
diff --git a/gen/Amazonka/FraudDetector/Types/ExternalModelSummary.hs b/gen/Amazonka/FraudDetector/Types/ExternalModelSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/ExternalModelSummary.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.FraudDetector.Types.ExternalModelSummary
+-- Copyright   : (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.FraudDetector.Types.ExternalModelSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.ModelSource
+import qualified Amazonka.Prelude as Prelude
+
+-- | The Amazon SageMaker model.
+--
+-- /See:/ 'newExternalModelSummary' smart constructor.
+data ExternalModelSummary = ExternalModelSummary'
+  { -- | The endpoint of the Amazon SageMaker model.
+    modelEndpoint :: Prelude.Maybe Prelude.Text,
+    -- | The source of the model.
+    modelSource :: Prelude.Maybe ModelSource
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExternalModelSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'modelEndpoint', 'externalModelSummary_modelEndpoint' - The endpoint of the Amazon SageMaker model.
+--
+-- 'modelSource', 'externalModelSummary_modelSource' - The source of the model.
+newExternalModelSummary ::
+  ExternalModelSummary
+newExternalModelSummary =
+  ExternalModelSummary'
+    { modelEndpoint =
+        Prelude.Nothing,
+      modelSource = Prelude.Nothing
+    }
+
+-- | The endpoint of the Amazon SageMaker model.
+externalModelSummary_modelEndpoint :: Lens.Lens' ExternalModelSummary (Prelude.Maybe Prelude.Text)
+externalModelSummary_modelEndpoint = Lens.lens (\ExternalModelSummary' {modelEndpoint} -> modelEndpoint) (\s@ExternalModelSummary' {} a -> s {modelEndpoint = a} :: ExternalModelSummary)
+
+-- | The source of the model.
+externalModelSummary_modelSource :: Lens.Lens' ExternalModelSummary (Prelude.Maybe ModelSource)
+externalModelSummary_modelSource = Lens.lens (\ExternalModelSummary' {modelSource} -> modelSource) (\s@ExternalModelSummary' {} a -> s {modelSource = a} :: ExternalModelSummary)
+
+instance Data.FromJSON ExternalModelSummary where
+  parseJSON =
+    Data.withObject
+      "ExternalModelSummary"
+      ( \x ->
+          ExternalModelSummary'
+            Prelude.<$> (x Data..:? "modelEndpoint")
+            Prelude.<*> (x Data..:? "modelSource")
+      )
+
+instance Prelude.Hashable ExternalModelSummary where
+  hashWithSalt _salt ExternalModelSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` modelEndpoint
+      `Prelude.hashWithSalt` modelSource
+
+instance Prelude.NFData ExternalModelSummary where
+  rnf ExternalModelSummary' {..} =
+    Prelude.rnf modelEndpoint
+      `Prelude.seq` Prelude.rnf modelSource
diff --git a/gen/Amazonka/FraudDetector/Types/FieldValidationMessage.hs b/gen/Amazonka/FraudDetector/Types/FieldValidationMessage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/FieldValidationMessage.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.FraudDetector.Types.FieldValidationMessage
+-- Copyright   : (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.FraudDetector.Types.FieldValidationMessage 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 message details.
+--
+-- /See:/ 'newFieldValidationMessage' smart constructor.
+data FieldValidationMessage = FieldValidationMessage'
+  { -- | The message content.
+    content :: Prelude.Maybe Prelude.Text,
+    -- | The field name.
+    fieldName :: Prelude.Maybe Prelude.Text,
+    -- | The message ID.
+    identifier :: Prelude.Maybe Prelude.Text,
+    -- | The message title.
+    title :: Prelude.Maybe Prelude.Text,
+    -- | The message type.
+    type' :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FieldValidationMessage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'content', 'fieldValidationMessage_content' - The message content.
+--
+-- 'fieldName', 'fieldValidationMessage_fieldName' - The field name.
+--
+-- 'identifier', 'fieldValidationMessage_identifier' - The message ID.
+--
+-- 'title', 'fieldValidationMessage_title' - The message title.
+--
+-- 'type'', 'fieldValidationMessage_type' - The message type.
+newFieldValidationMessage ::
+  FieldValidationMessage
+newFieldValidationMessage =
+  FieldValidationMessage'
+    { content = Prelude.Nothing,
+      fieldName = Prelude.Nothing,
+      identifier = Prelude.Nothing,
+      title = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The message content.
+fieldValidationMessage_content :: Lens.Lens' FieldValidationMessage (Prelude.Maybe Prelude.Text)
+fieldValidationMessage_content = Lens.lens (\FieldValidationMessage' {content} -> content) (\s@FieldValidationMessage' {} a -> s {content = a} :: FieldValidationMessage)
+
+-- | The field name.
+fieldValidationMessage_fieldName :: Lens.Lens' FieldValidationMessage (Prelude.Maybe Prelude.Text)
+fieldValidationMessage_fieldName = Lens.lens (\FieldValidationMessage' {fieldName} -> fieldName) (\s@FieldValidationMessage' {} a -> s {fieldName = a} :: FieldValidationMessage)
+
+-- | The message ID.
+fieldValidationMessage_identifier :: Lens.Lens' FieldValidationMessage (Prelude.Maybe Prelude.Text)
+fieldValidationMessage_identifier = Lens.lens (\FieldValidationMessage' {identifier} -> identifier) (\s@FieldValidationMessage' {} a -> s {identifier = a} :: FieldValidationMessage)
+
+-- | The message title.
+fieldValidationMessage_title :: Lens.Lens' FieldValidationMessage (Prelude.Maybe Prelude.Text)
+fieldValidationMessage_title = Lens.lens (\FieldValidationMessage' {title} -> title) (\s@FieldValidationMessage' {} a -> s {title = a} :: FieldValidationMessage)
+
+-- | The message type.
+fieldValidationMessage_type :: Lens.Lens' FieldValidationMessage (Prelude.Maybe Prelude.Text)
+fieldValidationMessage_type = Lens.lens (\FieldValidationMessage' {type'} -> type') (\s@FieldValidationMessage' {} a -> s {type' = a} :: FieldValidationMessage)
+
+instance Data.FromJSON FieldValidationMessage where
+  parseJSON =
+    Data.withObject
+      "FieldValidationMessage"
+      ( \x ->
+          FieldValidationMessage'
+            Prelude.<$> (x Data..:? "content")
+            Prelude.<*> (x Data..:? "fieldName")
+            Prelude.<*> (x Data..:? "identifier")
+            Prelude.<*> (x Data..:? "title")
+            Prelude.<*> (x Data..:? "type")
+      )
+
+instance Prelude.Hashable FieldValidationMessage where
+  hashWithSalt _salt FieldValidationMessage' {..} =
+    _salt
+      `Prelude.hashWithSalt` content
+      `Prelude.hashWithSalt` fieldName
+      `Prelude.hashWithSalt` identifier
+      `Prelude.hashWithSalt` title
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData FieldValidationMessage where
+  rnf FieldValidationMessage' {..} =
+    Prelude.rnf content
+      `Prelude.seq` Prelude.rnf fieldName
+      `Prelude.seq` Prelude.rnf identifier
+      `Prelude.seq` Prelude.rnf title
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/FraudDetector/Types/FileValidationMessage.hs b/gen/Amazonka/FraudDetector/Types/FileValidationMessage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/FileValidationMessage.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.FraudDetector.Types.FileValidationMessage
+-- Copyright   : (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.FraudDetector.Types.FileValidationMessage 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 message details.
+--
+-- /See:/ 'newFileValidationMessage' smart constructor.
+data FileValidationMessage = FileValidationMessage'
+  { -- | The message content.
+    content :: Prelude.Maybe Prelude.Text,
+    -- | The message title.
+    title :: Prelude.Maybe Prelude.Text,
+    -- | The message type.
+    type' :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FileValidationMessage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'content', 'fileValidationMessage_content' - The message content.
+--
+-- 'title', 'fileValidationMessage_title' - The message title.
+--
+-- 'type'', 'fileValidationMessage_type' - The message type.
+newFileValidationMessage ::
+  FileValidationMessage
+newFileValidationMessage =
+  FileValidationMessage'
+    { content = Prelude.Nothing,
+      title = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The message content.
+fileValidationMessage_content :: Lens.Lens' FileValidationMessage (Prelude.Maybe Prelude.Text)
+fileValidationMessage_content = Lens.lens (\FileValidationMessage' {content} -> content) (\s@FileValidationMessage' {} a -> s {content = a} :: FileValidationMessage)
+
+-- | The message title.
+fileValidationMessage_title :: Lens.Lens' FileValidationMessage (Prelude.Maybe Prelude.Text)
+fileValidationMessage_title = Lens.lens (\FileValidationMessage' {title} -> title) (\s@FileValidationMessage' {} a -> s {title = a} :: FileValidationMessage)
+
+-- | The message type.
+fileValidationMessage_type :: Lens.Lens' FileValidationMessage (Prelude.Maybe Prelude.Text)
+fileValidationMessage_type = Lens.lens (\FileValidationMessage' {type'} -> type') (\s@FileValidationMessage' {} a -> s {type' = a} :: FileValidationMessage)
+
+instance Data.FromJSON FileValidationMessage where
+  parseJSON =
+    Data.withObject
+      "FileValidationMessage"
+      ( \x ->
+          FileValidationMessage'
+            Prelude.<$> (x Data..:? "content")
+            Prelude.<*> (x Data..:? "title")
+            Prelude.<*> (x Data..:? "type")
+      )
+
+instance Prelude.Hashable FileValidationMessage where
+  hashWithSalt _salt FileValidationMessage' {..} =
+    _salt
+      `Prelude.hashWithSalt` content
+      `Prelude.hashWithSalt` title
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData FileValidationMessage where
+  rnf FileValidationMessage' {..} =
+    Prelude.rnf content
+      `Prelude.seq` Prelude.rnf title
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/FraudDetector/Types/FilterCondition.hs b/gen/Amazonka/FraudDetector/Types/FilterCondition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/FilterCondition.hs
@@ -0,0 +1,69 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.Types.FilterCondition
+-- Copyright   : (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.FraudDetector.Types.FilterCondition 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 conditional statement for filtering a list of past predictions.
+--
+-- /See:/ 'newFilterCondition' smart constructor.
+data FilterCondition = FilterCondition'
+  { -- | A statement containing a resource property and a value to specify filter
+    -- condition.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FilterCondition' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'value', 'filterCondition_value' - A statement containing a resource property and a value to specify filter
+-- condition.
+newFilterCondition ::
+  FilterCondition
+newFilterCondition =
+  FilterCondition' {value = Prelude.Nothing}
+
+-- | A statement containing a resource property and a value to specify filter
+-- condition.
+filterCondition_value :: Lens.Lens' FilterCondition (Prelude.Maybe Prelude.Text)
+filterCondition_value = Lens.lens (\FilterCondition' {value} -> value) (\s@FilterCondition' {} a -> s {value = a} :: FilterCondition)
+
+instance Prelude.Hashable FilterCondition where
+  hashWithSalt _salt FilterCondition' {..} =
+    _salt `Prelude.hashWithSalt` value
+
+instance Prelude.NFData FilterCondition where
+  rnf FilterCondition' {..} = Prelude.rnf value
+
+instance Data.ToJSON FilterCondition where
+  toJSON FilterCondition' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("value" Data..=) Prelude.<$> value]
+      )
diff --git a/gen/Amazonka/FraudDetector/Types/IngestedEventStatistics.hs b/gen/Amazonka/FraudDetector/Types/IngestedEventStatistics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/IngestedEventStatistics.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.FraudDetector.Types.IngestedEventStatistics
+-- Copyright   : (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.FraudDetector.Types.IngestedEventStatistics where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Data about the stored events.
+--
+-- /See:/ 'newIngestedEventStatistics' smart constructor.
+data IngestedEventStatistics = IngestedEventStatistics'
+  { -- | The total size of the stored events.
+    eventDataSizeInBytes :: Prelude.Maybe Prelude.Integer,
+    -- | Timestamp of when the stored event was last updated.
+    lastUpdatedTime :: Prelude.Maybe Prelude.Text,
+    -- | The oldest stored event.
+    leastRecentEvent :: Prelude.Maybe Prelude.Text,
+    -- | The newest stored event.
+    mostRecentEvent :: Prelude.Maybe Prelude.Text,
+    -- | The number of stored events.
+    numberOfEvents :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IngestedEventStatistics' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eventDataSizeInBytes', 'ingestedEventStatistics_eventDataSizeInBytes' - The total size of the stored events.
+--
+-- 'lastUpdatedTime', 'ingestedEventStatistics_lastUpdatedTime' - Timestamp of when the stored event was last updated.
+--
+-- 'leastRecentEvent', 'ingestedEventStatistics_leastRecentEvent' - The oldest stored event.
+--
+-- 'mostRecentEvent', 'ingestedEventStatistics_mostRecentEvent' - The newest stored event.
+--
+-- 'numberOfEvents', 'ingestedEventStatistics_numberOfEvents' - The number of stored events.
+newIngestedEventStatistics ::
+  IngestedEventStatistics
+newIngestedEventStatistics =
+  IngestedEventStatistics'
+    { eventDataSizeInBytes =
+        Prelude.Nothing,
+      lastUpdatedTime = Prelude.Nothing,
+      leastRecentEvent = Prelude.Nothing,
+      mostRecentEvent = Prelude.Nothing,
+      numberOfEvents = Prelude.Nothing
+    }
+
+-- | The total size of the stored events.
+ingestedEventStatistics_eventDataSizeInBytes :: Lens.Lens' IngestedEventStatistics (Prelude.Maybe Prelude.Integer)
+ingestedEventStatistics_eventDataSizeInBytes = Lens.lens (\IngestedEventStatistics' {eventDataSizeInBytes} -> eventDataSizeInBytes) (\s@IngestedEventStatistics' {} a -> s {eventDataSizeInBytes = a} :: IngestedEventStatistics)
+
+-- | Timestamp of when the stored event was last updated.
+ingestedEventStatistics_lastUpdatedTime :: Lens.Lens' IngestedEventStatistics (Prelude.Maybe Prelude.Text)
+ingestedEventStatistics_lastUpdatedTime = Lens.lens (\IngestedEventStatistics' {lastUpdatedTime} -> lastUpdatedTime) (\s@IngestedEventStatistics' {} a -> s {lastUpdatedTime = a} :: IngestedEventStatistics)
+
+-- | The oldest stored event.
+ingestedEventStatistics_leastRecentEvent :: Lens.Lens' IngestedEventStatistics (Prelude.Maybe Prelude.Text)
+ingestedEventStatistics_leastRecentEvent = Lens.lens (\IngestedEventStatistics' {leastRecentEvent} -> leastRecentEvent) (\s@IngestedEventStatistics' {} a -> s {leastRecentEvent = a} :: IngestedEventStatistics)
+
+-- | The newest stored event.
+ingestedEventStatistics_mostRecentEvent :: Lens.Lens' IngestedEventStatistics (Prelude.Maybe Prelude.Text)
+ingestedEventStatistics_mostRecentEvent = Lens.lens (\IngestedEventStatistics' {mostRecentEvent} -> mostRecentEvent) (\s@IngestedEventStatistics' {} a -> s {mostRecentEvent = a} :: IngestedEventStatistics)
+
+-- | The number of stored events.
+ingestedEventStatistics_numberOfEvents :: Lens.Lens' IngestedEventStatistics (Prelude.Maybe Prelude.Integer)
+ingestedEventStatistics_numberOfEvents = Lens.lens (\IngestedEventStatistics' {numberOfEvents} -> numberOfEvents) (\s@IngestedEventStatistics' {} a -> s {numberOfEvents = a} :: IngestedEventStatistics)
+
+instance Data.FromJSON IngestedEventStatistics where
+  parseJSON =
+    Data.withObject
+      "IngestedEventStatistics"
+      ( \x ->
+          IngestedEventStatistics'
+            Prelude.<$> (x Data..:? "eventDataSizeInBytes")
+            Prelude.<*> (x Data..:? "lastUpdatedTime")
+            Prelude.<*> (x Data..:? "leastRecentEvent")
+            Prelude.<*> (x Data..:? "mostRecentEvent")
+            Prelude.<*> (x Data..:? "numberOfEvents")
+      )
+
+instance Prelude.Hashable IngestedEventStatistics where
+  hashWithSalt _salt IngestedEventStatistics' {..} =
+    _salt
+      `Prelude.hashWithSalt` eventDataSizeInBytes
+      `Prelude.hashWithSalt` lastUpdatedTime
+      `Prelude.hashWithSalt` leastRecentEvent
+      `Prelude.hashWithSalt` mostRecentEvent
+      `Prelude.hashWithSalt` numberOfEvents
+
+instance Prelude.NFData IngestedEventStatistics where
+  rnf IngestedEventStatistics' {..} =
+    Prelude.rnf eventDataSizeInBytes
+      `Prelude.seq` Prelude.rnf lastUpdatedTime
+      `Prelude.seq` Prelude.rnf leastRecentEvent
+      `Prelude.seq` Prelude.rnf mostRecentEvent
+      `Prelude.seq` Prelude.rnf numberOfEvents
diff --git a/gen/Amazonka/FraudDetector/Types/IngestedEventsDetail.hs b/gen/Amazonka/FraudDetector/Types/IngestedEventsDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/IngestedEventsDetail.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.FraudDetector.Types.IngestedEventsDetail
+-- Copyright   : (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.FraudDetector.Types.IngestedEventsDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.IngestedEventsTimeWindow
+import qualified Amazonka.Prelude as Prelude
+
+-- | The details of the ingested event.
+--
+-- /See:/ 'newIngestedEventsDetail' smart constructor.
+data IngestedEventsDetail = IngestedEventsDetail'
+  { -- | The start and stop time of the ingested events.
+    ingestedEventsTimeWindow :: IngestedEventsTimeWindow
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IngestedEventsDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ingestedEventsTimeWindow', 'ingestedEventsDetail_ingestedEventsTimeWindow' - The start and stop time of the ingested events.
+newIngestedEventsDetail ::
+  -- | 'ingestedEventsTimeWindow'
+  IngestedEventsTimeWindow ->
+  IngestedEventsDetail
+newIngestedEventsDetail pIngestedEventsTimeWindow_ =
+  IngestedEventsDetail'
+    { ingestedEventsTimeWindow =
+        pIngestedEventsTimeWindow_
+    }
+
+-- | The start and stop time of the ingested events.
+ingestedEventsDetail_ingestedEventsTimeWindow :: Lens.Lens' IngestedEventsDetail IngestedEventsTimeWindow
+ingestedEventsDetail_ingestedEventsTimeWindow = Lens.lens (\IngestedEventsDetail' {ingestedEventsTimeWindow} -> ingestedEventsTimeWindow) (\s@IngestedEventsDetail' {} a -> s {ingestedEventsTimeWindow = a} :: IngestedEventsDetail)
+
+instance Data.FromJSON IngestedEventsDetail where
+  parseJSON =
+    Data.withObject
+      "IngestedEventsDetail"
+      ( \x ->
+          IngestedEventsDetail'
+            Prelude.<$> (x Data..: "ingestedEventsTimeWindow")
+      )
+
+instance Prelude.Hashable IngestedEventsDetail where
+  hashWithSalt _salt IngestedEventsDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` ingestedEventsTimeWindow
+
+instance Prelude.NFData IngestedEventsDetail where
+  rnf IngestedEventsDetail' {..} =
+    Prelude.rnf ingestedEventsTimeWindow
+
+instance Data.ToJSON IngestedEventsDetail where
+  toJSON IngestedEventsDetail' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "ingestedEventsTimeWindow"
+                  Data..= ingestedEventsTimeWindow
+              )
+          ]
+      )
diff --git a/gen/Amazonka/FraudDetector/Types/IngestedEventsTimeWindow.hs b/gen/Amazonka/FraudDetector/Types/IngestedEventsTimeWindow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/IngestedEventsTimeWindow.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.FraudDetector.Types.IngestedEventsTimeWindow
+-- Copyright   : (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.FraudDetector.Types.IngestedEventsTimeWindow 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 start and stop time of the ingested events.
+--
+-- /See:/ 'newIngestedEventsTimeWindow' smart constructor.
+data IngestedEventsTimeWindow = IngestedEventsTimeWindow'
+  { -- | Timestamp of the first ingensted event.
+    startTime :: Prelude.Text,
+    -- | Timestamp of the final ingested event.
+    endTime :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IngestedEventsTimeWindow' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'startTime', 'ingestedEventsTimeWindow_startTime' - Timestamp of the first ingensted event.
+--
+-- 'endTime', 'ingestedEventsTimeWindow_endTime' - Timestamp of the final ingested event.
+newIngestedEventsTimeWindow ::
+  -- | 'startTime'
+  Prelude.Text ->
+  -- | 'endTime'
+  Prelude.Text ->
+  IngestedEventsTimeWindow
+newIngestedEventsTimeWindow pStartTime_ pEndTime_ =
+  IngestedEventsTimeWindow'
+    { startTime = pStartTime_,
+      endTime = pEndTime_
+    }
+
+-- | Timestamp of the first ingensted event.
+ingestedEventsTimeWindow_startTime :: Lens.Lens' IngestedEventsTimeWindow Prelude.Text
+ingestedEventsTimeWindow_startTime = Lens.lens (\IngestedEventsTimeWindow' {startTime} -> startTime) (\s@IngestedEventsTimeWindow' {} a -> s {startTime = a} :: IngestedEventsTimeWindow)
+
+-- | Timestamp of the final ingested event.
+ingestedEventsTimeWindow_endTime :: Lens.Lens' IngestedEventsTimeWindow Prelude.Text
+ingestedEventsTimeWindow_endTime = Lens.lens (\IngestedEventsTimeWindow' {endTime} -> endTime) (\s@IngestedEventsTimeWindow' {} a -> s {endTime = a} :: IngestedEventsTimeWindow)
+
+instance Data.FromJSON IngestedEventsTimeWindow where
+  parseJSON =
+    Data.withObject
+      "IngestedEventsTimeWindow"
+      ( \x ->
+          IngestedEventsTimeWindow'
+            Prelude.<$> (x Data..: "startTime")
+            Prelude.<*> (x Data..: "endTime")
+      )
+
+instance Prelude.Hashable IngestedEventsTimeWindow where
+  hashWithSalt _salt IngestedEventsTimeWindow' {..} =
+    _salt
+      `Prelude.hashWithSalt` startTime
+      `Prelude.hashWithSalt` endTime
+
+instance Prelude.NFData IngestedEventsTimeWindow where
+  rnf IngestedEventsTimeWindow' {..} =
+    Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf endTime
+
+instance Data.ToJSON IngestedEventsTimeWindow where
+  toJSON IngestedEventsTimeWindow' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("startTime" Data..= startTime),
+            Prelude.Just ("endTime" Data..= endTime)
+          ]
+      )
diff --git a/gen/Amazonka/FraudDetector/Types/KMSKey.hs b/gen/Amazonka/FraudDetector/Types/KMSKey.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/KMSKey.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.Types.KMSKey
+-- Copyright   : (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.FraudDetector.Types.KMSKey where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The KMS key details.
+--
+-- /See:/ 'newKMSKey' smart constructor.
+data KMSKey = KMSKey'
+  { -- | The encryption key ARN.
+    kmsEncryptionKeyArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'KMSKey' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'kmsEncryptionKeyArn', 'kmsKey_kmsEncryptionKeyArn' - The encryption key ARN.
+newKMSKey ::
+  KMSKey
+newKMSKey =
+  KMSKey' {kmsEncryptionKeyArn = Prelude.Nothing}
+
+-- | The encryption key ARN.
+kmsKey_kmsEncryptionKeyArn :: Lens.Lens' KMSKey (Prelude.Maybe Prelude.Text)
+kmsKey_kmsEncryptionKeyArn = Lens.lens (\KMSKey' {kmsEncryptionKeyArn} -> kmsEncryptionKeyArn) (\s@KMSKey' {} a -> s {kmsEncryptionKeyArn = a} :: KMSKey)
+
+instance Data.FromJSON KMSKey where
+  parseJSON =
+    Data.withObject
+      "KMSKey"
+      ( \x ->
+          KMSKey'
+            Prelude.<$> (x Data..:? "kmsEncryptionKeyArn")
+      )
+
+instance Prelude.Hashable KMSKey where
+  hashWithSalt _salt KMSKey' {..} =
+    _salt `Prelude.hashWithSalt` kmsEncryptionKeyArn
+
+instance Prelude.NFData KMSKey where
+  rnf KMSKey' {..} = Prelude.rnf kmsEncryptionKeyArn
diff --git a/gen/Amazonka/FraudDetector/Types/Label.hs b/gen/Amazonka/FraudDetector/Types/Label.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/Label.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.FraudDetector.Types.Label
+-- Copyright   : (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.FraudDetector.Types.Label 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 label details.
+--
+-- /See:/ 'newLabel' smart constructor.
+data Label = Label'
+  { -- | The label ARN.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Timestamp of when the event type was created.
+    createdTime :: Prelude.Maybe Prelude.Text,
+    -- | The label description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Timestamp of when the label was last updated.
+    lastUpdatedTime :: Prelude.Maybe Prelude.Text,
+    -- | The label name.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Label' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'label_arn' - The label ARN.
+--
+-- 'createdTime', 'label_createdTime' - Timestamp of when the event type was created.
+--
+-- 'description', 'label_description' - The label description.
+--
+-- 'lastUpdatedTime', 'label_lastUpdatedTime' - Timestamp of when the label was last updated.
+--
+-- 'name', 'label_name' - The label name.
+newLabel ::
+  Label
+newLabel =
+  Label'
+    { arn = Prelude.Nothing,
+      createdTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      lastUpdatedTime = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The label ARN.
+label_arn :: Lens.Lens' Label (Prelude.Maybe Prelude.Text)
+label_arn = Lens.lens (\Label' {arn} -> arn) (\s@Label' {} a -> s {arn = a} :: Label)
+
+-- | Timestamp of when the event type was created.
+label_createdTime :: Lens.Lens' Label (Prelude.Maybe Prelude.Text)
+label_createdTime = Lens.lens (\Label' {createdTime} -> createdTime) (\s@Label' {} a -> s {createdTime = a} :: Label)
+
+-- | The label description.
+label_description :: Lens.Lens' Label (Prelude.Maybe Prelude.Text)
+label_description = Lens.lens (\Label' {description} -> description) (\s@Label' {} a -> s {description = a} :: Label)
+
+-- | Timestamp of when the label was last updated.
+label_lastUpdatedTime :: Lens.Lens' Label (Prelude.Maybe Prelude.Text)
+label_lastUpdatedTime = Lens.lens (\Label' {lastUpdatedTime} -> lastUpdatedTime) (\s@Label' {} a -> s {lastUpdatedTime = a} :: Label)
+
+-- | The label name.
+label_name :: Lens.Lens' Label (Prelude.Maybe Prelude.Text)
+label_name = Lens.lens (\Label' {name} -> name) (\s@Label' {} a -> s {name = a} :: Label)
+
+instance Data.FromJSON Label where
+  parseJSON =
+    Data.withObject
+      "Label"
+      ( \x ->
+          Label'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "createdTime")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "lastUpdatedTime")
+            Prelude.<*> (x Data..:? "name")
+      )
+
+instance Prelude.Hashable Label where
+  hashWithSalt _salt Label' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` lastUpdatedTime
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData Label where
+  rnf Label' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastUpdatedTime
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/FraudDetector/Types/LabelSchema.hs b/gen/Amazonka/FraudDetector/Types/LabelSchema.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/LabelSchema.hs
@@ -0,0 +1,122 @@
+{-# 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.FraudDetector.Types.LabelSchema
+-- Copyright   : (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.FraudDetector.Types.LabelSchema where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.UnlabeledEventsTreatment
+import qualified Amazonka.Prelude as Prelude
+
+-- | The label schema.
+--
+-- /See:/ 'newLabelSchema' smart constructor.
+data LabelSchema = LabelSchema'
+  { -- | The label mapper maps the Amazon Fraud Detector supported model
+    -- classification labels (@FRAUD@, @LEGIT@) to the appropriate event type
+    -- labels. For example, if \"@FRAUD@\" and \"@LEGIT@\" are Amazon Fraud
+    -- Detector supported labels, this mapper could be:
+    -- @{\"FRAUD\" => [\"0\"]@, @\"LEGIT\" => [\"1\"]}@ or
+    -- @{\"FRAUD\" => [\"false\"]@, @\"LEGIT\" => [\"true\"]}@ or
+    -- @{\"FRAUD\" => [\"fraud\", \"abuse\"]@,
+    -- @\"LEGIT\" => [\"legit\", \"safe\"]}@. The value part of the mapper is a
+    -- list, because you may have multiple label variants from your event type
+    -- for a single Amazon Fraud Detector label.
+    labelMapper :: Prelude.Maybe (Prelude.HashMap Prelude.Text [Prelude.Text]),
+    -- | The action to take for unlabeled events.
+    unlabeledEventsTreatment :: Prelude.Maybe UnlabeledEventsTreatment
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LabelSchema' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'labelMapper', 'labelSchema_labelMapper' - The label mapper maps the Amazon Fraud Detector supported model
+-- classification labels (@FRAUD@, @LEGIT@) to the appropriate event type
+-- labels. For example, if \"@FRAUD@\" and \"@LEGIT@\" are Amazon Fraud
+-- Detector supported labels, this mapper could be:
+-- @{\"FRAUD\" => [\"0\"]@, @\"LEGIT\" => [\"1\"]}@ or
+-- @{\"FRAUD\" => [\"false\"]@, @\"LEGIT\" => [\"true\"]}@ or
+-- @{\"FRAUD\" => [\"fraud\", \"abuse\"]@,
+-- @\"LEGIT\" => [\"legit\", \"safe\"]}@. The value part of the mapper is a
+-- list, because you may have multiple label variants from your event type
+-- for a single Amazon Fraud Detector label.
+--
+-- 'unlabeledEventsTreatment', 'labelSchema_unlabeledEventsTreatment' - The action to take for unlabeled events.
+newLabelSchema ::
+  LabelSchema
+newLabelSchema =
+  LabelSchema'
+    { labelMapper = Prelude.Nothing,
+      unlabeledEventsTreatment = Prelude.Nothing
+    }
+
+-- | The label mapper maps the Amazon Fraud Detector supported model
+-- classification labels (@FRAUD@, @LEGIT@) to the appropriate event type
+-- labels. For example, if \"@FRAUD@\" and \"@LEGIT@\" are Amazon Fraud
+-- Detector supported labels, this mapper could be:
+-- @{\"FRAUD\" => [\"0\"]@, @\"LEGIT\" => [\"1\"]}@ or
+-- @{\"FRAUD\" => [\"false\"]@, @\"LEGIT\" => [\"true\"]}@ or
+-- @{\"FRAUD\" => [\"fraud\", \"abuse\"]@,
+-- @\"LEGIT\" => [\"legit\", \"safe\"]}@. The value part of the mapper is a
+-- list, because you may have multiple label variants from your event type
+-- for a single Amazon Fraud Detector label.
+labelSchema_labelMapper :: Lens.Lens' LabelSchema (Prelude.Maybe (Prelude.HashMap Prelude.Text [Prelude.Text]))
+labelSchema_labelMapper = Lens.lens (\LabelSchema' {labelMapper} -> labelMapper) (\s@LabelSchema' {} a -> s {labelMapper = a} :: LabelSchema) Prelude.. Lens.mapping Lens.coerced
+
+-- | The action to take for unlabeled events.
+labelSchema_unlabeledEventsTreatment :: Lens.Lens' LabelSchema (Prelude.Maybe UnlabeledEventsTreatment)
+labelSchema_unlabeledEventsTreatment = Lens.lens (\LabelSchema' {unlabeledEventsTreatment} -> unlabeledEventsTreatment) (\s@LabelSchema' {} a -> s {unlabeledEventsTreatment = a} :: LabelSchema)
+
+instance Data.FromJSON LabelSchema where
+  parseJSON =
+    Data.withObject
+      "LabelSchema"
+      ( \x ->
+          LabelSchema'
+            Prelude.<$> (x Data..:? "labelMapper" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "unlabeledEventsTreatment")
+      )
+
+instance Prelude.Hashable LabelSchema where
+  hashWithSalt _salt LabelSchema' {..} =
+    _salt
+      `Prelude.hashWithSalt` labelMapper
+      `Prelude.hashWithSalt` unlabeledEventsTreatment
+
+instance Prelude.NFData LabelSchema where
+  rnf LabelSchema' {..} =
+    Prelude.rnf labelMapper
+      `Prelude.seq` Prelude.rnf unlabeledEventsTreatment
+
+instance Data.ToJSON LabelSchema where
+  toJSON LabelSchema' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("labelMapper" Data..=) Prelude.<$> labelMapper,
+            ("unlabeledEventsTreatment" Data..=)
+              Prelude.<$> unlabeledEventsTreatment
+          ]
+      )
diff --git a/gen/Amazonka/FraudDetector/Types/Language.hs b/gen/Amazonka/FraudDetector/Types/Language.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/Language.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.FraudDetector.Types.Language
+-- Copyright   : (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.FraudDetector.Types.Language
+  ( Language
+      ( ..,
+        Language_DETECTORPL
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Language = Language'
+  { fromLanguage ::
+      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 Language_DETECTORPL :: Language
+pattern Language_DETECTORPL = Language' "DETECTORPL"
+
+{-# COMPLETE
+  Language_DETECTORPL,
+  Language'
+  #-}
diff --git a/gen/Amazonka/FraudDetector/Types/LogOddsMetric.hs b/gen/Amazonka/FraudDetector/Types/LogOddsMetric.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/LogOddsMetric.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.Types.LogOddsMetric
+-- Copyright   : (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.FraudDetector.Types.LogOddsMetric 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 log odds metric details.
+--
+-- /See:/ 'newLogOddsMetric' smart constructor.
+data LogOddsMetric = LogOddsMetric'
+  { -- | The name of the variable.
+    variableName :: Prelude.Text,
+    -- | The type of variable.
+    variableType :: Prelude.Text,
+    -- | The relative importance of the variable. For more information, see
+    -- <https://docs.aws.amazon.com/frauddetector/latest/ug/model-variable-importance.html Model variable importance>.
+    variableImportance :: Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LogOddsMetric' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'variableName', 'logOddsMetric_variableName' - The name of the variable.
+--
+-- 'variableType', 'logOddsMetric_variableType' - The type of variable.
+--
+-- 'variableImportance', 'logOddsMetric_variableImportance' - The relative importance of the variable. For more information, see
+-- <https://docs.aws.amazon.com/frauddetector/latest/ug/model-variable-importance.html Model variable importance>.
+newLogOddsMetric ::
+  -- | 'variableName'
+  Prelude.Text ->
+  -- | 'variableType'
+  Prelude.Text ->
+  -- | 'variableImportance'
+  Prelude.Double ->
+  LogOddsMetric
+newLogOddsMetric
+  pVariableName_
+  pVariableType_
+  pVariableImportance_ =
+    LogOddsMetric'
+      { variableName = pVariableName_,
+        variableType = pVariableType_,
+        variableImportance = pVariableImportance_
+      }
+
+-- | The name of the variable.
+logOddsMetric_variableName :: Lens.Lens' LogOddsMetric Prelude.Text
+logOddsMetric_variableName = Lens.lens (\LogOddsMetric' {variableName} -> variableName) (\s@LogOddsMetric' {} a -> s {variableName = a} :: LogOddsMetric)
+
+-- | The type of variable.
+logOddsMetric_variableType :: Lens.Lens' LogOddsMetric Prelude.Text
+logOddsMetric_variableType = Lens.lens (\LogOddsMetric' {variableType} -> variableType) (\s@LogOddsMetric' {} a -> s {variableType = a} :: LogOddsMetric)
+
+-- | The relative importance of the variable. For more information, see
+-- <https://docs.aws.amazon.com/frauddetector/latest/ug/model-variable-importance.html Model variable importance>.
+logOddsMetric_variableImportance :: Lens.Lens' LogOddsMetric Prelude.Double
+logOddsMetric_variableImportance = Lens.lens (\LogOddsMetric' {variableImportance} -> variableImportance) (\s@LogOddsMetric' {} a -> s {variableImportance = a} :: LogOddsMetric)
+
+instance Data.FromJSON LogOddsMetric where
+  parseJSON =
+    Data.withObject
+      "LogOddsMetric"
+      ( \x ->
+          LogOddsMetric'
+            Prelude.<$> (x Data..: "variableName")
+            Prelude.<*> (x Data..: "variableType")
+            Prelude.<*> (x Data..: "variableImportance")
+      )
+
+instance Prelude.Hashable LogOddsMetric where
+  hashWithSalt _salt LogOddsMetric' {..} =
+    _salt
+      `Prelude.hashWithSalt` variableName
+      `Prelude.hashWithSalt` variableType
+      `Prelude.hashWithSalt` variableImportance
+
+instance Prelude.NFData LogOddsMetric where
+  rnf LogOddsMetric' {..} =
+    Prelude.rnf variableName
+      `Prelude.seq` Prelude.rnf variableType
+      `Prelude.seq` Prelude.rnf variableImportance
diff --git a/gen/Amazonka/FraudDetector/Types/MetricDataPoint.hs b/gen/Amazonka/FraudDetector/Types/MetricDataPoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/MetricDataPoint.hs
@@ -0,0 +1,123 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.Types.MetricDataPoint
+-- Copyright   : (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.FraudDetector.Types.MetricDataPoint 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
+
+-- | Model performance metrics data points.
+--
+-- /See:/ 'newMetricDataPoint' smart constructor.
+data MetricDataPoint = MetricDataPoint'
+  { -- | The false positive rate. This is the percentage of total legitimate
+    -- events that are incorrectly predicted as fraud.
+    fpr :: Prelude.Maybe Prelude.Double,
+    -- | The percentage of fraud events correctly predicted as fraudulent as
+    -- compared to all events predicted as fraudulent.
+    precision :: Prelude.Maybe Prelude.Double,
+    -- | The model threshold that specifies an acceptable fraud capture rate. For
+    -- example, a threshold of 500 means any model score 500 or above is
+    -- labeled as fraud.
+    threshold :: Prelude.Maybe Prelude.Double,
+    -- | The true positive rate. This is the percentage of total fraud the model
+    -- detects. Also known as capture rate.
+    tpr :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MetricDataPoint' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fpr', 'metricDataPoint_fpr' - The false positive rate. This is the percentage of total legitimate
+-- events that are incorrectly predicted as fraud.
+--
+-- 'precision', 'metricDataPoint_precision' - The percentage of fraud events correctly predicted as fraudulent as
+-- compared to all events predicted as fraudulent.
+--
+-- 'threshold', 'metricDataPoint_threshold' - The model threshold that specifies an acceptable fraud capture rate. For
+-- example, a threshold of 500 means any model score 500 or above is
+-- labeled as fraud.
+--
+-- 'tpr', 'metricDataPoint_tpr' - The true positive rate. This is the percentage of total fraud the model
+-- detects. Also known as capture rate.
+newMetricDataPoint ::
+  MetricDataPoint
+newMetricDataPoint =
+  MetricDataPoint'
+    { fpr = Prelude.Nothing,
+      precision = Prelude.Nothing,
+      threshold = Prelude.Nothing,
+      tpr = Prelude.Nothing
+    }
+
+-- | The false positive rate. This is the percentage of total legitimate
+-- events that are incorrectly predicted as fraud.
+metricDataPoint_fpr :: Lens.Lens' MetricDataPoint (Prelude.Maybe Prelude.Double)
+metricDataPoint_fpr = Lens.lens (\MetricDataPoint' {fpr} -> fpr) (\s@MetricDataPoint' {} a -> s {fpr = a} :: MetricDataPoint)
+
+-- | The percentage of fraud events correctly predicted as fraudulent as
+-- compared to all events predicted as fraudulent.
+metricDataPoint_precision :: Lens.Lens' MetricDataPoint (Prelude.Maybe Prelude.Double)
+metricDataPoint_precision = Lens.lens (\MetricDataPoint' {precision} -> precision) (\s@MetricDataPoint' {} a -> s {precision = a} :: MetricDataPoint)
+
+-- | The model threshold that specifies an acceptable fraud capture rate. For
+-- example, a threshold of 500 means any model score 500 or above is
+-- labeled as fraud.
+metricDataPoint_threshold :: Lens.Lens' MetricDataPoint (Prelude.Maybe Prelude.Double)
+metricDataPoint_threshold = Lens.lens (\MetricDataPoint' {threshold} -> threshold) (\s@MetricDataPoint' {} a -> s {threshold = a} :: MetricDataPoint)
+
+-- | The true positive rate. This is the percentage of total fraud the model
+-- detects. Also known as capture rate.
+metricDataPoint_tpr :: Lens.Lens' MetricDataPoint (Prelude.Maybe Prelude.Double)
+metricDataPoint_tpr = Lens.lens (\MetricDataPoint' {tpr} -> tpr) (\s@MetricDataPoint' {} a -> s {tpr = a} :: MetricDataPoint)
+
+instance Data.FromJSON MetricDataPoint where
+  parseJSON =
+    Data.withObject
+      "MetricDataPoint"
+      ( \x ->
+          MetricDataPoint'
+            Prelude.<$> (x Data..:? "fpr")
+            Prelude.<*> (x Data..:? "precision")
+            Prelude.<*> (x Data..:? "threshold")
+            Prelude.<*> (x Data..:? "tpr")
+      )
+
+instance Prelude.Hashable MetricDataPoint where
+  hashWithSalt _salt MetricDataPoint' {..} =
+    _salt
+      `Prelude.hashWithSalt` fpr
+      `Prelude.hashWithSalt` precision
+      `Prelude.hashWithSalt` threshold
+      `Prelude.hashWithSalt` tpr
+
+instance Prelude.NFData MetricDataPoint where
+  rnf MetricDataPoint' {..} =
+    Prelude.rnf fpr
+      `Prelude.seq` Prelude.rnf precision
+      `Prelude.seq` Prelude.rnf threshold
+      `Prelude.seq` Prelude.rnf tpr
diff --git a/gen/Amazonka/FraudDetector/Types/Model.hs b/gen/Amazonka/FraudDetector/Types/Model.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/Model.hs
@@ -0,0 +1,145 @@
+{-# 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.FraudDetector.Types.Model
+-- Copyright   : (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.FraudDetector.Types.Model where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.ModelTypeEnum
+import qualified Amazonka.Prelude as Prelude
+
+-- | The model.
+--
+-- /See:/ 'newModel' smart constructor.
+data Model = Model'
+  { -- | The ARN of the model.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Timestamp of when the model was created.
+    createdTime :: Prelude.Maybe Prelude.Text,
+    -- | The model description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the event type.
+    eventTypeName :: Prelude.Maybe Prelude.Text,
+    -- | Timestamp of last time the model was updated.
+    lastUpdatedTime :: Prelude.Maybe Prelude.Text,
+    -- | The model ID.
+    modelId :: Prelude.Maybe Prelude.Text,
+    -- | The model type.
+    modelType :: Prelude.Maybe ModelTypeEnum
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Model' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'model_arn' - The ARN of the model.
+--
+-- 'createdTime', 'model_createdTime' - Timestamp of when the model was created.
+--
+-- 'description', 'model_description' - The model description.
+--
+-- 'eventTypeName', 'model_eventTypeName' - The name of the event type.
+--
+-- 'lastUpdatedTime', 'model_lastUpdatedTime' - Timestamp of last time the model was updated.
+--
+-- 'modelId', 'model_modelId' - The model ID.
+--
+-- 'modelType', 'model_modelType' - The model type.
+newModel ::
+  Model
+newModel =
+  Model'
+    { arn = Prelude.Nothing,
+      createdTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      eventTypeName = Prelude.Nothing,
+      lastUpdatedTime = Prelude.Nothing,
+      modelId = Prelude.Nothing,
+      modelType = Prelude.Nothing
+    }
+
+-- | The ARN of the model.
+model_arn :: Lens.Lens' Model (Prelude.Maybe Prelude.Text)
+model_arn = Lens.lens (\Model' {arn} -> arn) (\s@Model' {} a -> s {arn = a} :: Model)
+
+-- | Timestamp of when the model was created.
+model_createdTime :: Lens.Lens' Model (Prelude.Maybe Prelude.Text)
+model_createdTime = Lens.lens (\Model' {createdTime} -> createdTime) (\s@Model' {} a -> s {createdTime = a} :: Model)
+
+-- | The model description.
+model_description :: Lens.Lens' Model (Prelude.Maybe Prelude.Text)
+model_description = Lens.lens (\Model' {description} -> description) (\s@Model' {} a -> s {description = a} :: Model)
+
+-- | The name of the event type.
+model_eventTypeName :: Lens.Lens' Model (Prelude.Maybe Prelude.Text)
+model_eventTypeName = Lens.lens (\Model' {eventTypeName} -> eventTypeName) (\s@Model' {} a -> s {eventTypeName = a} :: Model)
+
+-- | Timestamp of last time the model was updated.
+model_lastUpdatedTime :: Lens.Lens' Model (Prelude.Maybe Prelude.Text)
+model_lastUpdatedTime = Lens.lens (\Model' {lastUpdatedTime} -> lastUpdatedTime) (\s@Model' {} a -> s {lastUpdatedTime = a} :: Model)
+
+-- | The model ID.
+model_modelId :: Lens.Lens' Model (Prelude.Maybe Prelude.Text)
+model_modelId = Lens.lens (\Model' {modelId} -> modelId) (\s@Model' {} a -> s {modelId = a} :: Model)
+
+-- | The model type.
+model_modelType :: Lens.Lens' Model (Prelude.Maybe ModelTypeEnum)
+model_modelType = Lens.lens (\Model' {modelType} -> modelType) (\s@Model' {} a -> s {modelType = a} :: Model)
+
+instance Data.FromJSON Model where
+  parseJSON =
+    Data.withObject
+      "Model"
+      ( \x ->
+          Model'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "createdTime")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "eventTypeName")
+            Prelude.<*> (x Data..:? "lastUpdatedTime")
+            Prelude.<*> (x Data..:? "modelId")
+            Prelude.<*> (x Data..:? "modelType")
+      )
+
+instance Prelude.Hashable Model where
+  hashWithSalt _salt Model' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` eventTypeName
+      `Prelude.hashWithSalt` lastUpdatedTime
+      `Prelude.hashWithSalt` modelId
+      `Prelude.hashWithSalt` modelType
+
+instance Prelude.NFData Model where
+  rnf Model' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf eventTypeName
+      `Prelude.seq` Prelude.rnf lastUpdatedTime
+      `Prelude.seq` Prelude.rnf modelId
+      `Prelude.seq` Prelude.rnf modelType
diff --git a/gen/Amazonka/FraudDetector/Types/ModelEndpointDataBlob.hs b/gen/Amazonka/FraudDetector/Types/ModelEndpointDataBlob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/ModelEndpointDataBlob.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.FraudDetector.Types.ModelEndpointDataBlob
+-- Copyright   : (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.FraudDetector.Types.ModelEndpointDataBlob 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 pre-formed Amazon SageMaker model input you can include if your
+-- detector version includes an imported Amazon SageMaker model endpoint
+-- with pass-through input configuration.
+--
+-- /See:/ 'newModelEndpointDataBlob' smart constructor.
+data ModelEndpointDataBlob = ModelEndpointDataBlob'
+  { -- | The byte buffer of the Amazon SageMaker model endpoint input data blob.
+    byteBuffer :: Prelude.Maybe Data.Base64,
+    -- | The content type of the Amazon SageMaker model endpoint input data blob.
+    contentType :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModelEndpointDataBlob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'byteBuffer', 'modelEndpointDataBlob_byteBuffer' - The byte buffer of the Amazon SageMaker model endpoint input data blob.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+--
+-- 'contentType', 'modelEndpointDataBlob_contentType' - The content type of the Amazon SageMaker model endpoint input data blob.
+newModelEndpointDataBlob ::
+  ModelEndpointDataBlob
+newModelEndpointDataBlob =
+  ModelEndpointDataBlob'
+    { byteBuffer =
+        Prelude.Nothing,
+      contentType = Prelude.Nothing
+    }
+
+-- | The byte buffer of the Amazon SageMaker model endpoint input data blob.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+modelEndpointDataBlob_byteBuffer :: Lens.Lens' ModelEndpointDataBlob (Prelude.Maybe Prelude.ByteString)
+modelEndpointDataBlob_byteBuffer = Lens.lens (\ModelEndpointDataBlob' {byteBuffer} -> byteBuffer) (\s@ModelEndpointDataBlob' {} a -> s {byteBuffer = a} :: ModelEndpointDataBlob) Prelude.. Lens.mapping Data._Base64
+
+-- | The content type of the Amazon SageMaker model endpoint input data blob.
+modelEndpointDataBlob_contentType :: Lens.Lens' ModelEndpointDataBlob (Prelude.Maybe Prelude.Text)
+modelEndpointDataBlob_contentType = Lens.lens (\ModelEndpointDataBlob' {contentType} -> contentType) (\s@ModelEndpointDataBlob' {} a -> s {contentType = a} :: ModelEndpointDataBlob)
+
+instance Prelude.Hashable ModelEndpointDataBlob where
+  hashWithSalt _salt ModelEndpointDataBlob' {..} =
+    _salt
+      `Prelude.hashWithSalt` byteBuffer
+      `Prelude.hashWithSalt` contentType
+
+instance Prelude.NFData ModelEndpointDataBlob where
+  rnf ModelEndpointDataBlob' {..} =
+    Prelude.rnf byteBuffer
+      `Prelude.seq` Prelude.rnf contentType
+
+instance Data.ToJSON ModelEndpointDataBlob where
+  toJSON ModelEndpointDataBlob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("byteBuffer" Data..=) Prelude.<$> byteBuffer,
+            ("contentType" Data..=) Prelude.<$> contentType
+          ]
+      )
diff --git a/gen/Amazonka/FraudDetector/Types/ModelEndpointStatus.hs b/gen/Amazonka/FraudDetector/Types/ModelEndpointStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/ModelEndpointStatus.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.FraudDetector.Types.ModelEndpointStatus
+-- Copyright   : (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.FraudDetector.Types.ModelEndpointStatus
+  ( ModelEndpointStatus
+      ( ..,
+        ModelEndpointStatus_ASSOCIATED,
+        ModelEndpointStatus_DISSOCIATED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ModelEndpointStatus = ModelEndpointStatus'
+  { fromModelEndpointStatus ::
+      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 ModelEndpointStatus_ASSOCIATED :: ModelEndpointStatus
+pattern ModelEndpointStatus_ASSOCIATED = ModelEndpointStatus' "ASSOCIATED"
+
+pattern ModelEndpointStatus_DISSOCIATED :: ModelEndpointStatus
+pattern ModelEndpointStatus_DISSOCIATED = ModelEndpointStatus' "DISSOCIATED"
+
+{-# COMPLETE
+  ModelEndpointStatus_ASSOCIATED,
+  ModelEndpointStatus_DISSOCIATED,
+  ModelEndpointStatus'
+  #-}
diff --git a/gen/Amazonka/FraudDetector/Types/ModelInputConfiguration.hs b/gen/Amazonka/FraudDetector/Types/ModelInputConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/ModelInputConfiguration.hs
@@ -0,0 +1,163 @@
+{-# 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.FraudDetector.Types.ModelInputConfiguration
+-- Copyright   : (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.FraudDetector.Types.ModelInputConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.ModelInputDataFormat
+import qualified Amazonka.Prelude as Prelude
+
+-- | The Amazon SageMaker model input configuration.
+--
+-- /See:/ 'newModelInputConfiguration' smart constructor.
+data ModelInputConfiguration = ModelInputConfiguration'
+  { -- | Template for constructing the CSV input-data sent to SageMaker. At
+    -- event-evaluation, the placeholders for variable-names in the template
+    -- will be replaced with the variable values before being sent to
+    -- SageMaker.
+    csvInputTemplate :: Prelude.Maybe Prelude.Text,
+    -- | The event type name.
+    eventTypeName :: Prelude.Maybe Prelude.Text,
+    -- | The format of the model input configuration. The format differs
+    -- depending on if it is passed through to SageMaker or constructed by
+    -- Amazon Fraud Detector.
+    format :: Prelude.Maybe ModelInputDataFormat,
+    -- | Template for constructing the JSON input-data sent to SageMaker. At
+    -- event-evaluation, the placeholders for variable names in the template
+    -- will be replaced with the variable values before being sent to
+    -- SageMaker.
+    jsonInputTemplate :: Prelude.Maybe Prelude.Text,
+    -- | The event variables.
+    useEventVariables :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModelInputConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'csvInputTemplate', 'modelInputConfiguration_csvInputTemplate' - Template for constructing the CSV input-data sent to SageMaker. At
+-- event-evaluation, the placeholders for variable-names in the template
+-- will be replaced with the variable values before being sent to
+-- SageMaker.
+--
+-- 'eventTypeName', 'modelInputConfiguration_eventTypeName' - The event type name.
+--
+-- 'format', 'modelInputConfiguration_format' - The format of the model input configuration. The format differs
+-- depending on if it is passed through to SageMaker or constructed by
+-- Amazon Fraud Detector.
+--
+-- 'jsonInputTemplate', 'modelInputConfiguration_jsonInputTemplate' - Template for constructing the JSON input-data sent to SageMaker. At
+-- event-evaluation, the placeholders for variable names in the template
+-- will be replaced with the variable values before being sent to
+-- SageMaker.
+--
+-- 'useEventVariables', 'modelInputConfiguration_useEventVariables' - The event variables.
+newModelInputConfiguration ::
+  -- | 'useEventVariables'
+  Prelude.Bool ->
+  ModelInputConfiguration
+newModelInputConfiguration pUseEventVariables_ =
+  ModelInputConfiguration'
+    { csvInputTemplate =
+        Prelude.Nothing,
+      eventTypeName = Prelude.Nothing,
+      format = Prelude.Nothing,
+      jsonInputTemplate = Prelude.Nothing,
+      useEventVariables = pUseEventVariables_
+    }
+
+-- | Template for constructing the CSV input-data sent to SageMaker. At
+-- event-evaluation, the placeholders for variable-names in the template
+-- will be replaced with the variable values before being sent to
+-- SageMaker.
+modelInputConfiguration_csvInputTemplate :: Lens.Lens' ModelInputConfiguration (Prelude.Maybe Prelude.Text)
+modelInputConfiguration_csvInputTemplate = Lens.lens (\ModelInputConfiguration' {csvInputTemplate} -> csvInputTemplate) (\s@ModelInputConfiguration' {} a -> s {csvInputTemplate = a} :: ModelInputConfiguration)
+
+-- | The event type name.
+modelInputConfiguration_eventTypeName :: Lens.Lens' ModelInputConfiguration (Prelude.Maybe Prelude.Text)
+modelInputConfiguration_eventTypeName = Lens.lens (\ModelInputConfiguration' {eventTypeName} -> eventTypeName) (\s@ModelInputConfiguration' {} a -> s {eventTypeName = a} :: ModelInputConfiguration)
+
+-- | The format of the model input configuration. The format differs
+-- depending on if it is passed through to SageMaker or constructed by
+-- Amazon Fraud Detector.
+modelInputConfiguration_format :: Lens.Lens' ModelInputConfiguration (Prelude.Maybe ModelInputDataFormat)
+modelInputConfiguration_format = Lens.lens (\ModelInputConfiguration' {format} -> format) (\s@ModelInputConfiguration' {} a -> s {format = a} :: ModelInputConfiguration)
+
+-- | Template for constructing the JSON input-data sent to SageMaker. At
+-- event-evaluation, the placeholders for variable names in the template
+-- will be replaced with the variable values before being sent to
+-- SageMaker.
+modelInputConfiguration_jsonInputTemplate :: Lens.Lens' ModelInputConfiguration (Prelude.Maybe Prelude.Text)
+modelInputConfiguration_jsonInputTemplate = Lens.lens (\ModelInputConfiguration' {jsonInputTemplate} -> jsonInputTemplate) (\s@ModelInputConfiguration' {} a -> s {jsonInputTemplate = a} :: ModelInputConfiguration)
+
+-- | The event variables.
+modelInputConfiguration_useEventVariables :: Lens.Lens' ModelInputConfiguration Prelude.Bool
+modelInputConfiguration_useEventVariables = Lens.lens (\ModelInputConfiguration' {useEventVariables} -> useEventVariables) (\s@ModelInputConfiguration' {} a -> s {useEventVariables = a} :: ModelInputConfiguration)
+
+instance Data.FromJSON ModelInputConfiguration where
+  parseJSON =
+    Data.withObject
+      "ModelInputConfiguration"
+      ( \x ->
+          ModelInputConfiguration'
+            Prelude.<$> (x Data..:? "csvInputTemplate")
+            Prelude.<*> (x Data..:? "eventTypeName")
+            Prelude.<*> (x Data..:? "format")
+            Prelude.<*> (x Data..:? "jsonInputTemplate")
+            Prelude.<*> (x Data..: "useEventVariables")
+      )
+
+instance Prelude.Hashable ModelInputConfiguration where
+  hashWithSalt _salt ModelInputConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` csvInputTemplate
+      `Prelude.hashWithSalt` eventTypeName
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` jsonInputTemplate
+      `Prelude.hashWithSalt` useEventVariables
+
+instance Prelude.NFData ModelInputConfiguration where
+  rnf ModelInputConfiguration' {..} =
+    Prelude.rnf csvInputTemplate
+      `Prelude.seq` Prelude.rnf eventTypeName
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf jsonInputTemplate
+      `Prelude.seq` Prelude.rnf useEventVariables
+
+instance Data.ToJSON ModelInputConfiguration where
+  toJSON ModelInputConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("csvInputTemplate" Data..=)
+              Prelude.<$> csvInputTemplate,
+            ("eventTypeName" Data..=) Prelude.<$> eventTypeName,
+            ("format" Data..=) Prelude.<$> format,
+            ("jsonInputTemplate" Data..=)
+              Prelude.<$> jsonInputTemplate,
+            Prelude.Just
+              ("useEventVariables" Data..= useEventVariables)
+          ]
+      )
diff --git a/gen/Amazonka/FraudDetector/Types/ModelInputDataFormat.hs b/gen/Amazonka/FraudDetector/Types/ModelInputDataFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/ModelInputDataFormat.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.FraudDetector.Types.ModelInputDataFormat
+-- Copyright   : (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.FraudDetector.Types.ModelInputDataFormat
+  ( ModelInputDataFormat
+      ( ..,
+        ModelInputDataFormat_APPLICATION_JSON,
+        ModelInputDataFormat_TEXT_CSV
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ModelInputDataFormat = ModelInputDataFormat'
+  { fromModelInputDataFormat ::
+      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 ModelInputDataFormat_APPLICATION_JSON :: ModelInputDataFormat
+pattern ModelInputDataFormat_APPLICATION_JSON = ModelInputDataFormat' "APPLICATION_JSON"
+
+pattern ModelInputDataFormat_TEXT_CSV :: ModelInputDataFormat
+pattern ModelInputDataFormat_TEXT_CSV = ModelInputDataFormat' "TEXT_CSV"
+
+{-# COMPLETE
+  ModelInputDataFormat_APPLICATION_JSON,
+  ModelInputDataFormat_TEXT_CSV,
+  ModelInputDataFormat'
+  #-}
diff --git a/gen/Amazonka/FraudDetector/Types/ModelOutputConfiguration.hs b/gen/Amazonka/FraudDetector/Types/ModelOutputConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/ModelOutputConfiguration.hs
@@ -0,0 +1,124 @@
+{-# 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.FraudDetector.Types.ModelOutputConfiguration
+-- Copyright   : (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.FraudDetector.Types.ModelOutputConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.ModelOutputDataFormat
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the Amazon Sagemaker model output configuration.
+--
+-- /See:/ 'newModelOutputConfiguration' smart constructor.
+data ModelOutputConfiguration = ModelOutputConfiguration'
+  { -- | A map of CSV index values in the SageMaker response to the Amazon Fraud
+    -- Detector variables.
+    csvIndexToVariableMap :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A map of JSON keys in response from SageMaker to the Amazon Fraud
+    -- Detector variables.
+    jsonKeyToVariableMap :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The format of the model output configuration.
+    format :: ModelOutputDataFormat
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModelOutputConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'csvIndexToVariableMap', 'modelOutputConfiguration_csvIndexToVariableMap' - A map of CSV index values in the SageMaker response to the Amazon Fraud
+-- Detector variables.
+--
+-- 'jsonKeyToVariableMap', 'modelOutputConfiguration_jsonKeyToVariableMap' - A map of JSON keys in response from SageMaker to the Amazon Fraud
+-- Detector variables.
+--
+-- 'format', 'modelOutputConfiguration_format' - The format of the model output configuration.
+newModelOutputConfiguration ::
+  -- | 'format'
+  ModelOutputDataFormat ->
+  ModelOutputConfiguration
+newModelOutputConfiguration pFormat_ =
+  ModelOutputConfiguration'
+    { csvIndexToVariableMap =
+        Prelude.Nothing,
+      jsonKeyToVariableMap = Prelude.Nothing,
+      format = pFormat_
+    }
+
+-- | A map of CSV index values in the SageMaker response to the Amazon Fraud
+-- Detector variables.
+modelOutputConfiguration_csvIndexToVariableMap :: Lens.Lens' ModelOutputConfiguration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+modelOutputConfiguration_csvIndexToVariableMap = Lens.lens (\ModelOutputConfiguration' {csvIndexToVariableMap} -> csvIndexToVariableMap) (\s@ModelOutputConfiguration' {} a -> s {csvIndexToVariableMap = a} :: ModelOutputConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | A map of JSON keys in response from SageMaker to the Amazon Fraud
+-- Detector variables.
+modelOutputConfiguration_jsonKeyToVariableMap :: Lens.Lens' ModelOutputConfiguration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+modelOutputConfiguration_jsonKeyToVariableMap = Lens.lens (\ModelOutputConfiguration' {jsonKeyToVariableMap} -> jsonKeyToVariableMap) (\s@ModelOutputConfiguration' {} a -> s {jsonKeyToVariableMap = a} :: ModelOutputConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The format of the model output configuration.
+modelOutputConfiguration_format :: Lens.Lens' ModelOutputConfiguration ModelOutputDataFormat
+modelOutputConfiguration_format = Lens.lens (\ModelOutputConfiguration' {format} -> format) (\s@ModelOutputConfiguration' {} a -> s {format = a} :: ModelOutputConfiguration)
+
+instance Data.FromJSON ModelOutputConfiguration where
+  parseJSON =
+    Data.withObject
+      "ModelOutputConfiguration"
+      ( \x ->
+          ModelOutputConfiguration'
+            Prelude.<$> ( x
+                            Data..:? "csvIndexToVariableMap"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "jsonKeyToVariableMap"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "format")
+      )
+
+instance Prelude.Hashable ModelOutputConfiguration where
+  hashWithSalt _salt ModelOutputConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` csvIndexToVariableMap
+      `Prelude.hashWithSalt` jsonKeyToVariableMap
+      `Prelude.hashWithSalt` format
+
+instance Prelude.NFData ModelOutputConfiguration where
+  rnf ModelOutputConfiguration' {..} =
+    Prelude.rnf csvIndexToVariableMap
+      `Prelude.seq` Prelude.rnf jsonKeyToVariableMap
+      `Prelude.seq` Prelude.rnf format
+
+instance Data.ToJSON ModelOutputConfiguration where
+  toJSON ModelOutputConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("csvIndexToVariableMap" Data..=)
+              Prelude.<$> csvIndexToVariableMap,
+            ("jsonKeyToVariableMap" Data..=)
+              Prelude.<$> jsonKeyToVariableMap,
+            Prelude.Just ("format" Data..= format)
+          ]
+      )
diff --git a/gen/Amazonka/FraudDetector/Types/ModelOutputDataFormat.hs b/gen/Amazonka/FraudDetector/Types/ModelOutputDataFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/ModelOutputDataFormat.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.FraudDetector.Types.ModelOutputDataFormat
+-- Copyright   : (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.FraudDetector.Types.ModelOutputDataFormat
+  ( ModelOutputDataFormat
+      ( ..,
+        ModelOutputDataFormat_APPLICATION_JSONLINES,
+        ModelOutputDataFormat_TEXT_CSV
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ModelOutputDataFormat = ModelOutputDataFormat'
+  { fromModelOutputDataFormat ::
+      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 ModelOutputDataFormat_APPLICATION_JSONLINES :: ModelOutputDataFormat
+pattern ModelOutputDataFormat_APPLICATION_JSONLINES = ModelOutputDataFormat' "APPLICATION_JSONLINES"
+
+pattern ModelOutputDataFormat_TEXT_CSV :: ModelOutputDataFormat
+pattern ModelOutputDataFormat_TEXT_CSV = ModelOutputDataFormat' "TEXT_CSV"
+
+{-# COMPLETE
+  ModelOutputDataFormat_APPLICATION_JSONLINES,
+  ModelOutputDataFormat_TEXT_CSV,
+  ModelOutputDataFormat'
+  #-}
diff --git a/gen/Amazonka/FraudDetector/Types/ModelScores.hs b/gen/Amazonka/FraudDetector/Types/ModelScores.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/ModelScores.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.FraudDetector.Types.ModelScores
+-- Copyright   : (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.FraudDetector.Types.ModelScores where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.ModelVersion
+import qualified Amazonka.Prelude as Prelude
+
+-- | The fraud prediction scores.
+--
+-- /See:/ 'newModelScores' smart constructor.
+data ModelScores = ModelScores'
+  { -- | The model version.
+    modelVersion :: Prelude.Maybe ModelVersion,
+    -- | The model\'s fraud prediction scores.
+    scores :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Double)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModelScores' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'modelVersion', 'modelScores_modelVersion' - The model version.
+--
+-- 'scores', 'modelScores_scores' - The model\'s fraud prediction scores.
+newModelScores ::
+  ModelScores
+newModelScores =
+  ModelScores'
+    { modelVersion = Prelude.Nothing,
+      scores = Prelude.Nothing
+    }
+
+-- | The model version.
+modelScores_modelVersion :: Lens.Lens' ModelScores (Prelude.Maybe ModelVersion)
+modelScores_modelVersion = Lens.lens (\ModelScores' {modelVersion} -> modelVersion) (\s@ModelScores' {} a -> s {modelVersion = a} :: ModelScores)
+
+-- | The model\'s fraud prediction scores.
+modelScores_scores :: Lens.Lens' ModelScores (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Double))
+modelScores_scores = Lens.lens (\ModelScores' {scores} -> scores) (\s@ModelScores' {} a -> s {scores = a} :: ModelScores) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ModelScores where
+  parseJSON =
+    Data.withObject
+      "ModelScores"
+      ( \x ->
+          ModelScores'
+            Prelude.<$> (x Data..:? "modelVersion")
+            Prelude.<*> (x Data..:? "scores" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable ModelScores where
+  hashWithSalt _salt ModelScores' {..} =
+    _salt
+      `Prelude.hashWithSalt` modelVersion
+      `Prelude.hashWithSalt` scores
+
+instance Prelude.NFData ModelScores where
+  rnf ModelScores' {..} =
+    Prelude.rnf modelVersion
+      `Prelude.seq` Prelude.rnf scores
diff --git a/gen/Amazonka/FraudDetector/Types/ModelSource.hs b/gen/Amazonka/FraudDetector/Types/ModelSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/ModelSource.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.FraudDetector.Types.ModelSource
+-- Copyright   : (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.FraudDetector.Types.ModelSource
+  ( ModelSource
+      ( ..,
+        ModelSource_SAGEMAKER
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ModelSource = ModelSource'
+  { fromModelSource ::
+      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 ModelSource_SAGEMAKER :: ModelSource
+pattern ModelSource_SAGEMAKER = ModelSource' "SAGEMAKER"
+
+{-# COMPLETE
+  ModelSource_SAGEMAKER,
+  ModelSource'
+  #-}
diff --git a/gen/Amazonka/FraudDetector/Types/ModelTypeEnum.hs b/gen/Amazonka/FraudDetector/Types/ModelTypeEnum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/ModelTypeEnum.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.FraudDetector.Types.ModelTypeEnum
+-- Copyright   : (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.FraudDetector.Types.ModelTypeEnum
+  ( ModelTypeEnum
+      ( ..,
+        ModelTypeEnum_ACCOUNT_TAKEOVER_INSIGHTS,
+        ModelTypeEnum_ONLINE_FRAUD_INSIGHTS,
+        ModelTypeEnum_TRANSACTION_FRAUD_INSIGHTS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ModelTypeEnum = ModelTypeEnum'
+  { fromModelTypeEnum ::
+      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 ModelTypeEnum_ACCOUNT_TAKEOVER_INSIGHTS :: ModelTypeEnum
+pattern ModelTypeEnum_ACCOUNT_TAKEOVER_INSIGHTS = ModelTypeEnum' "ACCOUNT_TAKEOVER_INSIGHTS"
+
+pattern ModelTypeEnum_ONLINE_FRAUD_INSIGHTS :: ModelTypeEnum
+pattern ModelTypeEnum_ONLINE_FRAUD_INSIGHTS = ModelTypeEnum' "ONLINE_FRAUD_INSIGHTS"
+
+pattern ModelTypeEnum_TRANSACTION_FRAUD_INSIGHTS :: ModelTypeEnum
+pattern ModelTypeEnum_TRANSACTION_FRAUD_INSIGHTS = ModelTypeEnum' "TRANSACTION_FRAUD_INSIGHTS"
+
+{-# COMPLETE
+  ModelTypeEnum_ACCOUNT_TAKEOVER_INSIGHTS,
+  ModelTypeEnum_ONLINE_FRAUD_INSIGHTS,
+  ModelTypeEnum_TRANSACTION_FRAUD_INSIGHTS,
+  ModelTypeEnum'
+  #-}
diff --git a/gen/Amazonka/FraudDetector/Types/ModelVersion.hs b/gen/Amazonka/FraudDetector/Types/ModelVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/ModelVersion.hs
@@ -0,0 +1,130 @@
+{-# 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.FraudDetector.Types.ModelVersion
+-- Copyright   : (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.FraudDetector.Types.ModelVersion where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.ModelTypeEnum
+import qualified Amazonka.Prelude as Prelude
+
+-- | The model version.
+--
+-- /See:/ 'newModelVersion' smart constructor.
+data ModelVersion = ModelVersion'
+  { -- | The model version ARN.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The model ID.
+    modelId :: Prelude.Text,
+    -- | The model type.
+    modelType :: ModelTypeEnum,
+    -- | The model version number.
+    modelVersionNumber :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModelVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'modelVersion_arn' - The model version ARN.
+--
+-- 'modelId', 'modelVersion_modelId' - The model ID.
+--
+-- 'modelType', 'modelVersion_modelType' - The model type.
+--
+-- 'modelVersionNumber', 'modelVersion_modelVersionNumber' - The model version number.
+newModelVersion ::
+  -- | 'modelId'
+  Prelude.Text ->
+  -- | 'modelType'
+  ModelTypeEnum ->
+  -- | 'modelVersionNumber'
+  Prelude.Text ->
+  ModelVersion
+newModelVersion
+  pModelId_
+  pModelType_
+  pModelVersionNumber_ =
+    ModelVersion'
+      { arn = Prelude.Nothing,
+        modelId = pModelId_,
+        modelType = pModelType_,
+        modelVersionNumber = pModelVersionNumber_
+      }
+
+-- | The model version ARN.
+modelVersion_arn :: Lens.Lens' ModelVersion (Prelude.Maybe Prelude.Text)
+modelVersion_arn = Lens.lens (\ModelVersion' {arn} -> arn) (\s@ModelVersion' {} a -> s {arn = a} :: ModelVersion)
+
+-- | The model ID.
+modelVersion_modelId :: Lens.Lens' ModelVersion Prelude.Text
+modelVersion_modelId = Lens.lens (\ModelVersion' {modelId} -> modelId) (\s@ModelVersion' {} a -> s {modelId = a} :: ModelVersion)
+
+-- | The model type.
+modelVersion_modelType :: Lens.Lens' ModelVersion ModelTypeEnum
+modelVersion_modelType = Lens.lens (\ModelVersion' {modelType} -> modelType) (\s@ModelVersion' {} a -> s {modelType = a} :: ModelVersion)
+
+-- | The model version number.
+modelVersion_modelVersionNumber :: Lens.Lens' ModelVersion Prelude.Text
+modelVersion_modelVersionNumber = Lens.lens (\ModelVersion' {modelVersionNumber} -> modelVersionNumber) (\s@ModelVersion' {} a -> s {modelVersionNumber = a} :: ModelVersion)
+
+instance Data.FromJSON ModelVersion where
+  parseJSON =
+    Data.withObject
+      "ModelVersion"
+      ( \x ->
+          ModelVersion'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..: "modelId")
+            Prelude.<*> (x Data..: "modelType")
+            Prelude.<*> (x Data..: "modelVersionNumber")
+      )
+
+instance Prelude.Hashable ModelVersion where
+  hashWithSalt _salt ModelVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` modelId
+      `Prelude.hashWithSalt` modelType
+      `Prelude.hashWithSalt` modelVersionNumber
+
+instance Prelude.NFData ModelVersion where
+  rnf ModelVersion' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf modelId
+      `Prelude.seq` Prelude.rnf modelType
+      `Prelude.seq` Prelude.rnf modelVersionNumber
+
+instance Data.ToJSON ModelVersion where
+  toJSON ModelVersion' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("arn" Data..=) Prelude.<$> arn,
+            Prelude.Just ("modelId" Data..= modelId),
+            Prelude.Just ("modelType" Data..= modelType),
+            Prelude.Just
+              ("modelVersionNumber" Data..= modelVersionNumber)
+          ]
+      )
diff --git a/gen/Amazonka/FraudDetector/Types/ModelVersionDetail.hs b/gen/Amazonka/FraudDetector/Types/ModelVersionDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/ModelVersionDetail.hs
@@ -0,0 +1,238 @@
+{-# 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.FraudDetector.Types.ModelVersionDetail
+-- Copyright   : (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.FraudDetector.Types.ModelVersionDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.ExternalEventsDetail
+import Amazonka.FraudDetector.Types.IngestedEventsDetail
+import Amazonka.FraudDetector.Types.ModelTypeEnum
+import Amazonka.FraudDetector.Types.TrainingDataSchema
+import Amazonka.FraudDetector.Types.TrainingDataSourceEnum
+import Amazonka.FraudDetector.Types.TrainingResult
+import Amazonka.FraudDetector.Types.TrainingResultV2
+import qualified Amazonka.Prelude as Prelude
+
+-- | The details of the model version.
+--
+-- /See:/ 'newModelVersionDetail' smart constructor.
+data ModelVersionDetail = ModelVersionDetail'
+  { -- | The model version ARN.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp when the model was created.
+    createdTime :: Prelude.Maybe Prelude.Text,
+    -- | The external events data details. This will be populated if the
+    -- @trainingDataSource@ for the model version is specified as
+    -- @EXTERNAL_EVENTS@.
+    externalEventsDetail :: Prelude.Maybe ExternalEventsDetail,
+    -- | The ingested events data details. This will be populated if the
+    -- @trainingDataSource@ for the model version is specified as
+    -- @INGESTED_EVENTS@.
+    ingestedEventsDetail :: Prelude.Maybe IngestedEventsDetail,
+    -- | The timestamp when the model was last updated.
+    lastUpdatedTime :: Prelude.Maybe Prelude.Text,
+    -- | The model ID.
+    modelId :: Prelude.Maybe Prelude.Text,
+    -- | The model type.
+    modelType :: Prelude.Maybe ModelTypeEnum,
+    -- | The model version number.
+    modelVersionNumber :: Prelude.Maybe Prelude.Text,
+    -- | The status of the model version.
+    status :: Prelude.Maybe Prelude.Text,
+    -- | The training data schema.
+    trainingDataSchema :: Prelude.Maybe TrainingDataSchema,
+    -- | The model version training data source.
+    trainingDataSource :: Prelude.Maybe TrainingDataSourceEnum,
+    -- | The training results.
+    trainingResult :: Prelude.Maybe TrainingResult,
+    -- | The training result details. The details include the relative importance
+    -- of the variables.
+    trainingResultV2 :: Prelude.Maybe TrainingResultV2
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModelVersionDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'modelVersionDetail_arn' - The model version ARN.
+--
+-- 'createdTime', 'modelVersionDetail_createdTime' - The timestamp when the model was created.
+--
+-- 'externalEventsDetail', 'modelVersionDetail_externalEventsDetail' - The external events data details. This will be populated if the
+-- @trainingDataSource@ for the model version is specified as
+-- @EXTERNAL_EVENTS@.
+--
+-- 'ingestedEventsDetail', 'modelVersionDetail_ingestedEventsDetail' - The ingested events data details. This will be populated if the
+-- @trainingDataSource@ for the model version is specified as
+-- @INGESTED_EVENTS@.
+--
+-- 'lastUpdatedTime', 'modelVersionDetail_lastUpdatedTime' - The timestamp when the model was last updated.
+--
+-- 'modelId', 'modelVersionDetail_modelId' - The model ID.
+--
+-- 'modelType', 'modelVersionDetail_modelType' - The model type.
+--
+-- 'modelVersionNumber', 'modelVersionDetail_modelVersionNumber' - The model version number.
+--
+-- 'status', 'modelVersionDetail_status' - The status of the model version.
+--
+-- 'trainingDataSchema', 'modelVersionDetail_trainingDataSchema' - The training data schema.
+--
+-- 'trainingDataSource', 'modelVersionDetail_trainingDataSource' - The model version training data source.
+--
+-- 'trainingResult', 'modelVersionDetail_trainingResult' - The training results.
+--
+-- 'trainingResultV2', 'modelVersionDetail_trainingResultV2' - The training result details. The details include the relative importance
+-- of the variables.
+newModelVersionDetail ::
+  ModelVersionDetail
+newModelVersionDetail =
+  ModelVersionDetail'
+    { arn = Prelude.Nothing,
+      createdTime = Prelude.Nothing,
+      externalEventsDetail = Prelude.Nothing,
+      ingestedEventsDetail = Prelude.Nothing,
+      lastUpdatedTime = Prelude.Nothing,
+      modelId = Prelude.Nothing,
+      modelType = Prelude.Nothing,
+      modelVersionNumber = Prelude.Nothing,
+      status = Prelude.Nothing,
+      trainingDataSchema = Prelude.Nothing,
+      trainingDataSource = Prelude.Nothing,
+      trainingResult = Prelude.Nothing,
+      trainingResultV2 = Prelude.Nothing
+    }
+
+-- | The model version ARN.
+modelVersionDetail_arn :: Lens.Lens' ModelVersionDetail (Prelude.Maybe Prelude.Text)
+modelVersionDetail_arn = Lens.lens (\ModelVersionDetail' {arn} -> arn) (\s@ModelVersionDetail' {} a -> s {arn = a} :: ModelVersionDetail)
+
+-- | The timestamp when the model was created.
+modelVersionDetail_createdTime :: Lens.Lens' ModelVersionDetail (Prelude.Maybe Prelude.Text)
+modelVersionDetail_createdTime = Lens.lens (\ModelVersionDetail' {createdTime} -> createdTime) (\s@ModelVersionDetail' {} a -> s {createdTime = a} :: ModelVersionDetail)
+
+-- | The external events data details. This will be populated if the
+-- @trainingDataSource@ for the model version is specified as
+-- @EXTERNAL_EVENTS@.
+modelVersionDetail_externalEventsDetail :: Lens.Lens' ModelVersionDetail (Prelude.Maybe ExternalEventsDetail)
+modelVersionDetail_externalEventsDetail = Lens.lens (\ModelVersionDetail' {externalEventsDetail} -> externalEventsDetail) (\s@ModelVersionDetail' {} a -> s {externalEventsDetail = a} :: ModelVersionDetail)
+
+-- | The ingested events data details. This will be populated if the
+-- @trainingDataSource@ for the model version is specified as
+-- @INGESTED_EVENTS@.
+modelVersionDetail_ingestedEventsDetail :: Lens.Lens' ModelVersionDetail (Prelude.Maybe IngestedEventsDetail)
+modelVersionDetail_ingestedEventsDetail = Lens.lens (\ModelVersionDetail' {ingestedEventsDetail} -> ingestedEventsDetail) (\s@ModelVersionDetail' {} a -> s {ingestedEventsDetail = a} :: ModelVersionDetail)
+
+-- | The timestamp when the model was last updated.
+modelVersionDetail_lastUpdatedTime :: Lens.Lens' ModelVersionDetail (Prelude.Maybe Prelude.Text)
+modelVersionDetail_lastUpdatedTime = Lens.lens (\ModelVersionDetail' {lastUpdatedTime} -> lastUpdatedTime) (\s@ModelVersionDetail' {} a -> s {lastUpdatedTime = a} :: ModelVersionDetail)
+
+-- | The model ID.
+modelVersionDetail_modelId :: Lens.Lens' ModelVersionDetail (Prelude.Maybe Prelude.Text)
+modelVersionDetail_modelId = Lens.lens (\ModelVersionDetail' {modelId} -> modelId) (\s@ModelVersionDetail' {} a -> s {modelId = a} :: ModelVersionDetail)
+
+-- | The model type.
+modelVersionDetail_modelType :: Lens.Lens' ModelVersionDetail (Prelude.Maybe ModelTypeEnum)
+modelVersionDetail_modelType = Lens.lens (\ModelVersionDetail' {modelType} -> modelType) (\s@ModelVersionDetail' {} a -> s {modelType = a} :: ModelVersionDetail)
+
+-- | The model version number.
+modelVersionDetail_modelVersionNumber :: Lens.Lens' ModelVersionDetail (Prelude.Maybe Prelude.Text)
+modelVersionDetail_modelVersionNumber = Lens.lens (\ModelVersionDetail' {modelVersionNumber} -> modelVersionNumber) (\s@ModelVersionDetail' {} a -> s {modelVersionNumber = a} :: ModelVersionDetail)
+
+-- | The status of the model version.
+modelVersionDetail_status :: Lens.Lens' ModelVersionDetail (Prelude.Maybe Prelude.Text)
+modelVersionDetail_status = Lens.lens (\ModelVersionDetail' {status} -> status) (\s@ModelVersionDetail' {} a -> s {status = a} :: ModelVersionDetail)
+
+-- | The training data schema.
+modelVersionDetail_trainingDataSchema :: Lens.Lens' ModelVersionDetail (Prelude.Maybe TrainingDataSchema)
+modelVersionDetail_trainingDataSchema = Lens.lens (\ModelVersionDetail' {trainingDataSchema} -> trainingDataSchema) (\s@ModelVersionDetail' {} a -> s {trainingDataSchema = a} :: ModelVersionDetail)
+
+-- | The model version training data source.
+modelVersionDetail_trainingDataSource :: Lens.Lens' ModelVersionDetail (Prelude.Maybe TrainingDataSourceEnum)
+modelVersionDetail_trainingDataSource = Lens.lens (\ModelVersionDetail' {trainingDataSource} -> trainingDataSource) (\s@ModelVersionDetail' {} a -> s {trainingDataSource = a} :: ModelVersionDetail)
+
+-- | The training results.
+modelVersionDetail_trainingResult :: Lens.Lens' ModelVersionDetail (Prelude.Maybe TrainingResult)
+modelVersionDetail_trainingResult = Lens.lens (\ModelVersionDetail' {trainingResult} -> trainingResult) (\s@ModelVersionDetail' {} a -> s {trainingResult = a} :: ModelVersionDetail)
+
+-- | The training result details. The details include the relative importance
+-- of the variables.
+modelVersionDetail_trainingResultV2 :: Lens.Lens' ModelVersionDetail (Prelude.Maybe TrainingResultV2)
+modelVersionDetail_trainingResultV2 = Lens.lens (\ModelVersionDetail' {trainingResultV2} -> trainingResultV2) (\s@ModelVersionDetail' {} a -> s {trainingResultV2 = a} :: ModelVersionDetail)
+
+instance Data.FromJSON ModelVersionDetail where
+  parseJSON =
+    Data.withObject
+      "ModelVersionDetail"
+      ( \x ->
+          ModelVersionDetail'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "createdTime")
+            Prelude.<*> (x Data..:? "externalEventsDetail")
+            Prelude.<*> (x Data..:? "ingestedEventsDetail")
+            Prelude.<*> (x Data..:? "lastUpdatedTime")
+            Prelude.<*> (x Data..:? "modelId")
+            Prelude.<*> (x Data..:? "modelType")
+            Prelude.<*> (x Data..:? "modelVersionNumber")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "trainingDataSchema")
+            Prelude.<*> (x Data..:? "trainingDataSource")
+            Prelude.<*> (x Data..:? "trainingResult")
+            Prelude.<*> (x Data..:? "trainingResultV2")
+      )
+
+instance Prelude.Hashable ModelVersionDetail where
+  hashWithSalt _salt ModelVersionDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdTime
+      `Prelude.hashWithSalt` externalEventsDetail
+      `Prelude.hashWithSalt` ingestedEventsDetail
+      `Prelude.hashWithSalt` lastUpdatedTime
+      `Prelude.hashWithSalt` modelId
+      `Prelude.hashWithSalt` modelType
+      `Prelude.hashWithSalt` modelVersionNumber
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` trainingDataSchema
+      `Prelude.hashWithSalt` trainingDataSource
+      `Prelude.hashWithSalt` trainingResult
+      `Prelude.hashWithSalt` trainingResultV2
+
+instance Prelude.NFData ModelVersionDetail where
+  rnf ModelVersionDetail' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdTime
+      `Prelude.seq` Prelude.rnf externalEventsDetail
+      `Prelude.seq` Prelude.rnf ingestedEventsDetail
+      `Prelude.seq` Prelude.rnf lastUpdatedTime
+      `Prelude.seq` Prelude.rnf modelId
+      `Prelude.seq` Prelude.rnf modelType
+      `Prelude.seq` Prelude.rnf modelVersionNumber
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf trainingDataSchema
+      `Prelude.seq` Prelude.rnf trainingDataSource
+      `Prelude.seq` Prelude.rnf trainingResult
+      `Prelude.seq` Prelude.rnf trainingResultV2
diff --git a/gen/Amazonka/FraudDetector/Types/ModelVersionEvaluation.hs b/gen/Amazonka/FraudDetector/Types/ModelVersionEvaluation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/ModelVersionEvaluation.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.FraudDetector.Types.ModelVersionEvaluation
+-- Copyright   : (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.FraudDetector.Types.ModelVersionEvaluation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.PredictionExplanations
+import qualified Amazonka.Prelude as Prelude
+
+-- | The model version evalutions.
+--
+-- /See:/ 'newModelVersionEvaluation' smart constructor.
+data ModelVersionEvaluation = ModelVersionEvaluation'
+  { -- | The evaluation score generated for the model version.
+    evaluationScore :: Prelude.Maybe Prelude.Text,
+    -- | The output variable name.
+    outputVariableName :: Prelude.Maybe Prelude.Text,
+    -- | The prediction explanations generated for the model version.
+    predictionExplanations :: Prelude.Maybe PredictionExplanations
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModelVersionEvaluation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'evaluationScore', 'modelVersionEvaluation_evaluationScore' - The evaluation score generated for the model version.
+--
+-- 'outputVariableName', 'modelVersionEvaluation_outputVariableName' - The output variable name.
+--
+-- 'predictionExplanations', 'modelVersionEvaluation_predictionExplanations' - The prediction explanations generated for the model version.
+newModelVersionEvaluation ::
+  ModelVersionEvaluation
+newModelVersionEvaluation =
+  ModelVersionEvaluation'
+    { evaluationScore =
+        Prelude.Nothing,
+      outputVariableName = Prelude.Nothing,
+      predictionExplanations = Prelude.Nothing
+    }
+
+-- | The evaluation score generated for the model version.
+modelVersionEvaluation_evaluationScore :: Lens.Lens' ModelVersionEvaluation (Prelude.Maybe Prelude.Text)
+modelVersionEvaluation_evaluationScore = Lens.lens (\ModelVersionEvaluation' {evaluationScore} -> evaluationScore) (\s@ModelVersionEvaluation' {} a -> s {evaluationScore = a} :: ModelVersionEvaluation)
+
+-- | The output variable name.
+modelVersionEvaluation_outputVariableName :: Lens.Lens' ModelVersionEvaluation (Prelude.Maybe Prelude.Text)
+modelVersionEvaluation_outputVariableName = Lens.lens (\ModelVersionEvaluation' {outputVariableName} -> outputVariableName) (\s@ModelVersionEvaluation' {} a -> s {outputVariableName = a} :: ModelVersionEvaluation)
+
+-- | The prediction explanations generated for the model version.
+modelVersionEvaluation_predictionExplanations :: Lens.Lens' ModelVersionEvaluation (Prelude.Maybe PredictionExplanations)
+modelVersionEvaluation_predictionExplanations = Lens.lens (\ModelVersionEvaluation' {predictionExplanations} -> predictionExplanations) (\s@ModelVersionEvaluation' {} a -> s {predictionExplanations = a} :: ModelVersionEvaluation)
+
+instance Data.FromJSON ModelVersionEvaluation where
+  parseJSON =
+    Data.withObject
+      "ModelVersionEvaluation"
+      ( \x ->
+          ModelVersionEvaluation'
+            Prelude.<$> (x Data..:? "evaluationScore")
+            Prelude.<*> (x Data..:? "outputVariableName")
+            Prelude.<*> (x Data..:? "predictionExplanations")
+      )
+
+instance Prelude.Hashable ModelVersionEvaluation where
+  hashWithSalt _salt ModelVersionEvaluation' {..} =
+    _salt
+      `Prelude.hashWithSalt` evaluationScore
+      `Prelude.hashWithSalt` outputVariableName
+      `Prelude.hashWithSalt` predictionExplanations
+
+instance Prelude.NFData ModelVersionEvaluation where
+  rnf ModelVersionEvaluation' {..} =
+    Prelude.rnf evaluationScore
+      `Prelude.seq` Prelude.rnf outputVariableName
+      `Prelude.seq` Prelude.rnf predictionExplanations
diff --git a/gen/Amazonka/FraudDetector/Types/ModelVersionStatus.hs b/gen/Amazonka/FraudDetector/Types/ModelVersionStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/ModelVersionStatus.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.FraudDetector.Types.ModelVersionStatus
+-- Copyright   : (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.FraudDetector.Types.ModelVersionStatus
+  ( ModelVersionStatus
+      ( ..,
+        ModelVersionStatus_ACTIVE,
+        ModelVersionStatus_INACTIVE,
+        ModelVersionStatus_TRAINING_CANCELLED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ModelVersionStatus = ModelVersionStatus'
+  { fromModelVersionStatus ::
+      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 ModelVersionStatus_ACTIVE :: ModelVersionStatus
+pattern ModelVersionStatus_ACTIVE = ModelVersionStatus' "ACTIVE"
+
+pattern ModelVersionStatus_INACTIVE :: ModelVersionStatus
+pattern ModelVersionStatus_INACTIVE = ModelVersionStatus' "INACTIVE"
+
+pattern ModelVersionStatus_TRAINING_CANCELLED :: ModelVersionStatus
+pattern ModelVersionStatus_TRAINING_CANCELLED = ModelVersionStatus' "TRAINING_CANCELLED"
+
+{-# COMPLETE
+  ModelVersionStatus_ACTIVE,
+  ModelVersionStatus_INACTIVE,
+  ModelVersionStatus_TRAINING_CANCELLED,
+  ModelVersionStatus'
+  #-}
diff --git a/gen/Amazonka/FraudDetector/Types/OFIMetricDataPoint.hs b/gen/Amazonka/FraudDetector/Types/OFIMetricDataPoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/OFIMetricDataPoint.hs
@@ -0,0 +1,123 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.Types.OFIMetricDataPoint
+-- Copyright   : (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.FraudDetector.Types.OFIMetricDataPoint 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 Online Fraud Insights (OFI) model performance metrics data points.
+--
+-- /See:/ 'newOFIMetricDataPoint' smart constructor.
+data OFIMetricDataPoint = OFIMetricDataPoint'
+  { -- | The false positive rate. This is the percentage of total legitimate
+    -- events that are incorrectly predicted as fraud.
+    fpr :: Prelude.Maybe Prelude.Double,
+    -- | The percentage of fraud events correctly predicted as fraudulent as
+    -- compared to all events predicted as fraudulent.
+    precision :: Prelude.Maybe Prelude.Double,
+    -- | The model threshold that specifies an acceptable fraud capture rate. For
+    -- example, a threshold of 500 means any model score 500 or above is
+    -- labeled as fraud.
+    threshold :: Prelude.Maybe Prelude.Double,
+    -- | The true positive rate. This is the percentage of total fraud the model
+    -- detects. Also known as capture rate.
+    tpr :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OFIMetricDataPoint' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fpr', 'oFIMetricDataPoint_fpr' - The false positive rate. This is the percentage of total legitimate
+-- events that are incorrectly predicted as fraud.
+--
+-- 'precision', 'oFIMetricDataPoint_precision' - The percentage of fraud events correctly predicted as fraudulent as
+-- compared to all events predicted as fraudulent.
+--
+-- 'threshold', 'oFIMetricDataPoint_threshold' - The model threshold that specifies an acceptable fraud capture rate. For
+-- example, a threshold of 500 means any model score 500 or above is
+-- labeled as fraud.
+--
+-- 'tpr', 'oFIMetricDataPoint_tpr' - The true positive rate. This is the percentage of total fraud the model
+-- detects. Also known as capture rate.
+newOFIMetricDataPoint ::
+  OFIMetricDataPoint
+newOFIMetricDataPoint =
+  OFIMetricDataPoint'
+    { fpr = Prelude.Nothing,
+      precision = Prelude.Nothing,
+      threshold = Prelude.Nothing,
+      tpr = Prelude.Nothing
+    }
+
+-- | The false positive rate. This is the percentage of total legitimate
+-- events that are incorrectly predicted as fraud.
+oFIMetricDataPoint_fpr :: Lens.Lens' OFIMetricDataPoint (Prelude.Maybe Prelude.Double)
+oFIMetricDataPoint_fpr = Lens.lens (\OFIMetricDataPoint' {fpr} -> fpr) (\s@OFIMetricDataPoint' {} a -> s {fpr = a} :: OFIMetricDataPoint)
+
+-- | The percentage of fraud events correctly predicted as fraudulent as
+-- compared to all events predicted as fraudulent.
+oFIMetricDataPoint_precision :: Lens.Lens' OFIMetricDataPoint (Prelude.Maybe Prelude.Double)
+oFIMetricDataPoint_precision = Lens.lens (\OFIMetricDataPoint' {precision} -> precision) (\s@OFIMetricDataPoint' {} a -> s {precision = a} :: OFIMetricDataPoint)
+
+-- | The model threshold that specifies an acceptable fraud capture rate. For
+-- example, a threshold of 500 means any model score 500 or above is
+-- labeled as fraud.
+oFIMetricDataPoint_threshold :: Lens.Lens' OFIMetricDataPoint (Prelude.Maybe Prelude.Double)
+oFIMetricDataPoint_threshold = Lens.lens (\OFIMetricDataPoint' {threshold} -> threshold) (\s@OFIMetricDataPoint' {} a -> s {threshold = a} :: OFIMetricDataPoint)
+
+-- | The true positive rate. This is the percentage of total fraud the model
+-- detects. Also known as capture rate.
+oFIMetricDataPoint_tpr :: Lens.Lens' OFIMetricDataPoint (Prelude.Maybe Prelude.Double)
+oFIMetricDataPoint_tpr = Lens.lens (\OFIMetricDataPoint' {tpr} -> tpr) (\s@OFIMetricDataPoint' {} a -> s {tpr = a} :: OFIMetricDataPoint)
+
+instance Data.FromJSON OFIMetricDataPoint where
+  parseJSON =
+    Data.withObject
+      "OFIMetricDataPoint"
+      ( \x ->
+          OFIMetricDataPoint'
+            Prelude.<$> (x Data..:? "fpr")
+            Prelude.<*> (x Data..:? "precision")
+            Prelude.<*> (x Data..:? "threshold")
+            Prelude.<*> (x Data..:? "tpr")
+      )
+
+instance Prelude.Hashable OFIMetricDataPoint where
+  hashWithSalt _salt OFIMetricDataPoint' {..} =
+    _salt
+      `Prelude.hashWithSalt` fpr
+      `Prelude.hashWithSalt` precision
+      `Prelude.hashWithSalt` threshold
+      `Prelude.hashWithSalt` tpr
+
+instance Prelude.NFData OFIMetricDataPoint where
+  rnf OFIMetricDataPoint' {..} =
+    Prelude.rnf fpr
+      `Prelude.seq` Prelude.rnf precision
+      `Prelude.seq` Prelude.rnf threshold
+      `Prelude.seq` Prelude.rnf tpr
diff --git a/gen/Amazonka/FraudDetector/Types/OFIModelPerformance.hs b/gen/Amazonka/FraudDetector/Types/OFIModelPerformance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/OFIModelPerformance.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.FraudDetector.Types.OFIModelPerformance
+-- Copyright   : (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.FraudDetector.Types.OFIModelPerformance 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 Online Fraud Insights (OFI) model performance score.
+--
+-- /See:/ 'newOFIModelPerformance' smart constructor.
+data OFIModelPerformance = OFIModelPerformance'
+  { -- | The area under the curve (auc). This summarizes the total positive rate
+    -- (tpr) and false positive rate (FPR) across all possible model score
+    -- thresholds.
+    auc :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OFIModelPerformance' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'auc', 'oFIModelPerformance_auc' - The area under the curve (auc). This summarizes the total positive rate
+-- (tpr) and false positive rate (FPR) across all possible model score
+-- thresholds.
+newOFIModelPerformance ::
+  OFIModelPerformance
+newOFIModelPerformance =
+  OFIModelPerformance' {auc = Prelude.Nothing}
+
+-- | The area under the curve (auc). This summarizes the total positive rate
+-- (tpr) and false positive rate (FPR) across all possible model score
+-- thresholds.
+oFIModelPerformance_auc :: Lens.Lens' OFIModelPerformance (Prelude.Maybe Prelude.Double)
+oFIModelPerformance_auc = Lens.lens (\OFIModelPerformance' {auc} -> auc) (\s@OFIModelPerformance' {} a -> s {auc = a} :: OFIModelPerformance)
+
+instance Data.FromJSON OFIModelPerformance where
+  parseJSON =
+    Data.withObject
+      "OFIModelPerformance"
+      ( \x ->
+          OFIModelPerformance' Prelude.<$> (x Data..:? "auc")
+      )
+
+instance Prelude.Hashable OFIModelPerformance where
+  hashWithSalt _salt OFIModelPerformance' {..} =
+    _salt `Prelude.hashWithSalt` auc
+
+instance Prelude.NFData OFIModelPerformance where
+  rnf OFIModelPerformance' {..} = Prelude.rnf auc
diff --git a/gen/Amazonka/FraudDetector/Types/OFITrainingMetricsValue.hs b/gen/Amazonka/FraudDetector/Types/OFITrainingMetricsValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/OFITrainingMetricsValue.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.FraudDetector.Types.OFITrainingMetricsValue
+-- Copyright   : (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.FraudDetector.Types.OFITrainingMetricsValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.OFIMetricDataPoint
+import Amazonka.FraudDetector.Types.OFIModelPerformance
+import qualified Amazonka.Prelude as Prelude
+
+-- | The Online Fraud Insights (OFI) model training metric details.
+--
+-- /See:/ 'newOFITrainingMetricsValue' smart constructor.
+data OFITrainingMetricsValue = OFITrainingMetricsValue'
+  { -- | The model\'s performance metrics data points.
+    metricDataPoints :: Prelude.Maybe [OFIMetricDataPoint],
+    -- | The model\'s overall performance score.
+    modelPerformance :: Prelude.Maybe OFIModelPerformance
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OFITrainingMetricsValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'metricDataPoints', 'oFITrainingMetricsValue_metricDataPoints' - The model\'s performance metrics data points.
+--
+-- 'modelPerformance', 'oFITrainingMetricsValue_modelPerformance' - The model\'s overall performance score.
+newOFITrainingMetricsValue ::
+  OFITrainingMetricsValue
+newOFITrainingMetricsValue =
+  OFITrainingMetricsValue'
+    { metricDataPoints =
+        Prelude.Nothing,
+      modelPerformance = Prelude.Nothing
+    }
+
+-- | The model\'s performance metrics data points.
+oFITrainingMetricsValue_metricDataPoints :: Lens.Lens' OFITrainingMetricsValue (Prelude.Maybe [OFIMetricDataPoint])
+oFITrainingMetricsValue_metricDataPoints = Lens.lens (\OFITrainingMetricsValue' {metricDataPoints} -> metricDataPoints) (\s@OFITrainingMetricsValue' {} a -> s {metricDataPoints = a} :: OFITrainingMetricsValue) Prelude.. Lens.mapping Lens.coerced
+
+-- | The model\'s overall performance score.
+oFITrainingMetricsValue_modelPerformance :: Lens.Lens' OFITrainingMetricsValue (Prelude.Maybe OFIModelPerformance)
+oFITrainingMetricsValue_modelPerformance = Lens.lens (\OFITrainingMetricsValue' {modelPerformance} -> modelPerformance) (\s@OFITrainingMetricsValue' {} a -> s {modelPerformance = a} :: OFITrainingMetricsValue)
+
+instance Data.FromJSON OFITrainingMetricsValue where
+  parseJSON =
+    Data.withObject
+      "OFITrainingMetricsValue"
+      ( \x ->
+          OFITrainingMetricsValue'
+            Prelude.<$> ( x
+                            Data..:? "metricDataPoints"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "modelPerformance")
+      )
+
+instance Prelude.Hashable OFITrainingMetricsValue where
+  hashWithSalt _salt OFITrainingMetricsValue' {..} =
+    _salt
+      `Prelude.hashWithSalt` metricDataPoints
+      `Prelude.hashWithSalt` modelPerformance
+
+instance Prelude.NFData OFITrainingMetricsValue where
+  rnf OFITrainingMetricsValue' {..} =
+    Prelude.rnf metricDataPoints
+      `Prelude.seq` Prelude.rnf modelPerformance
diff --git a/gen/Amazonka/FraudDetector/Types/Outcome.hs b/gen/Amazonka/FraudDetector/Types/Outcome.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/Outcome.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.FraudDetector.Types.Outcome
+-- Copyright   : (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.FraudDetector.Types.Outcome 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 outcome.
+--
+-- /See:/ 'newOutcome' smart constructor.
+data Outcome = Outcome'
+  { -- | The outcome ARN.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp when the outcome was created.
+    createdTime :: Prelude.Maybe Prelude.Text,
+    -- | The outcome description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp when the outcome was last updated.
+    lastUpdatedTime :: Prelude.Maybe Prelude.Text,
+    -- | The outcome name.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Outcome' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'outcome_arn' - The outcome ARN.
+--
+-- 'createdTime', 'outcome_createdTime' - The timestamp when the outcome was created.
+--
+-- 'description', 'outcome_description' - The outcome description.
+--
+-- 'lastUpdatedTime', 'outcome_lastUpdatedTime' - The timestamp when the outcome was last updated.
+--
+-- 'name', 'outcome_name' - The outcome name.
+newOutcome ::
+  Outcome
+newOutcome =
+  Outcome'
+    { arn = Prelude.Nothing,
+      createdTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      lastUpdatedTime = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The outcome ARN.
+outcome_arn :: Lens.Lens' Outcome (Prelude.Maybe Prelude.Text)
+outcome_arn = Lens.lens (\Outcome' {arn} -> arn) (\s@Outcome' {} a -> s {arn = a} :: Outcome)
+
+-- | The timestamp when the outcome was created.
+outcome_createdTime :: Lens.Lens' Outcome (Prelude.Maybe Prelude.Text)
+outcome_createdTime = Lens.lens (\Outcome' {createdTime} -> createdTime) (\s@Outcome' {} a -> s {createdTime = a} :: Outcome)
+
+-- | The outcome description.
+outcome_description :: Lens.Lens' Outcome (Prelude.Maybe Prelude.Text)
+outcome_description = Lens.lens (\Outcome' {description} -> description) (\s@Outcome' {} a -> s {description = a} :: Outcome)
+
+-- | The timestamp when the outcome was last updated.
+outcome_lastUpdatedTime :: Lens.Lens' Outcome (Prelude.Maybe Prelude.Text)
+outcome_lastUpdatedTime = Lens.lens (\Outcome' {lastUpdatedTime} -> lastUpdatedTime) (\s@Outcome' {} a -> s {lastUpdatedTime = a} :: Outcome)
+
+-- | The outcome name.
+outcome_name :: Lens.Lens' Outcome (Prelude.Maybe Prelude.Text)
+outcome_name = Lens.lens (\Outcome' {name} -> name) (\s@Outcome' {} a -> s {name = a} :: Outcome)
+
+instance Data.FromJSON Outcome where
+  parseJSON =
+    Data.withObject
+      "Outcome"
+      ( \x ->
+          Outcome'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "createdTime")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "lastUpdatedTime")
+            Prelude.<*> (x Data..:? "name")
+      )
+
+instance Prelude.Hashable Outcome where
+  hashWithSalt _salt Outcome' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` lastUpdatedTime
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData Outcome where
+  rnf Outcome' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastUpdatedTime
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/FraudDetector/Types/PredictionExplanations.hs b/gen/Amazonka/FraudDetector/Types/PredictionExplanations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/PredictionExplanations.hs
@@ -0,0 +1,115 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.Types.PredictionExplanations
+-- Copyright   : (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.FraudDetector.Types.PredictionExplanations where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.AggregatedVariablesImpactExplanation
+import Amazonka.FraudDetector.Types.VariableImpactExplanation
+import qualified Amazonka.Prelude as Prelude
+
+-- | The prediction explanations that provide insight into how each event
+-- variable impacted the model version\'s fraud prediction score.
+--
+-- /See:/ 'newPredictionExplanations' smart constructor.
+data PredictionExplanations = PredictionExplanations'
+  { -- | The details of the aggregated variables impact on the prediction score.
+    --
+    -- Account Takeover Insights (ATI) model uses event variables from the
+    -- login data you provide to continuously calculate a set of variables
+    -- (aggregated variables) based on historical events. For example, your ATI
+    -- model might calculate the number of times an user has logged in using
+    -- the same IP address. In this case, event variables used to derive the
+    -- aggregated variables are @IP address@ and @user@.
+    aggregatedVariablesImpactExplanations :: Prelude.Maybe [AggregatedVariablesImpactExplanation],
+    -- | The details of the event variable\'s impact on the prediction score.
+    variableImpactExplanations :: Prelude.Maybe [VariableImpactExplanation]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PredictionExplanations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'aggregatedVariablesImpactExplanations', 'predictionExplanations_aggregatedVariablesImpactExplanations' - The details of the aggregated variables impact on the prediction score.
+--
+-- Account Takeover Insights (ATI) model uses event variables from the
+-- login data you provide to continuously calculate a set of variables
+-- (aggregated variables) based on historical events. For example, your ATI
+-- model might calculate the number of times an user has logged in using
+-- the same IP address. In this case, event variables used to derive the
+-- aggregated variables are @IP address@ and @user@.
+--
+-- 'variableImpactExplanations', 'predictionExplanations_variableImpactExplanations' - The details of the event variable\'s impact on the prediction score.
+newPredictionExplanations ::
+  PredictionExplanations
+newPredictionExplanations =
+  PredictionExplanations'
+    { aggregatedVariablesImpactExplanations =
+        Prelude.Nothing,
+      variableImpactExplanations = Prelude.Nothing
+    }
+
+-- | The details of the aggregated variables impact on the prediction score.
+--
+-- Account Takeover Insights (ATI) model uses event variables from the
+-- login data you provide to continuously calculate a set of variables
+-- (aggregated variables) based on historical events. For example, your ATI
+-- model might calculate the number of times an user has logged in using
+-- the same IP address. In this case, event variables used to derive the
+-- aggregated variables are @IP address@ and @user@.
+predictionExplanations_aggregatedVariablesImpactExplanations :: Lens.Lens' PredictionExplanations (Prelude.Maybe [AggregatedVariablesImpactExplanation])
+predictionExplanations_aggregatedVariablesImpactExplanations = Lens.lens (\PredictionExplanations' {aggregatedVariablesImpactExplanations} -> aggregatedVariablesImpactExplanations) (\s@PredictionExplanations' {} a -> s {aggregatedVariablesImpactExplanations = a} :: PredictionExplanations) Prelude.. Lens.mapping Lens.coerced
+
+-- | The details of the event variable\'s impact on the prediction score.
+predictionExplanations_variableImpactExplanations :: Lens.Lens' PredictionExplanations (Prelude.Maybe [VariableImpactExplanation])
+predictionExplanations_variableImpactExplanations = Lens.lens (\PredictionExplanations' {variableImpactExplanations} -> variableImpactExplanations) (\s@PredictionExplanations' {} a -> s {variableImpactExplanations = a} :: PredictionExplanations) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON PredictionExplanations where
+  parseJSON =
+    Data.withObject
+      "PredictionExplanations"
+      ( \x ->
+          PredictionExplanations'
+            Prelude.<$> ( x
+                            Data..:? "aggregatedVariablesImpactExplanations"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "variableImpactExplanations"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable PredictionExplanations where
+  hashWithSalt _salt PredictionExplanations' {..} =
+    _salt
+      `Prelude.hashWithSalt` aggregatedVariablesImpactExplanations
+      `Prelude.hashWithSalt` variableImpactExplanations
+
+instance Prelude.NFData PredictionExplanations where
+  rnf PredictionExplanations' {..} =
+    Prelude.rnf aggregatedVariablesImpactExplanations
+      `Prelude.seq` Prelude.rnf variableImpactExplanations
diff --git a/gen/Amazonka/FraudDetector/Types/PredictionTimeRange.hs b/gen/Amazonka/FraudDetector/Types/PredictionTimeRange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/PredictionTimeRange.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.FraudDetector.Types.PredictionTimeRange
+-- Copyright   : (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.FraudDetector.Types.PredictionTimeRange 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 time period for when the predictions were generated.
+--
+-- /See:/ 'newPredictionTimeRange' smart constructor.
+data PredictionTimeRange = PredictionTimeRange'
+  { -- | The start time of the time period for when the predictions were
+    -- generated.
+    startTime :: Prelude.Text,
+    -- | The end time of the time period for when the predictions were generated.
+    endTime :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PredictionTimeRange' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'startTime', 'predictionTimeRange_startTime' - The start time of the time period for when the predictions were
+-- generated.
+--
+-- 'endTime', 'predictionTimeRange_endTime' - The end time of the time period for when the predictions were generated.
+newPredictionTimeRange ::
+  -- | 'startTime'
+  Prelude.Text ->
+  -- | 'endTime'
+  Prelude.Text ->
+  PredictionTimeRange
+newPredictionTimeRange pStartTime_ pEndTime_ =
+  PredictionTimeRange'
+    { startTime = pStartTime_,
+      endTime = pEndTime_
+    }
+
+-- | The start time of the time period for when the predictions were
+-- generated.
+predictionTimeRange_startTime :: Lens.Lens' PredictionTimeRange Prelude.Text
+predictionTimeRange_startTime = Lens.lens (\PredictionTimeRange' {startTime} -> startTime) (\s@PredictionTimeRange' {} a -> s {startTime = a} :: PredictionTimeRange)
+
+-- | The end time of the time period for when the predictions were generated.
+predictionTimeRange_endTime :: Lens.Lens' PredictionTimeRange Prelude.Text
+predictionTimeRange_endTime = Lens.lens (\PredictionTimeRange' {endTime} -> endTime) (\s@PredictionTimeRange' {} a -> s {endTime = a} :: PredictionTimeRange)
+
+instance Prelude.Hashable PredictionTimeRange where
+  hashWithSalt _salt PredictionTimeRange' {..} =
+    _salt
+      `Prelude.hashWithSalt` startTime
+      `Prelude.hashWithSalt` endTime
+
+instance Prelude.NFData PredictionTimeRange where
+  rnf PredictionTimeRange' {..} =
+    Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf endTime
+
+instance Data.ToJSON PredictionTimeRange where
+  toJSON PredictionTimeRange' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("startTime" Data..= startTime),
+            Prelude.Just ("endTime" Data..= endTime)
+          ]
+      )
diff --git a/gen/Amazonka/FraudDetector/Types/Rule.hs b/gen/Amazonka/FraudDetector/Types/Rule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/Rule.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.FraudDetector.Types.Rule
+-- Copyright   : (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.FraudDetector.Types.Rule 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 rule.
+--
+-- /See:/ 'newRule' smart constructor.
+data Rule = Rule'
+  { -- | The detector for which the rule is associated.
+    detectorId :: Prelude.Text,
+    -- | The rule ID.
+    ruleId :: Prelude.Text,
+    -- | The rule version.
+    ruleVersion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Rule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detectorId', 'rule_detectorId' - The detector for which the rule is associated.
+--
+-- 'ruleId', 'rule_ruleId' - The rule ID.
+--
+-- 'ruleVersion', 'rule_ruleVersion' - The rule version.
+newRule ::
+  -- | 'detectorId'
+  Prelude.Text ->
+  -- | 'ruleId'
+  Prelude.Text ->
+  -- | 'ruleVersion'
+  Prelude.Text ->
+  Rule
+newRule pDetectorId_ pRuleId_ pRuleVersion_ =
+  Rule'
+    { detectorId = pDetectorId_,
+      ruleId = pRuleId_,
+      ruleVersion = pRuleVersion_
+    }
+
+-- | The detector for which the rule is associated.
+rule_detectorId :: Lens.Lens' Rule Prelude.Text
+rule_detectorId = Lens.lens (\Rule' {detectorId} -> detectorId) (\s@Rule' {} a -> s {detectorId = a} :: Rule)
+
+-- | The rule ID.
+rule_ruleId :: Lens.Lens' Rule Prelude.Text
+rule_ruleId = Lens.lens (\Rule' {ruleId} -> ruleId) (\s@Rule' {} a -> s {ruleId = a} :: Rule)
+
+-- | The rule version.
+rule_ruleVersion :: Lens.Lens' Rule Prelude.Text
+rule_ruleVersion = Lens.lens (\Rule' {ruleVersion} -> ruleVersion) (\s@Rule' {} a -> s {ruleVersion = a} :: Rule)
+
+instance Data.FromJSON Rule where
+  parseJSON =
+    Data.withObject
+      "Rule"
+      ( \x ->
+          Rule'
+            Prelude.<$> (x Data..: "detectorId")
+            Prelude.<*> (x Data..: "ruleId")
+            Prelude.<*> (x Data..: "ruleVersion")
+      )
+
+instance Prelude.Hashable Rule where
+  hashWithSalt _salt Rule' {..} =
+    _salt
+      `Prelude.hashWithSalt` detectorId
+      `Prelude.hashWithSalt` ruleId
+      `Prelude.hashWithSalt` ruleVersion
+
+instance Prelude.NFData Rule where
+  rnf Rule' {..} =
+    Prelude.rnf detectorId
+      `Prelude.seq` Prelude.rnf ruleId
+      `Prelude.seq` Prelude.rnf ruleVersion
+
+instance Data.ToJSON Rule where
+  toJSON Rule' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("detectorId" Data..= detectorId),
+            Prelude.Just ("ruleId" Data..= ruleId),
+            Prelude.Just ("ruleVersion" Data..= ruleVersion)
+          ]
+      )
diff --git a/gen/Amazonka/FraudDetector/Types/RuleDetail.hs b/gen/Amazonka/FraudDetector/Types/RuleDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/RuleDetail.hs
@@ -0,0 +1,181 @@
+{-# 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.FraudDetector.Types.RuleDetail
+-- Copyright   : (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.FraudDetector.Types.RuleDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.Language
+import qualified Amazonka.Prelude as Prelude
+
+-- | The details of the rule.
+--
+-- /See:/ 'newRuleDetail' smart constructor.
+data RuleDetail = RuleDetail'
+  { -- | The rule ARN.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp of when the rule was created.
+    createdTime :: Prelude.Maybe Prelude.Text,
+    -- | The rule description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The detector for which the rule is associated.
+    detectorId :: Prelude.Maybe Prelude.Text,
+    -- | The rule expression.
+    expression :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The rule language.
+    language :: Prelude.Maybe Language,
+    -- | Timestamp of the last time the rule was updated.
+    lastUpdatedTime :: Prelude.Maybe Prelude.Text,
+    -- | The rule outcomes.
+    outcomes :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The rule ID.
+    ruleId :: Prelude.Maybe Prelude.Text,
+    -- | The rule version.
+    ruleVersion :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RuleDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'ruleDetail_arn' - The rule ARN.
+--
+-- 'createdTime', 'ruleDetail_createdTime' - The timestamp of when the rule was created.
+--
+-- 'description', 'ruleDetail_description' - The rule description.
+--
+-- 'detectorId', 'ruleDetail_detectorId' - The detector for which the rule is associated.
+--
+-- 'expression', 'ruleDetail_expression' - The rule expression.
+--
+-- 'language', 'ruleDetail_language' - The rule language.
+--
+-- 'lastUpdatedTime', 'ruleDetail_lastUpdatedTime' - Timestamp of the last time the rule was updated.
+--
+-- 'outcomes', 'ruleDetail_outcomes' - The rule outcomes.
+--
+-- 'ruleId', 'ruleDetail_ruleId' - The rule ID.
+--
+-- 'ruleVersion', 'ruleDetail_ruleVersion' - The rule version.
+newRuleDetail ::
+  RuleDetail
+newRuleDetail =
+  RuleDetail'
+    { arn = Prelude.Nothing,
+      createdTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      detectorId = Prelude.Nothing,
+      expression = Prelude.Nothing,
+      language = Prelude.Nothing,
+      lastUpdatedTime = Prelude.Nothing,
+      outcomes = Prelude.Nothing,
+      ruleId = Prelude.Nothing,
+      ruleVersion = Prelude.Nothing
+    }
+
+-- | The rule ARN.
+ruleDetail_arn :: Lens.Lens' RuleDetail (Prelude.Maybe Prelude.Text)
+ruleDetail_arn = Lens.lens (\RuleDetail' {arn} -> arn) (\s@RuleDetail' {} a -> s {arn = a} :: RuleDetail)
+
+-- | The timestamp of when the rule was created.
+ruleDetail_createdTime :: Lens.Lens' RuleDetail (Prelude.Maybe Prelude.Text)
+ruleDetail_createdTime = Lens.lens (\RuleDetail' {createdTime} -> createdTime) (\s@RuleDetail' {} a -> s {createdTime = a} :: RuleDetail)
+
+-- | The rule description.
+ruleDetail_description :: Lens.Lens' RuleDetail (Prelude.Maybe Prelude.Text)
+ruleDetail_description = Lens.lens (\RuleDetail' {description} -> description) (\s@RuleDetail' {} a -> s {description = a} :: RuleDetail)
+
+-- | The detector for which the rule is associated.
+ruleDetail_detectorId :: Lens.Lens' RuleDetail (Prelude.Maybe Prelude.Text)
+ruleDetail_detectorId = Lens.lens (\RuleDetail' {detectorId} -> detectorId) (\s@RuleDetail' {} a -> s {detectorId = a} :: RuleDetail)
+
+-- | The rule expression.
+ruleDetail_expression :: Lens.Lens' RuleDetail (Prelude.Maybe Prelude.Text)
+ruleDetail_expression = Lens.lens (\RuleDetail' {expression} -> expression) (\s@RuleDetail' {} a -> s {expression = a} :: RuleDetail) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The rule language.
+ruleDetail_language :: Lens.Lens' RuleDetail (Prelude.Maybe Language)
+ruleDetail_language = Lens.lens (\RuleDetail' {language} -> language) (\s@RuleDetail' {} a -> s {language = a} :: RuleDetail)
+
+-- | Timestamp of the last time the rule was updated.
+ruleDetail_lastUpdatedTime :: Lens.Lens' RuleDetail (Prelude.Maybe Prelude.Text)
+ruleDetail_lastUpdatedTime = Lens.lens (\RuleDetail' {lastUpdatedTime} -> lastUpdatedTime) (\s@RuleDetail' {} a -> s {lastUpdatedTime = a} :: RuleDetail)
+
+-- | The rule outcomes.
+ruleDetail_outcomes :: Lens.Lens' RuleDetail (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+ruleDetail_outcomes = Lens.lens (\RuleDetail' {outcomes} -> outcomes) (\s@RuleDetail' {} a -> s {outcomes = a} :: RuleDetail) Prelude.. Lens.mapping Lens.coerced
+
+-- | The rule ID.
+ruleDetail_ruleId :: Lens.Lens' RuleDetail (Prelude.Maybe Prelude.Text)
+ruleDetail_ruleId = Lens.lens (\RuleDetail' {ruleId} -> ruleId) (\s@RuleDetail' {} a -> s {ruleId = a} :: RuleDetail)
+
+-- | The rule version.
+ruleDetail_ruleVersion :: Lens.Lens' RuleDetail (Prelude.Maybe Prelude.Text)
+ruleDetail_ruleVersion = Lens.lens (\RuleDetail' {ruleVersion} -> ruleVersion) (\s@RuleDetail' {} a -> s {ruleVersion = a} :: RuleDetail)
+
+instance Data.FromJSON RuleDetail where
+  parseJSON =
+    Data.withObject
+      "RuleDetail"
+      ( \x ->
+          RuleDetail'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "createdTime")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "detectorId")
+            Prelude.<*> (x Data..:? "expression")
+            Prelude.<*> (x Data..:? "language")
+            Prelude.<*> (x Data..:? "lastUpdatedTime")
+            Prelude.<*> (x Data..:? "outcomes")
+            Prelude.<*> (x Data..:? "ruleId")
+            Prelude.<*> (x Data..:? "ruleVersion")
+      )
+
+instance Prelude.Hashable RuleDetail where
+  hashWithSalt _salt RuleDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` detectorId
+      `Prelude.hashWithSalt` expression
+      `Prelude.hashWithSalt` language
+      `Prelude.hashWithSalt` lastUpdatedTime
+      `Prelude.hashWithSalt` outcomes
+      `Prelude.hashWithSalt` ruleId
+      `Prelude.hashWithSalt` ruleVersion
+
+instance Prelude.NFData RuleDetail where
+  rnf RuleDetail' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf detectorId
+      `Prelude.seq` Prelude.rnf expression
+      `Prelude.seq` Prelude.rnf language
+      `Prelude.seq` Prelude.rnf lastUpdatedTime
+      `Prelude.seq` Prelude.rnf outcomes
+      `Prelude.seq` Prelude.rnf ruleId
+      `Prelude.seq` Prelude.rnf ruleVersion
diff --git a/gen/Amazonka/FraudDetector/Types/RuleExecutionMode.hs b/gen/Amazonka/FraudDetector/Types/RuleExecutionMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/RuleExecutionMode.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.FraudDetector.Types.RuleExecutionMode
+-- Copyright   : (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.FraudDetector.Types.RuleExecutionMode
+  ( RuleExecutionMode
+      ( ..,
+        RuleExecutionMode_ALL_MATCHED,
+        RuleExecutionMode_FIRST_MATCHED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RuleExecutionMode = RuleExecutionMode'
+  { fromRuleExecutionMode ::
+      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 RuleExecutionMode_ALL_MATCHED :: RuleExecutionMode
+pattern RuleExecutionMode_ALL_MATCHED = RuleExecutionMode' "ALL_MATCHED"
+
+pattern RuleExecutionMode_FIRST_MATCHED :: RuleExecutionMode
+pattern RuleExecutionMode_FIRST_MATCHED = RuleExecutionMode' "FIRST_MATCHED"
+
+{-# COMPLETE
+  RuleExecutionMode_ALL_MATCHED,
+  RuleExecutionMode_FIRST_MATCHED,
+  RuleExecutionMode'
+  #-}
diff --git a/gen/Amazonka/FraudDetector/Types/RuleResult.hs b/gen/Amazonka/FraudDetector/Types/RuleResult.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/RuleResult.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.FraudDetector.Types.RuleResult
+-- Copyright   : (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.FraudDetector.Types.RuleResult 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 rule results.
+--
+-- /See:/ 'newRuleResult' smart constructor.
+data RuleResult = RuleResult'
+  { -- | The outcomes of the matched rule, based on the rule execution mode.
+    outcomes :: Prelude.Maybe [Prelude.Text],
+    -- | The rule ID that was matched, based on the rule execution mode.
+    ruleId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RuleResult' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'outcomes', 'ruleResult_outcomes' - The outcomes of the matched rule, based on the rule execution mode.
+--
+-- 'ruleId', 'ruleResult_ruleId' - The rule ID that was matched, based on the rule execution mode.
+newRuleResult ::
+  RuleResult
+newRuleResult =
+  RuleResult'
+    { outcomes = Prelude.Nothing,
+      ruleId = Prelude.Nothing
+    }
+
+-- | The outcomes of the matched rule, based on the rule execution mode.
+ruleResult_outcomes :: Lens.Lens' RuleResult (Prelude.Maybe [Prelude.Text])
+ruleResult_outcomes = Lens.lens (\RuleResult' {outcomes} -> outcomes) (\s@RuleResult' {} a -> s {outcomes = a} :: RuleResult) Prelude.. Lens.mapping Lens.coerced
+
+-- | The rule ID that was matched, based on the rule execution mode.
+ruleResult_ruleId :: Lens.Lens' RuleResult (Prelude.Maybe Prelude.Text)
+ruleResult_ruleId = Lens.lens (\RuleResult' {ruleId} -> ruleId) (\s@RuleResult' {} a -> s {ruleId = a} :: RuleResult)
+
+instance Data.FromJSON RuleResult where
+  parseJSON =
+    Data.withObject
+      "RuleResult"
+      ( \x ->
+          RuleResult'
+            Prelude.<$> (x Data..:? "outcomes" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "ruleId")
+      )
+
+instance Prelude.Hashable RuleResult where
+  hashWithSalt _salt RuleResult' {..} =
+    _salt
+      `Prelude.hashWithSalt` outcomes
+      `Prelude.hashWithSalt` ruleId
+
+instance Prelude.NFData RuleResult where
+  rnf RuleResult' {..} =
+    Prelude.rnf outcomes
+      `Prelude.seq` Prelude.rnf ruleId
diff --git a/gen/Amazonka/FraudDetector/Types/TFIMetricDataPoint.hs b/gen/Amazonka/FraudDetector/Types/TFIMetricDataPoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/TFIMetricDataPoint.hs
@@ -0,0 +1,124 @@
+{-# 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.FraudDetector.Types.TFIMetricDataPoint
+-- Copyright   : (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.FraudDetector.Types.TFIMetricDataPoint 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 performance metrics data points for Transaction Fraud Insights (TFI)
+-- model.
+--
+-- /See:/ 'newTFIMetricDataPoint' smart constructor.
+data TFIMetricDataPoint = TFIMetricDataPoint'
+  { -- | The false positive rate. This is the percentage of total legitimate
+    -- events that are incorrectly predicted as fraud.
+    fpr :: Prelude.Maybe Prelude.Double,
+    -- | The percentage of fraud events correctly predicted as fraudulent as
+    -- compared to all events predicted as fraudulent.
+    precision :: Prelude.Maybe Prelude.Double,
+    -- | The model threshold that specifies an acceptable fraud capture rate. For
+    -- example, a threshold of 500 means any model score 500 or above is
+    -- labeled as fraud.
+    threshold :: Prelude.Maybe Prelude.Double,
+    -- | The true positive rate. This is the percentage of total fraud the model
+    -- detects. Also known as capture rate.
+    tpr :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TFIMetricDataPoint' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fpr', 'tFIMetricDataPoint_fpr' - The false positive rate. This is the percentage of total legitimate
+-- events that are incorrectly predicted as fraud.
+--
+-- 'precision', 'tFIMetricDataPoint_precision' - The percentage of fraud events correctly predicted as fraudulent as
+-- compared to all events predicted as fraudulent.
+--
+-- 'threshold', 'tFIMetricDataPoint_threshold' - The model threshold that specifies an acceptable fraud capture rate. For
+-- example, a threshold of 500 means any model score 500 or above is
+-- labeled as fraud.
+--
+-- 'tpr', 'tFIMetricDataPoint_tpr' - The true positive rate. This is the percentage of total fraud the model
+-- detects. Also known as capture rate.
+newTFIMetricDataPoint ::
+  TFIMetricDataPoint
+newTFIMetricDataPoint =
+  TFIMetricDataPoint'
+    { fpr = Prelude.Nothing,
+      precision = Prelude.Nothing,
+      threshold = Prelude.Nothing,
+      tpr = Prelude.Nothing
+    }
+
+-- | The false positive rate. This is the percentage of total legitimate
+-- events that are incorrectly predicted as fraud.
+tFIMetricDataPoint_fpr :: Lens.Lens' TFIMetricDataPoint (Prelude.Maybe Prelude.Double)
+tFIMetricDataPoint_fpr = Lens.lens (\TFIMetricDataPoint' {fpr} -> fpr) (\s@TFIMetricDataPoint' {} a -> s {fpr = a} :: TFIMetricDataPoint)
+
+-- | The percentage of fraud events correctly predicted as fraudulent as
+-- compared to all events predicted as fraudulent.
+tFIMetricDataPoint_precision :: Lens.Lens' TFIMetricDataPoint (Prelude.Maybe Prelude.Double)
+tFIMetricDataPoint_precision = Lens.lens (\TFIMetricDataPoint' {precision} -> precision) (\s@TFIMetricDataPoint' {} a -> s {precision = a} :: TFIMetricDataPoint)
+
+-- | The model threshold that specifies an acceptable fraud capture rate. For
+-- example, a threshold of 500 means any model score 500 or above is
+-- labeled as fraud.
+tFIMetricDataPoint_threshold :: Lens.Lens' TFIMetricDataPoint (Prelude.Maybe Prelude.Double)
+tFIMetricDataPoint_threshold = Lens.lens (\TFIMetricDataPoint' {threshold} -> threshold) (\s@TFIMetricDataPoint' {} a -> s {threshold = a} :: TFIMetricDataPoint)
+
+-- | The true positive rate. This is the percentage of total fraud the model
+-- detects. Also known as capture rate.
+tFIMetricDataPoint_tpr :: Lens.Lens' TFIMetricDataPoint (Prelude.Maybe Prelude.Double)
+tFIMetricDataPoint_tpr = Lens.lens (\TFIMetricDataPoint' {tpr} -> tpr) (\s@TFIMetricDataPoint' {} a -> s {tpr = a} :: TFIMetricDataPoint)
+
+instance Data.FromJSON TFIMetricDataPoint where
+  parseJSON =
+    Data.withObject
+      "TFIMetricDataPoint"
+      ( \x ->
+          TFIMetricDataPoint'
+            Prelude.<$> (x Data..:? "fpr")
+            Prelude.<*> (x Data..:? "precision")
+            Prelude.<*> (x Data..:? "threshold")
+            Prelude.<*> (x Data..:? "tpr")
+      )
+
+instance Prelude.Hashable TFIMetricDataPoint where
+  hashWithSalt _salt TFIMetricDataPoint' {..} =
+    _salt
+      `Prelude.hashWithSalt` fpr
+      `Prelude.hashWithSalt` precision
+      `Prelude.hashWithSalt` threshold
+      `Prelude.hashWithSalt` tpr
+
+instance Prelude.NFData TFIMetricDataPoint where
+  rnf TFIMetricDataPoint' {..} =
+    Prelude.rnf fpr
+      `Prelude.seq` Prelude.rnf precision
+      `Prelude.seq` Prelude.rnf threshold
+      `Prelude.seq` Prelude.rnf tpr
diff --git a/gen/Amazonka/FraudDetector/Types/TFIModelPerformance.hs b/gen/Amazonka/FraudDetector/Types/TFIModelPerformance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/TFIModelPerformance.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.FraudDetector.Types.TFIModelPerformance
+-- Copyright   : (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.FraudDetector.Types.TFIModelPerformance 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 Transaction Fraud Insights (TFI) model performance score.
+--
+-- /See:/ 'newTFIModelPerformance' smart constructor.
+data TFIModelPerformance = TFIModelPerformance'
+  { -- | The area under the curve (auc). This summarizes the total positive rate
+    -- (tpr) and false positive rate (FPR) across all possible model score
+    -- thresholds.
+    auc :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TFIModelPerformance' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'auc', 'tFIModelPerformance_auc' - The area under the curve (auc). This summarizes the total positive rate
+-- (tpr) and false positive rate (FPR) across all possible model score
+-- thresholds.
+newTFIModelPerformance ::
+  TFIModelPerformance
+newTFIModelPerformance =
+  TFIModelPerformance' {auc = Prelude.Nothing}
+
+-- | The area under the curve (auc). This summarizes the total positive rate
+-- (tpr) and false positive rate (FPR) across all possible model score
+-- thresholds.
+tFIModelPerformance_auc :: Lens.Lens' TFIModelPerformance (Prelude.Maybe Prelude.Double)
+tFIModelPerformance_auc = Lens.lens (\TFIModelPerformance' {auc} -> auc) (\s@TFIModelPerformance' {} a -> s {auc = a} :: TFIModelPerformance)
+
+instance Data.FromJSON TFIModelPerformance where
+  parseJSON =
+    Data.withObject
+      "TFIModelPerformance"
+      ( \x ->
+          TFIModelPerformance' Prelude.<$> (x Data..:? "auc")
+      )
+
+instance Prelude.Hashable TFIModelPerformance where
+  hashWithSalt _salt TFIModelPerformance' {..} =
+    _salt `Prelude.hashWithSalt` auc
+
+instance Prelude.NFData TFIModelPerformance where
+  rnf TFIModelPerformance' {..} = Prelude.rnf auc
diff --git a/gen/Amazonka/FraudDetector/Types/TFITrainingMetricsValue.hs b/gen/Amazonka/FraudDetector/Types/TFITrainingMetricsValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/TFITrainingMetricsValue.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.FraudDetector.Types.TFITrainingMetricsValue
+-- Copyright   : (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.FraudDetector.Types.TFITrainingMetricsValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.TFIMetricDataPoint
+import Amazonka.FraudDetector.Types.TFIModelPerformance
+import qualified Amazonka.Prelude as Prelude
+
+-- | The Transaction Fraud Insights (TFI) model training metric details.
+--
+-- /See:/ 'newTFITrainingMetricsValue' smart constructor.
+data TFITrainingMetricsValue = TFITrainingMetricsValue'
+  { -- | The model\'s performance metrics data points.
+    metricDataPoints :: Prelude.Maybe [TFIMetricDataPoint],
+    -- | The model performance score.
+    modelPerformance :: Prelude.Maybe TFIModelPerformance
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TFITrainingMetricsValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'metricDataPoints', 'tFITrainingMetricsValue_metricDataPoints' - The model\'s performance metrics data points.
+--
+-- 'modelPerformance', 'tFITrainingMetricsValue_modelPerformance' - The model performance score.
+newTFITrainingMetricsValue ::
+  TFITrainingMetricsValue
+newTFITrainingMetricsValue =
+  TFITrainingMetricsValue'
+    { metricDataPoints =
+        Prelude.Nothing,
+      modelPerformance = Prelude.Nothing
+    }
+
+-- | The model\'s performance metrics data points.
+tFITrainingMetricsValue_metricDataPoints :: Lens.Lens' TFITrainingMetricsValue (Prelude.Maybe [TFIMetricDataPoint])
+tFITrainingMetricsValue_metricDataPoints = Lens.lens (\TFITrainingMetricsValue' {metricDataPoints} -> metricDataPoints) (\s@TFITrainingMetricsValue' {} a -> s {metricDataPoints = a} :: TFITrainingMetricsValue) Prelude.. Lens.mapping Lens.coerced
+
+-- | The model performance score.
+tFITrainingMetricsValue_modelPerformance :: Lens.Lens' TFITrainingMetricsValue (Prelude.Maybe TFIModelPerformance)
+tFITrainingMetricsValue_modelPerformance = Lens.lens (\TFITrainingMetricsValue' {modelPerformance} -> modelPerformance) (\s@TFITrainingMetricsValue' {} a -> s {modelPerformance = a} :: TFITrainingMetricsValue)
+
+instance Data.FromJSON TFITrainingMetricsValue where
+  parseJSON =
+    Data.withObject
+      "TFITrainingMetricsValue"
+      ( \x ->
+          TFITrainingMetricsValue'
+            Prelude.<$> ( x
+                            Data..:? "metricDataPoints"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "modelPerformance")
+      )
+
+instance Prelude.Hashable TFITrainingMetricsValue where
+  hashWithSalt _salt TFITrainingMetricsValue' {..} =
+    _salt
+      `Prelude.hashWithSalt` metricDataPoints
+      `Prelude.hashWithSalt` modelPerformance
+
+instance Prelude.NFData TFITrainingMetricsValue where
+  rnf TFITrainingMetricsValue' {..} =
+    Prelude.rnf metricDataPoints
+      `Prelude.seq` Prelude.rnf modelPerformance
diff --git a/gen/Amazonka/FraudDetector/Types/Tag.hs b/gen/Amazonka/FraudDetector/Types/Tag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/Tag.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.Types.Tag
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.FraudDetector.Types.Tag where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A key and value pair.
+--
+-- /See:/ 'newTag' smart constructor.
+data Tag = Tag'
+  { -- | A tag key.
+    key :: Prelude.Text,
+    -- | A value assigned to a tag key.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Tag' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'key', 'tag_key' - A tag key.
+--
+-- 'value', 'tag_value' - A value assigned to a tag key.
+newTag ::
+  -- | 'key'
+  Prelude.Text ->
+  -- | 'value'
+  Prelude.Text ->
+  Tag
+newTag pKey_ pValue_ =
+  Tag' {key = pKey_, value = pValue_}
+
+-- | A tag key.
+tag_key :: Lens.Lens' Tag Prelude.Text
+tag_key = Lens.lens (\Tag' {key} -> key) (\s@Tag' {} a -> s {key = a} :: Tag)
+
+-- | A value assigned to a tag key.
+tag_value :: Lens.Lens' Tag Prelude.Text
+tag_value = Lens.lens (\Tag' {value} -> value) (\s@Tag' {} a -> s {value = a} :: Tag)
+
+instance Data.FromJSON Tag where
+  parseJSON =
+    Data.withObject
+      "Tag"
+      ( \x ->
+          Tag'
+            Prelude.<$> (x Data..: "key")
+            Prelude.<*> (x Data..: "value")
+      )
+
+instance Prelude.Hashable Tag where
+  hashWithSalt _salt Tag' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData Tag where
+  rnf Tag' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON Tag where
+  toJSON Tag' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("key" Data..= key),
+            Prelude.Just ("value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/FraudDetector/Types/TrainingDataSchema.hs b/gen/Amazonka/FraudDetector/Types/TrainingDataSchema.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/TrainingDataSchema.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.FraudDetector.Types.TrainingDataSchema
+-- Copyright   : (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.FraudDetector.Types.TrainingDataSchema where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.LabelSchema
+import qualified Amazonka.Prelude as Prelude
+
+-- | The training data schema.
+--
+-- /See:/ 'newTrainingDataSchema' smart constructor.
+data TrainingDataSchema = TrainingDataSchema'
+  { labelSchema :: Prelude.Maybe LabelSchema,
+    -- | The training data schema variables.
+    modelVariables :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TrainingDataSchema' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'labelSchema', 'trainingDataSchema_labelSchema' - Undocumented member.
+--
+-- 'modelVariables', 'trainingDataSchema_modelVariables' - The training data schema variables.
+newTrainingDataSchema ::
+  TrainingDataSchema
+newTrainingDataSchema =
+  TrainingDataSchema'
+    { labelSchema = Prelude.Nothing,
+      modelVariables = Prelude.mempty
+    }
+
+-- | Undocumented member.
+trainingDataSchema_labelSchema :: Lens.Lens' TrainingDataSchema (Prelude.Maybe LabelSchema)
+trainingDataSchema_labelSchema = Lens.lens (\TrainingDataSchema' {labelSchema} -> labelSchema) (\s@TrainingDataSchema' {} a -> s {labelSchema = a} :: TrainingDataSchema)
+
+-- | The training data schema variables.
+trainingDataSchema_modelVariables :: Lens.Lens' TrainingDataSchema [Prelude.Text]
+trainingDataSchema_modelVariables = Lens.lens (\TrainingDataSchema' {modelVariables} -> modelVariables) (\s@TrainingDataSchema' {} a -> s {modelVariables = a} :: TrainingDataSchema) Prelude.. Lens.coerced
+
+instance Data.FromJSON TrainingDataSchema where
+  parseJSON =
+    Data.withObject
+      "TrainingDataSchema"
+      ( \x ->
+          TrainingDataSchema'
+            Prelude.<$> (x Data..:? "labelSchema")
+            Prelude.<*> ( x
+                            Data..:? "modelVariables"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable TrainingDataSchema where
+  hashWithSalt _salt TrainingDataSchema' {..} =
+    _salt
+      `Prelude.hashWithSalt` labelSchema
+      `Prelude.hashWithSalt` modelVariables
+
+instance Prelude.NFData TrainingDataSchema where
+  rnf TrainingDataSchema' {..} =
+    Prelude.rnf labelSchema
+      `Prelude.seq` Prelude.rnf modelVariables
+
+instance Data.ToJSON TrainingDataSchema where
+  toJSON TrainingDataSchema' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("labelSchema" Data..=) Prelude.<$> labelSchema,
+            Prelude.Just
+              ("modelVariables" Data..= modelVariables)
+          ]
+      )
diff --git a/gen/Amazonka/FraudDetector/Types/TrainingDataSourceEnum.hs b/gen/Amazonka/FraudDetector/Types/TrainingDataSourceEnum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/TrainingDataSourceEnum.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.FraudDetector.Types.TrainingDataSourceEnum
+-- Copyright   : (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.FraudDetector.Types.TrainingDataSourceEnum
+  ( TrainingDataSourceEnum
+      ( ..,
+        TrainingDataSourceEnum_EXTERNAL_EVENTS,
+        TrainingDataSourceEnum_INGESTED_EVENTS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TrainingDataSourceEnum = TrainingDataSourceEnum'
+  { fromTrainingDataSourceEnum ::
+      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 TrainingDataSourceEnum_EXTERNAL_EVENTS :: TrainingDataSourceEnum
+pattern TrainingDataSourceEnum_EXTERNAL_EVENTS = TrainingDataSourceEnum' "EXTERNAL_EVENTS"
+
+pattern TrainingDataSourceEnum_INGESTED_EVENTS :: TrainingDataSourceEnum
+pattern TrainingDataSourceEnum_INGESTED_EVENTS = TrainingDataSourceEnum' "INGESTED_EVENTS"
+
+{-# COMPLETE
+  TrainingDataSourceEnum_EXTERNAL_EVENTS,
+  TrainingDataSourceEnum_INGESTED_EVENTS,
+  TrainingDataSourceEnum'
+  #-}
diff --git a/gen/Amazonka/FraudDetector/Types/TrainingMetrics.hs b/gen/Amazonka/FraudDetector/Types/TrainingMetrics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/TrainingMetrics.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.FraudDetector.Types.TrainingMetrics
+-- Copyright   : (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.FraudDetector.Types.TrainingMetrics where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.MetricDataPoint
+import qualified Amazonka.Prelude as Prelude
+
+-- | The training metric details.
+--
+-- /See:/ 'newTrainingMetrics' smart constructor.
+data TrainingMetrics = TrainingMetrics'
+  { -- | The area under the curve. This summarizes true positive rate (TPR) and
+    -- false positive rate (FPR) across all possible model score thresholds. A
+    -- model with no predictive power has an AUC of 0.5, whereas a perfect
+    -- model has a score of 1.0.
+    auc :: Prelude.Maybe Prelude.Double,
+    -- | The data points details.
+    metricDataPoints :: Prelude.Maybe [MetricDataPoint]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TrainingMetrics' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'auc', 'trainingMetrics_auc' - The area under the curve. This summarizes true positive rate (TPR) and
+-- false positive rate (FPR) across all possible model score thresholds. A
+-- model with no predictive power has an AUC of 0.5, whereas a perfect
+-- model has a score of 1.0.
+--
+-- 'metricDataPoints', 'trainingMetrics_metricDataPoints' - The data points details.
+newTrainingMetrics ::
+  TrainingMetrics
+newTrainingMetrics =
+  TrainingMetrics'
+    { auc = Prelude.Nothing,
+      metricDataPoints = Prelude.Nothing
+    }
+
+-- | The area under the curve. This summarizes true positive rate (TPR) and
+-- false positive rate (FPR) across all possible model score thresholds. A
+-- model with no predictive power has an AUC of 0.5, whereas a perfect
+-- model has a score of 1.0.
+trainingMetrics_auc :: Lens.Lens' TrainingMetrics (Prelude.Maybe Prelude.Double)
+trainingMetrics_auc = Lens.lens (\TrainingMetrics' {auc} -> auc) (\s@TrainingMetrics' {} a -> s {auc = a} :: TrainingMetrics)
+
+-- | The data points details.
+trainingMetrics_metricDataPoints :: Lens.Lens' TrainingMetrics (Prelude.Maybe [MetricDataPoint])
+trainingMetrics_metricDataPoints = Lens.lens (\TrainingMetrics' {metricDataPoints} -> metricDataPoints) (\s@TrainingMetrics' {} a -> s {metricDataPoints = a} :: TrainingMetrics) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON TrainingMetrics where
+  parseJSON =
+    Data.withObject
+      "TrainingMetrics"
+      ( \x ->
+          TrainingMetrics'
+            Prelude.<$> (x Data..:? "auc")
+            Prelude.<*> ( x
+                            Data..:? "metricDataPoints"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable TrainingMetrics where
+  hashWithSalt _salt TrainingMetrics' {..} =
+    _salt
+      `Prelude.hashWithSalt` auc
+      `Prelude.hashWithSalt` metricDataPoints
+
+instance Prelude.NFData TrainingMetrics where
+  rnf TrainingMetrics' {..} =
+    Prelude.rnf auc
+      `Prelude.seq` Prelude.rnf metricDataPoints
diff --git a/gen/Amazonka/FraudDetector/Types/TrainingMetricsV2.hs b/gen/Amazonka/FraudDetector/Types/TrainingMetricsV2.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/TrainingMetricsV2.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.FraudDetector.Types.TrainingMetricsV2
+-- Copyright   : (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.FraudDetector.Types.TrainingMetricsV2 where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.ATITrainingMetricsValue
+import Amazonka.FraudDetector.Types.OFITrainingMetricsValue
+import Amazonka.FraudDetector.Types.TFITrainingMetricsValue
+import qualified Amazonka.Prelude as Prelude
+
+-- | The training metrics details.
+--
+-- /See:/ 'newTrainingMetricsV2' smart constructor.
+data TrainingMetricsV2 = TrainingMetricsV2'
+  { -- | The Account Takeover Insights (ATI) model training metric details.
+    ati :: Prelude.Maybe ATITrainingMetricsValue,
+    -- | The Online Fraud Insights (OFI) model training metric details.
+    ofi :: Prelude.Maybe OFITrainingMetricsValue,
+    -- | The Transaction Fraud Insights (TFI) model training metric details.
+    tfi :: Prelude.Maybe TFITrainingMetricsValue
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TrainingMetricsV2' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ati', 'trainingMetricsV2_ati' - The Account Takeover Insights (ATI) model training metric details.
+--
+-- 'ofi', 'trainingMetricsV2_ofi' - The Online Fraud Insights (OFI) model training metric details.
+--
+-- 'tfi', 'trainingMetricsV2_tfi' - The Transaction Fraud Insights (TFI) model training metric details.
+newTrainingMetricsV2 ::
+  TrainingMetricsV2
+newTrainingMetricsV2 =
+  TrainingMetricsV2'
+    { ati = Prelude.Nothing,
+      ofi = Prelude.Nothing,
+      tfi = Prelude.Nothing
+    }
+
+-- | The Account Takeover Insights (ATI) model training metric details.
+trainingMetricsV2_ati :: Lens.Lens' TrainingMetricsV2 (Prelude.Maybe ATITrainingMetricsValue)
+trainingMetricsV2_ati = Lens.lens (\TrainingMetricsV2' {ati} -> ati) (\s@TrainingMetricsV2' {} a -> s {ati = a} :: TrainingMetricsV2)
+
+-- | The Online Fraud Insights (OFI) model training metric details.
+trainingMetricsV2_ofi :: Lens.Lens' TrainingMetricsV2 (Prelude.Maybe OFITrainingMetricsValue)
+trainingMetricsV2_ofi = Lens.lens (\TrainingMetricsV2' {ofi} -> ofi) (\s@TrainingMetricsV2' {} a -> s {ofi = a} :: TrainingMetricsV2)
+
+-- | The Transaction Fraud Insights (TFI) model training metric details.
+trainingMetricsV2_tfi :: Lens.Lens' TrainingMetricsV2 (Prelude.Maybe TFITrainingMetricsValue)
+trainingMetricsV2_tfi = Lens.lens (\TrainingMetricsV2' {tfi} -> tfi) (\s@TrainingMetricsV2' {} a -> s {tfi = a} :: TrainingMetricsV2)
+
+instance Data.FromJSON TrainingMetricsV2 where
+  parseJSON =
+    Data.withObject
+      "TrainingMetricsV2"
+      ( \x ->
+          TrainingMetricsV2'
+            Prelude.<$> (x Data..:? "ati")
+            Prelude.<*> (x Data..:? "ofi")
+            Prelude.<*> (x Data..:? "tfi")
+      )
+
+instance Prelude.Hashable TrainingMetricsV2 where
+  hashWithSalt _salt TrainingMetricsV2' {..} =
+    _salt
+      `Prelude.hashWithSalt` ati
+      `Prelude.hashWithSalt` ofi
+      `Prelude.hashWithSalt` tfi
+
+instance Prelude.NFData TrainingMetricsV2 where
+  rnf TrainingMetricsV2' {..} =
+    Prelude.rnf ati
+      `Prelude.seq` Prelude.rnf ofi
+      `Prelude.seq` Prelude.rnf tfi
diff --git a/gen/Amazonka/FraudDetector/Types/TrainingResult.hs b/gen/Amazonka/FraudDetector/Types/TrainingResult.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/TrainingResult.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.FraudDetector.Types.TrainingResult
+-- Copyright   : (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.FraudDetector.Types.TrainingResult where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.DataValidationMetrics
+import Amazonka.FraudDetector.Types.TrainingMetrics
+import Amazonka.FraudDetector.Types.VariableImportanceMetrics
+import qualified Amazonka.Prelude as Prelude
+
+-- | The training result details.
+--
+-- /See:/ 'newTrainingResult' smart constructor.
+data TrainingResult = TrainingResult'
+  { -- | The validation metrics.
+    dataValidationMetrics :: Prelude.Maybe DataValidationMetrics,
+    -- | The training metric details.
+    trainingMetrics :: Prelude.Maybe TrainingMetrics,
+    -- | The variable importance metrics.
+    variableImportanceMetrics :: Prelude.Maybe VariableImportanceMetrics
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TrainingResult' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataValidationMetrics', 'trainingResult_dataValidationMetrics' - The validation metrics.
+--
+-- 'trainingMetrics', 'trainingResult_trainingMetrics' - The training metric details.
+--
+-- 'variableImportanceMetrics', 'trainingResult_variableImportanceMetrics' - The variable importance metrics.
+newTrainingResult ::
+  TrainingResult
+newTrainingResult =
+  TrainingResult'
+    { dataValidationMetrics =
+        Prelude.Nothing,
+      trainingMetrics = Prelude.Nothing,
+      variableImportanceMetrics = Prelude.Nothing
+    }
+
+-- | The validation metrics.
+trainingResult_dataValidationMetrics :: Lens.Lens' TrainingResult (Prelude.Maybe DataValidationMetrics)
+trainingResult_dataValidationMetrics = Lens.lens (\TrainingResult' {dataValidationMetrics} -> dataValidationMetrics) (\s@TrainingResult' {} a -> s {dataValidationMetrics = a} :: TrainingResult)
+
+-- | The training metric details.
+trainingResult_trainingMetrics :: Lens.Lens' TrainingResult (Prelude.Maybe TrainingMetrics)
+trainingResult_trainingMetrics = Lens.lens (\TrainingResult' {trainingMetrics} -> trainingMetrics) (\s@TrainingResult' {} a -> s {trainingMetrics = a} :: TrainingResult)
+
+-- | The variable importance metrics.
+trainingResult_variableImportanceMetrics :: Lens.Lens' TrainingResult (Prelude.Maybe VariableImportanceMetrics)
+trainingResult_variableImportanceMetrics = Lens.lens (\TrainingResult' {variableImportanceMetrics} -> variableImportanceMetrics) (\s@TrainingResult' {} a -> s {variableImportanceMetrics = a} :: TrainingResult)
+
+instance Data.FromJSON TrainingResult where
+  parseJSON =
+    Data.withObject
+      "TrainingResult"
+      ( \x ->
+          TrainingResult'
+            Prelude.<$> (x Data..:? "dataValidationMetrics")
+            Prelude.<*> (x Data..:? "trainingMetrics")
+            Prelude.<*> (x Data..:? "variableImportanceMetrics")
+      )
+
+instance Prelude.Hashable TrainingResult where
+  hashWithSalt _salt TrainingResult' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataValidationMetrics
+      `Prelude.hashWithSalt` trainingMetrics
+      `Prelude.hashWithSalt` variableImportanceMetrics
+
+instance Prelude.NFData TrainingResult where
+  rnf TrainingResult' {..} =
+    Prelude.rnf dataValidationMetrics
+      `Prelude.seq` Prelude.rnf trainingMetrics
+      `Prelude.seq` Prelude.rnf variableImportanceMetrics
diff --git a/gen/Amazonka/FraudDetector/Types/TrainingResultV2.hs b/gen/Amazonka/FraudDetector/Types/TrainingResultV2.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/TrainingResultV2.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.FraudDetector.Types.TrainingResultV2
+-- Copyright   : (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.FraudDetector.Types.TrainingResultV2 where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.AggregatedVariablesImportanceMetrics
+import Amazonka.FraudDetector.Types.DataValidationMetrics
+import Amazonka.FraudDetector.Types.TrainingMetricsV2
+import Amazonka.FraudDetector.Types.VariableImportanceMetrics
+import qualified Amazonka.Prelude as Prelude
+
+-- | The training result details.
+--
+-- /See:/ 'newTrainingResultV2' smart constructor.
+data TrainingResultV2 = TrainingResultV2'
+  { -- | The variable importance metrics of the aggregated variables.
+    --
+    -- Account Takeover Insights (ATI) model uses event variables from the
+    -- login data you provide to continuously calculate a set of variables
+    -- (aggregated variables) based on historical events. For example, your ATI
+    -- model might calculate the number of times an user has logged in using
+    -- the same IP address. In this case, event variables used to derive the
+    -- aggregated variables are @IP address@ and @user@.
+    aggregatedVariablesImportanceMetrics :: Prelude.Maybe AggregatedVariablesImportanceMetrics,
+    dataValidationMetrics :: Prelude.Maybe DataValidationMetrics,
+    -- | The training metric details.
+    trainingMetricsV2 :: Prelude.Maybe TrainingMetricsV2,
+    variableImportanceMetrics :: Prelude.Maybe VariableImportanceMetrics
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TrainingResultV2' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'aggregatedVariablesImportanceMetrics', 'trainingResultV2_aggregatedVariablesImportanceMetrics' - The variable importance metrics of the aggregated variables.
+--
+-- Account Takeover Insights (ATI) model uses event variables from the
+-- login data you provide to continuously calculate a set of variables
+-- (aggregated variables) based on historical events. For example, your ATI
+-- model might calculate the number of times an user has logged in using
+-- the same IP address. In this case, event variables used to derive the
+-- aggregated variables are @IP address@ and @user@.
+--
+-- 'dataValidationMetrics', 'trainingResultV2_dataValidationMetrics' - Undocumented member.
+--
+-- 'trainingMetricsV2', 'trainingResultV2_trainingMetricsV2' - The training metric details.
+--
+-- 'variableImportanceMetrics', 'trainingResultV2_variableImportanceMetrics' - Undocumented member.
+newTrainingResultV2 ::
+  TrainingResultV2
+newTrainingResultV2 =
+  TrainingResultV2'
+    { aggregatedVariablesImportanceMetrics =
+        Prelude.Nothing,
+      dataValidationMetrics = Prelude.Nothing,
+      trainingMetricsV2 = Prelude.Nothing,
+      variableImportanceMetrics = Prelude.Nothing
+    }
+
+-- | The variable importance metrics of the aggregated variables.
+--
+-- Account Takeover Insights (ATI) model uses event variables from the
+-- login data you provide to continuously calculate a set of variables
+-- (aggregated variables) based on historical events. For example, your ATI
+-- model might calculate the number of times an user has logged in using
+-- the same IP address. In this case, event variables used to derive the
+-- aggregated variables are @IP address@ and @user@.
+trainingResultV2_aggregatedVariablesImportanceMetrics :: Lens.Lens' TrainingResultV2 (Prelude.Maybe AggregatedVariablesImportanceMetrics)
+trainingResultV2_aggregatedVariablesImportanceMetrics = Lens.lens (\TrainingResultV2' {aggregatedVariablesImportanceMetrics} -> aggregatedVariablesImportanceMetrics) (\s@TrainingResultV2' {} a -> s {aggregatedVariablesImportanceMetrics = a} :: TrainingResultV2)
+
+-- | Undocumented member.
+trainingResultV2_dataValidationMetrics :: Lens.Lens' TrainingResultV2 (Prelude.Maybe DataValidationMetrics)
+trainingResultV2_dataValidationMetrics = Lens.lens (\TrainingResultV2' {dataValidationMetrics} -> dataValidationMetrics) (\s@TrainingResultV2' {} a -> s {dataValidationMetrics = a} :: TrainingResultV2)
+
+-- | The training metric details.
+trainingResultV2_trainingMetricsV2 :: Lens.Lens' TrainingResultV2 (Prelude.Maybe TrainingMetricsV2)
+trainingResultV2_trainingMetricsV2 = Lens.lens (\TrainingResultV2' {trainingMetricsV2} -> trainingMetricsV2) (\s@TrainingResultV2' {} a -> s {trainingMetricsV2 = a} :: TrainingResultV2)
+
+-- | Undocumented member.
+trainingResultV2_variableImportanceMetrics :: Lens.Lens' TrainingResultV2 (Prelude.Maybe VariableImportanceMetrics)
+trainingResultV2_variableImportanceMetrics = Lens.lens (\TrainingResultV2' {variableImportanceMetrics} -> variableImportanceMetrics) (\s@TrainingResultV2' {} a -> s {variableImportanceMetrics = a} :: TrainingResultV2)
+
+instance Data.FromJSON TrainingResultV2 where
+  parseJSON =
+    Data.withObject
+      "TrainingResultV2"
+      ( \x ->
+          TrainingResultV2'
+            Prelude.<$> (x Data..:? "aggregatedVariablesImportanceMetrics")
+            Prelude.<*> (x Data..:? "dataValidationMetrics")
+            Prelude.<*> (x Data..:? "trainingMetricsV2")
+            Prelude.<*> (x Data..:? "variableImportanceMetrics")
+      )
+
+instance Prelude.Hashable TrainingResultV2 where
+  hashWithSalt _salt TrainingResultV2' {..} =
+    _salt
+      `Prelude.hashWithSalt` aggregatedVariablesImportanceMetrics
+      `Prelude.hashWithSalt` dataValidationMetrics
+      `Prelude.hashWithSalt` trainingMetricsV2
+      `Prelude.hashWithSalt` variableImportanceMetrics
+
+instance Prelude.NFData TrainingResultV2 where
+  rnf TrainingResultV2' {..} =
+    Prelude.rnf aggregatedVariablesImportanceMetrics
+      `Prelude.seq` Prelude.rnf dataValidationMetrics
+      `Prelude.seq` Prelude.rnf trainingMetricsV2
+      `Prelude.seq` Prelude.rnf variableImportanceMetrics
diff --git a/gen/Amazonka/FraudDetector/Types/UnlabeledEventsTreatment.hs b/gen/Amazonka/FraudDetector/Types/UnlabeledEventsTreatment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/UnlabeledEventsTreatment.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.FraudDetector.Types.UnlabeledEventsTreatment
+-- Copyright   : (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.FraudDetector.Types.UnlabeledEventsTreatment
+  ( UnlabeledEventsTreatment
+      ( ..,
+        UnlabeledEventsTreatment_FRAUD,
+        UnlabeledEventsTreatment_IGNORE,
+        UnlabeledEventsTreatment_LEGIT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype UnlabeledEventsTreatment = UnlabeledEventsTreatment'
+  { fromUnlabeledEventsTreatment ::
+      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 UnlabeledEventsTreatment_FRAUD :: UnlabeledEventsTreatment
+pattern UnlabeledEventsTreatment_FRAUD = UnlabeledEventsTreatment' "FRAUD"
+
+pattern UnlabeledEventsTreatment_IGNORE :: UnlabeledEventsTreatment
+pattern UnlabeledEventsTreatment_IGNORE = UnlabeledEventsTreatment' "IGNORE"
+
+pattern UnlabeledEventsTreatment_LEGIT :: UnlabeledEventsTreatment
+pattern UnlabeledEventsTreatment_LEGIT = UnlabeledEventsTreatment' "LEGIT"
+
+{-# COMPLETE
+  UnlabeledEventsTreatment_FRAUD,
+  UnlabeledEventsTreatment_IGNORE,
+  UnlabeledEventsTreatment_LEGIT,
+  UnlabeledEventsTreatment'
+  #-}
diff --git a/gen/Amazonka/FraudDetector/Types/Variable.hs b/gen/Amazonka/FraudDetector/Types/Variable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/Variable.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.FraudDetector.Types.Variable
+-- Copyright   : (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.FraudDetector.Types.Variable where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.DataSource
+import Amazonka.FraudDetector.Types.DataType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The variable.
+--
+-- /See:/ 'newVariable' smart constructor.
+data Variable = Variable'
+  { -- | The ARN of the variable.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The time when the variable was created.
+    createdTime :: Prelude.Maybe Prelude.Text,
+    -- | The data source of the variable.
+    dataSource :: Prelude.Maybe DataSource,
+    -- | The data type of the variable. For more information see
+    -- <https://docs.aws.amazon.com/frauddetector/latest/ug/create-a-variable.html#variable-types Variable types>.
+    dataType :: Prelude.Maybe DataType,
+    -- | The default value of the variable.
+    defaultValue :: Prelude.Maybe Prelude.Text,
+    -- | The description of the variable.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The time when variable was last updated.
+    lastUpdatedTime :: Prelude.Maybe Prelude.Text,
+    -- | The name of the variable.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The variable type of the variable.
+    --
+    -- Valid Values:
+    -- @AUTH_CODE | AVS | BILLING_ADDRESS_L1 | BILLING_ADDRESS_L2 | BILLING_CITY | BILLING_COUNTRY | BILLING_NAME | BILLING_PHONE | BILLING_STATE | BILLING_ZIP | CARD_BIN | CATEGORICAL | CURRENCY_CODE | EMAIL_ADDRESS | FINGERPRINT | FRAUD_LABEL | FREE_FORM_TEXT | IP_ADDRESS | NUMERIC | ORDER_ID | PAYMENT_TYPE | PHONE_NUMBER | PRICE | PRODUCT_CATEGORY | SHIPPING_ADDRESS_L1 | SHIPPING_ADDRESS_L2 | SHIPPING_CITY | SHIPPING_COUNTRY | SHIPPING_NAME | SHIPPING_PHONE | SHIPPING_STATE | SHIPPING_ZIP | USERAGENT @
+    variableType :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Variable' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'variable_arn' - The ARN of the variable.
+--
+-- 'createdTime', 'variable_createdTime' - The time when the variable was created.
+--
+-- 'dataSource', 'variable_dataSource' - The data source of the variable.
+--
+-- 'dataType', 'variable_dataType' - The data type of the variable. For more information see
+-- <https://docs.aws.amazon.com/frauddetector/latest/ug/create-a-variable.html#variable-types Variable types>.
+--
+-- 'defaultValue', 'variable_defaultValue' - The default value of the variable.
+--
+-- 'description', 'variable_description' - The description of the variable.
+--
+-- 'lastUpdatedTime', 'variable_lastUpdatedTime' - The time when variable was last updated.
+--
+-- 'name', 'variable_name' - The name of the variable.
+--
+-- 'variableType', 'variable_variableType' - The variable type of the variable.
+--
+-- Valid Values:
+-- @AUTH_CODE | AVS | BILLING_ADDRESS_L1 | BILLING_ADDRESS_L2 | BILLING_CITY | BILLING_COUNTRY | BILLING_NAME | BILLING_PHONE | BILLING_STATE | BILLING_ZIP | CARD_BIN | CATEGORICAL | CURRENCY_CODE | EMAIL_ADDRESS | FINGERPRINT | FRAUD_LABEL | FREE_FORM_TEXT | IP_ADDRESS | NUMERIC | ORDER_ID | PAYMENT_TYPE | PHONE_NUMBER | PRICE | PRODUCT_CATEGORY | SHIPPING_ADDRESS_L1 | SHIPPING_ADDRESS_L2 | SHIPPING_CITY | SHIPPING_COUNTRY | SHIPPING_NAME | SHIPPING_PHONE | SHIPPING_STATE | SHIPPING_ZIP | USERAGENT @
+newVariable ::
+  Variable
+newVariable =
+  Variable'
+    { arn = Prelude.Nothing,
+      createdTime = Prelude.Nothing,
+      dataSource = Prelude.Nothing,
+      dataType = Prelude.Nothing,
+      defaultValue = Prelude.Nothing,
+      description = Prelude.Nothing,
+      lastUpdatedTime = Prelude.Nothing,
+      name = Prelude.Nothing,
+      variableType = Prelude.Nothing
+    }
+
+-- | The ARN of the variable.
+variable_arn :: Lens.Lens' Variable (Prelude.Maybe Prelude.Text)
+variable_arn = Lens.lens (\Variable' {arn} -> arn) (\s@Variable' {} a -> s {arn = a} :: Variable)
+
+-- | The time when the variable was created.
+variable_createdTime :: Lens.Lens' Variable (Prelude.Maybe Prelude.Text)
+variable_createdTime = Lens.lens (\Variable' {createdTime} -> createdTime) (\s@Variable' {} a -> s {createdTime = a} :: Variable)
+
+-- | The data source of the variable.
+variable_dataSource :: Lens.Lens' Variable (Prelude.Maybe DataSource)
+variable_dataSource = Lens.lens (\Variable' {dataSource} -> dataSource) (\s@Variable' {} a -> s {dataSource = a} :: Variable)
+
+-- | The data type of the variable. For more information see
+-- <https://docs.aws.amazon.com/frauddetector/latest/ug/create-a-variable.html#variable-types Variable types>.
+variable_dataType :: Lens.Lens' Variable (Prelude.Maybe DataType)
+variable_dataType = Lens.lens (\Variable' {dataType} -> dataType) (\s@Variable' {} a -> s {dataType = a} :: Variable)
+
+-- | The default value of the variable.
+variable_defaultValue :: Lens.Lens' Variable (Prelude.Maybe Prelude.Text)
+variable_defaultValue = Lens.lens (\Variable' {defaultValue} -> defaultValue) (\s@Variable' {} a -> s {defaultValue = a} :: Variable)
+
+-- | The description of the variable.
+variable_description :: Lens.Lens' Variable (Prelude.Maybe Prelude.Text)
+variable_description = Lens.lens (\Variable' {description} -> description) (\s@Variable' {} a -> s {description = a} :: Variable)
+
+-- | The time when variable was last updated.
+variable_lastUpdatedTime :: Lens.Lens' Variable (Prelude.Maybe Prelude.Text)
+variable_lastUpdatedTime = Lens.lens (\Variable' {lastUpdatedTime} -> lastUpdatedTime) (\s@Variable' {} a -> s {lastUpdatedTime = a} :: Variable)
+
+-- | The name of the variable.
+variable_name :: Lens.Lens' Variable (Prelude.Maybe Prelude.Text)
+variable_name = Lens.lens (\Variable' {name} -> name) (\s@Variable' {} a -> s {name = a} :: Variable)
+
+-- | The variable type of the variable.
+--
+-- Valid Values:
+-- @AUTH_CODE | AVS | BILLING_ADDRESS_L1 | BILLING_ADDRESS_L2 | BILLING_CITY | BILLING_COUNTRY | BILLING_NAME | BILLING_PHONE | BILLING_STATE | BILLING_ZIP | CARD_BIN | CATEGORICAL | CURRENCY_CODE | EMAIL_ADDRESS | FINGERPRINT | FRAUD_LABEL | FREE_FORM_TEXT | IP_ADDRESS | NUMERIC | ORDER_ID | PAYMENT_TYPE | PHONE_NUMBER | PRICE | PRODUCT_CATEGORY | SHIPPING_ADDRESS_L1 | SHIPPING_ADDRESS_L2 | SHIPPING_CITY | SHIPPING_COUNTRY | SHIPPING_NAME | SHIPPING_PHONE | SHIPPING_STATE | SHIPPING_ZIP | USERAGENT @
+variable_variableType :: Lens.Lens' Variable (Prelude.Maybe Prelude.Text)
+variable_variableType = Lens.lens (\Variable' {variableType} -> variableType) (\s@Variable' {} a -> s {variableType = a} :: Variable)
+
+instance Data.FromJSON Variable where
+  parseJSON =
+    Data.withObject
+      "Variable"
+      ( \x ->
+          Variable'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "createdTime")
+            Prelude.<*> (x Data..:? "dataSource")
+            Prelude.<*> (x Data..:? "dataType")
+            Prelude.<*> (x Data..:? "defaultValue")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "lastUpdatedTime")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "variableType")
+      )
+
+instance Prelude.Hashable Variable where
+  hashWithSalt _salt Variable' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdTime
+      `Prelude.hashWithSalt` dataSource
+      `Prelude.hashWithSalt` dataType
+      `Prelude.hashWithSalt` defaultValue
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` lastUpdatedTime
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` variableType
+
+instance Prelude.NFData Variable where
+  rnf Variable' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdTime
+      `Prelude.seq` Prelude.rnf dataSource
+      `Prelude.seq` Prelude.rnf dataType
+      `Prelude.seq` Prelude.rnf defaultValue
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastUpdatedTime
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf variableType
diff --git a/gen/Amazonka/FraudDetector/Types/VariableEntry.hs b/gen/Amazonka/FraudDetector/Types/VariableEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/VariableEntry.hs
@@ -0,0 +1,144 @@
+{-# 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.FraudDetector.Types.VariableEntry
+-- Copyright   : (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.FraudDetector.Types.VariableEntry 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 variable in the list of variables for the batch create variable
+-- request.
+--
+-- /See:/ 'newVariableEntry' smart constructor.
+data VariableEntry = VariableEntry'
+  { -- | The data source of the variable.
+    dataSource :: Prelude.Maybe Prelude.Text,
+    -- | The data type of the variable.
+    dataType :: Prelude.Maybe Prelude.Text,
+    -- | The default value of the variable.
+    defaultValue :: Prelude.Maybe Prelude.Text,
+    -- | The description of the variable.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the variable.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The type of the variable. For more information see
+    -- <https://docs.aws.amazon.com/frauddetector/latest/ug/create-a-variable.html#variable-types Variable types>.
+    --
+    -- Valid Values:
+    -- @AUTH_CODE | AVS | BILLING_ADDRESS_L1 | BILLING_ADDRESS_L2 | BILLING_CITY | BILLING_COUNTRY | BILLING_NAME | BILLING_PHONE | BILLING_STATE | BILLING_ZIP | CARD_BIN | CATEGORICAL | CURRENCY_CODE | EMAIL_ADDRESS | FINGERPRINT | FRAUD_LABEL | FREE_FORM_TEXT | IP_ADDRESS | NUMERIC | ORDER_ID | PAYMENT_TYPE | PHONE_NUMBER | PRICE | PRODUCT_CATEGORY | SHIPPING_ADDRESS_L1 | SHIPPING_ADDRESS_L2 | SHIPPING_CITY | SHIPPING_COUNTRY | SHIPPING_NAME | SHIPPING_PHONE | SHIPPING_STATE | SHIPPING_ZIP | USERAGENT @
+    variableType :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VariableEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSource', 'variableEntry_dataSource' - The data source of the variable.
+--
+-- 'dataType', 'variableEntry_dataType' - The data type of the variable.
+--
+-- 'defaultValue', 'variableEntry_defaultValue' - The default value of the variable.
+--
+-- 'description', 'variableEntry_description' - The description of the variable.
+--
+-- 'name', 'variableEntry_name' - The name of the variable.
+--
+-- 'variableType', 'variableEntry_variableType' - The type of the variable. For more information see
+-- <https://docs.aws.amazon.com/frauddetector/latest/ug/create-a-variable.html#variable-types Variable types>.
+--
+-- Valid Values:
+-- @AUTH_CODE | AVS | BILLING_ADDRESS_L1 | BILLING_ADDRESS_L2 | BILLING_CITY | BILLING_COUNTRY | BILLING_NAME | BILLING_PHONE | BILLING_STATE | BILLING_ZIP | CARD_BIN | CATEGORICAL | CURRENCY_CODE | EMAIL_ADDRESS | FINGERPRINT | FRAUD_LABEL | FREE_FORM_TEXT | IP_ADDRESS | NUMERIC | ORDER_ID | PAYMENT_TYPE | PHONE_NUMBER | PRICE | PRODUCT_CATEGORY | SHIPPING_ADDRESS_L1 | SHIPPING_ADDRESS_L2 | SHIPPING_CITY | SHIPPING_COUNTRY | SHIPPING_NAME | SHIPPING_PHONE | SHIPPING_STATE | SHIPPING_ZIP | USERAGENT @
+newVariableEntry ::
+  VariableEntry
+newVariableEntry =
+  VariableEntry'
+    { dataSource = Prelude.Nothing,
+      dataType = Prelude.Nothing,
+      defaultValue = Prelude.Nothing,
+      description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      variableType = Prelude.Nothing
+    }
+
+-- | The data source of the variable.
+variableEntry_dataSource :: Lens.Lens' VariableEntry (Prelude.Maybe Prelude.Text)
+variableEntry_dataSource = Lens.lens (\VariableEntry' {dataSource} -> dataSource) (\s@VariableEntry' {} a -> s {dataSource = a} :: VariableEntry)
+
+-- | The data type of the variable.
+variableEntry_dataType :: Lens.Lens' VariableEntry (Prelude.Maybe Prelude.Text)
+variableEntry_dataType = Lens.lens (\VariableEntry' {dataType} -> dataType) (\s@VariableEntry' {} a -> s {dataType = a} :: VariableEntry)
+
+-- | The default value of the variable.
+variableEntry_defaultValue :: Lens.Lens' VariableEntry (Prelude.Maybe Prelude.Text)
+variableEntry_defaultValue = Lens.lens (\VariableEntry' {defaultValue} -> defaultValue) (\s@VariableEntry' {} a -> s {defaultValue = a} :: VariableEntry)
+
+-- | The description of the variable.
+variableEntry_description :: Lens.Lens' VariableEntry (Prelude.Maybe Prelude.Text)
+variableEntry_description = Lens.lens (\VariableEntry' {description} -> description) (\s@VariableEntry' {} a -> s {description = a} :: VariableEntry)
+
+-- | The name of the variable.
+variableEntry_name :: Lens.Lens' VariableEntry (Prelude.Maybe Prelude.Text)
+variableEntry_name = Lens.lens (\VariableEntry' {name} -> name) (\s@VariableEntry' {} a -> s {name = a} :: VariableEntry)
+
+-- | The type of the variable. For more information see
+-- <https://docs.aws.amazon.com/frauddetector/latest/ug/create-a-variable.html#variable-types Variable types>.
+--
+-- Valid Values:
+-- @AUTH_CODE | AVS | BILLING_ADDRESS_L1 | BILLING_ADDRESS_L2 | BILLING_CITY | BILLING_COUNTRY | BILLING_NAME | BILLING_PHONE | BILLING_STATE | BILLING_ZIP | CARD_BIN | CATEGORICAL | CURRENCY_CODE | EMAIL_ADDRESS | FINGERPRINT | FRAUD_LABEL | FREE_FORM_TEXT | IP_ADDRESS | NUMERIC | ORDER_ID | PAYMENT_TYPE | PHONE_NUMBER | PRICE | PRODUCT_CATEGORY | SHIPPING_ADDRESS_L1 | SHIPPING_ADDRESS_L2 | SHIPPING_CITY | SHIPPING_COUNTRY | SHIPPING_NAME | SHIPPING_PHONE | SHIPPING_STATE | SHIPPING_ZIP | USERAGENT @
+variableEntry_variableType :: Lens.Lens' VariableEntry (Prelude.Maybe Prelude.Text)
+variableEntry_variableType = Lens.lens (\VariableEntry' {variableType} -> variableType) (\s@VariableEntry' {} a -> s {variableType = a} :: VariableEntry)
+
+instance Prelude.Hashable VariableEntry where
+  hashWithSalt _salt VariableEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataSource
+      `Prelude.hashWithSalt` dataType
+      `Prelude.hashWithSalt` defaultValue
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` variableType
+
+instance Prelude.NFData VariableEntry where
+  rnf VariableEntry' {..} =
+    Prelude.rnf dataSource
+      `Prelude.seq` Prelude.rnf dataType
+      `Prelude.seq` Prelude.rnf defaultValue
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf variableType
+
+instance Data.ToJSON VariableEntry where
+  toJSON VariableEntry' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("dataSource" Data..=) Prelude.<$> dataSource,
+            ("dataType" Data..=) Prelude.<$> dataType,
+            ("defaultValue" Data..=) Prelude.<$> defaultValue,
+            ("description" Data..=) Prelude.<$> description,
+            ("name" Data..=) Prelude.<$> name,
+            ("variableType" Data..=) Prelude.<$> variableType
+          ]
+      )
diff --git a/gen/Amazonka/FraudDetector/Types/VariableImpactExplanation.hs b/gen/Amazonka/FraudDetector/Types/VariableImpactExplanation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/VariableImpactExplanation.hs
@@ -0,0 +1,130 @@
+{-# 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.FraudDetector.Types.VariableImpactExplanation
+-- Copyright   : (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.FraudDetector.Types.VariableImpactExplanation 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 details of the event variable\'s impact on the prediction score.
+--
+-- /See:/ 'newVariableImpactExplanation' smart constructor.
+data VariableImpactExplanation = VariableImpactExplanation'
+  { -- | The event variable name.
+    eventVariableName :: Prelude.Maybe Prelude.Text,
+    -- | The raw, uninterpreted value represented as log-odds of the fraud. These
+    -- values are usually between -10 to +10, but range from - infinity to +
+    -- infinity.
+    --
+    -- -   A positive value indicates that the variable drove the risk score
+    --     up.
+    --
+    -- -   A negative value indicates that the variable drove the risk score
+    --     down.
+    logOddsImpact :: Prelude.Maybe Prelude.Double,
+    -- | The event variable\'s relative impact in terms of magnitude on the
+    -- prediction scores. The relative impact values consist of a numerical
+    -- rating (0-5, 5 being the highest) and direction (increased\/decreased)
+    -- impact of the fraud risk.
+    relativeImpact :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VariableImpactExplanation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eventVariableName', 'variableImpactExplanation_eventVariableName' - The event variable name.
+--
+-- 'logOddsImpact', 'variableImpactExplanation_logOddsImpact' - The raw, uninterpreted value represented as log-odds of the fraud. These
+-- values are usually between -10 to +10, but range from - infinity to +
+-- infinity.
+--
+-- -   A positive value indicates that the variable drove the risk score
+--     up.
+--
+-- -   A negative value indicates that the variable drove the risk score
+--     down.
+--
+-- 'relativeImpact', 'variableImpactExplanation_relativeImpact' - The event variable\'s relative impact in terms of magnitude on the
+-- prediction scores. The relative impact values consist of a numerical
+-- rating (0-5, 5 being the highest) and direction (increased\/decreased)
+-- impact of the fraud risk.
+newVariableImpactExplanation ::
+  VariableImpactExplanation
+newVariableImpactExplanation =
+  VariableImpactExplanation'
+    { eventVariableName =
+        Prelude.Nothing,
+      logOddsImpact = Prelude.Nothing,
+      relativeImpact = Prelude.Nothing
+    }
+
+-- | The event variable name.
+variableImpactExplanation_eventVariableName :: Lens.Lens' VariableImpactExplanation (Prelude.Maybe Prelude.Text)
+variableImpactExplanation_eventVariableName = Lens.lens (\VariableImpactExplanation' {eventVariableName} -> eventVariableName) (\s@VariableImpactExplanation' {} a -> s {eventVariableName = a} :: VariableImpactExplanation)
+
+-- | The raw, uninterpreted value represented as log-odds of the fraud. These
+-- values are usually between -10 to +10, but range from - infinity to +
+-- infinity.
+--
+-- -   A positive value indicates that the variable drove the risk score
+--     up.
+--
+-- -   A negative value indicates that the variable drove the risk score
+--     down.
+variableImpactExplanation_logOddsImpact :: Lens.Lens' VariableImpactExplanation (Prelude.Maybe Prelude.Double)
+variableImpactExplanation_logOddsImpact = Lens.lens (\VariableImpactExplanation' {logOddsImpact} -> logOddsImpact) (\s@VariableImpactExplanation' {} a -> s {logOddsImpact = a} :: VariableImpactExplanation)
+
+-- | The event variable\'s relative impact in terms of magnitude on the
+-- prediction scores. The relative impact values consist of a numerical
+-- rating (0-5, 5 being the highest) and direction (increased\/decreased)
+-- impact of the fraud risk.
+variableImpactExplanation_relativeImpact :: Lens.Lens' VariableImpactExplanation (Prelude.Maybe Prelude.Text)
+variableImpactExplanation_relativeImpact = Lens.lens (\VariableImpactExplanation' {relativeImpact} -> relativeImpact) (\s@VariableImpactExplanation' {} a -> s {relativeImpact = a} :: VariableImpactExplanation)
+
+instance Data.FromJSON VariableImpactExplanation where
+  parseJSON =
+    Data.withObject
+      "VariableImpactExplanation"
+      ( \x ->
+          VariableImpactExplanation'
+            Prelude.<$> (x Data..:? "eventVariableName")
+            Prelude.<*> (x Data..:? "logOddsImpact")
+            Prelude.<*> (x Data..:? "relativeImpact")
+      )
+
+instance Prelude.Hashable VariableImpactExplanation where
+  hashWithSalt _salt VariableImpactExplanation' {..} =
+    _salt
+      `Prelude.hashWithSalt` eventVariableName
+      `Prelude.hashWithSalt` logOddsImpact
+      `Prelude.hashWithSalt` relativeImpact
+
+instance Prelude.NFData VariableImpactExplanation where
+  rnf VariableImpactExplanation' {..} =
+    Prelude.rnf eventVariableName
+      `Prelude.seq` Prelude.rnf logOddsImpact
+      `Prelude.seq` Prelude.rnf relativeImpact
diff --git a/gen/Amazonka/FraudDetector/Types/VariableImportanceMetrics.hs b/gen/Amazonka/FraudDetector/Types/VariableImportanceMetrics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/Types/VariableImportanceMetrics.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.Types.VariableImportanceMetrics
+-- Copyright   : (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.FraudDetector.Types.VariableImportanceMetrics where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types.LogOddsMetric
+import qualified Amazonka.Prelude as Prelude
+
+-- | The variable importance metrics details.
+--
+-- /See:/ 'newVariableImportanceMetrics' smart constructor.
+data VariableImportanceMetrics = VariableImportanceMetrics'
+  { -- | List of variable metrics.
+    logOddsMetrics :: Prelude.Maybe [LogOddsMetric]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VariableImportanceMetrics' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logOddsMetrics', 'variableImportanceMetrics_logOddsMetrics' - List of variable metrics.
+newVariableImportanceMetrics ::
+  VariableImportanceMetrics
+newVariableImportanceMetrics =
+  VariableImportanceMetrics'
+    { logOddsMetrics =
+        Prelude.Nothing
+    }
+
+-- | List of variable metrics.
+variableImportanceMetrics_logOddsMetrics :: Lens.Lens' VariableImportanceMetrics (Prelude.Maybe [LogOddsMetric])
+variableImportanceMetrics_logOddsMetrics = Lens.lens (\VariableImportanceMetrics' {logOddsMetrics} -> logOddsMetrics) (\s@VariableImportanceMetrics' {} a -> s {logOddsMetrics = a} :: VariableImportanceMetrics) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON VariableImportanceMetrics where
+  parseJSON =
+    Data.withObject
+      "VariableImportanceMetrics"
+      ( \x ->
+          VariableImportanceMetrics'
+            Prelude.<$> ( x
+                            Data..:? "logOddsMetrics"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable VariableImportanceMetrics where
+  hashWithSalt _salt VariableImportanceMetrics' {..} =
+    _salt `Prelude.hashWithSalt` logOddsMetrics
+
+instance Prelude.NFData VariableImportanceMetrics where
+  rnf VariableImportanceMetrics' {..} =
+    Prelude.rnf logOddsMetrics
diff --git a/gen/Amazonka/FraudDetector/UntagResource.hs b/gen/Amazonka/FraudDetector/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/UntagResource.hs
@@ -0,0 +1,171 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.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 tags from a resource.
+module Amazonka.FraudDetector.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.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The ARN of the resource from which to remove the tag.
+    resourceARN :: Prelude.Text,
+    -- | The resource ARN.
+    tagKeys :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceARN', 'untagResource_resourceARN' - The ARN of the resource from which to remove the tag.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The resource ARN.
+newUntagResource ::
+  -- | 'resourceARN'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceARN_ =
+  UntagResource'
+    { resourceARN = pResourceARN_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | The ARN of the resource from which to remove the tag.
+untagResource_resourceARN :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceARN = Lens.lens (\UntagResource' {resourceARN} -> resourceARN) (\s@UntagResource' {} a -> s {resourceARN = a} :: UntagResource)
+
+-- | The resource ARN.
+untagResource_tagKeys :: Lens.Lens' UntagResource [Prelude.Text]
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.postJSON (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
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.UntagResource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UntagResource where
+  toJSON UntagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("resourceARN" Data..= resourceARN),
+            Prelude.Just ("tagKeys" Data..= tagKeys)
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UntagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /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/FraudDetector/UpdateDetectorVersion.hs b/gen/Amazonka/FraudDetector/UpdateDetectorVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/UpdateDetectorVersion.hs
@@ -0,0 +1,281 @@
+{-# 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.FraudDetector.UpdateDetectorVersion
+-- 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 version. The detector version attributes that you can
+-- update include models, external model endpoints, rules, rule execution
+-- mode, and description. You can only update a @DRAFT@ detector version.
+module Amazonka.FraudDetector.UpdateDetectorVersion
+  ( -- * Creating a Request
+    UpdateDetectorVersion (..),
+    newUpdateDetectorVersion,
+
+    -- * Request Lenses
+    updateDetectorVersion_description,
+    updateDetectorVersion_modelVersions,
+    updateDetectorVersion_ruleExecutionMode,
+    updateDetectorVersion_detectorId,
+    updateDetectorVersion_detectorVersionId,
+    updateDetectorVersion_externalModelEndpoints,
+    updateDetectorVersion_rules,
+
+    -- * Destructuring the Response
+    UpdateDetectorVersionResponse (..),
+    newUpdateDetectorVersionResponse,
+
+    -- * Response Lenses
+    updateDetectorVersionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateDetectorVersion' smart constructor.
+data UpdateDetectorVersion = UpdateDetectorVersion'
+  { -- | The detector version description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The model versions to include in the detector version.
+    modelVersions :: Prelude.Maybe [ModelVersion],
+    -- | The rule execution mode to add to the detector.
+    --
+    -- If you specify @FIRST_MATCHED@, Amazon Fraud Detector evaluates rules
+    -- sequentially, first to last, stopping at the first matched rule. Amazon
+    -- Fraud dectector then provides the outcomes for that single rule.
+    --
+    -- If you specifiy @ALL_MATCHED@, Amazon Fraud Detector evaluates all rules
+    -- and returns the outcomes for all matched rules. You can define and edit
+    -- the rule mode at the detector version level, when it is in draft status.
+    --
+    -- The default behavior is @FIRST_MATCHED@.
+    ruleExecutionMode :: Prelude.Maybe RuleExecutionMode,
+    -- | The parent detector ID for the detector version you want to update.
+    detectorId :: Prelude.Text,
+    -- | The detector version ID.
+    detectorVersionId :: Prelude.Text,
+    -- | The Amazon SageMaker model endpoints to include in the detector version.
+    externalModelEndpoints :: [Prelude.Text],
+    -- | The rules to include in the detector version.
+    rules :: [Rule]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDetectorVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'updateDetectorVersion_description' - The detector version description.
+--
+-- 'modelVersions', 'updateDetectorVersion_modelVersions' - The model versions to include in the detector version.
+--
+-- 'ruleExecutionMode', 'updateDetectorVersion_ruleExecutionMode' - The rule execution mode to add to the detector.
+--
+-- If you specify @FIRST_MATCHED@, Amazon Fraud Detector evaluates rules
+-- sequentially, first to last, stopping at the first matched rule. Amazon
+-- Fraud dectector then provides the outcomes for that single rule.
+--
+-- If you specifiy @ALL_MATCHED@, Amazon Fraud Detector evaluates all rules
+-- and returns the outcomes for all matched rules. You can define and edit
+-- the rule mode at the detector version level, when it is in draft status.
+--
+-- The default behavior is @FIRST_MATCHED@.
+--
+-- 'detectorId', 'updateDetectorVersion_detectorId' - The parent detector ID for the detector version you want to update.
+--
+-- 'detectorVersionId', 'updateDetectorVersion_detectorVersionId' - The detector version ID.
+--
+-- 'externalModelEndpoints', 'updateDetectorVersion_externalModelEndpoints' - The Amazon SageMaker model endpoints to include in the detector version.
+--
+-- 'rules', 'updateDetectorVersion_rules' - The rules to include in the detector version.
+newUpdateDetectorVersion ::
+  -- | 'detectorId'
+  Prelude.Text ->
+  -- | 'detectorVersionId'
+  Prelude.Text ->
+  UpdateDetectorVersion
+newUpdateDetectorVersion
+  pDetectorId_
+  pDetectorVersionId_ =
+    UpdateDetectorVersion'
+      { description =
+          Prelude.Nothing,
+        modelVersions = Prelude.Nothing,
+        ruleExecutionMode = Prelude.Nothing,
+        detectorId = pDetectorId_,
+        detectorVersionId = pDetectorVersionId_,
+        externalModelEndpoints = Prelude.mempty,
+        rules = Prelude.mempty
+      }
+
+-- | The detector version description.
+updateDetectorVersion_description :: Lens.Lens' UpdateDetectorVersion (Prelude.Maybe Prelude.Text)
+updateDetectorVersion_description = Lens.lens (\UpdateDetectorVersion' {description} -> description) (\s@UpdateDetectorVersion' {} a -> s {description = a} :: UpdateDetectorVersion)
+
+-- | The model versions to include in the detector version.
+updateDetectorVersion_modelVersions :: Lens.Lens' UpdateDetectorVersion (Prelude.Maybe [ModelVersion])
+updateDetectorVersion_modelVersions = Lens.lens (\UpdateDetectorVersion' {modelVersions} -> modelVersions) (\s@UpdateDetectorVersion' {} a -> s {modelVersions = a} :: UpdateDetectorVersion) Prelude.. Lens.mapping Lens.coerced
+
+-- | The rule execution mode to add to the detector.
+--
+-- If you specify @FIRST_MATCHED@, Amazon Fraud Detector evaluates rules
+-- sequentially, first to last, stopping at the first matched rule. Amazon
+-- Fraud dectector then provides the outcomes for that single rule.
+--
+-- If you specifiy @ALL_MATCHED@, Amazon Fraud Detector evaluates all rules
+-- and returns the outcomes for all matched rules. You can define and edit
+-- the rule mode at the detector version level, when it is in draft status.
+--
+-- The default behavior is @FIRST_MATCHED@.
+updateDetectorVersion_ruleExecutionMode :: Lens.Lens' UpdateDetectorVersion (Prelude.Maybe RuleExecutionMode)
+updateDetectorVersion_ruleExecutionMode = Lens.lens (\UpdateDetectorVersion' {ruleExecutionMode} -> ruleExecutionMode) (\s@UpdateDetectorVersion' {} a -> s {ruleExecutionMode = a} :: UpdateDetectorVersion)
+
+-- | The parent detector ID for the detector version you want to update.
+updateDetectorVersion_detectorId :: Lens.Lens' UpdateDetectorVersion Prelude.Text
+updateDetectorVersion_detectorId = Lens.lens (\UpdateDetectorVersion' {detectorId} -> detectorId) (\s@UpdateDetectorVersion' {} a -> s {detectorId = a} :: UpdateDetectorVersion)
+
+-- | The detector version ID.
+updateDetectorVersion_detectorVersionId :: Lens.Lens' UpdateDetectorVersion Prelude.Text
+updateDetectorVersion_detectorVersionId = Lens.lens (\UpdateDetectorVersion' {detectorVersionId} -> detectorVersionId) (\s@UpdateDetectorVersion' {} a -> s {detectorVersionId = a} :: UpdateDetectorVersion)
+
+-- | The Amazon SageMaker model endpoints to include in the detector version.
+updateDetectorVersion_externalModelEndpoints :: Lens.Lens' UpdateDetectorVersion [Prelude.Text]
+updateDetectorVersion_externalModelEndpoints = Lens.lens (\UpdateDetectorVersion' {externalModelEndpoints} -> externalModelEndpoints) (\s@UpdateDetectorVersion' {} a -> s {externalModelEndpoints = a} :: UpdateDetectorVersion) Prelude.. Lens.coerced
+
+-- | The rules to include in the detector version.
+updateDetectorVersion_rules :: Lens.Lens' UpdateDetectorVersion [Rule]
+updateDetectorVersion_rules = Lens.lens (\UpdateDetectorVersion' {rules} -> rules) (\s@UpdateDetectorVersion' {} a -> s {rules = a} :: UpdateDetectorVersion) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UpdateDetectorVersion where
+  type
+    AWSResponse UpdateDetectorVersion =
+      UpdateDetectorVersionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateDetectorVersionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateDetectorVersion where
+  hashWithSalt _salt UpdateDetectorVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` modelVersions
+      `Prelude.hashWithSalt` ruleExecutionMode
+      `Prelude.hashWithSalt` detectorId
+      `Prelude.hashWithSalt` detectorVersionId
+      `Prelude.hashWithSalt` externalModelEndpoints
+      `Prelude.hashWithSalt` rules
+
+instance Prelude.NFData UpdateDetectorVersion where
+  rnf UpdateDetectorVersion' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf modelVersions
+      `Prelude.seq` Prelude.rnf ruleExecutionMode
+      `Prelude.seq` Prelude.rnf detectorId
+      `Prelude.seq` Prelude.rnf detectorVersionId
+      `Prelude.seq` Prelude.rnf externalModelEndpoints
+      `Prelude.seq` Prelude.rnf rules
+
+instance Data.ToHeaders UpdateDetectorVersion where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.UpdateDetectorVersion" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateDetectorVersion where
+  toJSON UpdateDetectorVersion' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("modelVersions" Data..=) Prelude.<$> modelVersions,
+            ("ruleExecutionMode" Data..=)
+              Prelude.<$> ruleExecutionMode,
+            Prelude.Just ("detectorId" Data..= detectorId),
+            Prelude.Just
+              ("detectorVersionId" Data..= detectorVersionId),
+            Prelude.Just
+              ( "externalModelEndpoints"
+                  Data..= externalModelEndpoints
+              ),
+            Prelude.Just ("rules" Data..= rules)
+          ]
+      )
+
+instance Data.ToPath UpdateDetectorVersion where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateDetectorVersion where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateDetectorVersionResponse' smart constructor.
+data UpdateDetectorVersionResponse = UpdateDetectorVersionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDetectorVersionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateDetectorVersionResponse_httpStatus' - The response's http status code.
+newUpdateDetectorVersionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateDetectorVersionResponse
+newUpdateDetectorVersionResponse pHttpStatus_ =
+  UpdateDetectorVersionResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateDetectorVersionResponse_httpStatus :: Lens.Lens' UpdateDetectorVersionResponse Prelude.Int
+updateDetectorVersionResponse_httpStatus = Lens.lens (\UpdateDetectorVersionResponse' {httpStatus} -> httpStatus) (\s@UpdateDetectorVersionResponse' {} a -> s {httpStatus = a} :: UpdateDetectorVersionResponse)
+
+instance Prelude.NFData UpdateDetectorVersionResponse where
+  rnf UpdateDetectorVersionResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/UpdateDetectorVersionMetadata.hs b/gen/Amazonka/FraudDetector/UpdateDetectorVersionMetadata.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/UpdateDetectorVersionMetadata.hs
@@ -0,0 +1,206 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.UpdateDetectorVersionMetadata
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the detector version\'s description. You can update the metadata
+-- for any detector version (@DRAFT, ACTIVE,@ or @INACTIVE@).
+module Amazonka.FraudDetector.UpdateDetectorVersionMetadata
+  ( -- * Creating a Request
+    UpdateDetectorVersionMetadata (..),
+    newUpdateDetectorVersionMetadata,
+
+    -- * Request Lenses
+    updateDetectorVersionMetadata_detectorId,
+    updateDetectorVersionMetadata_detectorVersionId,
+    updateDetectorVersionMetadata_description,
+
+    -- * Destructuring the Response
+    UpdateDetectorVersionMetadataResponse (..),
+    newUpdateDetectorVersionMetadataResponse,
+
+    -- * Response Lenses
+    updateDetectorVersionMetadataResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateDetectorVersionMetadata' smart constructor.
+data UpdateDetectorVersionMetadata = UpdateDetectorVersionMetadata'
+  { -- | The detector ID.
+    detectorId :: Prelude.Text,
+    -- | The detector version ID.
+    detectorVersionId :: Prelude.Text,
+    -- | The description.
+    description :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDetectorVersionMetadata' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detectorId', 'updateDetectorVersionMetadata_detectorId' - The detector ID.
+--
+-- 'detectorVersionId', 'updateDetectorVersionMetadata_detectorVersionId' - The detector version ID.
+--
+-- 'description', 'updateDetectorVersionMetadata_description' - The description.
+newUpdateDetectorVersionMetadata ::
+  -- | 'detectorId'
+  Prelude.Text ->
+  -- | 'detectorVersionId'
+  Prelude.Text ->
+  -- | 'description'
+  Prelude.Text ->
+  UpdateDetectorVersionMetadata
+newUpdateDetectorVersionMetadata
+  pDetectorId_
+  pDetectorVersionId_
+  pDescription_ =
+    UpdateDetectorVersionMetadata'
+      { detectorId =
+          pDetectorId_,
+        detectorVersionId = pDetectorVersionId_,
+        description = pDescription_
+      }
+
+-- | The detector ID.
+updateDetectorVersionMetadata_detectorId :: Lens.Lens' UpdateDetectorVersionMetadata Prelude.Text
+updateDetectorVersionMetadata_detectorId = Lens.lens (\UpdateDetectorVersionMetadata' {detectorId} -> detectorId) (\s@UpdateDetectorVersionMetadata' {} a -> s {detectorId = a} :: UpdateDetectorVersionMetadata)
+
+-- | The detector version ID.
+updateDetectorVersionMetadata_detectorVersionId :: Lens.Lens' UpdateDetectorVersionMetadata Prelude.Text
+updateDetectorVersionMetadata_detectorVersionId = Lens.lens (\UpdateDetectorVersionMetadata' {detectorVersionId} -> detectorVersionId) (\s@UpdateDetectorVersionMetadata' {} a -> s {detectorVersionId = a} :: UpdateDetectorVersionMetadata)
+
+-- | The description.
+updateDetectorVersionMetadata_description :: Lens.Lens' UpdateDetectorVersionMetadata Prelude.Text
+updateDetectorVersionMetadata_description = Lens.lens (\UpdateDetectorVersionMetadata' {description} -> description) (\s@UpdateDetectorVersionMetadata' {} a -> s {description = a} :: UpdateDetectorVersionMetadata)
+
+instance
+  Core.AWSRequest
+    UpdateDetectorVersionMetadata
+  where
+  type
+    AWSResponse UpdateDetectorVersionMetadata =
+      UpdateDetectorVersionMetadataResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateDetectorVersionMetadataResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    UpdateDetectorVersionMetadata
+  where
+  hashWithSalt _salt UpdateDetectorVersionMetadata' {..} =
+    _salt
+      `Prelude.hashWithSalt` detectorId
+      `Prelude.hashWithSalt` detectorVersionId
+      `Prelude.hashWithSalt` description
+
+instance Prelude.NFData UpdateDetectorVersionMetadata where
+  rnf UpdateDetectorVersionMetadata' {..} =
+    Prelude.rnf detectorId
+      `Prelude.seq` Prelude.rnf detectorVersionId
+      `Prelude.seq` Prelude.rnf description
+
+instance Data.ToHeaders UpdateDetectorVersionMetadata where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.UpdateDetectorVersionMetadata" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateDetectorVersionMetadata where
+  toJSON UpdateDetectorVersionMetadata' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("detectorId" Data..= detectorId),
+            Prelude.Just
+              ("detectorVersionId" Data..= detectorVersionId),
+            Prelude.Just ("description" Data..= description)
+          ]
+      )
+
+instance Data.ToPath UpdateDetectorVersionMetadata where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateDetectorVersionMetadata where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateDetectorVersionMetadataResponse' smart constructor.
+data UpdateDetectorVersionMetadataResponse = UpdateDetectorVersionMetadataResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDetectorVersionMetadataResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateDetectorVersionMetadataResponse_httpStatus' - The response's http status code.
+newUpdateDetectorVersionMetadataResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateDetectorVersionMetadataResponse
+newUpdateDetectorVersionMetadataResponse pHttpStatus_ =
+  UpdateDetectorVersionMetadataResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateDetectorVersionMetadataResponse_httpStatus :: Lens.Lens' UpdateDetectorVersionMetadataResponse Prelude.Int
+updateDetectorVersionMetadataResponse_httpStatus = Lens.lens (\UpdateDetectorVersionMetadataResponse' {httpStatus} -> httpStatus) (\s@UpdateDetectorVersionMetadataResponse' {} a -> s {httpStatus = a} :: UpdateDetectorVersionMetadataResponse)
+
+instance
+  Prelude.NFData
+    UpdateDetectorVersionMetadataResponse
+  where
+  rnf UpdateDetectorVersionMetadataResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/UpdateDetectorVersionStatus.hs b/gen/Amazonka/FraudDetector/UpdateDetectorVersionStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/UpdateDetectorVersionStatus.hs
@@ -0,0 +1,207 @@
+{-# 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.FraudDetector.UpdateDetectorVersionStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the detector version’s status. You can perform the following
+-- promotions or demotions using @UpdateDetectorVersionStatus@: @DRAFT@ to
+-- @ACTIVE@, @ACTIVE@ to @INACTIVE@, and @INACTIVE@ to @ACTIVE@.
+module Amazonka.FraudDetector.UpdateDetectorVersionStatus
+  ( -- * Creating a Request
+    UpdateDetectorVersionStatus (..),
+    newUpdateDetectorVersionStatus,
+
+    -- * Request Lenses
+    updateDetectorVersionStatus_detectorId,
+    updateDetectorVersionStatus_detectorVersionId,
+    updateDetectorVersionStatus_status,
+
+    -- * Destructuring the Response
+    UpdateDetectorVersionStatusResponse (..),
+    newUpdateDetectorVersionStatusResponse,
+
+    -- * Response Lenses
+    updateDetectorVersionStatusResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateDetectorVersionStatus' smart constructor.
+data UpdateDetectorVersionStatus = UpdateDetectorVersionStatus'
+  { -- | The detector ID.
+    detectorId :: Prelude.Text,
+    -- | The detector version ID.
+    detectorVersionId :: Prelude.Text,
+    -- | The new status.
+    --
+    -- The only supported values are @ACTIVE@ and @INACTIVE@
+    status :: DetectorVersionStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDetectorVersionStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'detectorId', 'updateDetectorVersionStatus_detectorId' - The detector ID.
+--
+-- 'detectorVersionId', 'updateDetectorVersionStatus_detectorVersionId' - The detector version ID.
+--
+-- 'status', 'updateDetectorVersionStatus_status' - The new status.
+--
+-- The only supported values are @ACTIVE@ and @INACTIVE@
+newUpdateDetectorVersionStatus ::
+  -- | 'detectorId'
+  Prelude.Text ->
+  -- | 'detectorVersionId'
+  Prelude.Text ->
+  -- | 'status'
+  DetectorVersionStatus ->
+  UpdateDetectorVersionStatus
+newUpdateDetectorVersionStatus
+  pDetectorId_
+  pDetectorVersionId_
+  pStatus_ =
+    UpdateDetectorVersionStatus'
+      { detectorId =
+          pDetectorId_,
+        detectorVersionId = pDetectorVersionId_,
+        status = pStatus_
+      }
+
+-- | The detector ID.
+updateDetectorVersionStatus_detectorId :: Lens.Lens' UpdateDetectorVersionStatus Prelude.Text
+updateDetectorVersionStatus_detectorId = Lens.lens (\UpdateDetectorVersionStatus' {detectorId} -> detectorId) (\s@UpdateDetectorVersionStatus' {} a -> s {detectorId = a} :: UpdateDetectorVersionStatus)
+
+-- | The detector version ID.
+updateDetectorVersionStatus_detectorVersionId :: Lens.Lens' UpdateDetectorVersionStatus Prelude.Text
+updateDetectorVersionStatus_detectorVersionId = Lens.lens (\UpdateDetectorVersionStatus' {detectorVersionId} -> detectorVersionId) (\s@UpdateDetectorVersionStatus' {} a -> s {detectorVersionId = a} :: UpdateDetectorVersionStatus)
+
+-- | The new status.
+--
+-- The only supported values are @ACTIVE@ and @INACTIVE@
+updateDetectorVersionStatus_status :: Lens.Lens' UpdateDetectorVersionStatus DetectorVersionStatus
+updateDetectorVersionStatus_status = Lens.lens (\UpdateDetectorVersionStatus' {status} -> status) (\s@UpdateDetectorVersionStatus' {} a -> s {status = a} :: UpdateDetectorVersionStatus)
+
+instance Core.AWSRequest UpdateDetectorVersionStatus where
+  type
+    AWSResponse UpdateDetectorVersionStatus =
+      UpdateDetectorVersionStatusResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateDetectorVersionStatusResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateDetectorVersionStatus where
+  hashWithSalt _salt UpdateDetectorVersionStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` detectorId
+      `Prelude.hashWithSalt` detectorVersionId
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData UpdateDetectorVersionStatus where
+  rnf UpdateDetectorVersionStatus' {..} =
+    Prelude.rnf detectorId
+      `Prelude.seq` Prelude.rnf detectorVersionId
+      `Prelude.seq` Prelude.rnf status
+
+instance Data.ToHeaders UpdateDetectorVersionStatus where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.UpdateDetectorVersionStatus" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateDetectorVersionStatus where
+  toJSON UpdateDetectorVersionStatus' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("detectorId" Data..= detectorId),
+            Prelude.Just
+              ("detectorVersionId" Data..= detectorVersionId),
+            Prelude.Just ("status" Data..= status)
+          ]
+      )
+
+instance Data.ToPath UpdateDetectorVersionStatus where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateDetectorVersionStatus where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateDetectorVersionStatusResponse' smart constructor.
+data UpdateDetectorVersionStatusResponse = UpdateDetectorVersionStatusResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDetectorVersionStatusResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateDetectorVersionStatusResponse_httpStatus' - The response's http status code.
+newUpdateDetectorVersionStatusResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateDetectorVersionStatusResponse
+newUpdateDetectorVersionStatusResponse pHttpStatus_ =
+  UpdateDetectorVersionStatusResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateDetectorVersionStatusResponse_httpStatus :: Lens.Lens' UpdateDetectorVersionStatusResponse Prelude.Int
+updateDetectorVersionStatusResponse_httpStatus = Lens.lens (\UpdateDetectorVersionStatusResponse' {httpStatus} -> httpStatus) (\s@UpdateDetectorVersionStatusResponse' {} a -> s {httpStatus = a} :: UpdateDetectorVersionStatusResponse)
+
+instance
+  Prelude.NFData
+    UpdateDetectorVersionStatusResponse
+  where
+  rnf UpdateDetectorVersionStatusResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/UpdateEventLabel.hs b/gen/Amazonka/FraudDetector/UpdateEventLabel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/UpdateEventLabel.hs
@@ -0,0 +1,214 @@
+{-# 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.FraudDetector.UpdateEventLabel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the specified event with a new label.
+module Amazonka.FraudDetector.UpdateEventLabel
+  ( -- * Creating a Request
+    UpdateEventLabel (..),
+    newUpdateEventLabel,
+
+    -- * Request Lenses
+    updateEventLabel_eventId,
+    updateEventLabel_eventTypeName,
+    updateEventLabel_assignedLabel,
+    updateEventLabel_labelTimestamp,
+
+    -- * Destructuring the Response
+    UpdateEventLabelResponse (..),
+    newUpdateEventLabelResponse,
+
+    -- * Response Lenses
+    updateEventLabelResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateEventLabel' smart constructor.
+data UpdateEventLabel = UpdateEventLabel'
+  { -- | The ID of the event associated with the label to update.
+    eventId :: Prelude.Text,
+    -- | The event type of the event associated with the label to update.
+    eventTypeName :: Prelude.Text,
+    -- | The new label to assign to the event.
+    assignedLabel :: Prelude.Text,
+    -- | The timestamp associated with the label. The timestamp must be specified
+    -- using ISO 8601 standard in UTC.
+    labelTimestamp :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateEventLabel' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eventId', 'updateEventLabel_eventId' - The ID of the event associated with the label to update.
+--
+-- 'eventTypeName', 'updateEventLabel_eventTypeName' - The event type of the event associated with the label to update.
+--
+-- 'assignedLabel', 'updateEventLabel_assignedLabel' - The new label to assign to the event.
+--
+-- 'labelTimestamp', 'updateEventLabel_labelTimestamp' - The timestamp associated with the label. The timestamp must be specified
+-- using ISO 8601 standard in UTC.
+newUpdateEventLabel ::
+  -- | 'eventId'
+  Prelude.Text ->
+  -- | 'eventTypeName'
+  Prelude.Text ->
+  -- | 'assignedLabel'
+  Prelude.Text ->
+  -- | 'labelTimestamp'
+  Prelude.Text ->
+  UpdateEventLabel
+newUpdateEventLabel
+  pEventId_
+  pEventTypeName_
+  pAssignedLabel_
+  pLabelTimestamp_ =
+    UpdateEventLabel'
+      { eventId = pEventId_,
+        eventTypeName = pEventTypeName_,
+        assignedLabel = pAssignedLabel_,
+        labelTimestamp = pLabelTimestamp_
+      }
+
+-- | The ID of the event associated with the label to update.
+updateEventLabel_eventId :: Lens.Lens' UpdateEventLabel Prelude.Text
+updateEventLabel_eventId = Lens.lens (\UpdateEventLabel' {eventId} -> eventId) (\s@UpdateEventLabel' {} a -> s {eventId = a} :: UpdateEventLabel)
+
+-- | The event type of the event associated with the label to update.
+updateEventLabel_eventTypeName :: Lens.Lens' UpdateEventLabel Prelude.Text
+updateEventLabel_eventTypeName = Lens.lens (\UpdateEventLabel' {eventTypeName} -> eventTypeName) (\s@UpdateEventLabel' {} a -> s {eventTypeName = a} :: UpdateEventLabel)
+
+-- | The new label to assign to the event.
+updateEventLabel_assignedLabel :: Lens.Lens' UpdateEventLabel Prelude.Text
+updateEventLabel_assignedLabel = Lens.lens (\UpdateEventLabel' {assignedLabel} -> assignedLabel) (\s@UpdateEventLabel' {} a -> s {assignedLabel = a} :: UpdateEventLabel)
+
+-- | The timestamp associated with the label. The timestamp must be specified
+-- using ISO 8601 standard in UTC.
+updateEventLabel_labelTimestamp :: Lens.Lens' UpdateEventLabel Prelude.Text
+updateEventLabel_labelTimestamp = Lens.lens (\UpdateEventLabel' {labelTimestamp} -> labelTimestamp) (\s@UpdateEventLabel' {} a -> s {labelTimestamp = a} :: UpdateEventLabel)
+
+instance Core.AWSRequest UpdateEventLabel where
+  type
+    AWSResponse UpdateEventLabel =
+      UpdateEventLabelResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateEventLabelResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateEventLabel where
+  hashWithSalt _salt UpdateEventLabel' {..} =
+    _salt
+      `Prelude.hashWithSalt` eventId
+      `Prelude.hashWithSalt` eventTypeName
+      `Prelude.hashWithSalt` assignedLabel
+      `Prelude.hashWithSalt` labelTimestamp
+
+instance Prelude.NFData UpdateEventLabel where
+  rnf UpdateEventLabel' {..} =
+    Prelude.rnf eventId
+      `Prelude.seq` Prelude.rnf eventTypeName
+      `Prelude.seq` Prelude.rnf assignedLabel
+      `Prelude.seq` Prelude.rnf labelTimestamp
+
+instance Data.ToHeaders UpdateEventLabel where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.UpdateEventLabel" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateEventLabel where
+  toJSON UpdateEventLabel' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("eventId" Data..= eventId),
+            Prelude.Just ("eventTypeName" Data..= eventTypeName),
+            Prelude.Just ("assignedLabel" Data..= assignedLabel),
+            Prelude.Just
+              ("labelTimestamp" Data..= labelTimestamp)
+          ]
+      )
+
+instance Data.ToPath UpdateEventLabel where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateEventLabel where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateEventLabelResponse' smart constructor.
+data UpdateEventLabelResponse = UpdateEventLabelResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateEventLabelResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateEventLabelResponse_httpStatus' - The response's http status code.
+newUpdateEventLabelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateEventLabelResponse
+newUpdateEventLabelResponse pHttpStatus_ =
+  UpdateEventLabelResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateEventLabelResponse_httpStatus :: Lens.Lens' UpdateEventLabelResponse Prelude.Int
+updateEventLabelResponse_httpStatus = Lens.lens (\UpdateEventLabelResponse' {httpStatus} -> httpStatus) (\s@UpdateEventLabelResponse' {} a -> s {httpStatus = a} :: UpdateEventLabelResponse)
+
+instance Prelude.NFData UpdateEventLabelResponse where
+  rnf UpdateEventLabelResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/UpdateModel.hs b/gen/Amazonka/FraudDetector/UpdateModel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/UpdateModel.hs
@@ -0,0 +1,183 @@
+{-# 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.FraudDetector.UpdateModel
+-- 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 model description.
+module Amazonka.FraudDetector.UpdateModel
+  ( -- * Creating a Request
+    UpdateModel (..),
+    newUpdateModel,
+
+    -- * Request Lenses
+    updateModel_description,
+    updateModel_modelId,
+    updateModel_modelType,
+
+    -- * Destructuring the Response
+    UpdateModelResponse (..),
+    newUpdateModelResponse,
+
+    -- * Response Lenses
+    updateModelResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateModel' smart constructor.
+data UpdateModel = UpdateModel'
+  { -- | The new model description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The model ID.
+    modelId :: Prelude.Text,
+    -- | The model type.
+    modelType :: ModelTypeEnum
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateModel' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'updateModel_description' - The new model description.
+--
+-- 'modelId', 'updateModel_modelId' - The model ID.
+--
+-- 'modelType', 'updateModel_modelType' - The model type.
+newUpdateModel ::
+  -- | 'modelId'
+  Prelude.Text ->
+  -- | 'modelType'
+  ModelTypeEnum ->
+  UpdateModel
+newUpdateModel pModelId_ pModelType_ =
+  UpdateModel'
+    { description = Prelude.Nothing,
+      modelId = pModelId_,
+      modelType = pModelType_
+    }
+
+-- | The new model description.
+updateModel_description :: Lens.Lens' UpdateModel (Prelude.Maybe Prelude.Text)
+updateModel_description = Lens.lens (\UpdateModel' {description} -> description) (\s@UpdateModel' {} a -> s {description = a} :: UpdateModel)
+
+-- | The model ID.
+updateModel_modelId :: Lens.Lens' UpdateModel Prelude.Text
+updateModel_modelId = Lens.lens (\UpdateModel' {modelId} -> modelId) (\s@UpdateModel' {} a -> s {modelId = a} :: UpdateModel)
+
+-- | The model type.
+updateModel_modelType :: Lens.Lens' UpdateModel ModelTypeEnum
+updateModel_modelType = Lens.lens (\UpdateModel' {modelType} -> modelType) (\s@UpdateModel' {} a -> s {modelType = a} :: UpdateModel)
+
+instance Core.AWSRequest UpdateModel where
+  type AWSResponse UpdateModel = UpdateModelResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateModelResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateModel where
+  hashWithSalt _salt UpdateModel' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` modelId
+      `Prelude.hashWithSalt` modelType
+
+instance Prelude.NFData UpdateModel where
+  rnf UpdateModel' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf modelId
+      `Prelude.seq` Prelude.rnf modelType
+
+instance Data.ToHeaders UpdateModel where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.UpdateModel" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateModel where
+  toJSON UpdateModel' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            Prelude.Just ("modelId" Data..= modelId),
+            Prelude.Just ("modelType" Data..= modelType)
+          ]
+      )
+
+instance Data.ToPath UpdateModel where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateModel where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateModelResponse' smart constructor.
+data UpdateModelResponse = UpdateModelResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateModelResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateModelResponse_httpStatus' - The response's http status code.
+newUpdateModelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateModelResponse
+newUpdateModelResponse pHttpStatus_ =
+  UpdateModelResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+updateModelResponse_httpStatus :: Lens.Lens' UpdateModelResponse Prelude.Int
+updateModelResponse_httpStatus = Lens.lens (\UpdateModelResponse' {httpStatus} -> httpStatus) (\s@UpdateModelResponse' {} a -> s {httpStatus = a} :: UpdateModelResponse)
+
+instance Prelude.NFData UpdateModelResponse where
+  rnf UpdateModelResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/UpdateModelVersion.hs b/gen/Amazonka/FraudDetector/UpdateModelVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/UpdateModelVersion.hs
@@ -0,0 +1,296 @@
+{-# 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.FraudDetector.UpdateModelVersion
+-- 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 model version. Updating a model version retrains an existing
+-- model version using updated training data and produces a new minor
+-- version of the model. You can update the training data set location and
+-- data access role attributes using this action. This action creates and
+-- trains a new minor version of the model, for example version 1.01, 1.02,
+-- 1.03.
+module Amazonka.FraudDetector.UpdateModelVersion
+  ( -- * Creating a Request
+    UpdateModelVersion (..),
+    newUpdateModelVersion,
+
+    -- * Request Lenses
+    updateModelVersion_externalEventsDetail,
+    updateModelVersion_ingestedEventsDetail,
+    updateModelVersion_tags,
+    updateModelVersion_modelId,
+    updateModelVersion_modelType,
+    updateModelVersion_majorVersionNumber,
+
+    -- * Destructuring the Response
+    UpdateModelVersionResponse (..),
+    newUpdateModelVersionResponse,
+
+    -- * Response Lenses
+    updateModelVersionResponse_modelId,
+    updateModelVersionResponse_modelType,
+    updateModelVersionResponse_modelVersionNumber,
+    updateModelVersionResponse_status,
+    updateModelVersionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateModelVersion' smart constructor.
+data UpdateModelVersion = UpdateModelVersion'
+  { -- | The details of the external events data used for training the model
+    -- version. Required if @trainingDataSource@ is @EXTERNAL_EVENTS@.
+    externalEventsDetail :: Prelude.Maybe ExternalEventsDetail,
+    -- | The details of the ingested event used for training the model version.
+    -- Required if your @trainingDataSource@ is @INGESTED_EVENTS@.
+    ingestedEventsDetail :: Prelude.Maybe IngestedEventsDetail,
+    -- | A collection of key and value pairs.
+    tags :: Prelude.Maybe [Tag],
+    -- | The model ID.
+    modelId :: Prelude.Text,
+    -- | The model type.
+    modelType :: ModelTypeEnum,
+    -- | The major version number.
+    majorVersionNumber :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateModelVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'externalEventsDetail', 'updateModelVersion_externalEventsDetail' - The details of the external events data used for training the model
+-- version. Required if @trainingDataSource@ is @EXTERNAL_EVENTS@.
+--
+-- 'ingestedEventsDetail', 'updateModelVersion_ingestedEventsDetail' - The details of the ingested event used for training the model version.
+-- Required if your @trainingDataSource@ is @INGESTED_EVENTS@.
+--
+-- 'tags', 'updateModelVersion_tags' - A collection of key and value pairs.
+--
+-- 'modelId', 'updateModelVersion_modelId' - The model ID.
+--
+-- 'modelType', 'updateModelVersion_modelType' - The model type.
+--
+-- 'majorVersionNumber', 'updateModelVersion_majorVersionNumber' - The major version number.
+newUpdateModelVersion ::
+  -- | 'modelId'
+  Prelude.Text ->
+  -- | 'modelType'
+  ModelTypeEnum ->
+  -- | 'majorVersionNumber'
+  Prelude.Text ->
+  UpdateModelVersion
+newUpdateModelVersion
+  pModelId_
+  pModelType_
+  pMajorVersionNumber_ =
+    UpdateModelVersion'
+      { externalEventsDetail =
+          Prelude.Nothing,
+        ingestedEventsDetail = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        modelId = pModelId_,
+        modelType = pModelType_,
+        majorVersionNumber = pMajorVersionNumber_
+      }
+
+-- | The details of the external events data used for training the model
+-- version. Required if @trainingDataSource@ is @EXTERNAL_EVENTS@.
+updateModelVersion_externalEventsDetail :: Lens.Lens' UpdateModelVersion (Prelude.Maybe ExternalEventsDetail)
+updateModelVersion_externalEventsDetail = Lens.lens (\UpdateModelVersion' {externalEventsDetail} -> externalEventsDetail) (\s@UpdateModelVersion' {} a -> s {externalEventsDetail = a} :: UpdateModelVersion)
+
+-- | The details of the ingested event used for training the model version.
+-- Required if your @trainingDataSource@ is @INGESTED_EVENTS@.
+updateModelVersion_ingestedEventsDetail :: Lens.Lens' UpdateModelVersion (Prelude.Maybe IngestedEventsDetail)
+updateModelVersion_ingestedEventsDetail = Lens.lens (\UpdateModelVersion' {ingestedEventsDetail} -> ingestedEventsDetail) (\s@UpdateModelVersion' {} a -> s {ingestedEventsDetail = a} :: UpdateModelVersion)
+
+-- | A collection of key and value pairs.
+updateModelVersion_tags :: Lens.Lens' UpdateModelVersion (Prelude.Maybe [Tag])
+updateModelVersion_tags = Lens.lens (\UpdateModelVersion' {tags} -> tags) (\s@UpdateModelVersion' {} a -> s {tags = a} :: UpdateModelVersion) Prelude.. Lens.mapping Lens.coerced
+
+-- | The model ID.
+updateModelVersion_modelId :: Lens.Lens' UpdateModelVersion Prelude.Text
+updateModelVersion_modelId = Lens.lens (\UpdateModelVersion' {modelId} -> modelId) (\s@UpdateModelVersion' {} a -> s {modelId = a} :: UpdateModelVersion)
+
+-- | The model type.
+updateModelVersion_modelType :: Lens.Lens' UpdateModelVersion ModelTypeEnum
+updateModelVersion_modelType = Lens.lens (\UpdateModelVersion' {modelType} -> modelType) (\s@UpdateModelVersion' {} a -> s {modelType = a} :: UpdateModelVersion)
+
+-- | The major version number.
+updateModelVersion_majorVersionNumber :: Lens.Lens' UpdateModelVersion Prelude.Text
+updateModelVersion_majorVersionNumber = Lens.lens (\UpdateModelVersion' {majorVersionNumber} -> majorVersionNumber) (\s@UpdateModelVersion' {} a -> s {majorVersionNumber = a} :: UpdateModelVersion)
+
+instance Core.AWSRequest UpdateModelVersion where
+  type
+    AWSResponse UpdateModelVersion =
+      UpdateModelVersionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateModelVersionResponse'
+            Prelude.<$> (x Data..?> "modelId")
+            Prelude.<*> (x Data..?> "modelType")
+            Prelude.<*> (x Data..?> "modelVersionNumber")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateModelVersion where
+  hashWithSalt _salt UpdateModelVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` externalEventsDetail
+      `Prelude.hashWithSalt` ingestedEventsDetail
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` modelId
+      `Prelude.hashWithSalt` modelType
+      `Prelude.hashWithSalt` majorVersionNumber
+
+instance Prelude.NFData UpdateModelVersion where
+  rnf UpdateModelVersion' {..} =
+    Prelude.rnf externalEventsDetail
+      `Prelude.seq` Prelude.rnf ingestedEventsDetail
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf modelId
+      `Prelude.seq` Prelude.rnf modelType
+      `Prelude.seq` Prelude.rnf majorVersionNumber
+
+instance Data.ToHeaders UpdateModelVersion where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.UpdateModelVersion" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateModelVersion where
+  toJSON UpdateModelVersion' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("externalEventsDetail" Data..=)
+              Prelude.<$> externalEventsDetail,
+            ("ingestedEventsDetail" Data..=)
+              Prelude.<$> ingestedEventsDetail,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("modelId" Data..= modelId),
+            Prelude.Just ("modelType" Data..= modelType),
+            Prelude.Just
+              ("majorVersionNumber" Data..= majorVersionNumber)
+          ]
+      )
+
+instance Data.ToPath UpdateModelVersion where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateModelVersion where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateModelVersionResponse' smart constructor.
+data UpdateModelVersionResponse = UpdateModelVersionResponse'
+  { -- | The model ID.
+    modelId :: Prelude.Maybe Prelude.Text,
+    -- | The model type.
+    modelType :: Prelude.Maybe ModelTypeEnum,
+    -- | The model version number of the model version updated.
+    modelVersionNumber :: Prelude.Maybe Prelude.Text,
+    -- | The status of the updated model version.
+    status :: 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 'UpdateModelVersionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'modelId', 'updateModelVersionResponse_modelId' - The model ID.
+--
+-- 'modelType', 'updateModelVersionResponse_modelType' - The model type.
+--
+-- 'modelVersionNumber', 'updateModelVersionResponse_modelVersionNumber' - The model version number of the model version updated.
+--
+-- 'status', 'updateModelVersionResponse_status' - The status of the updated model version.
+--
+-- 'httpStatus', 'updateModelVersionResponse_httpStatus' - The response's http status code.
+newUpdateModelVersionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateModelVersionResponse
+newUpdateModelVersionResponse pHttpStatus_ =
+  UpdateModelVersionResponse'
+    { modelId =
+        Prelude.Nothing,
+      modelType = Prelude.Nothing,
+      modelVersionNumber = Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The model ID.
+updateModelVersionResponse_modelId :: Lens.Lens' UpdateModelVersionResponse (Prelude.Maybe Prelude.Text)
+updateModelVersionResponse_modelId = Lens.lens (\UpdateModelVersionResponse' {modelId} -> modelId) (\s@UpdateModelVersionResponse' {} a -> s {modelId = a} :: UpdateModelVersionResponse)
+
+-- | The model type.
+updateModelVersionResponse_modelType :: Lens.Lens' UpdateModelVersionResponse (Prelude.Maybe ModelTypeEnum)
+updateModelVersionResponse_modelType = Lens.lens (\UpdateModelVersionResponse' {modelType} -> modelType) (\s@UpdateModelVersionResponse' {} a -> s {modelType = a} :: UpdateModelVersionResponse)
+
+-- | The model version number of the model version updated.
+updateModelVersionResponse_modelVersionNumber :: Lens.Lens' UpdateModelVersionResponse (Prelude.Maybe Prelude.Text)
+updateModelVersionResponse_modelVersionNumber = Lens.lens (\UpdateModelVersionResponse' {modelVersionNumber} -> modelVersionNumber) (\s@UpdateModelVersionResponse' {} a -> s {modelVersionNumber = a} :: UpdateModelVersionResponse)
+
+-- | The status of the updated model version.
+updateModelVersionResponse_status :: Lens.Lens' UpdateModelVersionResponse (Prelude.Maybe Prelude.Text)
+updateModelVersionResponse_status = Lens.lens (\UpdateModelVersionResponse' {status} -> status) (\s@UpdateModelVersionResponse' {} a -> s {status = a} :: UpdateModelVersionResponse)
+
+-- | The response's http status code.
+updateModelVersionResponse_httpStatus :: Lens.Lens' UpdateModelVersionResponse Prelude.Int
+updateModelVersionResponse_httpStatus = Lens.lens (\UpdateModelVersionResponse' {httpStatus} -> httpStatus) (\s@UpdateModelVersionResponse' {} a -> s {httpStatus = a} :: UpdateModelVersionResponse)
+
+instance Prelude.NFData UpdateModelVersionResponse where
+  rnf UpdateModelVersionResponse' {..} =
+    Prelude.rnf modelId
+      `Prelude.seq` Prelude.rnf modelType
+      `Prelude.seq` Prelude.rnf modelVersionNumber
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/UpdateModelVersionStatus.hs b/gen/Amazonka/FraudDetector/UpdateModelVersionStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/UpdateModelVersionStatus.hs
@@ -0,0 +1,222 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.UpdateModelVersionStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the status of a model version.
+--
+-- You can perform the following status updates:
+--
+-- 1.  Change the @TRAINING_IN_PROGRESS@ status to @TRAINING_CANCELLED@.
+--
+-- 2.  Change the @TRAINING_COMPLETE@ status to @ACTIVE@.
+--
+-- 3.  Change @ACTIVE@ to @INACTIVE@.
+module Amazonka.FraudDetector.UpdateModelVersionStatus
+  ( -- * Creating a Request
+    UpdateModelVersionStatus (..),
+    newUpdateModelVersionStatus,
+
+    -- * Request Lenses
+    updateModelVersionStatus_modelId,
+    updateModelVersionStatus_modelType,
+    updateModelVersionStatus_modelVersionNumber,
+    updateModelVersionStatus_status,
+
+    -- * Destructuring the Response
+    UpdateModelVersionStatusResponse (..),
+    newUpdateModelVersionStatusResponse,
+
+    -- * Response Lenses
+    updateModelVersionStatusResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateModelVersionStatus' smart constructor.
+data UpdateModelVersionStatus = UpdateModelVersionStatus'
+  { -- | The model ID of the model version to update.
+    modelId :: Prelude.Text,
+    -- | The model type.
+    modelType :: ModelTypeEnum,
+    -- | The model version number.
+    modelVersionNumber :: Prelude.Text,
+    -- | The model version status.
+    status :: ModelVersionStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateModelVersionStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'modelId', 'updateModelVersionStatus_modelId' - The model ID of the model version to update.
+--
+-- 'modelType', 'updateModelVersionStatus_modelType' - The model type.
+--
+-- 'modelVersionNumber', 'updateModelVersionStatus_modelVersionNumber' - The model version number.
+--
+-- 'status', 'updateModelVersionStatus_status' - The model version status.
+newUpdateModelVersionStatus ::
+  -- | 'modelId'
+  Prelude.Text ->
+  -- | 'modelType'
+  ModelTypeEnum ->
+  -- | 'modelVersionNumber'
+  Prelude.Text ->
+  -- | 'status'
+  ModelVersionStatus ->
+  UpdateModelVersionStatus
+newUpdateModelVersionStatus
+  pModelId_
+  pModelType_
+  pModelVersionNumber_
+  pStatus_ =
+    UpdateModelVersionStatus'
+      { modelId = pModelId_,
+        modelType = pModelType_,
+        modelVersionNumber = pModelVersionNumber_,
+        status = pStatus_
+      }
+
+-- | The model ID of the model version to update.
+updateModelVersionStatus_modelId :: Lens.Lens' UpdateModelVersionStatus Prelude.Text
+updateModelVersionStatus_modelId = Lens.lens (\UpdateModelVersionStatus' {modelId} -> modelId) (\s@UpdateModelVersionStatus' {} a -> s {modelId = a} :: UpdateModelVersionStatus)
+
+-- | The model type.
+updateModelVersionStatus_modelType :: Lens.Lens' UpdateModelVersionStatus ModelTypeEnum
+updateModelVersionStatus_modelType = Lens.lens (\UpdateModelVersionStatus' {modelType} -> modelType) (\s@UpdateModelVersionStatus' {} a -> s {modelType = a} :: UpdateModelVersionStatus)
+
+-- | The model version number.
+updateModelVersionStatus_modelVersionNumber :: Lens.Lens' UpdateModelVersionStatus Prelude.Text
+updateModelVersionStatus_modelVersionNumber = Lens.lens (\UpdateModelVersionStatus' {modelVersionNumber} -> modelVersionNumber) (\s@UpdateModelVersionStatus' {} a -> s {modelVersionNumber = a} :: UpdateModelVersionStatus)
+
+-- | The model version status.
+updateModelVersionStatus_status :: Lens.Lens' UpdateModelVersionStatus ModelVersionStatus
+updateModelVersionStatus_status = Lens.lens (\UpdateModelVersionStatus' {status} -> status) (\s@UpdateModelVersionStatus' {} a -> s {status = a} :: UpdateModelVersionStatus)
+
+instance Core.AWSRequest UpdateModelVersionStatus where
+  type
+    AWSResponse UpdateModelVersionStatus =
+      UpdateModelVersionStatusResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateModelVersionStatusResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateModelVersionStatus where
+  hashWithSalt _salt UpdateModelVersionStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` modelId
+      `Prelude.hashWithSalt` modelType
+      `Prelude.hashWithSalt` modelVersionNumber
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData UpdateModelVersionStatus where
+  rnf UpdateModelVersionStatus' {..} =
+    Prelude.rnf modelId
+      `Prelude.seq` Prelude.rnf modelType
+      `Prelude.seq` Prelude.rnf modelVersionNumber
+      `Prelude.seq` Prelude.rnf status
+
+instance Data.ToHeaders UpdateModelVersionStatus where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.UpdateModelVersionStatus" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateModelVersionStatus where
+  toJSON UpdateModelVersionStatus' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("modelId" Data..= modelId),
+            Prelude.Just ("modelType" Data..= modelType),
+            Prelude.Just
+              ("modelVersionNumber" Data..= modelVersionNumber),
+            Prelude.Just ("status" Data..= status)
+          ]
+      )
+
+instance Data.ToPath UpdateModelVersionStatus where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateModelVersionStatus where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateModelVersionStatusResponse' smart constructor.
+data UpdateModelVersionStatusResponse = UpdateModelVersionStatusResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateModelVersionStatusResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateModelVersionStatusResponse_httpStatus' - The response's http status code.
+newUpdateModelVersionStatusResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateModelVersionStatusResponse
+newUpdateModelVersionStatusResponse pHttpStatus_ =
+  UpdateModelVersionStatusResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateModelVersionStatusResponse_httpStatus :: Lens.Lens' UpdateModelVersionStatusResponse Prelude.Int
+updateModelVersionStatusResponse_httpStatus = Lens.lens (\UpdateModelVersionStatusResponse' {httpStatus} -> httpStatus) (\s@UpdateModelVersionStatusResponse' {} a -> s {httpStatus = a} :: UpdateModelVersionStatusResponse)
+
+instance
+  Prelude.NFData
+    UpdateModelVersionStatusResponse
+  where
+  rnf UpdateModelVersionStatusResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/UpdateRuleMetadata.hs b/gen/Amazonka/FraudDetector/UpdateRuleMetadata.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/UpdateRuleMetadata.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.FraudDetector.UpdateRuleMetadata
+-- 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 rule\'s metadata. The description attribute can be updated.
+module Amazonka.FraudDetector.UpdateRuleMetadata
+  ( -- * Creating a Request
+    UpdateRuleMetadata (..),
+    newUpdateRuleMetadata,
+
+    -- * Request Lenses
+    updateRuleMetadata_rule,
+    updateRuleMetadata_description,
+
+    -- * Destructuring the Response
+    UpdateRuleMetadataResponse (..),
+    newUpdateRuleMetadataResponse,
+
+    -- * Response Lenses
+    updateRuleMetadataResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateRuleMetadata' smart constructor.
+data UpdateRuleMetadata = UpdateRuleMetadata'
+  { -- | The rule to update.
+    rule :: Rule,
+    -- | The rule description.
+    description :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateRuleMetadata' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'rule', 'updateRuleMetadata_rule' - The rule to update.
+--
+-- 'description', 'updateRuleMetadata_description' - The rule description.
+newUpdateRuleMetadata ::
+  -- | 'rule'
+  Rule ->
+  -- | 'description'
+  Prelude.Text ->
+  UpdateRuleMetadata
+newUpdateRuleMetadata pRule_ pDescription_ =
+  UpdateRuleMetadata'
+    { rule = pRule_,
+      description = pDescription_
+    }
+
+-- | The rule to update.
+updateRuleMetadata_rule :: Lens.Lens' UpdateRuleMetadata Rule
+updateRuleMetadata_rule = Lens.lens (\UpdateRuleMetadata' {rule} -> rule) (\s@UpdateRuleMetadata' {} a -> s {rule = a} :: UpdateRuleMetadata)
+
+-- | The rule description.
+updateRuleMetadata_description :: Lens.Lens' UpdateRuleMetadata Prelude.Text
+updateRuleMetadata_description = Lens.lens (\UpdateRuleMetadata' {description} -> description) (\s@UpdateRuleMetadata' {} a -> s {description = a} :: UpdateRuleMetadata)
+
+instance Core.AWSRequest UpdateRuleMetadata where
+  type
+    AWSResponse UpdateRuleMetadata =
+      UpdateRuleMetadataResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateRuleMetadataResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateRuleMetadata where
+  hashWithSalt _salt UpdateRuleMetadata' {..} =
+    _salt
+      `Prelude.hashWithSalt` rule
+      `Prelude.hashWithSalt` description
+
+instance Prelude.NFData UpdateRuleMetadata where
+  rnf UpdateRuleMetadata' {..} =
+    Prelude.rnf rule
+      `Prelude.seq` Prelude.rnf description
+
+instance Data.ToHeaders UpdateRuleMetadata where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.UpdateRuleMetadata" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateRuleMetadata where
+  toJSON UpdateRuleMetadata' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("rule" Data..= rule),
+            Prelude.Just ("description" Data..= description)
+          ]
+      )
+
+instance Data.ToPath UpdateRuleMetadata where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateRuleMetadata where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateRuleMetadataResponse' smart constructor.
+data UpdateRuleMetadataResponse = UpdateRuleMetadataResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateRuleMetadataResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateRuleMetadataResponse_httpStatus' - The response's http status code.
+newUpdateRuleMetadataResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateRuleMetadataResponse
+newUpdateRuleMetadataResponse pHttpStatus_ =
+  UpdateRuleMetadataResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateRuleMetadataResponse_httpStatus :: Lens.Lens' UpdateRuleMetadataResponse Prelude.Int
+updateRuleMetadataResponse_httpStatus = Lens.lens (\UpdateRuleMetadataResponse' {httpStatus} -> httpStatus) (\s@UpdateRuleMetadataResponse' {} a -> s {httpStatus = a} :: UpdateRuleMetadataResponse)
+
+instance Prelude.NFData UpdateRuleMetadataResponse where
+  rnf UpdateRuleMetadataResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/UpdateRuleVersion.hs b/gen/Amazonka/FraudDetector/UpdateRuleVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/UpdateRuleVersion.hs
@@ -0,0 +1,248 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.FraudDetector.UpdateRuleVersion
+-- 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 rule version resulting in a new rule version. Updates a rule
+-- version resulting in a new rule version (version 1, 2, 3 ...).
+module Amazonka.FraudDetector.UpdateRuleVersion
+  ( -- * Creating a Request
+    UpdateRuleVersion (..),
+    newUpdateRuleVersion,
+
+    -- * Request Lenses
+    updateRuleVersion_description,
+    updateRuleVersion_tags,
+    updateRuleVersion_rule,
+    updateRuleVersion_expression,
+    updateRuleVersion_language,
+    updateRuleVersion_outcomes,
+
+    -- * Destructuring the Response
+    UpdateRuleVersionResponse (..),
+    newUpdateRuleVersionResponse,
+
+    -- * Response Lenses
+    updateRuleVersionResponse_rule,
+    updateRuleVersionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateRuleVersion' smart constructor.
+data UpdateRuleVersion = UpdateRuleVersion'
+  { -- | The description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The tags to assign to the rule version.
+    tags :: Prelude.Maybe [Tag],
+    -- | The rule to update.
+    rule :: Rule,
+    -- | The rule expression.
+    expression :: Data.Sensitive Prelude.Text,
+    -- | The language.
+    language :: Language,
+    -- | The outcomes.
+    outcomes :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateRuleVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'updateRuleVersion_description' - The description.
+--
+-- 'tags', 'updateRuleVersion_tags' - The tags to assign to the rule version.
+--
+-- 'rule', 'updateRuleVersion_rule' - The rule to update.
+--
+-- 'expression', 'updateRuleVersion_expression' - The rule expression.
+--
+-- 'language', 'updateRuleVersion_language' - The language.
+--
+-- 'outcomes', 'updateRuleVersion_outcomes' - The outcomes.
+newUpdateRuleVersion ::
+  -- | 'rule'
+  Rule ->
+  -- | 'expression'
+  Prelude.Text ->
+  -- | 'language'
+  Language ->
+  -- | 'outcomes'
+  Prelude.NonEmpty Prelude.Text ->
+  UpdateRuleVersion
+newUpdateRuleVersion
+  pRule_
+  pExpression_
+  pLanguage_
+  pOutcomes_ =
+    UpdateRuleVersion'
+      { description = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        rule = pRule_,
+        expression = Data._Sensitive Lens.# pExpression_,
+        language = pLanguage_,
+        outcomes = Lens.coerced Lens.# pOutcomes_
+      }
+
+-- | The description.
+updateRuleVersion_description :: Lens.Lens' UpdateRuleVersion (Prelude.Maybe Prelude.Text)
+updateRuleVersion_description = Lens.lens (\UpdateRuleVersion' {description} -> description) (\s@UpdateRuleVersion' {} a -> s {description = a} :: UpdateRuleVersion)
+
+-- | The tags to assign to the rule version.
+updateRuleVersion_tags :: Lens.Lens' UpdateRuleVersion (Prelude.Maybe [Tag])
+updateRuleVersion_tags = Lens.lens (\UpdateRuleVersion' {tags} -> tags) (\s@UpdateRuleVersion' {} a -> s {tags = a} :: UpdateRuleVersion) Prelude.. Lens.mapping Lens.coerced
+
+-- | The rule to update.
+updateRuleVersion_rule :: Lens.Lens' UpdateRuleVersion Rule
+updateRuleVersion_rule = Lens.lens (\UpdateRuleVersion' {rule} -> rule) (\s@UpdateRuleVersion' {} a -> s {rule = a} :: UpdateRuleVersion)
+
+-- | The rule expression.
+updateRuleVersion_expression :: Lens.Lens' UpdateRuleVersion Prelude.Text
+updateRuleVersion_expression = Lens.lens (\UpdateRuleVersion' {expression} -> expression) (\s@UpdateRuleVersion' {} a -> s {expression = a} :: UpdateRuleVersion) Prelude.. Data._Sensitive
+
+-- | The language.
+updateRuleVersion_language :: Lens.Lens' UpdateRuleVersion Language
+updateRuleVersion_language = Lens.lens (\UpdateRuleVersion' {language} -> language) (\s@UpdateRuleVersion' {} a -> s {language = a} :: UpdateRuleVersion)
+
+-- | The outcomes.
+updateRuleVersion_outcomes :: Lens.Lens' UpdateRuleVersion (Prelude.NonEmpty Prelude.Text)
+updateRuleVersion_outcomes = Lens.lens (\UpdateRuleVersion' {outcomes} -> outcomes) (\s@UpdateRuleVersion' {} a -> s {outcomes = a} :: UpdateRuleVersion) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UpdateRuleVersion where
+  type
+    AWSResponse UpdateRuleVersion =
+      UpdateRuleVersionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateRuleVersionResponse'
+            Prelude.<$> (x Data..?> "rule")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateRuleVersion where
+  hashWithSalt _salt UpdateRuleVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` rule
+      `Prelude.hashWithSalt` expression
+      `Prelude.hashWithSalt` language
+      `Prelude.hashWithSalt` outcomes
+
+instance Prelude.NFData UpdateRuleVersion where
+  rnf UpdateRuleVersion' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf rule
+      `Prelude.seq` Prelude.rnf expression
+      `Prelude.seq` Prelude.rnf language
+      `Prelude.seq` Prelude.rnf outcomes
+
+instance Data.ToHeaders UpdateRuleVersion where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.UpdateRuleVersion" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateRuleVersion where
+  toJSON UpdateRuleVersion' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("rule" Data..= rule),
+            Prelude.Just ("expression" Data..= expression),
+            Prelude.Just ("language" Data..= language),
+            Prelude.Just ("outcomes" Data..= outcomes)
+          ]
+      )
+
+instance Data.ToPath UpdateRuleVersion where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateRuleVersion where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateRuleVersionResponse' smart constructor.
+data UpdateRuleVersionResponse = UpdateRuleVersionResponse'
+  { -- | The new rule version that was created.
+    rule :: Prelude.Maybe Rule,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateRuleVersionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'rule', 'updateRuleVersionResponse_rule' - The new rule version that was created.
+--
+-- 'httpStatus', 'updateRuleVersionResponse_httpStatus' - The response's http status code.
+newUpdateRuleVersionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateRuleVersionResponse
+newUpdateRuleVersionResponse pHttpStatus_ =
+  UpdateRuleVersionResponse'
+    { rule = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The new rule version that was created.
+updateRuleVersionResponse_rule :: Lens.Lens' UpdateRuleVersionResponse (Prelude.Maybe Rule)
+updateRuleVersionResponse_rule = Lens.lens (\UpdateRuleVersionResponse' {rule} -> rule) (\s@UpdateRuleVersionResponse' {} a -> s {rule = a} :: UpdateRuleVersionResponse)
+
+-- | The response's http status code.
+updateRuleVersionResponse_httpStatus :: Lens.Lens' UpdateRuleVersionResponse Prelude.Int
+updateRuleVersionResponse_httpStatus = Lens.lens (\UpdateRuleVersionResponse' {httpStatus} -> httpStatus) (\s@UpdateRuleVersionResponse' {} a -> s {httpStatus = a} :: UpdateRuleVersionResponse)
+
+instance Prelude.NFData UpdateRuleVersionResponse where
+  rnf UpdateRuleVersionResponse' {..} =
+    Prelude.rnf rule
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/UpdateVariable.hs b/gen/Amazonka/FraudDetector/UpdateVariable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/UpdateVariable.hs
@@ -0,0 +1,200 @@
+{-# 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.FraudDetector.UpdateVariable
+-- 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 variable.
+module Amazonka.FraudDetector.UpdateVariable
+  ( -- * Creating a Request
+    UpdateVariable (..),
+    newUpdateVariable,
+
+    -- * Request Lenses
+    updateVariable_defaultValue,
+    updateVariable_description,
+    updateVariable_variableType,
+    updateVariable_name,
+
+    -- * Destructuring the Response
+    UpdateVariableResponse (..),
+    newUpdateVariableResponse,
+
+    -- * Response Lenses
+    updateVariableResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateVariable' smart constructor.
+data UpdateVariable = UpdateVariable'
+  { -- | The new default value of the variable.
+    defaultValue :: Prelude.Maybe Prelude.Text,
+    -- | The new description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The variable type. For more information see
+    -- <https://docs.aws.amazon.com/frauddetector/latest/ug/create-a-variable.html#variable-types Variable types>.
+    variableType :: Prelude.Maybe Prelude.Text,
+    -- | The name of the variable.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateVariable' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'defaultValue', 'updateVariable_defaultValue' - The new default value of the variable.
+--
+-- 'description', 'updateVariable_description' - The new description.
+--
+-- 'variableType', 'updateVariable_variableType' - The variable type. For more information see
+-- <https://docs.aws.amazon.com/frauddetector/latest/ug/create-a-variable.html#variable-types Variable types>.
+--
+-- 'name', 'updateVariable_name' - The name of the variable.
+newUpdateVariable ::
+  -- | 'name'
+  Prelude.Text ->
+  UpdateVariable
+newUpdateVariable pName_ =
+  UpdateVariable'
+    { defaultValue = Prelude.Nothing,
+      description = Prelude.Nothing,
+      variableType = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The new default value of the variable.
+updateVariable_defaultValue :: Lens.Lens' UpdateVariable (Prelude.Maybe Prelude.Text)
+updateVariable_defaultValue = Lens.lens (\UpdateVariable' {defaultValue} -> defaultValue) (\s@UpdateVariable' {} a -> s {defaultValue = a} :: UpdateVariable)
+
+-- | The new description.
+updateVariable_description :: Lens.Lens' UpdateVariable (Prelude.Maybe Prelude.Text)
+updateVariable_description = Lens.lens (\UpdateVariable' {description} -> description) (\s@UpdateVariable' {} a -> s {description = a} :: UpdateVariable)
+
+-- | The variable type. For more information see
+-- <https://docs.aws.amazon.com/frauddetector/latest/ug/create-a-variable.html#variable-types Variable types>.
+updateVariable_variableType :: Lens.Lens' UpdateVariable (Prelude.Maybe Prelude.Text)
+updateVariable_variableType = Lens.lens (\UpdateVariable' {variableType} -> variableType) (\s@UpdateVariable' {} a -> s {variableType = a} :: UpdateVariable)
+
+-- | The name of the variable.
+updateVariable_name :: Lens.Lens' UpdateVariable Prelude.Text
+updateVariable_name = Lens.lens (\UpdateVariable' {name} -> name) (\s@UpdateVariable' {} a -> s {name = a} :: UpdateVariable)
+
+instance Core.AWSRequest UpdateVariable where
+  type
+    AWSResponse UpdateVariable =
+      UpdateVariableResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateVariableResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateVariable where
+  hashWithSalt _salt UpdateVariable' {..} =
+    _salt
+      `Prelude.hashWithSalt` defaultValue
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` variableType
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData UpdateVariable where
+  rnf UpdateVariable' {..} =
+    Prelude.rnf defaultValue
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf variableType
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders UpdateVariable where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSHawksNestServiceFacade.UpdateVariable" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateVariable where
+  toJSON UpdateVariable' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("defaultValue" Data..=) Prelude.<$> defaultValue,
+            ("description" Data..=) Prelude.<$> description,
+            ("variableType" Data..=) Prelude.<$> variableType,
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath UpdateVariable where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateVariable where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateVariableResponse' smart constructor.
+data UpdateVariableResponse = UpdateVariableResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateVariableResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateVariableResponse_httpStatus' - The response's http status code.
+newUpdateVariableResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateVariableResponse
+newUpdateVariableResponse pHttpStatus_ =
+  UpdateVariableResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+updateVariableResponse_httpStatus :: Lens.Lens' UpdateVariableResponse Prelude.Int
+updateVariableResponse_httpStatus = Lens.lens (\UpdateVariableResponse' {httpStatus} -> httpStatus) (\s@UpdateVariableResponse' {} a -> s {httpStatus = a} :: UpdateVariableResponse)
+
+instance Prelude.NFData UpdateVariableResponse where
+  rnf UpdateVariableResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/FraudDetector/Waiters.hs b/gen/Amazonka/FraudDetector/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/FraudDetector/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.FraudDetector.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.FraudDetector.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.FraudDetector.Lens
+import Amazonka.FraudDetector.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.FraudDetector
+import Test.Amazonka.FraudDetector.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "FraudDetector"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/FraudDetector.hs b/test/Test/Amazonka/FraudDetector.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/FraudDetector.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.FraudDetector
+-- Copyright   : (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.FraudDetector
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/FraudDetector/Internal.hs b/test/Test/Amazonka/FraudDetector/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/FraudDetector/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.FraudDetector.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.FraudDetector.Internal where
diff --git a/test/Test/Amazonka/Gen/FraudDetector.hs b/test/Test/Amazonka/Gen/FraudDetector.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/FraudDetector.hs
@@ -0,0 +1,1398 @@
+{-# 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.FraudDetector
+-- Copyright   : (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.FraudDetector where
+
+import Amazonka.FraudDetector
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.FraudDetector.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"
+--         [ requestBatchCreateVariable $
+--             newBatchCreateVariable
+--
+--         , requestBatchGetVariable $
+--             newBatchGetVariable
+--
+--         , requestCancelBatchImportJob $
+--             newCancelBatchImportJob
+--
+--         , requestCancelBatchPredictionJob $
+--             newCancelBatchPredictionJob
+--
+--         , requestCreateBatchImportJob $
+--             newCreateBatchImportJob
+--
+--         , requestCreateBatchPredictionJob $
+--             newCreateBatchPredictionJob
+--
+--         , requestCreateDetectorVersion $
+--             newCreateDetectorVersion
+--
+--         , requestCreateModel $
+--             newCreateModel
+--
+--         , requestCreateModelVersion $
+--             newCreateModelVersion
+--
+--         , requestCreateRule $
+--             newCreateRule
+--
+--         , requestCreateVariable $
+--             newCreateVariable
+--
+--         , requestDeleteBatchImportJob $
+--             newDeleteBatchImportJob
+--
+--         , requestDeleteBatchPredictionJob $
+--             newDeleteBatchPredictionJob
+--
+--         , requestDeleteDetector $
+--             newDeleteDetector
+--
+--         , requestDeleteDetectorVersion $
+--             newDeleteDetectorVersion
+--
+--         , requestDeleteEntityType $
+--             newDeleteEntityType
+--
+--         , requestDeleteEvent $
+--             newDeleteEvent
+--
+--         , requestDeleteEventType $
+--             newDeleteEventType
+--
+--         , requestDeleteEventsByEventType $
+--             newDeleteEventsByEventType
+--
+--         , requestDeleteExternalModel $
+--             newDeleteExternalModel
+--
+--         , requestDeleteLabel $
+--             newDeleteLabel
+--
+--         , requestDeleteModel $
+--             newDeleteModel
+--
+--         , requestDeleteModelVersion $
+--             newDeleteModelVersion
+--
+--         , requestDeleteOutcome $
+--             newDeleteOutcome
+--
+--         , requestDeleteRule $
+--             newDeleteRule
+--
+--         , requestDeleteVariable $
+--             newDeleteVariable
+--
+--         , requestDescribeDetector $
+--             newDescribeDetector
+--
+--         , requestDescribeModelVersions $
+--             newDescribeModelVersions
+--
+--         , requestGetBatchImportJobs $
+--             newGetBatchImportJobs
+--
+--         , requestGetBatchPredictionJobs $
+--             newGetBatchPredictionJobs
+--
+--         , requestGetDeleteEventsByEventTypeStatus $
+--             newGetDeleteEventsByEventTypeStatus
+--
+--         , requestGetDetectorVersion $
+--             newGetDetectorVersion
+--
+--         , requestGetDetectors $
+--             newGetDetectors
+--
+--         , requestGetEntityTypes $
+--             newGetEntityTypes
+--
+--         , requestGetEvent $
+--             newGetEvent
+--
+--         , requestGetEventPrediction $
+--             newGetEventPrediction
+--
+--         , requestGetEventPredictionMetadata $
+--             newGetEventPredictionMetadata
+--
+--         , requestGetEventTypes $
+--             newGetEventTypes
+--
+--         , requestGetExternalModels $
+--             newGetExternalModels
+--
+--         , requestGetKMSEncryptionKey $
+--             newGetKMSEncryptionKey
+--
+--         , requestGetLabels $
+--             newGetLabels
+--
+--         , requestGetModelVersion $
+--             newGetModelVersion
+--
+--         , requestGetModels $
+--             newGetModels
+--
+--         , requestGetOutcomes $
+--             newGetOutcomes
+--
+--         , requestGetRules $
+--             newGetRules
+--
+--         , requestGetVariables $
+--             newGetVariables
+--
+--         , requestListEventPredictions $
+--             newListEventPredictions
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestPutDetector $
+--             newPutDetector
+--
+--         , requestPutEntityType $
+--             newPutEntityType
+--
+--         , requestPutEventType $
+--             newPutEventType
+--
+--         , requestPutExternalModel $
+--             newPutExternalModel
+--
+--         , requestPutKMSEncryptionKey $
+--             newPutKMSEncryptionKey
+--
+--         , requestPutLabel $
+--             newPutLabel
+--
+--         , requestPutOutcome $
+--             newPutOutcome
+--
+--         , requestSendEvent $
+--             newSendEvent
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateDetectorVersion $
+--             newUpdateDetectorVersion
+--
+--         , requestUpdateDetectorVersionMetadata $
+--             newUpdateDetectorVersionMetadata
+--
+--         , requestUpdateDetectorVersionStatus $
+--             newUpdateDetectorVersionStatus
+--
+--         , requestUpdateEventLabel $
+--             newUpdateEventLabel
+--
+--         , requestUpdateModel $
+--             newUpdateModel
+--
+--         , requestUpdateModelVersion $
+--             newUpdateModelVersion
+--
+--         , requestUpdateModelVersionStatus $
+--             newUpdateModelVersionStatus
+--
+--         , requestUpdateRuleMetadata $
+--             newUpdateRuleMetadata
+--
+--         , requestUpdateRuleVersion $
+--             newUpdateRuleVersion
+--
+--         , requestUpdateVariable $
+--             newUpdateVariable
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseBatchCreateVariable $
+--             newBatchCreateVariableResponse
+--
+--         , responseBatchGetVariable $
+--             newBatchGetVariableResponse
+--
+--         , responseCancelBatchImportJob $
+--             newCancelBatchImportJobResponse
+--
+--         , responseCancelBatchPredictionJob $
+--             newCancelBatchPredictionJobResponse
+--
+--         , responseCreateBatchImportJob $
+--             newCreateBatchImportJobResponse
+--
+--         , responseCreateBatchPredictionJob $
+--             newCreateBatchPredictionJobResponse
+--
+--         , responseCreateDetectorVersion $
+--             newCreateDetectorVersionResponse
+--
+--         , responseCreateModel $
+--             newCreateModelResponse
+--
+--         , responseCreateModelVersion $
+--             newCreateModelVersionResponse
+--
+--         , responseCreateRule $
+--             newCreateRuleResponse
+--
+--         , responseCreateVariable $
+--             newCreateVariableResponse
+--
+--         , responseDeleteBatchImportJob $
+--             newDeleteBatchImportJobResponse
+--
+--         , responseDeleteBatchPredictionJob $
+--             newDeleteBatchPredictionJobResponse
+--
+--         , responseDeleteDetector $
+--             newDeleteDetectorResponse
+--
+--         , responseDeleteDetectorVersion $
+--             newDeleteDetectorVersionResponse
+--
+--         , responseDeleteEntityType $
+--             newDeleteEntityTypeResponse
+--
+--         , responseDeleteEvent $
+--             newDeleteEventResponse
+--
+--         , responseDeleteEventType $
+--             newDeleteEventTypeResponse
+--
+--         , responseDeleteEventsByEventType $
+--             newDeleteEventsByEventTypeResponse
+--
+--         , responseDeleteExternalModel $
+--             newDeleteExternalModelResponse
+--
+--         , responseDeleteLabel $
+--             newDeleteLabelResponse
+--
+--         , responseDeleteModel $
+--             newDeleteModelResponse
+--
+--         , responseDeleteModelVersion $
+--             newDeleteModelVersionResponse
+--
+--         , responseDeleteOutcome $
+--             newDeleteOutcomeResponse
+--
+--         , responseDeleteRule $
+--             newDeleteRuleResponse
+--
+--         , responseDeleteVariable $
+--             newDeleteVariableResponse
+--
+--         , responseDescribeDetector $
+--             newDescribeDetectorResponse
+--
+--         , responseDescribeModelVersions $
+--             newDescribeModelVersionsResponse
+--
+--         , responseGetBatchImportJobs $
+--             newGetBatchImportJobsResponse
+--
+--         , responseGetBatchPredictionJobs $
+--             newGetBatchPredictionJobsResponse
+--
+--         , responseGetDeleteEventsByEventTypeStatus $
+--             newGetDeleteEventsByEventTypeStatusResponse
+--
+--         , responseGetDetectorVersion $
+--             newGetDetectorVersionResponse
+--
+--         , responseGetDetectors $
+--             newGetDetectorsResponse
+--
+--         , responseGetEntityTypes $
+--             newGetEntityTypesResponse
+--
+--         , responseGetEvent $
+--             newGetEventResponse
+--
+--         , responseGetEventPrediction $
+--             newGetEventPredictionResponse
+--
+--         , responseGetEventPredictionMetadata $
+--             newGetEventPredictionMetadataResponse
+--
+--         , responseGetEventTypes $
+--             newGetEventTypesResponse
+--
+--         , responseGetExternalModels $
+--             newGetExternalModelsResponse
+--
+--         , responseGetKMSEncryptionKey $
+--             newGetKMSEncryptionKeyResponse
+--
+--         , responseGetLabels $
+--             newGetLabelsResponse
+--
+--         , responseGetModelVersion $
+--             newGetModelVersionResponse
+--
+--         , responseGetModels $
+--             newGetModelsResponse
+--
+--         , responseGetOutcomes $
+--             newGetOutcomesResponse
+--
+--         , responseGetRules $
+--             newGetRulesResponse
+--
+--         , responseGetVariables $
+--             newGetVariablesResponse
+--
+--         , responseListEventPredictions $
+--             newListEventPredictionsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responsePutDetector $
+--             newPutDetectorResponse
+--
+--         , responsePutEntityType $
+--             newPutEntityTypeResponse
+--
+--         , responsePutEventType $
+--             newPutEventTypeResponse
+--
+--         , responsePutExternalModel $
+--             newPutExternalModelResponse
+--
+--         , responsePutKMSEncryptionKey $
+--             newPutKMSEncryptionKeyResponse
+--
+--         , responsePutLabel $
+--             newPutLabelResponse
+--
+--         , responsePutOutcome $
+--             newPutOutcomeResponse
+--
+--         , responseSendEvent $
+--             newSendEventResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateDetectorVersion $
+--             newUpdateDetectorVersionResponse
+--
+--         , responseUpdateDetectorVersionMetadata $
+--             newUpdateDetectorVersionMetadataResponse
+--
+--         , responseUpdateDetectorVersionStatus $
+--             newUpdateDetectorVersionStatusResponse
+--
+--         , responseUpdateEventLabel $
+--             newUpdateEventLabelResponse
+--
+--         , responseUpdateModel $
+--             newUpdateModelResponse
+--
+--         , responseUpdateModelVersion $
+--             newUpdateModelVersionResponse
+--
+--         , responseUpdateModelVersionStatus $
+--             newUpdateModelVersionStatusResponse
+--
+--         , responseUpdateRuleMetadata $
+--             newUpdateRuleMetadataResponse
+--
+--         , responseUpdateRuleVersion $
+--             newUpdateRuleVersionResponse
+--
+--         , responseUpdateVariable $
+--             newUpdateVariableResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestBatchCreateVariable :: BatchCreateVariable -> TestTree
+requestBatchCreateVariable =
+  req
+    "BatchCreateVariable"
+    "fixture/BatchCreateVariable.yaml"
+
+requestBatchGetVariable :: BatchGetVariable -> TestTree
+requestBatchGetVariable =
+  req
+    "BatchGetVariable"
+    "fixture/BatchGetVariable.yaml"
+
+requestCancelBatchImportJob :: CancelBatchImportJob -> TestTree
+requestCancelBatchImportJob =
+  req
+    "CancelBatchImportJob"
+    "fixture/CancelBatchImportJob.yaml"
+
+requestCancelBatchPredictionJob :: CancelBatchPredictionJob -> TestTree
+requestCancelBatchPredictionJob =
+  req
+    "CancelBatchPredictionJob"
+    "fixture/CancelBatchPredictionJob.yaml"
+
+requestCreateBatchImportJob :: CreateBatchImportJob -> TestTree
+requestCreateBatchImportJob =
+  req
+    "CreateBatchImportJob"
+    "fixture/CreateBatchImportJob.yaml"
+
+requestCreateBatchPredictionJob :: CreateBatchPredictionJob -> TestTree
+requestCreateBatchPredictionJob =
+  req
+    "CreateBatchPredictionJob"
+    "fixture/CreateBatchPredictionJob.yaml"
+
+requestCreateDetectorVersion :: CreateDetectorVersion -> TestTree
+requestCreateDetectorVersion =
+  req
+    "CreateDetectorVersion"
+    "fixture/CreateDetectorVersion.yaml"
+
+requestCreateModel :: CreateModel -> TestTree
+requestCreateModel =
+  req
+    "CreateModel"
+    "fixture/CreateModel.yaml"
+
+requestCreateModelVersion :: CreateModelVersion -> TestTree
+requestCreateModelVersion =
+  req
+    "CreateModelVersion"
+    "fixture/CreateModelVersion.yaml"
+
+requestCreateRule :: CreateRule -> TestTree
+requestCreateRule =
+  req
+    "CreateRule"
+    "fixture/CreateRule.yaml"
+
+requestCreateVariable :: CreateVariable -> TestTree
+requestCreateVariable =
+  req
+    "CreateVariable"
+    "fixture/CreateVariable.yaml"
+
+requestDeleteBatchImportJob :: DeleteBatchImportJob -> TestTree
+requestDeleteBatchImportJob =
+  req
+    "DeleteBatchImportJob"
+    "fixture/DeleteBatchImportJob.yaml"
+
+requestDeleteBatchPredictionJob :: DeleteBatchPredictionJob -> TestTree
+requestDeleteBatchPredictionJob =
+  req
+    "DeleteBatchPredictionJob"
+    "fixture/DeleteBatchPredictionJob.yaml"
+
+requestDeleteDetector :: DeleteDetector -> TestTree
+requestDeleteDetector =
+  req
+    "DeleteDetector"
+    "fixture/DeleteDetector.yaml"
+
+requestDeleteDetectorVersion :: DeleteDetectorVersion -> TestTree
+requestDeleteDetectorVersion =
+  req
+    "DeleteDetectorVersion"
+    "fixture/DeleteDetectorVersion.yaml"
+
+requestDeleteEntityType :: DeleteEntityType -> TestTree
+requestDeleteEntityType =
+  req
+    "DeleteEntityType"
+    "fixture/DeleteEntityType.yaml"
+
+requestDeleteEvent :: DeleteEvent -> TestTree
+requestDeleteEvent =
+  req
+    "DeleteEvent"
+    "fixture/DeleteEvent.yaml"
+
+requestDeleteEventType :: DeleteEventType -> TestTree
+requestDeleteEventType =
+  req
+    "DeleteEventType"
+    "fixture/DeleteEventType.yaml"
+
+requestDeleteEventsByEventType :: DeleteEventsByEventType -> TestTree
+requestDeleteEventsByEventType =
+  req
+    "DeleteEventsByEventType"
+    "fixture/DeleteEventsByEventType.yaml"
+
+requestDeleteExternalModel :: DeleteExternalModel -> TestTree
+requestDeleteExternalModel =
+  req
+    "DeleteExternalModel"
+    "fixture/DeleteExternalModel.yaml"
+
+requestDeleteLabel :: DeleteLabel -> TestTree
+requestDeleteLabel =
+  req
+    "DeleteLabel"
+    "fixture/DeleteLabel.yaml"
+
+requestDeleteModel :: DeleteModel -> TestTree
+requestDeleteModel =
+  req
+    "DeleteModel"
+    "fixture/DeleteModel.yaml"
+
+requestDeleteModelVersion :: DeleteModelVersion -> TestTree
+requestDeleteModelVersion =
+  req
+    "DeleteModelVersion"
+    "fixture/DeleteModelVersion.yaml"
+
+requestDeleteOutcome :: DeleteOutcome -> TestTree
+requestDeleteOutcome =
+  req
+    "DeleteOutcome"
+    "fixture/DeleteOutcome.yaml"
+
+requestDeleteRule :: DeleteRule -> TestTree
+requestDeleteRule =
+  req
+    "DeleteRule"
+    "fixture/DeleteRule.yaml"
+
+requestDeleteVariable :: DeleteVariable -> TestTree
+requestDeleteVariable =
+  req
+    "DeleteVariable"
+    "fixture/DeleteVariable.yaml"
+
+requestDescribeDetector :: DescribeDetector -> TestTree
+requestDescribeDetector =
+  req
+    "DescribeDetector"
+    "fixture/DescribeDetector.yaml"
+
+requestDescribeModelVersions :: DescribeModelVersions -> TestTree
+requestDescribeModelVersions =
+  req
+    "DescribeModelVersions"
+    "fixture/DescribeModelVersions.yaml"
+
+requestGetBatchImportJobs :: GetBatchImportJobs -> TestTree
+requestGetBatchImportJobs =
+  req
+    "GetBatchImportJobs"
+    "fixture/GetBatchImportJobs.yaml"
+
+requestGetBatchPredictionJobs :: GetBatchPredictionJobs -> TestTree
+requestGetBatchPredictionJobs =
+  req
+    "GetBatchPredictionJobs"
+    "fixture/GetBatchPredictionJobs.yaml"
+
+requestGetDeleteEventsByEventTypeStatus :: GetDeleteEventsByEventTypeStatus -> TestTree
+requestGetDeleteEventsByEventTypeStatus =
+  req
+    "GetDeleteEventsByEventTypeStatus"
+    "fixture/GetDeleteEventsByEventTypeStatus.yaml"
+
+requestGetDetectorVersion :: GetDetectorVersion -> TestTree
+requestGetDetectorVersion =
+  req
+    "GetDetectorVersion"
+    "fixture/GetDetectorVersion.yaml"
+
+requestGetDetectors :: GetDetectors -> TestTree
+requestGetDetectors =
+  req
+    "GetDetectors"
+    "fixture/GetDetectors.yaml"
+
+requestGetEntityTypes :: GetEntityTypes -> TestTree
+requestGetEntityTypes =
+  req
+    "GetEntityTypes"
+    "fixture/GetEntityTypes.yaml"
+
+requestGetEvent :: GetEvent -> TestTree
+requestGetEvent =
+  req
+    "GetEvent"
+    "fixture/GetEvent.yaml"
+
+requestGetEventPrediction :: GetEventPrediction -> TestTree
+requestGetEventPrediction =
+  req
+    "GetEventPrediction"
+    "fixture/GetEventPrediction.yaml"
+
+requestGetEventPredictionMetadata :: GetEventPredictionMetadata -> TestTree
+requestGetEventPredictionMetadata =
+  req
+    "GetEventPredictionMetadata"
+    "fixture/GetEventPredictionMetadata.yaml"
+
+requestGetEventTypes :: GetEventTypes -> TestTree
+requestGetEventTypes =
+  req
+    "GetEventTypes"
+    "fixture/GetEventTypes.yaml"
+
+requestGetExternalModels :: GetExternalModels -> TestTree
+requestGetExternalModels =
+  req
+    "GetExternalModels"
+    "fixture/GetExternalModels.yaml"
+
+requestGetKMSEncryptionKey :: GetKMSEncryptionKey -> TestTree
+requestGetKMSEncryptionKey =
+  req
+    "GetKMSEncryptionKey"
+    "fixture/GetKMSEncryptionKey.yaml"
+
+requestGetLabels :: GetLabels -> TestTree
+requestGetLabels =
+  req
+    "GetLabels"
+    "fixture/GetLabels.yaml"
+
+requestGetModelVersion :: GetModelVersion -> TestTree
+requestGetModelVersion =
+  req
+    "GetModelVersion"
+    "fixture/GetModelVersion.yaml"
+
+requestGetModels :: GetModels -> TestTree
+requestGetModels =
+  req
+    "GetModels"
+    "fixture/GetModels.yaml"
+
+requestGetOutcomes :: GetOutcomes -> TestTree
+requestGetOutcomes =
+  req
+    "GetOutcomes"
+    "fixture/GetOutcomes.yaml"
+
+requestGetRules :: GetRules -> TestTree
+requestGetRules =
+  req
+    "GetRules"
+    "fixture/GetRules.yaml"
+
+requestGetVariables :: GetVariables -> TestTree
+requestGetVariables =
+  req
+    "GetVariables"
+    "fixture/GetVariables.yaml"
+
+requestListEventPredictions :: ListEventPredictions -> TestTree
+requestListEventPredictions =
+  req
+    "ListEventPredictions"
+    "fixture/ListEventPredictions.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestPutDetector :: PutDetector -> TestTree
+requestPutDetector =
+  req
+    "PutDetector"
+    "fixture/PutDetector.yaml"
+
+requestPutEntityType :: PutEntityType -> TestTree
+requestPutEntityType =
+  req
+    "PutEntityType"
+    "fixture/PutEntityType.yaml"
+
+requestPutEventType :: PutEventType -> TestTree
+requestPutEventType =
+  req
+    "PutEventType"
+    "fixture/PutEventType.yaml"
+
+requestPutExternalModel :: PutExternalModel -> TestTree
+requestPutExternalModel =
+  req
+    "PutExternalModel"
+    "fixture/PutExternalModel.yaml"
+
+requestPutKMSEncryptionKey :: PutKMSEncryptionKey -> TestTree
+requestPutKMSEncryptionKey =
+  req
+    "PutKMSEncryptionKey"
+    "fixture/PutKMSEncryptionKey.yaml"
+
+requestPutLabel :: PutLabel -> TestTree
+requestPutLabel =
+  req
+    "PutLabel"
+    "fixture/PutLabel.yaml"
+
+requestPutOutcome :: PutOutcome -> TestTree
+requestPutOutcome =
+  req
+    "PutOutcome"
+    "fixture/PutOutcome.yaml"
+
+requestSendEvent :: SendEvent -> TestTree
+requestSendEvent =
+  req
+    "SendEvent"
+    "fixture/SendEvent.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateDetectorVersion :: UpdateDetectorVersion -> TestTree
+requestUpdateDetectorVersion =
+  req
+    "UpdateDetectorVersion"
+    "fixture/UpdateDetectorVersion.yaml"
+
+requestUpdateDetectorVersionMetadata :: UpdateDetectorVersionMetadata -> TestTree
+requestUpdateDetectorVersionMetadata =
+  req
+    "UpdateDetectorVersionMetadata"
+    "fixture/UpdateDetectorVersionMetadata.yaml"
+
+requestUpdateDetectorVersionStatus :: UpdateDetectorVersionStatus -> TestTree
+requestUpdateDetectorVersionStatus =
+  req
+    "UpdateDetectorVersionStatus"
+    "fixture/UpdateDetectorVersionStatus.yaml"
+
+requestUpdateEventLabel :: UpdateEventLabel -> TestTree
+requestUpdateEventLabel =
+  req
+    "UpdateEventLabel"
+    "fixture/UpdateEventLabel.yaml"
+
+requestUpdateModel :: UpdateModel -> TestTree
+requestUpdateModel =
+  req
+    "UpdateModel"
+    "fixture/UpdateModel.yaml"
+
+requestUpdateModelVersion :: UpdateModelVersion -> TestTree
+requestUpdateModelVersion =
+  req
+    "UpdateModelVersion"
+    "fixture/UpdateModelVersion.yaml"
+
+requestUpdateModelVersionStatus :: UpdateModelVersionStatus -> TestTree
+requestUpdateModelVersionStatus =
+  req
+    "UpdateModelVersionStatus"
+    "fixture/UpdateModelVersionStatus.yaml"
+
+requestUpdateRuleMetadata :: UpdateRuleMetadata -> TestTree
+requestUpdateRuleMetadata =
+  req
+    "UpdateRuleMetadata"
+    "fixture/UpdateRuleMetadata.yaml"
+
+requestUpdateRuleVersion :: UpdateRuleVersion -> TestTree
+requestUpdateRuleVersion =
+  req
+    "UpdateRuleVersion"
+    "fixture/UpdateRuleVersion.yaml"
+
+requestUpdateVariable :: UpdateVariable -> TestTree
+requestUpdateVariable =
+  req
+    "UpdateVariable"
+    "fixture/UpdateVariable.yaml"
+
+-- Responses
+
+responseBatchCreateVariable :: BatchCreateVariableResponse -> TestTree
+responseBatchCreateVariable =
+  res
+    "BatchCreateVariableResponse"
+    "fixture/BatchCreateVariableResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchCreateVariable)
+
+responseBatchGetVariable :: BatchGetVariableResponse -> TestTree
+responseBatchGetVariable =
+  res
+    "BatchGetVariableResponse"
+    "fixture/BatchGetVariableResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchGetVariable)
+
+responseCancelBatchImportJob :: CancelBatchImportJobResponse -> TestTree
+responseCancelBatchImportJob =
+  res
+    "CancelBatchImportJobResponse"
+    "fixture/CancelBatchImportJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CancelBatchImportJob)
+
+responseCancelBatchPredictionJob :: CancelBatchPredictionJobResponse -> TestTree
+responseCancelBatchPredictionJob =
+  res
+    "CancelBatchPredictionJobResponse"
+    "fixture/CancelBatchPredictionJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CancelBatchPredictionJob)
+
+responseCreateBatchImportJob :: CreateBatchImportJobResponse -> TestTree
+responseCreateBatchImportJob =
+  res
+    "CreateBatchImportJobResponse"
+    "fixture/CreateBatchImportJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateBatchImportJob)
+
+responseCreateBatchPredictionJob :: CreateBatchPredictionJobResponse -> TestTree
+responseCreateBatchPredictionJob =
+  res
+    "CreateBatchPredictionJobResponse"
+    "fixture/CreateBatchPredictionJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateBatchPredictionJob)
+
+responseCreateDetectorVersion :: CreateDetectorVersionResponse -> TestTree
+responseCreateDetectorVersion =
+  res
+    "CreateDetectorVersionResponse"
+    "fixture/CreateDetectorVersionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDetectorVersion)
+
+responseCreateModel :: CreateModelResponse -> TestTree
+responseCreateModel =
+  res
+    "CreateModelResponse"
+    "fixture/CreateModelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateModel)
+
+responseCreateModelVersion :: CreateModelVersionResponse -> TestTree
+responseCreateModelVersion =
+  res
+    "CreateModelVersionResponse"
+    "fixture/CreateModelVersionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateModelVersion)
+
+responseCreateRule :: CreateRuleResponse -> TestTree
+responseCreateRule =
+  res
+    "CreateRuleResponse"
+    "fixture/CreateRuleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateRule)
+
+responseCreateVariable :: CreateVariableResponse -> TestTree
+responseCreateVariable =
+  res
+    "CreateVariableResponse"
+    "fixture/CreateVariableResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateVariable)
+
+responseDeleteBatchImportJob :: DeleteBatchImportJobResponse -> TestTree
+responseDeleteBatchImportJob =
+  res
+    "DeleteBatchImportJobResponse"
+    "fixture/DeleteBatchImportJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteBatchImportJob)
+
+responseDeleteBatchPredictionJob :: DeleteBatchPredictionJobResponse -> TestTree
+responseDeleteBatchPredictionJob =
+  res
+    "DeleteBatchPredictionJobResponse"
+    "fixture/DeleteBatchPredictionJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteBatchPredictionJob)
+
+responseDeleteDetector :: DeleteDetectorResponse -> TestTree
+responseDeleteDetector =
+  res
+    "DeleteDetectorResponse"
+    "fixture/DeleteDetectorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDetector)
+
+responseDeleteDetectorVersion :: DeleteDetectorVersionResponse -> TestTree
+responseDeleteDetectorVersion =
+  res
+    "DeleteDetectorVersionResponse"
+    "fixture/DeleteDetectorVersionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDetectorVersion)
+
+responseDeleteEntityType :: DeleteEntityTypeResponse -> TestTree
+responseDeleteEntityType =
+  res
+    "DeleteEntityTypeResponse"
+    "fixture/DeleteEntityTypeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteEntityType)
+
+responseDeleteEvent :: DeleteEventResponse -> TestTree
+responseDeleteEvent =
+  res
+    "DeleteEventResponse"
+    "fixture/DeleteEventResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteEvent)
+
+responseDeleteEventType :: DeleteEventTypeResponse -> TestTree
+responseDeleteEventType =
+  res
+    "DeleteEventTypeResponse"
+    "fixture/DeleteEventTypeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteEventType)
+
+responseDeleteEventsByEventType :: DeleteEventsByEventTypeResponse -> TestTree
+responseDeleteEventsByEventType =
+  res
+    "DeleteEventsByEventTypeResponse"
+    "fixture/DeleteEventsByEventTypeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteEventsByEventType)
+
+responseDeleteExternalModel :: DeleteExternalModelResponse -> TestTree
+responseDeleteExternalModel =
+  res
+    "DeleteExternalModelResponse"
+    "fixture/DeleteExternalModelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteExternalModel)
+
+responseDeleteLabel :: DeleteLabelResponse -> TestTree
+responseDeleteLabel =
+  res
+    "DeleteLabelResponse"
+    "fixture/DeleteLabelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteLabel)
+
+responseDeleteModel :: DeleteModelResponse -> TestTree
+responseDeleteModel =
+  res
+    "DeleteModelResponse"
+    "fixture/DeleteModelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteModel)
+
+responseDeleteModelVersion :: DeleteModelVersionResponse -> TestTree
+responseDeleteModelVersion =
+  res
+    "DeleteModelVersionResponse"
+    "fixture/DeleteModelVersionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteModelVersion)
+
+responseDeleteOutcome :: DeleteOutcomeResponse -> TestTree
+responseDeleteOutcome =
+  res
+    "DeleteOutcomeResponse"
+    "fixture/DeleteOutcomeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteOutcome)
+
+responseDeleteRule :: DeleteRuleResponse -> TestTree
+responseDeleteRule =
+  res
+    "DeleteRuleResponse"
+    "fixture/DeleteRuleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteRule)
+
+responseDeleteVariable :: DeleteVariableResponse -> TestTree
+responseDeleteVariable =
+  res
+    "DeleteVariableResponse"
+    "fixture/DeleteVariableResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteVariable)
+
+responseDescribeDetector :: DescribeDetectorResponse -> TestTree
+responseDescribeDetector =
+  res
+    "DescribeDetectorResponse"
+    "fixture/DescribeDetectorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeDetector)
+
+responseDescribeModelVersions :: DescribeModelVersionsResponse -> TestTree
+responseDescribeModelVersions =
+  res
+    "DescribeModelVersionsResponse"
+    "fixture/DescribeModelVersionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeModelVersions)
+
+responseGetBatchImportJobs :: GetBatchImportJobsResponse -> TestTree
+responseGetBatchImportJobs =
+  res
+    "GetBatchImportJobsResponse"
+    "fixture/GetBatchImportJobsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetBatchImportJobs)
+
+responseGetBatchPredictionJobs :: GetBatchPredictionJobsResponse -> TestTree
+responseGetBatchPredictionJobs =
+  res
+    "GetBatchPredictionJobsResponse"
+    "fixture/GetBatchPredictionJobsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetBatchPredictionJobs)
+
+responseGetDeleteEventsByEventTypeStatus :: GetDeleteEventsByEventTypeStatusResponse -> TestTree
+responseGetDeleteEventsByEventTypeStatus =
+  res
+    "GetDeleteEventsByEventTypeStatusResponse"
+    "fixture/GetDeleteEventsByEventTypeStatusResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDeleteEventsByEventTypeStatus)
+
+responseGetDetectorVersion :: GetDetectorVersionResponse -> TestTree
+responseGetDetectorVersion =
+  res
+    "GetDetectorVersionResponse"
+    "fixture/GetDetectorVersionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDetectorVersion)
+
+responseGetDetectors :: GetDetectorsResponse -> TestTree
+responseGetDetectors =
+  res
+    "GetDetectorsResponse"
+    "fixture/GetDetectorsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDetectors)
+
+responseGetEntityTypes :: GetEntityTypesResponse -> TestTree
+responseGetEntityTypes =
+  res
+    "GetEntityTypesResponse"
+    "fixture/GetEntityTypesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetEntityTypes)
+
+responseGetEvent :: GetEventResponse -> TestTree
+responseGetEvent =
+  res
+    "GetEventResponse"
+    "fixture/GetEventResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetEvent)
+
+responseGetEventPrediction :: GetEventPredictionResponse -> TestTree
+responseGetEventPrediction =
+  res
+    "GetEventPredictionResponse"
+    "fixture/GetEventPredictionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetEventPrediction)
+
+responseGetEventPredictionMetadata :: GetEventPredictionMetadataResponse -> TestTree
+responseGetEventPredictionMetadata =
+  res
+    "GetEventPredictionMetadataResponse"
+    "fixture/GetEventPredictionMetadataResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetEventPredictionMetadata)
+
+responseGetEventTypes :: GetEventTypesResponse -> TestTree
+responseGetEventTypes =
+  res
+    "GetEventTypesResponse"
+    "fixture/GetEventTypesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetEventTypes)
+
+responseGetExternalModels :: GetExternalModelsResponse -> TestTree
+responseGetExternalModels =
+  res
+    "GetExternalModelsResponse"
+    "fixture/GetExternalModelsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetExternalModels)
+
+responseGetKMSEncryptionKey :: GetKMSEncryptionKeyResponse -> TestTree
+responseGetKMSEncryptionKey =
+  res
+    "GetKMSEncryptionKeyResponse"
+    "fixture/GetKMSEncryptionKeyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetKMSEncryptionKey)
+
+responseGetLabels :: GetLabelsResponse -> TestTree
+responseGetLabels =
+  res
+    "GetLabelsResponse"
+    "fixture/GetLabelsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetLabels)
+
+responseGetModelVersion :: GetModelVersionResponse -> TestTree
+responseGetModelVersion =
+  res
+    "GetModelVersionResponse"
+    "fixture/GetModelVersionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetModelVersion)
+
+responseGetModels :: GetModelsResponse -> TestTree
+responseGetModels =
+  res
+    "GetModelsResponse"
+    "fixture/GetModelsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetModels)
+
+responseGetOutcomes :: GetOutcomesResponse -> TestTree
+responseGetOutcomes =
+  res
+    "GetOutcomesResponse"
+    "fixture/GetOutcomesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetOutcomes)
+
+responseGetRules :: GetRulesResponse -> TestTree
+responseGetRules =
+  res
+    "GetRulesResponse"
+    "fixture/GetRulesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetRules)
+
+responseGetVariables :: GetVariablesResponse -> TestTree
+responseGetVariables =
+  res
+    "GetVariablesResponse"
+    "fixture/GetVariablesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetVariables)
+
+responseListEventPredictions :: ListEventPredictionsResponse -> TestTree
+responseListEventPredictions =
+  res
+    "ListEventPredictionsResponse"
+    "fixture/ListEventPredictionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListEventPredictions)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responsePutDetector :: PutDetectorResponse -> TestTree
+responsePutDetector =
+  res
+    "PutDetectorResponse"
+    "fixture/PutDetectorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutDetector)
+
+responsePutEntityType :: PutEntityTypeResponse -> TestTree
+responsePutEntityType =
+  res
+    "PutEntityTypeResponse"
+    "fixture/PutEntityTypeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutEntityType)
+
+responsePutEventType :: PutEventTypeResponse -> TestTree
+responsePutEventType =
+  res
+    "PutEventTypeResponse"
+    "fixture/PutEventTypeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutEventType)
+
+responsePutExternalModel :: PutExternalModelResponse -> TestTree
+responsePutExternalModel =
+  res
+    "PutExternalModelResponse"
+    "fixture/PutExternalModelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutExternalModel)
+
+responsePutKMSEncryptionKey :: PutKMSEncryptionKeyResponse -> TestTree
+responsePutKMSEncryptionKey =
+  res
+    "PutKMSEncryptionKeyResponse"
+    "fixture/PutKMSEncryptionKeyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutKMSEncryptionKey)
+
+responsePutLabel :: PutLabelResponse -> TestTree
+responsePutLabel =
+  res
+    "PutLabelResponse"
+    "fixture/PutLabelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutLabel)
+
+responsePutOutcome :: PutOutcomeResponse -> TestTree
+responsePutOutcome =
+  res
+    "PutOutcomeResponse"
+    "fixture/PutOutcomeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutOutcome)
+
+responseSendEvent :: SendEventResponse -> TestTree
+responseSendEvent =
+  res
+    "SendEventResponse"
+    "fixture/SendEventResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SendEvent)
+
+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)
+
+responseUpdateDetectorVersion :: UpdateDetectorVersionResponse -> TestTree
+responseUpdateDetectorVersion =
+  res
+    "UpdateDetectorVersionResponse"
+    "fixture/UpdateDetectorVersionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateDetectorVersion)
+
+responseUpdateDetectorVersionMetadata :: UpdateDetectorVersionMetadataResponse -> TestTree
+responseUpdateDetectorVersionMetadata =
+  res
+    "UpdateDetectorVersionMetadataResponse"
+    "fixture/UpdateDetectorVersionMetadataResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateDetectorVersionMetadata)
+
+responseUpdateDetectorVersionStatus :: UpdateDetectorVersionStatusResponse -> TestTree
+responseUpdateDetectorVersionStatus =
+  res
+    "UpdateDetectorVersionStatusResponse"
+    "fixture/UpdateDetectorVersionStatusResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateDetectorVersionStatus)
+
+responseUpdateEventLabel :: UpdateEventLabelResponse -> TestTree
+responseUpdateEventLabel =
+  res
+    "UpdateEventLabelResponse"
+    "fixture/UpdateEventLabelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateEventLabel)
+
+responseUpdateModel :: UpdateModelResponse -> TestTree
+responseUpdateModel =
+  res
+    "UpdateModelResponse"
+    "fixture/UpdateModelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateModel)
+
+responseUpdateModelVersion :: UpdateModelVersionResponse -> TestTree
+responseUpdateModelVersion =
+  res
+    "UpdateModelVersionResponse"
+    "fixture/UpdateModelVersionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateModelVersion)
+
+responseUpdateModelVersionStatus :: UpdateModelVersionStatusResponse -> TestTree
+responseUpdateModelVersionStatus =
+  res
+    "UpdateModelVersionStatusResponse"
+    "fixture/UpdateModelVersionStatusResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateModelVersionStatus)
+
+responseUpdateRuleMetadata :: UpdateRuleMetadataResponse -> TestTree
+responseUpdateRuleMetadata =
+  res
+    "UpdateRuleMetadataResponse"
+    "fixture/UpdateRuleMetadataResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateRuleMetadata)
+
+responseUpdateRuleVersion :: UpdateRuleVersionResponse -> TestTree
+responseUpdateRuleVersion =
+  res
+    "UpdateRuleVersionResponse"
+    "fixture/UpdateRuleVersionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateRuleVersion)
+
+responseUpdateVariable :: UpdateVariableResponse -> TestTree
+responseUpdateVariable =
+  res
+    "UpdateVariableResponse"
+    "fixture/UpdateVariableResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateVariable)
